Commit 490e626597e9a25f08187c077159e7385c522ed4

Authored by Rodrigo Gonçalves
0 parents
Exists in master

inclusao

Showing 36 changed files with 2864 additions and 0 deletions   Show diff stats
.includepath 0 → 100644
  1 +++ a/.includepath
... ... @@ -0,0 +1,6 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<includepath>
  3 + <includepathentry path="${project_loc}" />
  4 + <includepathentry path="/opt/otrs/" />
  5 +</includepath>
  6 +
... ...
.project 0 → 100644
  1 +++ a/.project
... ... @@ -0,0 +1,17 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<projectDescription>
  3 + <name>otrs-new-ticket-wizard</name>
  4 + <comment></comment>
  5 + <projects>
  6 + </projects>
  7 + <buildSpec>
  8 + <buildCommand>
  9 + <name>org.epic.perleditor.perlbuilder</name>
  10 + <arguments>
  11 + </arguments>
  12 + </buildCommand>
  13 + </buildSpec>
  14 + <natures>
  15 + <nature>org.epic.perleditor.perlnature</nature>
  16 + </natures>
  17 +</projectDescription>
... ...
CreateOpm.sh 0 → 100755
  1 +++ a/CreateOpm.sh
... ... @@ -0,0 +1,5 @@
  1 +#!/bin/bash
  2 +LOCAL="$PWD"
  3 +cd /opt/otrs/bin
  4 +./otrs.PackageManager.pl -a build -p "$LOCAL"/NewTicketWizard.sopm -o "$LOCAL"/
  5 +cd $LOCAL
... ...
Kernel/Config/Files/NewTicketWizard.xml 0 → 100644
  1 +++ a/Kernel/Config/Files/NewTicketWizard.xml
... ... @@ -0,0 +1,213 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<otrs_config init="Application"
  3 + version="1.0">
  4 + <!-- TODO: Transformar em módulo de usuário também -->
  5 + <ConfigItem Name="CustomerFrontend::Module###NewTicketWizard" Required="1" Valid="1">
  6 + <Description Translatable="1">FrontendModuleRegistration for NewTicketWizard module.</Description>
  7 + <Group>Ticket</Group>
  8 + <SubGroup>Frontend::Customer::ModuleRegistration</SubGroup>
  9 + <Setting>
  10 + <FrontendModuleReg>
  11 + <Description>Module for creating custom new ticket interfaces</Description>
  12 + <NavBarName>NewTicketWizard</NavBarName>
  13 + <NavBar>
  14 + <Description Translatable="1">New ticket wizard</Description>
  15 + <Name Translatable="1">New ticket</Name>
  16 + <Link>Action=NewTicketWizard</Link>
  17 + <NavBar>NewTicketWizard</NavBar>
  18 + <Type>Menu</Type>
  19 + <Prio>8400</Prio>
  20 + </NavBar>
  21 + <!-- Carrega o alpaca -->
  22 + <Loader>
  23 + <JavaScript>NewTicketWizard.js</JavaScript>
  24 + <JavaScript>thirdparty/alpaca/alpaca-full.min.js</JavaScript>
  25 + <JavaScript>thirdparty/jquery-ui-1.10.3/jquery-ui.js</JavaScript>
  26 + <JavaScript>thirdparty/jquery-validate-1.11.1/jquery.validate.js</JavaScript>
  27 + <CSS>alpaca/alpaca-newticketwizard.css</CSS>
  28 + <CSS>alpaca/alpaca-jqueryui-newticketwizard.css</CSS>
  29 + </Loader>
  30 + </FrontendModuleReg>
  31 + </Setting>
  32 + </ConfigItem>
  33 +
  34 + <ConfigItem Name="Frontend::Module###NewTicketWizardServiceForm" Required="0" Valid="1">
  35 + <Description Translatable="1">Frontend module registration for the agent interface.</Description>
  36 + <Group>Ticket</Group>
  37 + <SubGroup>Frontend::Admin::ModuleRegistration</SubGroup>
  38 + <Setting>
  39 + <FrontendModuleReg>
  40 + <Group>admin</Group>
  41 + <Description>Admin</Description>
  42 + <Title Translatable="1">Service forms</Title>
  43 + <NavBarName>Admin</NavBarName>
  44 + <NavBarModule>
  45 + <Module>Kernel::Output::HTML::NavBarModuleAdmin</Module>
  46 + <Name Translatable="1">Service forms</Name>
  47 + <Description Translatable="1">Create and manage service forms.</Description>
  48 + <Block>Ticket</Block>
  49 + <Prio>900</Prio>
  50 + </NavBarModule>
  51 + </FrontendModuleReg>
  52 + </Setting>
  53 + </ConfigItem>
  54 +
  55 + <ConfigItem Name="Ticket::Frontend::Customer::NewTicketWizard###BasicSchema"
  56 + Required="0" Valid="1">
  57 + <Description Lang="en">Describe the form basic schema. See documentation for examples.</Description>
  58 + <Description Lang="pt_BR">
  59 + Descreva o esquema básico do formulário. Veja a documentação para maiores detalhes.
  60 + </Description>
  61 + <Group>Ticket</Group>
  62 + <SubGroup>Frontend::Customer::NewTicketWizard</SubGroup>
  63 + <Setting>
  64 + <TextArea Regex="">
  65 + "service": {
  66 + "type": "string",
  67 + "required": "true"
  68 + },
  69 + "DF_unidade": {
  70 + "type": "string",
  71 + "enum": [
  72 + DF_unidade_values
  73 + ],
  74 + "required": "true"
  75 + },
  76 + "DF_local": {
  77 + "type": "string",
  78 + "required": "true"
  79 + },
  80 + "DF_telefone": {
  81 + "type": "string",
  82 + "required": "true"
  83 + },
  84 + "type": {
  85 + "type": "string",
  86 + "enum": [
  87 + OTRS_type_values
  88 + ],
  89 + "required": "true"
  90 + }
  91 + CF_SCHEMA
  92 + ,
  93 + "subject": {
  94 + "type": "string",
  95 + "required": "true"
  96 + },
  97 + "description": {
  98 + "type": "string",
  99 + "required": "true"
  100 + },
  101 + "attachment": {
  102 + "type": "string",
  103 + "format": "uri"
  104 + },
  105 + "Action": {
  106 + "type": "string",
  107 + "default": "NewTicketWizard"
  108 + },
  109 + "Subaction": {
  110 + "type": "string",
  111 + "default": "CreateTicket"
  112 + }
  113 + </TextArea>
  114 + </Setting>
  115 + </ConfigItem>
  116 +
  117 + <ConfigItem Name="Ticket::Frontend::Customer::NewTicketWizard###BasicForm"
  118 + Required="0" Valid="1">
  119 + <Description Lang="en">Describe the form basic fields. See documentation for examples.</Description>
  120 + <Description Lang="pt_BR">
  121 + Descreva os campos básicos do formulário. Veja a documentação para maiores detalhes.
  122 + </Description>
  123 + <Group>Ticket</Group>
  124 + <SubGroup>Frontend::Customer::NewTicketWizard</SubGroup>
  125 + <Setting>
  126 + <TextArea Regex="">
  127 + "DF_unidade": {
  128 + "type": "select",
  129 + "label": "Unidade:",
  130 + "optionLabels": [
  131 + DF_unidade_labels
  132 + ]
  133 + },
  134 + "DF_local": {
  135 + "type": "text",
  136 + "label": "Local:"
  137 + },
  138 + "DF_telefone": {
  139 + "type": "text",
  140 + "label": "Telefone:",
  141 + "control_width": 100
  142 + },
  143 + "type": {
  144 + "type": "select",
  145 + "label": "Motivo:",
  146 + "optionLabels": [
  147 + OTRS_type_labels
  148 + ]
  149 + },
  150 + "service": {
  151 + "type": "hidden"
  152 + }
  153 + CF_FORM,
  154 + "subject": {
  155 + "type": "text",
  156 + "label": "Assunto:",
  157 + "size": 80
  158 + },
  159 + "description": {
  160 + "type": "textarea",
  161 + "label": "Descrição:",
  162 + "cols": 80
  163 + },
  164 + "attachment": {
  165 + "type": "file",
  166 + "label": "Anexo:",
  167 + "helper": "Anexe um arquivo se necessário."
  168 + },
  169 + "Action": {
  170 + "type": "hidden"
  171 + },
  172 + "Subaction": {
  173 + "type": "hidden"
  174 + }
  175 + </TextArea>
  176 + </Setting>
  177 + </ConfigItem>
  178 +
  179 + <ConfigItem Name="Ticket::Frontend::Customer::NewTicketWizard###QueuePrefix"
  180 + Required="0" Valid="1">
  181 + <Description Lang="en">When the queue comes from a field in the form, a prefix can be attached to the value while searching for the queue. A space is added between this and the queue name.</Description>
  182 + <Description Lang="pt_BR">
  183 + Prefixo para ser anexado ao valor do campo que tem a fila para enviar o chamado. Um espaço é adicionado entre o prefixo e o valor o campo.
  184 + </Description>
  185 + <Group>Ticket</Group>
  186 + <SubGroup>Frontend::Customer::NewTicketWizard</SubGroup>
  187 + <Setting>
  188 + <String Regex="">Primeiro nível -</String>
  189 + </Setting>
  190 + </ConfigItem>
  191 +
  192 + <ConfigItem Name="Ticket::Frontend::Customer::NewTicketWizard###QueueField"
  193 + Required="0" Valid="1">
  194 + <Description Lang="en">Name of the field in the form which indicates the queue to send the form.</Description>
  195 + <Description Lang="pt_BR">Nome do campo no formulário que indica para qual fila enviar o chamado.</Description>
  196 + <Group>Ticket</Group>
  197 + <SubGroup>Frontend::Customer::NewTicketWizard</SubGroup>
  198 + <Setting>
  199 + <String Regex="">DF_unidade</String>
  200 + </Setting>
  201 + </ConfigItem>
  202 +
  203 + <ConfigItem Name="Ticket::Frontend::Customer::NewTicketWizard###MessageChooseService"
  204 + Required="0" Valid="1">
  205 + <Description Lang="en">Message to let the user choose a server.</Description>
  206 + <Description Lang="pt_BR">Mensagem para o usuário selecionar um serviço.</Description>
  207 + <Group>Ticket</Group>
  208 + <SubGroup>Frontend::Customer::NewTicketWizard</SubGroup>
  209 + <Setting>
  210 + <String Regex="">Escolha o serviço para o qual deseja suporte</String>
  211 + </Setting>
  212 + </ConfigItem>
  213 +</otrs_config>
0 214 \ No newline at end of file
... ...
Kernel/Language/pt_BR_NewTicketWizard.pm 0 → 100644
  1 +++ a/Kernel/Language/pt_BR_NewTicketWizard.pm
... ... @@ -0,0 +1,32 @@
  1 +# --
  2 +# Kernel/Modules/pt_BR_NewTicketWizard.pm - frontend module for creating custom new ticket interfaces
  3 +# Translations
  4 +#
  5 +# Copyright (C) 2014 (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  6 +# --
  7 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  8 +# the enclosed file COPYING for license information (AGPL). If you
  9 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  10 +# --
  11 +package Kernel::Language::pt_BR_NewTicketWizard;
  12 +
  13 +use strict;
  14 +use warnings;
  15 +
  16 +sub Data {
  17 + my $Self = shift;
  18 +
  19 + $Self->{Translation}->{'Your ticket has been registered with the number: '} = 'Seu chamado foi registrado com sucesso! O número é: ';
  20 + $Self->{Translation}->{'New ticket wizard'} = 'Assistente de novo chamado';
  21 + $Self->{Translation}->{'New ticket'} = 'Novo chamado';
  22 + $Self->{Translation}->{'Service forms'} = 'Formulários de serviços';
  23 + $Self->{Translation}->{'Service form'} = 'Formulários de serviço';
  24 + $Self->{Translation}->{'Create and manage service forms.'} = 'Criar e gerenciar formulários de serviços';
  25 + $Self->{Translation}->{'Introduction'} = 'Introdução';
  26 + $Self->{Translation}->{'Form'} = 'Formulário';
  27 + $Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o servi&ccedil;o para o qual deseja suporte';
  28 + $Self->{Translation}->{'Ticket created'} = 'Chamado criado com sucesso';
  29 +
  30 + return 1;
  31 +}
  32 +1;
0 33 \ No newline at end of file
... ...
Kernel/Modules/NewTicketWizard.pm 0 → 100644
  1 +++ a/Kernel/Modules/NewTicketWizard.pm
... ... @@ -0,0 +1,320 @@
  1 +# --
  2 +# Kernel/Modules/NewTicketWizard.pm - frontend module for creating custom new ticket interfaces
  3 +# Copyright (C) 2014 (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +package Kernel::Modules::NewTicketWizard;
  10 +
  11 +use strict;
  12 +use warnings;
  13 +
  14 +use Kernel::System::ServiceForm;
  15 +use Kernel::System::TicketWizard;
  16 +use Kernel::System::CustomerUser;
  17 +use Kernel::System::State;
  18 +use Kernel::System::SystemAddress;
  19 +use Kernel::System::Queue;
  20 +use Kernel::System::Web::UploadCache;
  21 +use Kernel::System::DynamicField;
  22 +use Kernel::System::DynamicField::Backend;
  23 +use Kernel::System::VariableCheck qw(:all);
  24 +use Data::Dumper;
  25 +
  26 +sub new {
  27 + my ( $Type, %Param ) = @_;
  28 +
  29 + # allocate new hash for object
  30 + my $Self = {%Param};
  31 + bless( $Self, $Type );
  32 +
  33 + # check needed objects
  34 + for (
  35 + qw(ParamObject DBObject TicketObject LayoutObject LogObject QueueObject ConfigObject)
  36 + )
  37 + {
  38 + if ( !$Self->{$_} ) {
  39 + $Self->{LayoutObject}->FatalError( Message => "Got no $_!" );
  40 + }
  41 + }
  42 +
  43 + # needed objects
  44 + $Self->{CustomerUserObject} = Kernel::System::CustomerUser->new(%Param);
  45 + $Self->{StateObject} = Kernel::System::State->new(%Param);
  46 + $Self->{SystemAddress} = Kernel::System::SystemAddress->new(%Param);
  47 + $Self->{UploadCacheObject} = Kernel::System::Web::UploadCache->new(%Param);
  48 + $Self->{DynamicFieldObject} = Kernel::System::DynamicField->new(%Param);
  49 + $Self->{BackendObject} = Kernel::System::DynamicField::Backend->new(%Param);
  50 + $Self->{TicketWizard} = Kernel::System::TicketWizard->new(%Param);
  51 + $Self->{ServiceFormObject} = Kernel::System::ServiceForm->new(%Param);
  52 + $Self->{ServiceObject} = Kernel::System::Service->new(%Param);
  53 +
  54 + return $Self;
  55 +}
  56 +
  57 +sub Run {
  58 + my ( $Self, %Param ) = @_;
  59 + my %Data = ();
  60 +
  61 + # Build service chooser
  62 + my %Services = $Self->{ServiceObject}->ServiceList( UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID'), );
  63 + my @ServicesCombo = ();
  64 +
  65 + for my $serviceID ( keys %Services ) {
  66 + if ( grep { index( $Services{$_}, $Services{$serviceID} . "::" ) >= 0 } ( keys %Services ) ) {
  67 + my %serv = ();
  68 + $serv{Value} = $Services{$serviceID};
  69 + $serv{Key} = $serviceID;
  70 + $serv{Disabled} = 1;
  71 + push @ServicesCombo, \%serv;
  72 + }
  73 + else {
  74 + my %serv = ();
  75 + $serv{Value} = $Services{$serviceID};
  76 + $serv{Key} = $serviceID;
  77 + push @ServicesCombo, \%serv;
  78 + }
  79 + }
  80 +
  81 + @ServicesCombo = sort { $a->{Value} . "::" cmp $b->{Value} . "::" } @ServicesCombo;
  82 +
  83 + $Data{ServiceStrg} = $Self->{LayoutObject}->BuildSelection(
  84 + Data => \@ServicesCombo,
  85 + Name => 'ServiceID',
  86 + SelectedID => $Param{ServiceID},
  87 + Class => "Validate_Required " . ( $Param{Errors}->{ServiceIDInvalid} || '' ),
  88 + PossibleNone => 1,
  89 + TreeView => 1,
  90 + Sort => 'TreeView',
  91 + Translation => 0,
  92 + Max => 200
  93 + );
  94 + $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::NewTicketWizard");
  95 + my $msgChooseService = $Self->{Config}->{"MessageChooseService"};
  96 + $Data{MsgChooseService} = $msgChooseService;
  97 +
  98 + if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) ) {
  99 + if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "CreateTicket" ) {
  100 + return $Self->CreateTicket();
  101 + }
  102 + elsif ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "GetFormJSON" ) {
  103 + return $Self->GetFormJSON( ServiceID => $Self->{ParamObject}->GetParam( Param => "ServiceID" ) );
  104 + }
  105 + }
  106 + else {
  107 + my ( $schema, $fields ) = $Self->GetForm();
  108 +
  109 + $Data{SchemaForm} = $schema;
  110 + $Data{FieldsForm} = $fields;
  111 +
  112 + # build output
  113 + my $Output =
  114 + $Self->{LayoutObject}
  115 + ->CustomerHeader( Title => $Self->{LayoutObject}->{LanguageObject}->Get("New ticket wizard") );
  116 +
  117 + $Output .= $Self->{LayoutObject}->CustomerNavigationBar();
  118 + $Output .= $Self->{LayoutObject}->Output(
  119 + Data => \%Data,
  120 + TemplateFile => 'NewTicketWizard',
  121 + );
  122 + $Output .= $Self->{LayoutObject}->CustomerFooter();
  123 + return $Output;
  124 + }
  125 +}
  126 +
  127 +sub GetFormJSON {
  128 + my ( $Self, %Param ) = @_;
  129 + my %serviceForm;
  130 +
  131 + if ( $Param{ServiceID} ) {
  132 + %serviceForm = $Self->{ServiceFormObject}->GetServiceForm( ServiceID => $Param{ServiceID} );
  133 + }
  134 +
  135 + my ( $schema, $fields, $introduction ) = $Self->GetForm( ServiceForm => \%serviceForm );
  136 +
  137 + return $Self->{LayoutObject}->Attachment(
  138 + ContentType => 'application/json; charset=' . $Self->{LayoutObject}->{Charset},
  139 + Content => "[{" . $schema . "}, {" . $fields . "}, \"" . $introduction . "\"]",
  140 + Type => 'inline',
  141 + NoCache => 1,
  142 + );
  143 +}
  144 +
  145 +sub GetForm {
  146 + my ( $Self, %Param ) = @_;
  147 +
  148 + my $schema = $Self->{TicketWizard}->GetBasicFieldsSchema();
  149 + my $fields = $Self->{TicketWizard}->GetBasicFieldsOptions();
  150 + my $introduction;
  151 +
  152 + ( $schema, $fields ) = $Self->{TicketWizard}->ReplaceOTRSValues(
  153 + Schema => $schema,
  154 + Options => $fields,
  155 + UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID')
  156 + );
  157 + ( $schema, $fields ) = $Self->{TicketWizard}->ReplaceOTRSDynamicFields( Schema => $schema, Options => $fields );
  158 +
  159 + if ( !$Param{ServiceForm} ) {
  160 + $schema =~ s/CF_SCHEMA//g;
  161 + $fields =~ s/CF_FORM//g;
  162 + $introduction = "";
  163 + }
  164 + else {
  165 + my %serviceForm = %{ $Param{ServiceForm} };
  166 + $introduction = $serviceForm{Introduction};
  167 +
  168 + if ( !$Param{ServiceForm}{Schema} ) {
  169 + $schema =~ s/CF_SCHEMA//g;
  170 + $fields =~ s/CF_FORM//g;
  171 + }
  172 + else {
  173 + my $schemaForm = "," . $serviceForm{Schema};
  174 + my $fieldsForm = "," . $serviceForm{Form};
  175 + $schema =~ s/CF_SCHEMA/$schemaForm/g;
  176 + $fields =~ s/CF_FORM/$fieldsForm/g;
  177 + }
  178 + }
  179 +
  180 + return ( $schema, $fields, $introduction );
  181 +}
  182 +
  183 +sub GetQueueID() {
  184 + my ( $Self, %Param ) = @_;
  185 +
  186 + # Gets default Queue
  187 + my $ConfigTicket = $Self->{ConfigObject}->Get("Ticket::Frontend::CustomerTicketMessage");
  188 + my $ConfigTicketWizard = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::NewTicketWizard");
  189 +
  190 + my $QueueDefault = $ConfigTicket->{"QueueDefault"};
  191 + my $QueueID = $Self->{QueueObject}->QueueLookup( Queue => $QueueDefault );
  192 + my $Queue = $QueueDefault;
  193 +
  194 + # Checks if there is a field for the queue
  195 + print STDERR Dumper($ConfigTicketWizard);
  196 +
  197 + my $QueuePrefix = $ConfigTicketWizard->{"QueuePrefix"};
  198 + my $QueueField = $ConfigTicketWizard->{"QueueField"};
  199 + $Self->{LogObject}->Log( Priority => 'info', Message => "Searching queue for - $QueuePrefix ($QueueField)!" );
  200 +
  201 + if ( $QueuePrefix && $QueueField ) {
  202 +
  203 + my $QueueSelected = $Self->{ParamObject}->GetParam( Param => $QueueField );
  204 + my $QueueName = "$QueuePrefix $QueueSelected";
  205 + $Self->{LogObject}
  206 + ->Log( Priority => 'info', Message => "Searching queue for - $QueuePrefix ($QueueField) - [$QueueName]!" );
  207 +
  208 + my %QueueList = reverse $Self->{QueueObject}->QueueList( Valid => 1 );
  209 +
  210 + if ( $QueueList{$QueueName} ) {
  211 + $QueueID = $QueueList{$QueueName};
  212 + $Queue = $QueueName;
  213 + $Self->{LogObject}->Log( Priority => 'info', Message => "Custom queue found - $QueueName ($QueueID)!" );
  214 + }
  215 +
  216 + }
  217 +
  218 + return ( $Queue, $QueueID );
  219 +}
  220 +
  221 +sub CreateTicket {
  222 + my ( $Self, %Param ) = @_;
  223 + my %Data = ();
  224 +
  225 + # Queue
  226 + my ( $Queue, $QueueID ) = $Self->GetQueueID(%Param);
  227 + $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::CustomerTicketMessage");
  228 +
  229 + my $TicketID = $Self->{TicketObject}->TicketCreate(
  230 + Title => $Self->{ParamObject}->GetParam( Param => "subject" ),
  231 + QueueID => $QueueID,
  232 + Priority => $Self->{Config}->{PriorityDefault},
  233 + Lock => 'unlock',
  234 + State => 'new',
  235 + ServiceID => $Self->{ParamObject}->GetParam( Param => "service" ),
  236 + TypeID => $Self->{ParamObject}->GetParam( Param => "type" ),
  237 + CustomerID => $Self->{UserCustomerID},
  238 + CustomerUser => $Self->{UserLogin},
  239 + OwnerID => $Self->{ConfigObject}->Get('CustomerPanelUserID'),
  240 + UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID'),
  241 + );
  242 +
  243 + my $MimeType = 'text/plain';
  244 + my $serviceFields = "\n\n";
  245 +
  246 + # Service Fields
  247 + for ( $Self->{ParamObject}->GetParamNames() ) {
  248 + if ( substr( $_, 0, 3 ) eq "SF_" ) {
  249 + $serviceFields .= substr( $_, 3 ) . " = " . $Self->{ParamObject}->GetParam( Param => $_ ) . "\n";
  250 + }
  251 + }
  252 +
  253 + # Dynamic Fields
  254 + for ( $Self->{ParamObject}->GetParamNames() ) {
  255 + if ( substr( $_, 0, 3 ) eq "DF_" ) {
  256 + my $Success = $Self->{BackendObject}->ValueSet(
  257 + DynamicFieldConfig => $Self->{DynamicFieldObject}->DynamicFieldGet( Name => substr( $_, 3 ) ),
  258 + ObjectID => $TicketID,
  259 + Value => $Self->{ParamObject}->GetParam( Param => $_ ),
  260 + UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID'),
  261 + );
  262 + }
  263 + }
  264 +
  265 + # Create article
  266 + my $FullName = $Self->{CustomerUserObject}->CustomerName( UserLogin => $Self->{UserLogin}, );
  267 + my $From = "\"$FullName\" <$Self->{UserEmail}>";
  268 + my $ArticleID = $Self->{TicketObject}->ArticleCreate(
  269 + TicketID => $TicketID,
  270 + ArticleType => $Self->{Config}->{ArticleType},
  271 + SenderType => $Self->{Config}->{SenderType},
  272 + From => $From,
  273 + To => $Queue,
  274 + Subject => $Self->{ParamObject}->GetParam( Param => "subject" ),
  275 + Body => $Self->{ParamObject}->GetParam( Param => "description" ) . $serviceFields,
  276 + MimeType => $MimeType,
  277 + Charset => $Self->{LayoutObject}->{UserCharset},
  278 + UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID'),
  279 + HistoryType => $Self->{Config}->{HistoryType},
  280 + HistoryComment => $Self->{Config}->{HistoryComment} || '%%',
  281 + AutoResponseType => ( $Self->{ConfigObject}->Get('AutoResponseForWebTickets') )
  282 + ? 'auto reply'
  283 + : '',
  284 + OrigHeader => {
  285 + From => $From,
  286 + To => $Queue,
  287 + Subject => $Self->{ParamObject}->GetParam( Param => "subject" ),
  288 + Body => $Self->{ParamObject}->GetParam( Param => "description" ),
  289 + },
  290 + Queue => $Queue,
  291 + );
  292 +
  293 + # Attachments
  294 + my %UploadStuff = $Self->{ParamObject}->GetUploadAll( Param => "attachment" );
  295 +
  296 + # if (%UploadStuff) {
  297 + # print STDERR "\nTem anexo!\n";
  298 + $Self->{TicketObject}->ArticleWriteAttachment(
  299 + %UploadStuff,
  300 + ArticleID => $ArticleID,
  301 + UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID'),
  302 + );
  303 +
  304 + # }
  305 +
  306 + $Data{TicketNumber} = $Self->{TicketObject}->TicketNumberLookup( TicketID => $TicketID );
  307 +
  308 + # build output
  309 + my $Output = $Self->{LayoutObject}->CustomerHeader( Title => "Ticket created" );
  310 + $Output .= $Self->{LayoutObject}->CustomerNavigationBar();
  311 + $Output .= $Self->{LayoutObject}->Output(
  312 + Data => \%Data,
  313 + TemplateFile => 'NewTicketWizardTicketCreated',
  314 + );
  315 + $Output .= $Self->{LayoutObject}->CustomerFooter();
  316 + return $Output;
  317 +
  318 +}
  319 +
  320 +1;
... ...
Kernel/Modules/NewTicketWizardServiceForm.pm 0 → 100644
  1 +++ a/Kernel/Modules/NewTicketWizardServiceForm.pm
... ... @@ -0,0 +1,151 @@
  1 +# --
  2 +# Kernel/Modules/NewTicketWizard.pm - frontend module for customizing service forms
  3 +# Copyright (C) 2014 (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +package Kernel::Modules::NewTicketWizardServiceForm;
  10 +
  11 +use strict;
  12 +use warnings;
  13 +
  14 +use Kernel::System::VariableCheck qw(:all);
  15 +use Data::Dumper;
  16 +use Kernel::System::ServiceForm;
  17 +use Kernel::System::Service;
  18 +
  19 +# TODO: Traducoes
  20 +
  21 +sub new {
  22 + my ( $Type, %Param ) = @_;
  23 +
  24 + # allocate new hash for object
  25 + my $Self = {%Param};
  26 + bless( $Self, $Type );
  27 +
  28 + # check needed objects
  29 + for (
  30 + qw(ParamObject DBObject LayoutObject LogObject ConfigObject)
  31 + )
  32 + {
  33 + if ( !$Self->{$_} ) {
  34 + $Self->{LayoutObject}->FatalError( Message => "Got no $_!" );
  35 + }
  36 + }
  37 +
  38 + # needed objects
  39 + $Self->{SystemAddress} = Kernel::System::SystemAddress->new(%Param);
  40 + $Self->{BackendObject} = Kernel::System::DynamicField::Backend->new(%Param);
  41 + $Self->{ServiceObject} = Kernel::System::Service->new(%Param);
  42 + $Self->{ServiceFormObject} = Kernel::System::ServiceForm->new(%Param);
  43 +
  44 + return $Self;
  45 +}
  46 +
  47 +sub Run {
  48 +
  49 + my ( $Self, %Param ) = @_;
  50 + my %Data = ();
  51 +
  52 + if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) ) {
  53 + if ( $Self->{Subaction} eq 'ServiceEdit' ) {
  54 +
  55 + # header
  56 + my $Output = $Self->{LayoutObject}->Header();
  57 + $Output .= $Self->{LayoutObject}->NavigationBar();
  58 +
  59 + my %serviceForm =
  60 + $Self->{ServiceFormObject}
  61 + ->GetServiceForm( ServiceID => $Self->{ParamObject}->GetParam( Param => "ServiceID" ) );
  62 +
  63 + $Data{Introduction} = $serviceForm{Introduction};
  64 + $Data{Form} = $serviceForm{Form};
  65 + $Data{Schema} = $serviceForm{Schema};
  66 + $Data{ServiceID} = $Self->{ParamObject}->GetParam( Param => "ServiceID" );
  67 +
  68 + $Output .= $Self->{LayoutObject}->Output(
  69 + Data => \%Data,
  70 + TemplateFile => 'NewTicketWizardServiceFormEdit',
  71 + );
  72 +
  73 + # html output
  74 + $Output .= $Self->{LayoutObject}->Footer();
  75 +
  76 + return $Output;
  77 + }
  78 + elsif ( $Self->{Subaction} eq 'ServiceSave' ) {
  79 +
  80 + # header
  81 + my $Output = $Self->{LayoutObject}->Header();
  82 + $Output .= $Self->{LayoutObject}->NavigationBar();
  83 +
  84 + $Self->{ServiceFormObject}->SaveServiceForm(
  85 + ServiceID => $Self->{ParamObject}->GetParam( Param => "ServiceID" ),
  86 + Introduction => $Self->{ParamObject}->GetParam( Param => "Introduction" ),
  87 + Form => $Self->{ParamObject}->GetParam( Param => "Form" ),
  88 + Schema => $Self->{ParamObject}->GetParam( Param => "Schema" ),
  89 + );
  90 +
  91 + return $Self->Overview();
  92 + }
  93 + }
  94 + else {
  95 + return $Self->Overview();
  96 + }
  97 +}
  98 +
  99 +sub Overview {
  100 +
  101 + my ( $Self, %Param ) = @_;
  102 +
  103 + my %Data = ();
  104 +
  105 + # build output
  106 + $Self->{LayoutObject}->Block(
  107 + Name => 'Overview',
  108 + Data => { %Param, },
  109 + );
  110 +
  111 + $Self->{LayoutObject}->Block(
  112 + Name => 'OverviewList',
  113 + Data => { %Param, },
  114 + );
  115 +
  116 + # get service list
  117 + my $ServiceList = $Self->{ServiceObject}->ServiceListGet(
  118 + Valid => 1,
  119 + UserID => $Self->{UserID},
  120 + );
  121 +
  122 + # if there are any services defined, they are shown
  123 + if ( @{$ServiceList} ) {
  124 +
  125 + # sort the service list by long service name
  126 + @{$ServiceList} = sort { $a->{Name} . '::' cmp $b->{Name} . '::' } @{$ServiceList};
  127 +
  128 + for my $ServiceData ( @{$ServiceList} ) {
  129 + if (! grep { index($_->{Name}, $ServiceData->{Name} . "::") >= 0} @{$ServiceList} ) {
  130 +
  131 + # output row
  132 + $Self->{LayoutObject}->Block(
  133 + Name => 'OverviewListRow',
  134 + Data => { %{$ServiceData} },
  135 + );
  136 + }
  137 + }
  138 + }
  139 +
  140 + my $Output = $Self->{LayoutObject}->Header( Title => $Self->{LayoutObject}->{LanguageObject}->Get("Service Form") );
  141 +
  142 + $Output .= $Self->{LayoutObject}->NavigationBar();
  143 + $Output .= $Self->{LayoutObject}->Output(
  144 + Data => \%Data,
  145 + TemplateFile => 'NewTicketWizardServiceForm',
  146 + );
  147 + $Output .= $Self->{LayoutObject}->Footer();
  148 + return $Output;
  149 +}
  150 +
  151 +1;
... ...
Kernel/Output/HTML/Standard/NewTicketWizard.dtl 0 → 100644
  1 +++ a/Kernel/Output/HTML/Standard/NewTicketWizard.dtl
... ... @@ -0,0 +1,42 @@
  1 +# --
  2 +# Kernel/Output/HTML/Standard/NewTicketWizard.dtl - template for new ticket wizard
  3 +# Copyright (C) (2014) (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +
  10 +<div style="margin: 5px; padding: 10px; width: 80%;">
  11 +$Data{"MsgChooseService"}
  12 +<div style="margin-top: 10px">
  13 +<form class="Field">
  14 + <span class="alpaca-field" >
  15 + <div class="alpaca-controlfield-label">
  16 + $Text{"Service"}:
  17 + </div>
  18 + $Data{"ServiceStrg"}
  19 + </span>
  20 +</form>
  21 +<div id="serviceDescription" style="margin: 5px; padding: 10px; width: 80%; border-style:solid; border-width: 1px; display: none"></div>
  22 +</div>
  23 +</div>
  24 +<div id="formTicket" style="padding-left: 15px; "></div>
  25 +
  26 +<!-- dtl:js_on_document_complete -->
  27 +<script type="text/javascript">
  28 + // To turn on debugging, uncomment this line
  29 + // Alpaca.logLevel = Alpaca.DEBUG;
  30 +
  31 +
  32 + Alpaca.registerMessages({
  33 + "disallowValue": "{0} não é um valor válido.",
  34 + "notOptional": "Este campo é obrigatório.",
  35 + "invalidValueOfEnum": ""
  36 + });
  37 +
  38 + $("#ServiceID").change(function() {
  39 + carregaForm(null, "$Text{"Send"}", "$Env{"CGIHandle"}");
  40 + });
  41 +</script>
  42 +<!-- dtl:js_on_document_complete -->
... ...
Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl 0 → 100644
  1 +++ a/Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl
... ... @@ -0,0 +1,47 @@
  1 +# --
  2 +# NewTicketWizardServiceForm.dtl - provides HTML form for NewTicketWizardServiceForm
  3 +# Copyright (C) 2014 UFSC
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +
  10 +<!-- dtl:block:Overview -->
  11 +<div class="MainBox ARIARoleMain LayoutFixedSidebar SidebarFirst">
  12 + <h1>$Text{"Service forms"}</h1>
  13 +
  14 +
  15 + <div class="ContentColumn">
  16 + <div class="WidgetSimple">
  17 +<!-- dtl:block:OverviewList -->
  18 + <div class="Content">
  19 +
  20 + <table class="DataTable">
  21 + <thead>
  22 + <tr>
  23 + <th>$Text{"Service"}</th>
  24 + </tr>
  25 + </thead>
  26 + <tbody>
  27 +<!-- dtl:block:NoDataFoundMsg -->
  28 + <tr>
  29 + <td colspan="5">
  30 + $Text{"No data found."}
  31 + </td>
  32 + </tr>
  33 +<!-- dtl:block:NoDataFoundMsg -->
  34 +<!-- dtl:block:OverviewListRow -->
  35 + <tr>
  36 + <td title="$QData{"Name"}">$QData{"LevelSpace"}<a class="AsBlock" href="$Env{"Baselink"}Action=$Env{"Action"};Subaction=ServiceEdit;ServiceID=$LQData{"ServiceID"}">$QData{"Name", "80"}</a></td>
  37 + </tr>
  38 +<!-- dtl:block:OverviewListRow -->
  39 + </tbody>
  40 + </table>
  41 + </div>
  42 +<!-- dtl:block:OverviewList -->
  43 + </div>
  44 + </div>
  45 + <div class="Clear"></div>
  46 +</div>
  47 +<!-- dtl:block:Overview -->
0 48 \ No newline at end of file
... ...
Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl 0 → 100644
  1 +++ a/Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl
... ... @@ -0,0 +1,51 @@
  1 +# --
  2 +# NewTicketWizardServiceForm.dtl - provides HTML form for NewTicketWizardServiceForm
  3 +# Copyright (C) 2014 UFSC
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +
  10 +
  11 +<!-- dtl:block:HeaderEdit -->
  12 + <h2>$Text{"Edit Service"} : $QData{"Name"}</h2>
  13 +<!-- dtl:block:HeaderEdit -->
  14 + </div>
  15 + <div class="Content">
  16 +
  17 + <form action="$Env{"CGIHandle"}" method="post" class="Validate">
  18 + <input type="hidden" name="Action" value="$Env{"Action"}"/>
  19 + <input type="hidden" name="Subaction" value="ServiceSave"/>
  20 + <input type="hidden" name="ServiceID" value="$QData{"ServiceID"}"/>
  21 +
  22 + <fieldset class="TableLike">
  23 +
  24 + <label for="Introduction">$Text{"Introduction"}: </label>
  25 + <div class="Field">
  26 + <textarea name="Introduction" id="Introduction" class="W50pc Validate_Required" rows="5">$QData{"Introduction"}</textarea>
  27 + </div>
  28 + <div class="Clear"></div>
  29 +
  30 + <label for="Form">$Text{"Form"}: </label>
  31 + <div class="Field">
  32 + <textarea name="Form" id="Form" class="W50pc " rows="20">$QData{"Form"}</textarea>
  33 + </div>
  34 + <div class="Clear"></div>
  35 +
  36 + <label for="Schema">$Text{"Schema"}: </label>
  37 + <div class="Field">
  38 + <textarea name="Schema" id="Schema" class="W50pc " rows="20">$QData{"Schema"}</textarea>
  39 + </div>
  40 + <div class="Clear"></div>
  41 +
  42 + <div class="Field SpacingTop">
  43 + <button class="Primary" type="submit" value="$Text{"Submit"}">$Text{"Submit"}</button>
  44 + $Text{"or"}
  45 + <a href="$Env{"Baselink"}Action=$Env{"Action"}">$Text{"Cancel"}</a>
  46 + </div>
  47 + <div class="Clear"></div>
  48 + </fieldset>
  49 +
  50 + </form>
  51 + </div>
... ...
Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl 0 → 100644
  1 +++ a/Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl
... ... @@ -0,0 +1,13 @@
  1 +# --
  2 +# Kernel/Output/HTML/Standard/NewTicketWizard.dtl - template for new ticket wizard
  3 +# Copyright (C) (2013) (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +<div style="margin: 5px; padding: 10px; width: 80%;">
  10 + <h1>$Text{"Your ticket has been registered with the number: "}$Data{"TicketNumber"}</h1>
  11 + </div>
  12 +<!-- dtl:js_on_document_complete -->
  13 +<!-- dtl:js_on_document_complete -->
0 14 \ No newline at end of file
... ...
Kernel/System/ServiceForm.pm 0 → 100644
  1 +++ a/Kernel/System/ServiceForm.pm
... ... @@ -0,0 +1,109 @@
  1 +# --
  2 +# Kernel/System/ServiceForm.pm - core module
  3 +# Copyright (C) (2013) (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +package Kernel::System::ServiceForm;
  10 +
  11 +use strict;
  12 +use warnings;
  13 +use utf8;
  14 +use Kernel::System::Service;
  15 +use Kernel::System::Type;
  16 +use Kernel::System::YAML;
  17 +use Data::Dumper;
  18 +use Kernel::System::DynamicField;
  19 +
  20 +sub new {
  21 + my ( $Type, %Param ) = @_;
  22 +
  23 + # allocate new hash for object
  24 + my $Self = {%Param};
  25 + bless( $Self, $Type );
  26 +
  27 + # check needed objects
  28 + for (
  29 + qw(DBObject LayoutObject LogObject QueueObject ConfigObject)
  30 + )
  31 + {
  32 + if ( !$Self->{$_} ) {
  33 + $Self->{LayoutObject}->FatalError( Message => "Got no $_!" );
  34 + }
  35 + }
  36 +
  37 + # required objects
  38 +
  39 + return $Self;
  40 +}
  41 +
  42 +=head
  43 +
  44 +Returns a service form
  45 +
  46 +=cut
  47 +
  48 +sub GetServiceForm {
  49 +
  50 + my ( $Self, %Param ) = @_;
  51 +
  52 + # get service form from db
  53 + $Self->{DBObject}->Prepare(
  54 + SQL => 'SELECT service_id, introduction, form, form_schema FROM service_form WHERE service_id = ?',
  55 + Bind => [ \$Param{ServiceID} ],
  56 + Limit => 1,
  57 + );
  58 +
  59 + # fetch the result
  60 + my %ServiceData;
  61 + while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {
  62 + $ServiceData{ServiceID} = $Row[0];
  63 + $ServiceData{Introduction} = $Row[1];
  64 + $ServiceData{Form} = $Row[2];
  65 + $ServiceData{Schema} = $Row[3];
  66 + }
  67 +
  68 + return %ServiceData;
  69 +}
  70 +
  71 +=head
  72 +
  73 +Saves a service form.
  74 +
  75 +=cut
  76 +
  77 +sub SaveServiceForm {
  78 +
  79 + my ( $Self, %Param ) = @_;
  80 + for my $Argument (qw(ServiceID Introduction)) {
  81 + if ( !$Param{$Argument} ) {
  82 + $Self->{LogObject}->Log(
  83 + Priority => 'error',
  84 + Message => "Need $Argument!",
  85 + );
  86 + return;
  87 + }
  88 + }
  89 +
  90 + my %serviceForm = $Self->GetServiceForm(ServiceID => $Param{ServiceID});
  91 + my $update = ($serviceForm{ServiceID});
  92 +
  93 + if ($update) {
  94 + $Self->{DBObject}->Do(SQL => 'UPDATE service_form SET introduction=?,form=?,form_schema=? where service_id=?',
  95 + Bind => [
  96 + \$Param{Introduction}, \$Param{Form}, \$Param{Schema}, \$Param{ServiceID}
  97 + ]);
  98 + } else {
  99 + $Self->{DBObject}->Do(SQL => 'INSERT INTO service_form(service_id,introduction,form,form_schema) VALUES (?,?,?,?)',
  100 + Bind => [
  101 + \$Param{ServiceID}, \$Param{Introduction}, \$Param{Form}, \$Param{Schema}
  102 + ]);
  103 + }
  104 +
  105 + return 1;
  106 +
  107 +}
  108 +
  109 +1;
... ...
Kernel/System/TicketWizard.pm 0 → 100644
  1 +++ a/Kernel/System/TicketWizard.pm
... ... @@ -0,0 +1,183 @@
  1 +# --
  2 +# Kernel/System/TicketWizard.pm - core module
  3 +# Copyright (C) (2013) (Rodrigo Goncalves) (rodrigo.g@ufsc.br)
  4 +# --
  5 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  6 +# the enclosed file COPYING for license information (AGPL). If you
  7 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  8 +# --
  9 +package Kernel::System::TicketWizard;
  10 +
  11 +use strict;
  12 +use warnings;
  13 +use utf8;
  14 +use Kernel::System::Service;
  15 +use Kernel::System::Type;
  16 +use Kernel::System::YAML;
  17 +use Data::Dumper;
  18 +use Kernel::System::DynamicField;
  19 +
  20 +sub new {
  21 + my ( $Type, %Param ) = @_;
  22 +
  23 + # allocate new hash for object
  24 + my $Self = {%Param};
  25 + bless( $Self, $Type );
  26 +
  27 + # check needed objects
  28 + for (
  29 + qw(DBObject LayoutObject LogObject QueueObject ConfigObject)
  30 + )
  31 + {
  32 + if ( !$Self->{$_} ) {
  33 + $Self->{LayoutObject}->FatalError( Message => "Got no $_!" );
  34 + }
  35 + }
  36 +
  37 + # required objects
  38 + $Self->{YAMLObject} = Kernel::System::YAML->new(%Param);
  39 + $Self->{ServiceObject} = Kernel::System::Service->new(%Param);
  40 + $Self->{TypeObject} = Kernel::System::Type->new(%Param);
  41 + $Self->{TicketObject} = Kernel::System::Ticket->new(%Param);
  42 + $Self->{DynamicFieldObject} = Kernel::System::DynamicField->new(%Param);
  43 +
  44 + return $Self;
  45 +}
  46 +
  47 +=head
  48 +
  49 +Returns fields structure for new ticket form wizard
  50 +
  51 +=cut
  52 +
  53 +sub GetBasicFieldsOptions {
  54 + my ( $Self, %Param ) = @_;
  55 + return $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::NewTicketWizard")->{BasicForm};
  56 +}
  57 +
  58 +=head
  59 +
  60 +Returns fields schema for new ticket wizard
  61 +
  62 +=cut
  63 +
  64 +sub GetBasicFieldsSchema {
  65 + my ( $Self, %Param ) = @_;
  66 + return $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::NewTicketWizard")->{BasicSchema};
  67 +}
  68 +
  69 +=head
  70 +
  71 +Replaces OTRS system field values (service and type)
  72 +
  73 +=cut
  74 +
  75 +sub ReplaceOTRSValues {
  76 + my ( $Self, %Param ) = @_;
  77 + my $schema = $Param{Schema};
  78 + my $options = $Param{Options};
  79 +
  80 + my ( $serviceNames, $serviceIDs ) = $Self->GetOTRSServicesData();
  81 + $schema =~ s/OTRS_service_values/$serviceIDs/g;
  82 + $options =~ s/OTRS_service_labels/$serviceNames/g;
  83 +
  84 + my ( $typeNames, $typeIDs ) = $Self->GetOTRSTypesData(UserID => $Param{UserID});
  85 + $schema =~ s/OTRS_type_values/$typeIDs/g;
  86 + $options =~ s/OTRS_type_labels/$typeNames/g;
  87 +
  88 + return ( $schema, $options );
  89 +}
  90 +
  91 +sub GetOTRSServicesData {
  92 + my ( $Self, %Param ) = @_;
  93 + my $services = $Self->{ServiceObject};
  94 +
  95 + my %serviceList = $services->ServiceList( Valid => 1, UserID => $Self->{ConfigObject}->Get('CustomerPanelUserID') );
  96 + my $serviceNames = "";
  97 + my $serviceIDs = "";
  98 +
  99 + ###print STDERR "\n\n\n Servicos: " . Dumper(\%serviceList) . "\n\n\n";
  100 +
  101 + foreach ( sort { ( $serviceList{$a} cmp $serviceList{$b} ) } keys %serviceList ) {
  102 + $serviceNames .= "\"$serviceList{$_}\",";
  103 + $serviceIDs .= "$_,";
  104 + }
  105 + $serviceNames = substr($serviceNames, 0, -1);
  106 + $serviceIDs = substr($serviceIDs, 0, -1);
  107 + return ( $serviceNames, $serviceIDs );
  108 +}
  109 +
  110 +sub GetOTRSTypesData {
  111 + my ( $Self, %Param ) = @_;
  112 + my $ticketObject = $Self->{TicketObject};
  113 +
  114 + my %typeList = $ticketObject->TicketTypeList( UserID => $Param{UserID} );
  115 + my $typeNames = "";
  116 + my $typeIDs = "";
  117 +
  118 + foreach ( sort { ( $typeList{$a} cmp $typeList{$b} ) } keys %typeList ) {
  119 + $typeNames .= "\"$typeList{$_}\",";
  120 + $typeIDs .= "$_,";
  121 + }
  122 +
  123 + $typeNames = substr($typeNames, 0, -1);
  124 + $typeIDs = substr($typeIDs, 0, -1);
  125 +
  126 + return ( $typeNames, $typeIDs );
  127 +}
  128 +
  129 +sub ReplaceOTRSDynamicFields {
  130 + my ( $Self, %Param ) = @_;
  131 + my $schema = $Param{Schema};
  132 + my $options = $Param{Options};
  133 +
  134 + my $dfields = $Self->{DynamicFieldObject};
  135 + my @dfieldList = @{ $dfields->DynamicFieldListGet( Valid => 1 ) };
  136 +
  137 + foreach (@dfieldList) {
  138 + my $campo = $_;
  139 +
  140 + #Debug("campo", $campo);
  141 + my $name = $campo->{Name};
  142 + my $config = $campo->{Config};
  143 + my $type = $campo->{FieldType};
  144 + my $idFieldValues = "DF_" . $name . "_values";
  145 + my $idFieldLabels = "DF_" . $name . "_labels";
  146 + if ( $type eq "Dropdown" ) {
  147 + my ( $dfValues, $dfLabels ) = $Self->GetDynamicFieldValues( ConfigDF => $config );
  148 + $schema =~ s/$idFieldValues/$dfValues/g;
  149 + $options =~ s/$idFieldLabels/$dfLabels/g;
  150 + }
  151 + }
  152 +
  153 + #Debug("schema", $schema);
  154 + #Debug("options", $options);
  155 + return ( $schema, $options );
  156 +}
  157 +
  158 +sub Debug {
  159 + my ( $id, $value ) = @_;
  160 + ###print STDERR "\n\n $id =" . Dumper($value) . "\n";
  161 +}
  162 +
  163 +sub GetDynamicFieldValues {
  164 + my ( $Self, %Param ) = @_;
  165 + my $config = $Param{ConfigDF};
  166 + my $values = $config->{PossibleValues};
  167 +
  168 + my $dfValues = "";
  169 + my $dfLabels = "";
  170 +
  171 + foreach ( sort { ( $values->{$a} cmp $values->{$b} ) } keys %{$values} ) {
  172 + $dfValues .= "\"$_\",";
  173 + $dfLabels .= "\"$values->{$_}\",";
  174 + }
  175 +
  176 + $dfValues = substr($dfValues, 0, -1);
  177 + $dfLabels = substr($dfLabels, 0, -1);
  178 + Debug( "dfvalues", $dfValues );
  179 + return ( $dfValues, $dfLabels );
  180 +
  181 +}
  182 +
  183 +1;
... ...
NewTicketWizard-1.0.0.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.0.opm
... ... @@ -0,0 +1,57 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.0</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + </Description>
  12 + <Description Lang="en">New Ticket Wizard</Description>
  13 + <Framework>3.x.x</Framework>
  14 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  15 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  16 + <BuildDate>2014-03-13 19:15:12</BuildDate>
  17 + <BuildHost>yourhost.example.com</BuildHost>
  18 + <Filelist>
  19 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  20 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  21 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CgkkRGF0YXtTZXJ2aWNlU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAoJCURhdGEgICAgICAgICA9PiBcJVNlcnZpY2VzLAoJCU5hbWUgICAgICAgICA9PiAnU2VydmljZUlEJywKCQlTZWxlY3RlZElEICAgPT4gJFBhcmFte1NlcnZpY2VJRH0sCgkJQ2xhc3MgICAgICAgID0+ICJWYWxpZGF0ZV9SZXF1aXJlZCAiIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NlcnZpY2VJREludmFsaWR9IHx8ICcnICksCgkJUG9zc2libGVOb25lID0+IDEsCgkJVHJlZVZpZXcgICAgID0+IDEsCgkJU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCgkJVHJhbnNsYXRpb24gID0+IDAsCgkJTWF4ICAgICAgICAgID0+IDIwMAoJKTsKCSRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CglteSAkbXNnQ2hvb3NlU2VydmljZSA9ICRTZWxmLT57Q29uZmlnfS0+eyJNZXNzYWdlQ2hvb3NlU2VydmljZSJ9OwoJJERhdGF7TXNnQ2hvb3NlU2VydmljZX0gPSAkbXNnQ2hvb3NlU2VydmljZTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSBlcSAiQ3JlYXRlVGlja2V0IiApIHsKCQkJcmV0dXJuICRTZWxmLT5DcmVhdGVUaWNrZXQoKTsKCQl9CgkJZWxzaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkdldEZvcm1KU09OIiApIHsKCQkJcmV0dXJuICRTZWxmLT5HZXRGb3JtSlNPTiggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoJCX0KCX0KCWVsc2UgewoJCW15ICggJHNjaGVtYSwgJGZpZWxkcyApID0gJFNlbGYtPkdldEZvcm0oKTsKCgkJJERhdGF7U2NoZW1hRm9ybX0gPSAkc2NoZW1hOwoJCSREYXRhe0ZpZWxkc0Zvcm19ID0gJGZpZWxkczsKCgkJIyBidWlsZCBvdXRwdXQKCQlteSAkT3V0cHV0ID0KCQkgICRTZWxmLT57TGF5b3V0T2JqZWN0fQoJCSAgLT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIk5ldyB0aWNrZXQgd2l6YXJkIikgKTsKCgkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkJywKCQkpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJCXJldHVybiAkT3V0cHV0OwoJfQp9CgpzdWIgR2V0Rm9ybUpTT04gewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVzZXJ2aWNlRm9ybTsKCglpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoJCSVzZXJ2aWNlRm9ybSA9ICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9ICk7Cgl9CgoJbXkgKCAkc2NoZW1hLCAkZmllbGRzLCAkaW50cm9kdWN0aW9uICkgPSAkU2VsZi0+R2V0Rm9ybSggU2VydmljZUZvcm0gPT4gXCVzZXJ2aWNlRm9ybSApOwoKCSMjI3ByaW50IFNUREVSUiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iOwoKCXJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCgkJQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAoJCUNvbnRlbnQgICAgID0+ICJbeyIgLiAkc2NoZW1hIC4gIn0sIHsiIC4gJGZpZWxkcyAuICJ9LCBcIiIgLiAkaW50cm9kdWN0aW9uIC4gIlwiXSIsCgkJVHlwZSAgICAgICAgPT4gJ2lubGluZScsCgkJTm9DYWNoZSAgICAgPT4gMSwKCSk7Cn0KCnN1YiBHZXRGb3JtIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJbXkgJHNjaGVtYSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+R2V0QmFzaWNGaWVsZHNTY2hlbWEoKTsKCW15ICRmaWVsZHMgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzT3B0aW9ucygpOwoJbXkgJGludHJvZHVjdGlvbjsKCgkoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+UmVwbGFjZU9UUlNWYWx1ZXMoIFNjaGVtYSAgICAgICAgPT4gJHNjaGVtYSwgT3B0aW9ucyA9PiAkZmllbGRzLCBVc2VySUQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSApOwoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTRHluYW1pY0ZpZWxkcyggU2NoZW1hID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcyApOwoKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX17U2NoZW1hfSApIHsKCQkkc2NoZW1hID1+IHMvQ0ZfU0NIRU1BLy9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwoJCSRpbnRyb2R1Y3Rpb24gPSAiIjsKCX0KCWVsc2UgewoJCW15ICVzZXJ2aWNlRm9ybSA9ICV7ICRQYXJhbXtTZXJ2aWNlRm9ybX0gfTsKCQlteSAkc2NoZW1hRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17U2NoZW1hfTsKCQlteSAkZmllbGRzRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17Rm9ybX07CgkJJHNjaGVtYSA9fiBzL0NGX1NDSEVNQS8kc2NoZW1hRm9ybS9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLyRmaWVsZHNGb3JtL2c7CgkJJGludHJvZHVjdGlvbiA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJfQoKCXJldHVybiAoICRzY2hlbWEsICRmaWVsZHMsICRpbnRyb2R1Y3Rpb24gKTsKfQoKc3ViIEdldFF1ZXVlSUQoKSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgR2V0cyBkZWZhdWx0IFF1ZXVlCglteSAkQ29uZmlnVGlja2V0ICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoJbXkgJENvbmZpZ1RpY2tldFdpemFyZCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CgoJbXkgJFF1ZXVlRGVmYXVsdCA9ICRDb25maWdUaWNrZXQtPnsiUXVldWVEZWZhdWx0In07CglteSAkUXVldWVJRCAgICAgID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWVEZWZhdWx0ICk7CglteSAkUXVldWUgICAgICAgID0gJFF1ZXVlRGVmYXVsdDsKCgkjIENoZWNrcyBpZiB0aGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcXVldWUKCXByaW50IFNUREVSUiBEdW1wZXIoJENvbmZpZ1RpY2tldFdpemFyZCk7CgoJbXkgJFF1ZXVlUHJlZml4ID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZVByZWZpeCJ9OwoJbXkgJFF1ZXVlRmllbGQgID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZUZpZWxkIn07CgkkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkhIiApOwoKCWlmICggJFF1ZXVlUHJlZml4ICYmICRRdWV1ZUZpZWxkICkgewoKCQlteSAkUXVldWVTZWxlY3RlZCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFF1ZXVlRmllbGQgKTsKCQlteSAkUXVldWVOYW1lID0gIiRRdWV1ZVByZWZpeCAkUXVldWVTZWxlY3RlZCI7CgkJJFNlbGYtPntMb2dPYmplY3R9CgkJICAtPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkgLSBbJFF1ZXVlTmFtZV0hIiApOwoKCQlteSAlUXVldWVMaXN0ID0gcmV2ZXJzZSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgoJCWlmICggJFF1ZXVlTGlzdHskUXVldWVOYW1lfSApIHsKCQkJJFF1ZXVlSUQgPSAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9OwoJCQkkUXVldWUgICA9ICRRdWV1ZU5hbWU7CgkJCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIkN1c3RvbSBxdWV1ZSBmb3VuZCAtICRRdWV1ZU5hbWUgKCRRdWV1ZUlEKSEiICk7CgkJfQoKCX0KCglyZXR1cm4gKCAkUXVldWUsICRRdWV1ZUlEICk7Cn0KCnN1YiBDcmVhdGVUaWNrZXQgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVEYXRhID0gKCk7CgoJIyBRdWV1ZQoJbXkgKCAkUXVldWUsICRRdWV1ZUlEICkgPSAkU2VsZi0+R2V0UXVldWVJRCglUGFyYW0pOwoJJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoKCW15ICRUaWNrZXRJRCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0Q3JlYXRlKAoJCVRpdGxlICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzdWJqZWN0IiApLAoJCVF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKCQlQcmlvcml0eSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UHJpb3JpdHlEZWZhdWx0fSwKCQlMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCgkJU3RhdGUgICAgICAgID0+ICduZXcnLAoJCVNlcnZpY2VJRCAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzZXJ2aWNlIiApLAoJCVR5cGVJRCAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJ0eXBlIiApLAoJCUN1c3RvbWVySUQgICA9PiAkU2VsZi0+e1VzZXJDdXN0b21lcklEfSwKCQlDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAoJCU93bmVySUQgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCVVzZXJJRCAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJKTsKCglteSAkTWltZVR5cGUgICAgICA9ICd0ZXh0L3BsYWluJzsKCW15ICRzZXJ2aWNlRmllbGRzID0gIlxuXG4iOwoKCSMgU2VydmljZSBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIlNGXyIgKSB7CgkJCSRzZXJ2aWNlRmllbGRzIC49IHN1YnN0ciggJF8sIDMgKSAuICIgPSAiIC4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIC4gIlxuIjsKCQl9Cgl9CgkKCSMgRHluYW1pYyBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIkRGXyIgKSB7CgkJCW15ICRTdWNjZXNzID0gJFNlbGYtPntCYWNrZW5kT2JqZWN0fS0+VmFsdWVTZXQoCgkJCQlEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRHZXQoIE5hbWUgPT4gc3Vic3RyKCAkXywgMyApICksCgkJCQlPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAoJCQkJVmFsdWUgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKSwKCQkJCVVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCQkpOwoJCX0KCX0KCQoKCSMgQ3JlYXRlIGFydGljbGUKCW15ICRGdWxsTmFtZSAgPSAkU2VsZi0+e0N1c3RvbWVyVXNlck9iamVjdH0tPkN1c3RvbWVyTmFtZSggVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwgKTsKCW15ICRGcm9tICAgICAgPSAiXCIkRnVsbE5hbWVcIiA8JFNlbGYtPntVc2VyRW1haWx9PiI7CglteSAkQXJ0aWNsZUlEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlQ3JlYXRlKAoJCVRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAoJCUFydGljbGVUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57QXJ0aWNsZVR5cGV9LAoJCVNlbmRlclR5cGUgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57U2VuZGVyVHlwZX0sCgkJRnJvbSAgICAgICAgICAgICA9PiAkRnJvbSwKCQlUbyAgICAgICAgICAgICAgID0+ICRRdWV1ZSwKCQlTdWJqZWN0ICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJQm9keSAgICAgICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSAuICRzZXJ2aWNlRmllbGRzLAoJCU1pbWVUeXBlICAgICAgICAgPT4gJE1pbWVUeXBlLAoJCUNoYXJzZXQgICAgICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAoJCVVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQlIaXN0b3J5VHlwZSAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlUeXBlfSwKCQlIaXN0b3J5Q29tbWVudCAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlDb21tZW50fSB8fCAnJSUnLAoJCUF1dG9SZXNwb25zZVR5cGUgPT4gKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQXV0b1Jlc3BvbnNlRm9yV2ViVGlja2V0cycpICkKCQk/ICdhdXRvIHJlcGx5JwoJCTogJycsCgkJT3JpZ0hlYWRlciA9PiB7CgkJCUZyb20gICAgPT4gJEZyb20sCgkJCVRvICAgICAgPT4gJFF1ZXVlLAoJCQlTdWJqZWN0ID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJCUJvZHkgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiZGVzY3JpcHRpb24iICksCgkJfSwKCQlRdWV1ZSA9PiAkUXVldWUsCgkpOwoKCgkjIEF0dGFjaG1lbnRzCglteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKCBQYXJhbSA9PiAiYXR0YWNobWVudCIgKTsKIwlpZiAoJVVwbG9hZFN0dWZmKSB7CiMJCXByaW50IFNUREVSUiAiXG5UZW0gYW5leG8hXG4iOwoJCSRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKCQkJJVVwbG9hZFN0dWZmLAoJCQlBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKCQkJVXNlcklEICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJKTsKIwl9CgoJJERhdGF7VGlja2V0TnVtYmVyfSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0TnVtYmVyTG9va3VwKCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKTsKCgkjIGJ1aWxkIG91dHB1dAoJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICJUaWNrZXQgY3JlYXRlZCIgKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFRpY2tldENyZWF0ZWQnLAoJKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=</File>
  22 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwoKIyBUT0RPOiBUcmFkdWNvZXMKCnN1YiBuZXcgewoJbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCgkjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKCW15ICRTZWxmID0geyVQYXJhbX07CglibGVzcyggJFNlbGYsICRUeXBlICk7CgoJIyBjaGVjayBuZWVkZWQgb2JqZWN0cwoJZm9yICgKCQlxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgID0gS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlRm9ybU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm0tPm5ldyglUGFyYW0pOwoKCXJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVEYXRhID0gKCk7CgoJaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgKSB7CgkJaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCgkJCSMgaGVhZGVyCgkJCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKCQkJbXkgJXNlcnZpY2VGb3JtID0KCQkJICAkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fQoJCQkgIC0+R2V0U2VydmljZUZvcm0oIFNlcnZpY2VJRCA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICkgKTsKCgkJCSREYXRhe0ludHJvZHVjdGlvbn0gPSAkc2VydmljZUZvcm17SW50cm9kdWN0aW9ufTsKCQkJJERhdGF7Rm9ybX0gICAgICAgICA9ICRzZXJ2aWNlRm9ybXtGb3JtfTsKCQkJJERhdGF7U2NoZW1hfSAgICAgICA9ICRzZXJ2aWNlRm9ybXtTY2hlbWF9OwoJCQkkRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApOwoKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKCQkJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtRWRpdCcsCgkJCSk7CgoJCQkjIGh0bWwgb3V0cHV0CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCgkJCXJldHVybiAkT3V0cHV0OwoJCX0KCQllbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZVNhdmUnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fS0+U2F2ZVNlcnZpY2VGb3JtKAoJCQkJU2VydmljZUlEICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSwKCQkJCUludHJvZHVjdGlvbiA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJJbnRyb2R1Y3Rpb24iICksCgkJCQlGb3JtICAgICAgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiRm9ybSIgKSwKCQkJCVNjaGVtYSAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTY2hlbWEiICksCgkJCSk7CgoJCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7CgkJfQoJfQoJZWxzZSB7CgkJcmV0dXJuICRTZWxmLT5PdmVydmlldygpOwoJfQp9CgpzdWIgT3ZlcnZpZXcgewoKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgkKCW15ICVEYXRhID0gKCk7CgkKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgoJCQkjIG91dHB1dCByb3cKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKCQkJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCgkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCSk7CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  23 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  24 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjIwIj4kUURhdGF7IkZvcm0ifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTY2hlbWEiPiRUZXh0eyJTY2hlbWEifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlNjaGVtYSIgaWQ9IlNjaGVtYSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIiByb3dzPSIyMCI+JFFEYXRheyJTY2hlbWEifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifSI+JFRleHR7IkNhbmNlbCJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4K</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  27 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbiBGb3JtIFNjaGVtYSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  28 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  29 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  30 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  31 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">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</File>
  32 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">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</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">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</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcAQwLNwRFoWswAAAAInRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QIG9uIGEgTWFjh6h3QwAAAgRJREFUSMftlb9rU1EUxz/35r007zUhfTVt8xJFJChSEmlsxKIEdAgodNElg0M7CnXxf+jSDukiJVvp4OTWoaV0qB06CJYO0qkp2UwHf4wGQ+51uEErWFuToCDvwFnuPed+7o/zPVeUy2VdqVT42yb5RxaAA/D/B7Z+N/nq3WcOjpsopdDnXFAAUkquDIeZmbzQHfjguEl1ZpIW/BHYBp6u7nV/YqUVXzS8eN3gyW2f/Q9mB0L8HKe1IeYT8PJNg2f3fJRWPbyxhraCXCbJyk6dYgoGw+DaMNhx1zZjxRSs7NTJZZK01dlXdGZxtTREBwS5TJLqdp2iD24IIh13Q1D0obptoNEBQUv3oaqVBktA0nMY82IsbtSYGgUnbHxqFBY3aox5MZKegyVMTu9gwJZgSZgtJIjHHBa2jpgYgokhWNg6Ih5zmC0ksKSJVX3RsYawBeMezK/XKOXToKG8vEt5eRc0lPJp5tdrjHsm9jwSsM6Uh4TLUVjaPGQk7oCGR3cyPL6b+V7RWsNIPMLS5iFzpat8pQ9gKwRrbxvcv3GJ1HCEturIR//QrRDw4OZF3n9qsrbfYLrg9wYOSUlEwPQt3xSMNjz9i6YhgGupCNfTPlqb3K7Brg3PV/doK3XyyU/tWCc37No9nPhh4iNKqa4+ASkl4HcHzmazwX8cgANwAD7VvgGmeI1DFDAMSAAAAABJRU5ErkJggg==</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcAQwLOQTbIka+AAAAInRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QIG9uIGEgTWFjh6h3QwAAAnhJREFUSMft1tlLVGEYx/HvbGeOM5b7UmYGQgsibdhUtlFEISRBiFMgLdhFZgbe6t8g3UQXKdKd5E2hBIZEmKlDQ06KoXijuTHNOAvjnM7MOWemi0AISc0TBTHP9Y/3w7s972uora1NtrW18bfLyD+qFJyC/z/YvFGg+52XwYnwbw16qiyDmtMFW4e73iwwMBbg3s0TvwU/eTaMpqg4zxdtDe4bmuf+3XM8H/EBsOIPIgXDaHEFTf4GgElMwyRYsGVlkJ6bBcCd68d4/PTtuvC6eyxFonT0z+MPSPgDEhFfgMa6CkTRQmerg85WB6JoobGugogvsJrr6J9HikS3vtRnD+fxamAYcf9BRFXCoij0ekIkVJWGR+OruV5PCE1RkL1+ZLMNefITVWdKtg43OMtR5Dh9Ix72HT/AtapKejxB6m84fsr1eII8uF1J18tRxj+McvlkEQ3Ocn2n+uGto2QX5BBI2Oh2+diTZ6UkR6Bslw2AiXmJwu0mul0+du7I5EjNIZwXd+u/x1oiSd/wAqpgI9duoqW6mPJiG0YDGA1QXmyjpbqYXLsJRDtDY94/00CmZ8PkZNlYDKuU5lsRzIY1GcFsoDTfylxIRdGSzC6t6IfdE1/JzN7GcjjGyFSIaExbk4nGNEamQiyHYxQWZvP+45J+eNC9QEJMR46pzHglmtoncU2HicoaUVnDNR2mqX2SGa+EHFNRBTtDo4v6W+bMXAhfYg4p/mOm7i/gdk39Mv95yQDBiH5YjStEsYBg2dShiRmSGBVFP6ypKgaTddN92mRMklBV/fCVC6W8eO3e/HOXJnD10l79cHO9g+Z6R+oHkoJT8Ib1HRdc/f2dEVFAAAAAAElFTkSuQmCC</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  44 + </Filelist>
  45 + <DatabaseInstall>
  46 + <TableCreate Type="post" Name="service_form">
  47 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  48 + <Column Name="introduction" Required="true" Type="text"></Column>
  49 + <Column Name="form" Required="true" Type="text"></Column>
  50 + <Column Name="form_schema" Required="true" Type="text"></Column>
  51 + <ForeignKey ForeignTable="service">
  52 + <Reference Foreign="id" Local="service_id">
  53 + </Reference>
  54 + </ForeignKey>
  55 + </TableCreate>
  56 + </DatabaseInstall>
  57 +</otrs_package>
0 58 \ No newline at end of file
... ...
NewTicketWizard-1.0.1.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.1.opm
... ... @@ -0,0 +1,58 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.1</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  12 + </Description>
  13 + <Description Lang="en">New Ticket Wizard</Description>
  14 + <Framework>3.x.x</Framework>
  15 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  16 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  17 + <BuildDate>2014-03-17 19:12:48</BuildDate>
  18 + <BuildHost>yourhost.example.com</BuildHost>
  19 + <Filelist>
  20 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  21 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  22 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CgkkRGF0YXtTZXJ2aWNlU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAoJCURhdGEgICAgICAgICA9PiBcJVNlcnZpY2VzLAoJCU5hbWUgICAgICAgICA9PiAnU2VydmljZUlEJywKCQlTZWxlY3RlZElEICAgPT4gJFBhcmFte1NlcnZpY2VJRH0sCgkJQ2xhc3MgICAgICAgID0+ICJWYWxpZGF0ZV9SZXF1aXJlZCAiIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NlcnZpY2VJREludmFsaWR9IHx8ICcnICksCgkJUG9zc2libGVOb25lID0+IDEsCgkJVHJlZVZpZXcgICAgID0+IDEsCgkJU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCgkJVHJhbnNsYXRpb24gID0+IDAsCgkJTWF4ICAgICAgICAgID0+IDIwMAoJKTsKCSRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CglteSAkbXNnQ2hvb3NlU2VydmljZSA9ICRTZWxmLT57Q29uZmlnfS0+eyJNZXNzYWdlQ2hvb3NlU2VydmljZSJ9OwoJJERhdGF7TXNnQ2hvb3NlU2VydmljZX0gPSAkbXNnQ2hvb3NlU2VydmljZTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSBlcSAiQ3JlYXRlVGlja2V0IiApIHsKCQkJcmV0dXJuICRTZWxmLT5DcmVhdGVUaWNrZXQoKTsKCQl9CgkJZWxzaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkdldEZvcm1KU09OIiApIHsKCQkJcmV0dXJuICRTZWxmLT5HZXRGb3JtSlNPTiggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoJCX0KCX0KCWVsc2UgewoJCW15ICggJHNjaGVtYSwgJGZpZWxkcyApID0gJFNlbGYtPkdldEZvcm0oKTsKCgkJJERhdGF7U2NoZW1hRm9ybX0gPSAkc2NoZW1hOwoJCSREYXRhe0ZpZWxkc0Zvcm19ID0gJGZpZWxkczsKCgkJIyBidWlsZCBvdXRwdXQKCQlteSAkT3V0cHV0ID0KCQkgICRTZWxmLT57TGF5b3V0T2JqZWN0fQoJCSAgLT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIk5ldyB0aWNrZXQgd2l6YXJkIikgKTsKCgkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkJywKCQkpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJCXJldHVybiAkT3V0cHV0OwoJfQp9CgpzdWIgR2V0Rm9ybUpTT04gewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVzZXJ2aWNlRm9ybTsKCglpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoJCSVzZXJ2aWNlRm9ybSA9ICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9ICk7Cgl9CgoJbXkgKCAkc2NoZW1hLCAkZmllbGRzLCAkaW50cm9kdWN0aW9uICkgPSAkU2VsZi0+R2V0Rm9ybSggU2VydmljZUZvcm0gPT4gXCVzZXJ2aWNlRm9ybSApOwoKCSMjI3ByaW50IFNUREVSUiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iOwoKCXJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCgkJQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAoJCUNvbnRlbnQgICAgID0+ICJbeyIgLiAkc2NoZW1hIC4gIn0sIHsiIC4gJGZpZWxkcyAuICJ9LCBcIiIgLiAkaW50cm9kdWN0aW9uIC4gIlwiXSIsCgkJVHlwZSAgICAgICAgPT4gJ2lubGluZScsCgkJTm9DYWNoZSAgICAgPT4gMSwKCSk7Cn0KCnN1YiBHZXRGb3JtIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJbXkgJHNjaGVtYSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+R2V0QmFzaWNGaWVsZHNTY2hlbWEoKTsKCW15ICRmaWVsZHMgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzT3B0aW9ucygpOwoJbXkgJGludHJvZHVjdGlvbjsKCgkoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+UmVwbGFjZU9UUlNWYWx1ZXMoIFNjaGVtYSAgICAgICAgPT4gJHNjaGVtYSwgT3B0aW9ucyA9PiAkZmllbGRzLCBVc2VySUQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSApOwoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTRHluYW1pY0ZpZWxkcyggU2NoZW1hID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcyApOwoKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX17U2NoZW1hfSApIHsKCQkkc2NoZW1hID1+IHMvQ0ZfU0NIRU1BLy9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwoJCSRpbnRyb2R1Y3Rpb24gPSAiIjsKCX0KCWVsc2UgewoJCW15ICVzZXJ2aWNlRm9ybSA9ICV7ICRQYXJhbXtTZXJ2aWNlRm9ybX0gfTsKCQlteSAkc2NoZW1hRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17U2NoZW1hfTsKCQlteSAkZmllbGRzRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17Rm9ybX07CgkJJHNjaGVtYSA9fiBzL0NGX1NDSEVNQS8kc2NoZW1hRm9ybS9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLyRmaWVsZHNGb3JtL2c7CgkJJGludHJvZHVjdGlvbiA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJfQoKCXJldHVybiAoICRzY2hlbWEsICRmaWVsZHMsICRpbnRyb2R1Y3Rpb24gKTsKfQoKc3ViIEdldFF1ZXVlSUQoKSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgR2V0cyBkZWZhdWx0IFF1ZXVlCglteSAkQ29uZmlnVGlja2V0ICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoJbXkgJENvbmZpZ1RpY2tldFdpemFyZCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CgoJbXkgJFF1ZXVlRGVmYXVsdCA9ICRDb25maWdUaWNrZXQtPnsiUXVldWVEZWZhdWx0In07CglteSAkUXVldWVJRCAgICAgID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWVEZWZhdWx0ICk7CglteSAkUXVldWUgICAgICAgID0gJFF1ZXVlRGVmYXVsdDsKCgkjIENoZWNrcyBpZiB0aGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcXVldWUKCXByaW50IFNUREVSUiBEdW1wZXIoJENvbmZpZ1RpY2tldFdpemFyZCk7CgoJbXkgJFF1ZXVlUHJlZml4ID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZVByZWZpeCJ9OwoJbXkgJFF1ZXVlRmllbGQgID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZUZpZWxkIn07CgkkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkhIiApOwoKCWlmICggJFF1ZXVlUHJlZml4ICYmICRRdWV1ZUZpZWxkICkgewoKCQlteSAkUXVldWVTZWxlY3RlZCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFF1ZXVlRmllbGQgKTsKCQlteSAkUXVldWVOYW1lID0gIiRRdWV1ZVByZWZpeCAkUXVldWVTZWxlY3RlZCI7CgkJJFNlbGYtPntMb2dPYmplY3R9CgkJICAtPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkgLSBbJFF1ZXVlTmFtZV0hIiApOwoKCQlteSAlUXVldWVMaXN0ID0gcmV2ZXJzZSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgoJCWlmICggJFF1ZXVlTGlzdHskUXVldWVOYW1lfSApIHsKCQkJJFF1ZXVlSUQgPSAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9OwoJCQkkUXVldWUgICA9ICRRdWV1ZU5hbWU7CgkJCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIkN1c3RvbSBxdWV1ZSBmb3VuZCAtICRRdWV1ZU5hbWUgKCRRdWV1ZUlEKSEiICk7CgkJfQoKCX0KCglyZXR1cm4gKCAkUXVldWUsICRRdWV1ZUlEICk7Cn0KCnN1YiBDcmVhdGVUaWNrZXQgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVEYXRhID0gKCk7CgoJIyBRdWV1ZQoJbXkgKCAkUXVldWUsICRRdWV1ZUlEICkgPSAkU2VsZi0+R2V0UXVldWVJRCglUGFyYW0pOwoJJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoKCW15ICRUaWNrZXRJRCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0Q3JlYXRlKAoJCVRpdGxlICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzdWJqZWN0IiApLAoJCVF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKCQlQcmlvcml0eSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UHJpb3JpdHlEZWZhdWx0fSwKCQlMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCgkJU3RhdGUgICAgICAgID0+ICduZXcnLAoJCVNlcnZpY2VJRCAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzZXJ2aWNlIiApLAoJCVR5cGVJRCAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJ0eXBlIiApLAoJCUN1c3RvbWVySUQgICA9PiAkU2VsZi0+e1VzZXJDdXN0b21lcklEfSwKCQlDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAoJCU93bmVySUQgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCVVzZXJJRCAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJKTsKCglteSAkTWltZVR5cGUgICAgICA9ICd0ZXh0L3BsYWluJzsKCW15ICRzZXJ2aWNlRmllbGRzID0gIlxuXG4iOwoKCSMgU2VydmljZSBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIlNGXyIgKSB7CgkJCSRzZXJ2aWNlRmllbGRzIC49IHN1YnN0ciggJF8sIDMgKSAuICIgPSAiIC4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIC4gIlxuIjsKCQl9Cgl9CgkKCSMgRHluYW1pYyBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIkRGXyIgKSB7CgkJCW15ICRTdWNjZXNzID0gJFNlbGYtPntCYWNrZW5kT2JqZWN0fS0+VmFsdWVTZXQoCgkJCQlEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRHZXQoIE5hbWUgPT4gc3Vic3RyKCAkXywgMyApICksCgkJCQlPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAoJCQkJVmFsdWUgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKSwKCQkJCVVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCQkpOwoJCX0KCX0KCQoKCSMgQ3JlYXRlIGFydGljbGUKCW15ICRGdWxsTmFtZSAgPSAkU2VsZi0+e0N1c3RvbWVyVXNlck9iamVjdH0tPkN1c3RvbWVyTmFtZSggVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwgKTsKCW15ICRGcm9tICAgICAgPSAiXCIkRnVsbE5hbWVcIiA8JFNlbGYtPntVc2VyRW1haWx9PiI7CglteSAkQXJ0aWNsZUlEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlQ3JlYXRlKAoJCVRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAoJCUFydGljbGVUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57QXJ0aWNsZVR5cGV9LAoJCVNlbmRlclR5cGUgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57U2VuZGVyVHlwZX0sCgkJRnJvbSAgICAgICAgICAgICA9PiAkRnJvbSwKCQlUbyAgICAgICAgICAgICAgID0+ICRRdWV1ZSwKCQlTdWJqZWN0ICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJQm9keSAgICAgICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSAuICRzZXJ2aWNlRmllbGRzLAoJCU1pbWVUeXBlICAgICAgICAgPT4gJE1pbWVUeXBlLAoJCUNoYXJzZXQgICAgICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAoJCVVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQlIaXN0b3J5VHlwZSAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlUeXBlfSwKCQlIaXN0b3J5Q29tbWVudCAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlDb21tZW50fSB8fCAnJSUnLAoJCUF1dG9SZXNwb25zZVR5cGUgPT4gKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQXV0b1Jlc3BvbnNlRm9yV2ViVGlja2V0cycpICkKCQk/ICdhdXRvIHJlcGx5JwoJCTogJycsCgkJT3JpZ0hlYWRlciA9PiB7CgkJCUZyb20gICAgPT4gJEZyb20sCgkJCVRvICAgICAgPT4gJFF1ZXVlLAoJCQlTdWJqZWN0ID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJCUJvZHkgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiZGVzY3JpcHRpb24iICksCgkJfSwKCQlRdWV1ZSA9PiAkUXVldWUsCgkpOwoKCgkjIEF0dGFjaG1lbnRzCglteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKCBQYXJhbSA9PiAiYXR0YWNobWVudCIgKTsKIwlpZiAoJVVwbG9hZFN0dWZmKSB7CiMJCXByaW50IFNUREVSUiAiXG5UZW0gYW5leG8hXG4iOwoJCSRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKCQkJJVVwbG9hZFN0dWZmLAoJCQlBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKCQkJVXNlcklEICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJKTsKIwl9CgoJJERhdGF7VGlja2V0TnVtYmVyfSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0TnVtYmVyTG9va3VwKCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKTsKCgkjIGJ1aWxkIG91dHB1dAoJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICJUaWNrZXQgY3JlYXRlZCIgKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFRpY2tldENyZWF0ZWQnLAoJKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=</File>
  23 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgojIFRPRE86IFRyYWR1Y29lcwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyBuZWVkZWQgb2JqZWN0cwoJJFNlbGYtPntTeXN0ZW1BZGRyZXNzfSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcy0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e0JhY2tlbmRPYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZUVkaXQnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQlteSAlc2VydmljZUZvcm0gPQoJCQkgICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9CgkJCSAgLT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoKCQkJJERhdGF7SW50cm9kdWN0aW9ufSA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJCQkkRGF0YXtGb3JtfSAgICAgICAgID0gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCQkkRGF0YXtTY2hlbWF9ICAgICAgID0gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJCSREYXRhe1NlcnZpY2VJRH0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CgoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm1FZGl0JywKCQkJKTsKCgkJCSMgaHRtbCBvdXRwdXQKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKCQkJcmV0dXJuICRPdXRwdXQ7CgkJfQoJCWVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgoJCQkjIGhlYWRlcgoJCQlteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCgkJCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5TYXZlU2VydmljZUZvcm0oCgkJCQlTZXJ2aWNlSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApLAoJCQkJSW50cm9kdWN0aW9uID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkludHJvZHVjdGlvbiIgKSwKCQkJCUZvcm0gICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGb3JtIiApLAoJCQkJU2NoZW1hICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNjaGVtYSIgKSwKCQkJKTsKCgkJCXJldHVybiAkU2VsZi0+T3ZlcnZpZXcoKTsKCQl9Cgl9CgllbHNlIHsKCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7Cgl9Cn0KCnN1YiBPdmVydmlldyB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCglteSAlRGF0YSA9ICgpOwoKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgkJCWlmICghIGdyZXAgeyBpbmRleCgkXy0+e05hbWV9LCAkU2VydmljZURhdGEtPntOYW1lfSAuICI6OiIpID49IDB9IEB7JFNlcnZpY2VMaXN0fSApIHsKCgkJCQkjIG91dHB1dCByb3cKCQkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCgkJCQkJTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKCQkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCQkpOwoJCQl9CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  24 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgIiByb3dzPSIyMCI+JFFEYXRheyJGb3JtIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2NoZW1hIj4kVGV4dHsiU2NoZW1hIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJTY2hlbWEiIGlkPSJTY2hlbWEiIGNsYXNzPSJXNTBwYyAiIHJvd3M9IjIwIj4kUURhdGF7IlNjaGVtYSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
  27 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  28 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbiBGb3JtIFNjaGVtYSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  29 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  30 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  31 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  32 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">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</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcAQwLOA9V6653AAAAInRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QIG9uIGEgTWFjh6h3QwAAAsJJREFUSMftlstrVEkUh796XG8EG6LtKyoxaQ0KTlAHBvEPmI2LCC6MARcDMYIQNUgEURFG1GVQmMUwTDY+CLgY3LhLEDFB1AnaMg6SaKIJ0WhsH0n6cR9V5aIDIi5Ursy46LMs6tR3zq/OOVWiubnZdXV18V+b5H+yCrgC/j7A1+79y5XeG7zNFz9a78s+5PL1wa8C689tyHW188ODq4gwRBzuZeT5FNuP/syKmXGMUKgoQHb2MToxwYpfmnDK558N20gf+i0ZePXAFcyxP9FxgFOa4Rc5ppsOUVNdhUWgbARaM/LsJbT/jlUeq0/tYTYpuDDpsL1XKfT8RWoW2iSkU/DMgZs7IDUDe4HJS1DVsoPSpEsu9fnjF+hs3c2bEzNsUhIpJSUE1jocYAVsxuGco2gtSxem+KPxIruTFpeceYcAdDCLF+SZb0MmHj5ggQ1IuZAFLqTKBHhBAa+UR8z5JM7YxCHOObSQeMpj/7593M9mGbybpa2tFQFEYUj7gYNkMhmcc5g4TA62xpQz1gqlBKfPnOHkryfx52lGHj+iv3+A2FoK+TxRFCGFwBqbvI9jaxBCoJVGCsmqlauwJgZg3br17Ny5i7bWVqIoYr5fRbFQJDbRt5DaAKC0QgiBkALrylXb3d0NQEtLC2NPnrKspoZbt++Qqa//NlIDeFqBAwHEcczQ0DDnzp3F931yudf8fTeLuHefNWvq8X0/OTiek1VrD+fKbdPT0wNAR0cHpVKJqVev+XHzRoyxPH/5guGhR8nv2JiyrJ7nobVGKYWbk7qhoYHGxkYej45SLJV4OjbG4kVpgiBInrHgwxSS8tM4+wdusjaTYepVjoXV1SxftpQ4jpODlyxZTOeRY5g4xn0UUHlk1tXWkk4vYmx8HOsc12/0o5RKDt665Semp6e/7q2VMjm4rq6u8vWpgCvgL7L3WdQoxwvecbEAAAAASUVORK5CYII=</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">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</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">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</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">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</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  44 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  45 + </Filelist>
  46 + <DatabaseInstall>
  47 + <TableCreate Type="post" Name="service_form">
  48 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  49 + <Column Name="introduction" Required="true" Type="text"></Column>
  50 + <Column Name="form" Required="true" Type="text"></Column>
  51 + <Column Name="form_schema" Required="true" Type="text"></Column>
  52 + <ForeignKey ForeignTable="service">
  53 + <Reference Foreign="id" Local="service_id">
  54 + </Reference>
  55 + </ForeignKey>
  56 + </TableCreate>
  57 + </DatabaseInstall>
  58 +</otrs_package>
0 59 \ No newline at end of file
... ...
NewTicketWizard-1.0.2.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.2.opm
... ... @@ -0,0 +1,59 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.2</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  12 + Versão 1.0.2 - Ajuste na hierarquia de servicos
  13 + </Description>
  14 + <Description Lang="en">New Ticket Wizard</Description>
  15 + <Framework>3.x.x</Framework>
  16 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  17 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  18 + <BuildDate>2014-03-17 19:46:02</BuildDate>
  19 + <BuildHost>yourhost.example.com</BuildHost>
  20 + <Filelist>
  21 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  22 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  23 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CglteSBAU2VydmljZXNDb21ibyA9ICgpOwoJCglmb3IgbXkgJHNlcnZpY2VJRCAoa2V5cyAlU2VydmljZXMpIHsKCQlpZiAoZ3JlcCB7aW5kZXgoJFNlcnZpY2VzeyRffSwgJFNlcnZpY2VzeyRzZXJ2aWNlSUR9IC4gIjo6IikgPj0gMH0gKGtleXMgJVNlcnZpY2VzKSkgewoJCQlteSAlc2VydiA9ICgpOwoJCQkkc2VydntWYWx1ZX0gPSAkU2VydmljZXN7JHNlcnZpY2VJRH07CgkJCSRzZXJ2e0tleX0gPSAkc2VydmljZUlEOwoJCQkkc2VydntEaXNhYmxlZH0gPSAxOwoJCQlwdXNoIEBTZXJ2aWNlc0NvbWJvLCBcJXNlcnY7CgkJfSBlbHNlIHsKCQkJbXkgJXNlcnYgPSAoKTsKCQkJJHNlcnZ7VmFsdWV9ID0gJFNlcnZpY2VzeyRzZXJ2aWNlSUR9OwoJCQkkc2VydntLZXl9ID0gJHNlcnZpY2VJRDsKCQkJcHVzaCBAU2VydmljZXNDb21ibywgXCVzZXJ2OwkJCQoJCX0JCQoJfQkKCQoJQFNlcnZpY2VzQ29tYm8gPSBzb3J0IHskYS0+e1ZhbHVlfSAuICI6OiIgY21wICRiLT57VmFsdWV9IC4gIjo6In0gQFNlcnZpY2VzQ29tYm87CgkKCXByaW50IFNUREVSUiBEdW1wZXIoXEBTZXJ2aWNlc0NvbWJvKTsKCQoJJERhdGF7U2VydmljZVN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKCQlEYXRhICAgICAgICAgPT4gXEBTZXJ2aWNlc0NvbWJvLAoJCU5hbWUgICAgICAgICA9PiAnU2VydmljZUlEJywKCQlTZWxlY3RlZElEICAgPT4gJFBhcmFte1NlcnZpY2VJRH0sCgkJQ2xhc3MgICAgICAgID0+ICJWYWxpZGF0ZV9SZXF1aXJlZCAiIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NlcnZpY2VJREludmFsaWR9IHx8ICcnICksCgkJUG9zc2libGVOb25lID0+IDEsCgkJVHJlZVZpZXcgICAgID0+IDEsCgkJU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCgkJVHJhbnNsYXRpb24gID0+IDAsCgkJTWF4ICAgICAgICAgID0+IDIwMAoJKTsKCSRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CglteSAkbXNnQ2hvb3NlU2VydmljZSA9ICRTZWxmLT57Q29uZmlnfS0+eyJNZXNzYWdlQ2hvb3NlU2VydmljZSJ9OwoJJERhdGF7TXNnQ2hvb3NlU2VydmljZX0gPSAkbXNnQ2hvb3NlU2VydmljZTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSBlcSAiQ3JlYXRlVGlja2V0IiApIHsKCQkJcmV0dXJuICRTZWxmLT5DcmVhdGVUaWNrZXQoKTsKCQl9CgkJZWxzaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkdldEZvcm1KU09OIiApIHsKCQkJcmV0dXJuICRTZWxmLT5HZXRGb3JtSlNPTiggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoJCX0KCX0KCWVsc2UgewoJCW15ICggJHNjaGVtYSwgJGZpZWxkcyApID0gJFNlbGYtPkdldEZvcm0oKTsKCgkJJERhdGF7U2NoZW1hRm9ybX0gPSAkc2NoZW1hOwoJCSREYXRhe0ZpZWxkc0Zvcm19ID0gJGZpZWxkczsKCgkJIyBidWlsZCBvdXRwdXQKCQlteSAkT3V0cHV0ID0KCQkgICRTZWxmLT57TGF5b3V0T2JqZWN0fQoJCSAgLT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIk5ldyB0aWNrZXQgd2l6YXJkIikgKTsKCgkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkJywKCQkpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJCXJldHVybiAkT3V0cHV0OwoJfQp9CgpzdWIgR2V0Rm9ybUpTT04gewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVzZXJ2aWNlRm9ybTsKCglpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoJCSVzZXJ2aWNlRm9ybSA9ICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9ICk7Cgl9CgoJbXkgKCAkc2NoZW1hLCAkZmllbGRzLCAkaW50cm9kdWN0aW9uICkgPSAkU2VsZi0+R2V0Rm9ybSggU2VydmljZUZvcm0gPT4gXCVzZXJ2aWNlRm9ybSApOwoKCSMjI3ByaW50IFNUREVSUiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iOwoKCXJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCgkJQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAoJCUNvbnRlbnQgICAgID0+ICJbeyIgLiAkc2NoZW1hIC4gIn0sIHsiIC4gJGZpZWxkcyAuICJ9LCBcIiIgLiAkaW50cm9kdWN0aW9uIC4gIlwiXSIsCgkJVHlwZSAgICAgICAgPT4gJ2lubGluZScsCgkJTm9DYWNoZSAgICAgPT4gMSwKCSk7Cn0KCnN1YiBHZXRGb3JtIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJbXkgJHNjaGVtYSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+R2V0QmFzaWNGaWVsZHNTY2hlbWEoKTsKCW15ICRmaWVsZHMgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzT3B0aW9ucygpOwoJbXkgJGludHJvZHVjdGlvbjsKCgkoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+UmVwbGFjZU9UUlNWYWx1ZXMoIFNjaGVtYSAgICAgICAgPT4gJHNjaGVtYSwgT3B0aW9ucyA9PiAkZmllbGRzLCBVc2VySUQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSApOwoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTRHluYW1pY0ZpZWxkcyggU2NoZW1hID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcyApOwoKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX17U2NoZW1hfSApIHsKCQkkc2NoZW1hID1+IHMvQ0ZfU0NIRU1BLy9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwoJCSRpbnRyb2R1Y3Rpb24gPSAiIjsKCX0KCWVsc2UgewoJCW15ICVzZXJ2aWNlRm9ybSA9ICV7ICRQYXJhbXtTZXJ2aWNlRm9ybX0gfTsKCQlteSAkc2NoZW1hRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17U2NoZW1hfTsKCQlteSAkZmllbGRzRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17Rm9ybX07CgkJJHNjaGVtYSA9fiBzL0NGX1NDSEVNQS8kc2NoZW1hRm9ybS9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLyRmaWVsZHNGb3JtL2c7CgkJJGludHJvZHVjdGlvbiA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJfQoKCXJldHVybiAoICRzY2hlbWEsICRmaWVsZHMsICRpbnRyb2R1Y3Rpb24gKTsKfQoKc3ViIEdldFF1ZXVlSUQoKSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgR2V0cyBkZWZhdWx0IFF1ZXVlCglteSAkQ29uZmlnVGlja2V0ICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoJbXkgJENvbmZpZ1RpY2tldFdpemFyZCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CgoJbXkgJFF1ZXVlRGVmYXVsdCA9ICRDb25maWdUaWNrZXQtPnsiUXVldWVEZWZhdWx0In07CglteSAkUXVldWVJRCAgICAgID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWVEZWZhdWx0ICk7CglteSAkUXVldWUgICAgICAgID0gJFF1ZXVlRGVmYXVsdDsKCgkjIENoZWNrcyBpZiB0aGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcXVldWUKCXByaW50IFNUREVSUiBEdW1wZXIoJENvbmZpZ1RpY2tldFdpemFyZCk7CgoJbXkgJFF1ZXVlUHJlZml4ID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZVByZWZpeCJ9OwoJbXkgJFF1ZXVlRmllbGQgID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZUZpZWxkIn07CgkkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkhIiApOwoKCWlmICggJFF1ZXVlUHJlZml4ICYmICRRdWV1ZUZpZWxkICkgewoKCQlteSAkUXVldWVTZWxlY3RlZCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFF1ZXVlRmllbGQgKTsKCQlteSAkUXVldWVOYW1lID0gIiRRdWV1ZVByZWZpeCAkUXVldWVTZWxlY3RlZCI7CgkJJFNlbGYtPntMb2dPYmplY3R9CgkJICAtPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkgLSBbJFF1ZXVlTmFtZV0hIiApOwoKCQlteSAlUXVldWVMaXN0ID0gcmV2ZXJzZSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgoJCWlmICggJFF1ZXVlTGlzdHskUXVldWVOYW1lfSApIHsKCQkJJFF1ZXVlSUQgPSAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9OwoJCQkkUXVldWUgICA9ICRRdWV1ZU5hbWU7CgkJCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIkN1c3RvbSBxdWV1ZSBmb3VuZCAtICRRdWV1ZU5hbWUgKCRRdWV1ZUlEKSEiICk7CgkJfQoKCX0KCglyZXR1cm4gKCAkUXVldWUsICRRdWV1ZUlEICk7Cn0KCnN1YiBDcmVhdGVUaWNrZXQgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVEYXRhID0gKCk7CgoJIyBRdWV1ZQoJbXkgKCAkUXVldWUsICRRdWV1ZUlEICkgPSAkU2VsZi0+R2V0UXVldWVJRCglUGFyYW0pOwoJJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoKCW15ICRUaWNrZXRJRCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0Q3JlYXRlKAoJCVRpdGxlICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzdWJqZWN0IiApLAoJCVF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKCQlQcmlvcml0eSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UHJpb3JpdHlEZWZhdWx0fSwKCQlMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCgkJU3RhdGUgICAgICAgID0+ICduZXcnLAoJCVNlcnZpY2VJRCAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzZXJ2aWNlIiApLAoJCVR5cGVJRCAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJ0eXBlIiApLAoJCUN1c3RvbWVySUQgICA9PiAkU2VsZi0+e1VzZXJDdXN0b21lcklEfSwKCQlDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAoJCU93bmVySUQgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCVVzZXJJRCAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJKTsKCglteSAkTWltZVR5cGUgICAgICA9ICd0ZXh0L3BsYWluJzsKCW15ICRzZXJ2aWNlRmllbGRzID0gIlxuXG4iOwoKCSMgU2VydmljZSBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIlNGXyIgKSB7CgkJCSRzZXJ2aWNlRmllbGRzIC49IHN1YnN0ciggJF8sIDMgKSAuICIgPSAiIC4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIC4gIlxuIjsKCQl9Cgl9CgkKCSMgRHluYW1pYyBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIkRGXyIgKSB7CgkJCW15ICRTdWNjZXNzID0gJFNlbGYtPntCYWNrZW5kT2JqZWN0fS0+VmFsdWVTZXQoCgkJCQlEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRHZXQoIE5hbWUgPT4gc3Vic3RyKCAkXywgMyApICksCgkJCQlPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAoJCQkJVmFsdWUgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKSwKCQkJCVVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCQkpOwoJCX0KCX0KCQoKCSMgQ3JlYXRlIGFydGljbGUKCW15ICRGdWxsTmFtZSAgPSAkU2VsZi0+e0N1c3RvbWVyVXNlck9iamVjdH0tPkN1c3RvbWVyTmFtZSggVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwgKTsKCW15ICRGcm9tICAgICAgPSAiXCIkRnVsbE5hbWVcIiA8JFNlbGYtPntVc2VyRW1haWx9PiI7CglteSAkQXJ0aWNsZUlEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlQ3JlYXRlKAoJCVRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAoJCUFydGljbGVUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57QXJ0aWNsZVR5cGV9LAoJCVNlbmRlclR5cGUgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57U2VuZGVyVHlwZX0sCgkJRnJvbSAgICAgICAgICAgICA9PiAkRnJvbSwKCQlUbyAgICAgICAgICAgICAgID0+ICRRdWV1ZSwKCQlTdWJqZWN0ICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJQm9keSAgICAgICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSAuICRzZXJ2aWNlRmllbGRzLAoJCU1pbWVUeXBlICAgICAgICAgPT4gJE1pbWVUeXBlLAoJCUNoYXJzZXQgICAgICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAoJCVVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQlIaXN0b3J5VHlwZSAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlUeXBlfSwKCQlIaXN0b3J5Q29tbWVudCAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlDb21tZW50fSB8fCAnJSUnLAoJCUF1dG9SZXNwb25zZVR5cGUgPT4gKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQXV0b1Jlc3BvbnNlRm9yV2ViVGlja2V0cycpICkKCQk/ICdhdXRvIHJlcGx5JwoJCTogJycsCgkJT3JpZ0hlYWRlciA9PiB7CgkJCUZyb20gICAgPT4gJEZyb20sCgkJCVRvICAgICAgPT4gJFF1ZXVlLAoJCQlTdWJqZWN0ID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJCUJvZHkgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiZGVzY3JpcHRpb24iICksCgkJfSwKCQlRdWV1ZSA9PiAkUXVldWUsCgkpOwoKCgkjIEF0dGFjaG1lbnRzCglteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKCBQYXJhbSA9PiAiYXR0YWNobWVudCIgKTsKIwlpZiAoJVVwbG9hZFN0dWZmKSB7CiMJCXByaW50IFNUREVSUiAiXG5UZW0gYW5leG8hXG4iOwoJCSRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKCQkJJVVwbG9hZFN0dWZmLAoJCQlBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKCQkJVXNlcklEICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJKTsKIwl9CgoJJERhdGF7VGlja2V0TnVtYmVyfSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0TnVtYmVyTG9va3VwKCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKTsKCgkjIGJ1aWxkIG91dHB1dAoJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICJUaWNrZXQgY3JlYXRlZCIgKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFRpY2tldENyZWF0ZWQnLAoJKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=</File>
  24 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgojIFRPRE86IFRyYWR1Y29lcwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyBuZWVkZWQgb2JqZWN0cwoJJFNlbGYtPntTeXN0ZW1BZGRyZXNzfSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcy0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e0JhY2tlbmRPYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZUVkaXQnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQlteSAlc2VydmljZUZvcm0gPQoJCQkgICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9CgkJCSAgLT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoKCQkJJERhdGF7SW50cm9kdWN0aW9ufSA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJCQkkRGF0YXtGb3JtfSAgICAgICAgID0gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCQkkRGF0YXtTY2hlbWF9ICAgICAgID0gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJCSREYXRhe1NlcnZpY2VJRH0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CgoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm1FZGl0JywKCQkJKTsKCgkJCSMgaHRtbCBvdXRwdXQKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKCQkJcmV0dXJuICRPdXRwdXQ7CgkJfQoJCWVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgoJCQkjIGhlYWRlcgoJCQlteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCgkJCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5TYXZlU2VydmljZUZvcm0oCgkJCQlTZXJ2aWNlSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApLAoJCQkJSW50cm9kdWN0aW9uID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkludHJvZHVjdGlvbiIgKSwKCQkJCUZvcm0gICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGb3JtIiApLAoJCQkJU2NoZW1hICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNjaGVtYSIgKSwKCQkJKTsKCgkJCXJldHVybiAkU2VsZi0+T3ZlcnZpZXcoKTsKCQl9Cgl9CgllbHNlIHsKCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7Cgl9Cn0KCnN1YiBPdmVydmlldyB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCglteSAlRGF0YSA9ICgpOwoKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgkJCWlmICghIGdyZXAgeyBpbmRleCgkXy0+e05hbWV9LCAkU2VydmljZURhdGEtPntOYW1lfSAuICI6OiIpID49IDB9IEB7JFNlcnZpY2VMaXN0fSApIHsKCgkJCQkjIG91dHB1dCByb3cKCQkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCgkJCQkJTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKCQkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCQkpOwoJCQl9CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  27 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgIiByb3dzPSIyMCI+JFFEYXRheyJGb3JtIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2NoZW1hIj4kVGV4dHsiU2NoZW1hIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJTY2hlbWEiIGlkPSJTY2hlbWEiIGNsYXNzPSJXNTBwYyAiIHJvd3M9IjIwIj4kUURhdGF7IlNjaGVtYSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
  28 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  29 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbiBGb3JtIFNjaGVtYSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  30 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  31 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  32 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">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</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">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</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">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</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">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</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">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</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  44 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  45 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  46 + </Filelist>
  47 + <DatabaseInstall>
  48 + <TableCreate Type="post" Name="service_form">
  49 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  50 + <Column Name="introduction" Required="true" Type="text"></Column>
  51 + <Column Name="form" Required="true" Type="text"></Column>
  52 + <Column Name="form_schema" Required="true" Type="text"></Column>
  53 + <ForeignKey ForeignTable="service">
  54 + <Reference Foreign="id" Local="service_id">
  55 + </Reference>
  56 + </ForeignKey>
  57 + </TableCreate>
  58 + </DatabaseInstall>
  59 +</otrs_package>
0 60 \ No newline at end of file
... ...
NewTicketWizard-1.0.3.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.3.opm
... ... @@ -0,0 +1,59 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.3</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  12 + Versão 1.0.2 - Ajuste na hierarquia de servicos
  13 + </Description>
  14 + <Description Lang="en">New Ticket Wizard</Description>
  15 + <Framework>3.x.x</Framework>
  16 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  17 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  18 + <BuildDate>2014-03-17 19:50:47</BuildDate>
  19 + <BuildHost>yourhost.example.com</BuildHost>
  20 + <Filelist>
  21 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  22 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  23 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CglteSBAU2VydmljZXNDb21ibyA9ICgpOwoJCglmb3IgbXkgJHNlcnZpY2VJRCAoa2V5cyAlU2VydmljZXMpIHsKCQlpZiAoZ3JlcCB7aW5kZXgoJFNlcnZpY2VzeyRffSwgJFNlcnZpY2VzeyRzZXJ2aWNlSUR9IC4gIjo6IikgPj0gMH0gKGtleXMgJVNlcnZpY2VzKSkgewoJCQlteSAlc2VydiA9ICgpOwoJCQkkc2VydntWYWx1ZX0gPSAkU2VydmljZXN7JHNlcnZpY2VJRH07CgkJCSRzZXJ2e0tleX0gPSAkc2VydmljZUlEOwoJCQkkc2VydntEaXNhYmxlZH0gPSAxOwoJCQlwdXNoIEBTZXJ2aWNlc0NvbWJvLCBcJXNlcnY7CgkJfSBlbHNlIHsKCQkJbXkgJXNlcnYgPSAoKTsKCQkJJHNlcnZ7VmFsdWV9ID0gJFNlcnZpY2VzeyRzZXJ2aWNlSUR9OwoJCQkkc2VydntLZXl9ID0gJHNlcnZpY2VJRDsKCQkJcHVzaCBAU2VydmljZXNDb21ibywgXCVzZXJ2OwkJCQoJCX0JCQoJfQkKCQoJQFNlcnZpY2VzQ29tYm8gPSBzb3J0IHskYS0+e1ZhbHVlfSAuICI6OiIgY21wICRiLT57VmFsdWV9IC4gIjo6In0gQFNlcnZpY2VzQ29tYm87CgkKCXByaW50IFNUREVSUiBEdW1wZXIoXEBTZXJ2aWNlc0NvbWJvKTsKCQoJJERhdGF7U2VydmljZVN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKCQlEYXRhICAgICAgICAgPT4gXEBTZXJ2aWNlc0NvbWJvLAoJCU5hbWUgICAgICAgICA9PiAnU2VydmljZUlEJywKCQlTZWxlY3RlZElEICAgPT4gJFBhcmFte1NlcnZpY2VJRH0sCgkJQ2xhc3MgICAgICAgID0+ICJWYWxpZGF0ZV9SZXF1aXJlZCAiIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NlcnZpY2VJREludmFsaWR9IHx8ICcnICksCgkJUG9zc2libGVOb25lID0+IDEsCgkJVHJlZVZpZXcgICAgID0+IDEsCgkJU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCgkJVHJhbnNsYXRpb24gID0+IDAsCgkJTWF4ICAgICAgICAgID0+IDIwMAoJKTsKCSRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CglteSAkbXNnQ2hvb3NlU2VydmljZSA9ICRTZWxmLT57Q29uZmlnfS0+eyJNZXNzYWdlQ2hvb3NlU2VydmljZSJ9OwoJJERhdGF7TXNnQ2hvb3NlU2VydmljZX0gPSAkbXNnQ2hvb3NlU2VydmljZTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSBlcSAiQ3JlYXRlVGlja2V0IiApIHsKCQkJcmV0dXJuICRTZWxmLT5DcmVhdGVUaWNrZXQoKTsKCQl9CgkJZWxzaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkdldEZvcm1KU09OIiApIHsKCQkJcmV0dXJuICRTZWxmLT5HZXRGb3JtSlNPTiggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoJCX0KCX0KCWVsc2UgewoJCW15ICggJHNjaGVtYSwgJGZpZWxkcyApID0gJFNlbGYtPkdldEZvcm0oKTsKCgkJJERhdGF7U2NoZW1hRm9ybX0gPSAkc2NoZW1hOwoJCSREYXRhe0ZpZWxkc0Zvcm19ID0gJGZpZWxkczsKCgkJIyBidWlsZCBvdXRwdXQKCQlteSAkT3V0cHV0ID0KCQkgICRTZWxmLT57TGF5b3V0T2JqZWN0fQoJCSAgLT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIk5ldyB0aWNrZXQgd2l6YXJkIikgKTsKCgkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkJywKCQkpOwoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJCXJldHVybiAkT3V0cHV0OwoJfQp9CgpzdWIgR2V0Rm9ybUpTT04gewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVzZXJ2aWNlRm9ybTsKCglpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoJCSVzZXJ2aWNlRm9ybSA9ICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9ICk7Cgl9CgoJbXkgKCAkc2NoZW1hLCAkZmllbGRzLCAkaW50cm9kdWN0aW9uICkgPSAkU2VsZi0+R2V0Rm9ybSggU2VydmljZUZvcm0gPT4gXCVzZXJ2aWNlRm9ybSApOwoKCSMjI3ByaW50IFNUREVSUiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iOwoKCXJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkF0dGFjaG1lbnQoCgkJQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAoJCUNvbnRlbnQgICAgID0+ICJbeyIgLiAkc2NoZW1hIC4gIn0sIHsiIC4gJGZpZWxkcyAuICJ9LCBcIiIgLiAkaW50cm9kdWN0aW9uIC4gIlwiXSIsCgkJVHlwZSAgICAgICAgPT4gJ2lubGluZScsCgkJTm9DYWNoZSAgICAgPT4gMSwKCSk7Cn0KCnN1YiBHZXRGb3JtIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJbXkgJHNjaGVtYSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+R2V0QmFzaWNGaWVsZHNTY2hlbWEoKTsKCW15ICRmaWVsZHMgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzT3B0aW9ucygpOwoJbXkgJGludHJvZHVjdGlvbjsKCgkoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT57VGlja2V0V2l6YXJkfS0+UmVwbGFjZU9UUlNWYWx1ZXMoIFNjaGVtYSAgICAgICAgPT4gJHNjaGVtYSwgT3B0aW9ucyA9PiAkZmllbGRzLCBVc2VySUQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSApOwoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTRHluYW1pY0ZpZWxkcyggU2NoZW1hID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcyApOwoKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX17U2NoZW1hfSApIHsKCQkkc2NoZW1hID1+IHMvQ0ZfU0NIRU1BLy9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwoJCSRpbnRyb2R1Y3Rpb24gPSAiIjsKCX0KCWVsc2UgewoJCW15ICVzZXJ2aWNlRm9ybSA9ICV7ICRQYXJhbXtTZXJ2aWNlRm9ybX0gfTsKCQlteSAkc2NoZW1hRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17U2NoZW1hfTsKCQlteSAkZmllbGRzRm9ybSAgPSAiLCIgLiAkc2VydmljZUZvcm17Rm9ybX07CgkJJHNjaGVtYSA9fiBzL0NGX1NDSEVNQS8kc2NoZW1hRm9ybS9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLyRmaWVsZHNGb3JtL2c7CgkJJGludHJvZHVjdGlvbiA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJfQoKCXJldHVybiAoICRzY2hlbWEsICRmaWVsZHMsICRpbnRyb2R1Y3Rpb24gKTsKfQoKc3ViIEdldFF1ZXVlSUQoKSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgR2V0cyBkZWZhdWx0IFF1ZXVlCglteSAkQ29uZmlnVGlja2V0ICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoJbXkgJENvbmZpZ1RpY2tldFdpemFyZCA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIik7CgoJbXkgJFF1ZXVlRGVmYXVsdCA9ICRDb25maWdUaWNrZXQtPnsiUXVldWVEZWZhdWx0In07CglteSAkUXVldWVJRCAgICAgID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUXVldWVEZWZhdWx0ICk7CglteSAkUXVldWUgICAgICAgID0gJFF1ZXVlRGVmYXVsdDsKCgkjIENoZWNrcyBpZiB0aGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcXVldWUKCXByaW50IFNUREVSUiBEdW1wZXIoJENvbmZpZ1RpY2tldFdpemFyZCk7CgoJbXkgJFF1ZXVlUHJlZml4ID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZVByZWZpeCJ9OwoJbXkgJFF1ZXVlRmllbGQgID0gJENvbmZpZ1RpY2tldFdpemFyZC0+eyJRdWV1ZUZpZWxkIn07CgkkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkhIiApOwoKCWlmICggJFF1ZXVlUHJlZml4ICYmICRRdWV1ZUZpZWxkICkgewoKCQlteSAkUXVldWVTZWxlY3RlZCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFF1ZXVlRmllbGQgKTsKCQlteSAkUXVldWVOYW1lID0gIiRRdWV1ZVByZWZpeCAkUXVldWVTZWxlY3RlZCI7CgkJJFNlbGYtPntMb2dPYmplY3R9CgkJICAtPkxvZyggUHJpb3JpdHkgPT4gJ2luZm8nLCBNZXNzYWdlID0+ICJTZWFyY2hpbmcgcXVldWUgZm9yIC0gJFF1ZXVlUHJlZml4ICgkUXVldWVGaWVsZCkgLSBbJFF1ZXVlTmFtZV0hIiApOwoKCQlteSAlUXVldWVMaXN0ID0gcmV2ZXJzZSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgoJCWlmICggJFF1ZXVlTGlzdHskUXVldWVOYW1lfSApIHsKCQkJJFF1ZXVlSUQgPSAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9OwoJCQkkUXVldWUgICA9ICRRdWV1ZU5hbWU7CgkJCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIkN1c3RvbSBxdWV1ZSBmb3VuZCAtICRRdWV1ZU5hbWUgKCRRdWV1ZUlEKSEiICk7CgkJfQoKCX0KCglyZXR1cm4gKCAkUXVldWUsICRRdWV1ZUlEICk7Cn0KCnN1YiBDcmVhdGVUaWNrZXQgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICVEYXRhID0gKCk7CgoJIyBRdWV1ZQoJbXkgKCAkUXVldWUsICRRdWV1ZUlEICkgPSAkU2VsZi0+R2V0UXVldWVJRCglUGFyYW0pOwoJJFNlbGYtPntDb25maWd9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSIpOwoKCW15ICRUaWNrZXRJRCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0Q3JlYXRlKAoJCVRpdGxlICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzdWJqZWN0IiApLAoJCVF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKCQlQcmlvcml0eSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UHJpb3JpdHlEZWZhdWx0fSwKCQlMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCgkJU3RhdGUgICAgICAgID0+ICduZXcnLAoJCVNlcnZpY2VJRCAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJzZXJ2aWNlIiApLAoJCVR5cGVJRCAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJ0eXBlIiApLAoJCUN1c3RvbWVySUQgICA9PiAkU2VsZi0+e1VzZXJDdXN0b21lcklEfSwKCQlDdXN0b21lclVzZXIgPT4gJFNlbGYtPntVc2VyTG9naW59LAoJCU93bmVySUQgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCVVzZXJJRCAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJKTsKCglteSAkTWltZVR5cGUgICAgICA9ICd0ZXh0L3BsYWluJzsKCW15ICRzZXJ2aWNlRmllbGRzID0gIlxuXG4iOwoKCSMgU2VydmljZSBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIlNGXyIgKSB7CgkJCSRzZXJ2aWNlRmllbGRzIC49IHN1YnN0ciggJF8sIDMgKSAuICIgPSAiIC4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIC4gIlxuIjsKCQl9Cgl9CgkKCSMgRHluYW1pYyBGaWVsZHMKCWZvciAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbU5hbWVzKCkgKSB7CgkJaWYgKCBzdWJzdHIoICRfLCAwLCAzICkgZXEgIkRGXyIgKSB7CgkJCW15ICRTdWNjZXNzID0gJFNlbGYtPntCYWNrZW5kT2JqZWN0fS0+VmFsdWVTZXQoCgkJCQlEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRHZXQoIE5hbWUgPT4gc3Vic3RyKCAkXywgMyApICksCgkJCQlPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAoJCQkJVmFsdWUgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKSwKCQkJCVVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCQkpOwoJCX0KCX0KCQoKCSMgQ3JlYXRlIGFydGljbGUKCW15ICRGdWxsTmFtZSAgPSAkU2VsZi0+e0N1c3RvbWVyVXNlck9iamVjdH0tPkN1c3RvbWVyTmFtZSggVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwgKTsKCW15ICRGcm9tICAgICAgPSAiXCIkRnVsbE5hbWVcIiA8JFNlbGYtPntVc2VyRW1haWx9PiI7CglteSAkQXJ0aWNsZUlEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlQ3JlYXRlKAoJCVRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAoJCUFydGljbGVUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57QXJ0aWNsZVR5cGV9LAoJCVNlbmRlclR5cGUgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57U2VuZGVyVHlwZX0sCgkJRnJvbSAgICAgICAgICAgICA9PiAkRnJvbSwKCQlUbyAgICAgICAgICAgICAgID0+ICRRdWV1ZSwKCQlTdWJqZWN0ICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJQm9keSAgICAgICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSAuICRzZXJ2aWNlRmllbGRzLAoJCU1pbWVUeXBlICAgICAgICAgPT4gJE1pbWVUeXBlLAoJCUNoYXJzZXQgICAgICAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57VXNlckNoYXJzZXR9LAoJCVVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQlIaXN0b3J5VHlwZSAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlUeXBlfSwKCQlIaXN0b3J5Q29tbWVudCAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0hpc3RvcnlDb21tZW50fSB8fCAnJSUnLAoJCUF1dG9SZXNwb25zZVR5cGUgPT4gKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQXV0b1Jlc3BvbnNlRm9yV2ViVGlja2V0cycpICkKCQk/ICdhdXRvIHJlcGx5JwoJCTogJycsCgkJT3JpZ0hlYWRlciA9PiB7CgkJCUZyb20gICAgPT4gJEZyb20sCgkJCVRvICAgICAgPT4gJFF1ZXVlLAoJCQlTdWJqZWN0ID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJCUJvZHkgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiZGVzY3JpcHRpb24iICksCgkJfSwKCQlRdWV1ZSA9PiAkUXVldWUsCgkpOwoKCgkjIEF0dGFjaG1lbnRzCglteSAlVXBsb2FkU3R1ZmYgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0VXBsb2FkQWxsKCBQYXJhbSA9PiAiYXR0YWNobWVudCIgKTsKIwlpZiAoJVVwbG9hZFN0dWZmKSB7CiMJCXByaW50IFNUREVSUiAiXG5UZW0gYW5leG8hXG4iOwoJCSRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKCQkJJVVwbG9hZFN0dWZmLAoJCQlBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKCQkJVXNlcklEICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJKTsKIwl9CgoJJERhdGF7VGlja2V0TnVtYmVyfSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0TnVtYmVyTG9va3VwKCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKTsKCgkjIGJ1aWxkIG91dHB1dAoJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICJUaWNrZXQgY3JlYXRlZCIgKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFRpY2tldENyZWF0ZWQnLAoJKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwoJcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=</File>
  24 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgojIFRPRE86IFRyYWR1Y29lcwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyBuZWVkZWQgb2JqZWN0cwoJJFNlbGYtPntTeXN0ZW1BZGRyZXNzfSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcy0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e0JhY2tlbmRPYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZUVkaXQnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQlteSAlc2VydmljZUZvcm0gPQoJCQkgICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9CgkJCSAgLT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoKCQkJJERhdGF7SW50cm9kdWN0aW9ufSA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJCQkkRGF0YXtGb3JtfSAgICAgICAgID0gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCQkkRGF0YXtTY2hlbWF9ICAgICAgID0gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJCSREYXRhe1NlcnZpY2VJRH0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CgoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm1FZGl0JywKCQkJKTsKCgkJCSMgaHRtbCBvdXRwdXQKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKCQkJcmV0dXJuICRPdXRwdXQ7CgkJfQoJCWVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgoJCQkjIGhlYWRlcgoJCQlteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCgkJCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5TYXZlU2VydmljZUZvcm0oCgkJCQlTZXJ2aWNlSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApLAoJCQkJSW50cm9kdWN0aW9uID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkludHJvZHVjdGlvbiIgKSwKCQkJCUZvcm0gICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGb3JtIiApLAoJCQkJU2NoZW1hICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNjaGVtYSIgKSwKCQkJKTsKCgkJCXJldHVybiAkU2VsZi0+T3ZlcnZpZXcoKTsKCQl9Cgl9CgllbHNlIHsKCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7Cgl9Cn0KCnN1YiBPdmVydmlldyB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCglteSAlRGF0YSA9ICgpOwoKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgkJCWlmICghIGdyZXAgeyBpbmRleCgkXy0+e05hbWV9LCAkU2VydmljZURhdGEtPntOYW1lfSAuICI6OiIpID49IDB9IEB7JFNlcnZpY2VMaXN0fSApIHsKCgkJCQkjIG91dHB1dCByb3cKCQkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCgkJCQkJTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKCQkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCQkpOwoJCQl9CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  27 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgIiByb3dzPSIyMCI+JFFEYXRheyJGb3JtIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2NoZW1hIj4kVGV4dHsiU2NoZW1hIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJTY2hlbWEiIGlkPSJTY2hlbWEiIGNsYXNzPSJXNTBwYyAiIHJvd3M9IjIwIj4kUURhdGF7IlNjaGVtYSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
  28 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  29 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  30 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  31 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  32 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">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</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">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</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">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</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">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</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">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</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  44 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  45 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  46 + </Filelist>
  47 + <DatabaseInstall>
  48 + <TableCreate Type="post" Name="service_form">
  49 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  50 + <Column Name="introduction" Required="true" Type="text"></Column>
  51 + <Column Name="form" Required="true" Type="text"></Column>
  52 + <Column Name="form_schema" Required="true" Type="text"></Column>
  53 + <ForeignKey ForeignTable="service">
  54 + <Reference Foreign="id" Local="service_id">
  55 + </Reference>
  56 + </ForeignKey>
  57 + </TableCreate>
  58 + </DatabaseInstall>
  59 +</otrs_package>
0 60 \ No newline at end of file
... ...
NewTicketWizard-1.0.4.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.4.opm
... ... @@ -0,0 +1,59 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.4</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  12 + Versão 1.0.2 - Ajuste na hierarquia de servicos
  13 + </Description>
  14 + <Description Lang="en">New Ticket Wizard</Description>
  15 + <Framework>3.x.x</Framework>
  16 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  17 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  18 + <BuildDate>2014-03-17 19:54:39</BuildDate>
  19 + <BuildHost>yourhost.example.com</BuildHost>
  20 + <Filelist>
  21 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  22 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  23 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CglteSBAU2VydmljZXNDb21ibyA9ICgpOwoJCglmb3IgbXkgJHNlcnZpY2VJRCAoa2V5cyAlU2VydmljZXMpIHsKCQlpZiAoZ3JlcCB7aW5kZXgoJFNlcnZpY2VzeyRffSwgJFNlcnZpY2VzeyRzZXJ2aWNlSUR9IC4gIjo6IikgPj0gMH0gKGtleXMgJVNlcnZpY2VzKSkgewoJCQlteSAlc2VydiA9ICgpOwoJCQkkc2VydntWYWx1ZX0gPSAkU2VydmljZXN7JHNlcnZpY2VJRH07CgkJCSRzZXJ2e0tleX0gPSAkc2VydmljZUlEOwoJCQkkc2VydntEaXNhYmxlZH0gPSAxOwoJCQlwdXNoIEBTZXJ2aWNlc0NvbWJvLCBcJXNlcnY7CgkJfSBlbHNlIHsKCQkJbXkgJXNlcnYgPSAoKTsKCQkJJHNlcnZ7VmFsdWV9ID0gJFNlcnZpY2VzeyRzZXJ2aWNlSUR9OwoJCQkkc2VydntLZXl9ID0gJHNlcnZpY2VJRDsKCQkJcHVzaCBAU2VydmljZXNDb21ibywgXCVzZXJ2OwkJCQoJCX0JCQoJfQkKCQoJQFNlcnZpY2VzQ29tYm8gPSBzb3J0IHskYS0+e1ZhbHVlfSAuICI6OiIgY21wICRiLT57VmFsdWV9IC4gIjo6In0gQFNlcnZpY2VzQ29tYm87CgkKCSREYXRhe1NlcnZpY2VTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCgkJRGF0YSAgICAgICAgID0+IFxAU2VydmljZXNDb21ibywKCQlOYW1lICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCgkJU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAoJCUNsYXNzICAgICAgICA9PiAiVmFsaWRhdGVfUmVxdWlyZWQgIiAuICggJFBhcmFte0Vycm9yc30tPntTZXJ2aWNlSURJbnZhbGlkfSB8fCAnJyApLAoJCVBvc3NpYmxlTm9uZSA9PiAxLAoJCVRyZWVWaWV3ICAgICA9PiAxLAoJCVNvcnQgICAgICAgICA9PiAnVHJlZVZpZXcnLAoJCVRyYW5zbGF0aW9uICA9PiAwLAoJCU1heCAgICAgICAgICA9PiAyMDAKCSk7CgkkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpOwoJbXkgJG1zZ0Nob29zZVNlcnZpY2UgPSAkU2VsZi0+e0NvbmZpZ30tPnsiTWVzc2FnZUNob29zZVNlcnZpY2UifTsKCSREYXRhe01zZ0Nob29zZVNlcnZpY2V9ID0gJG1zZ0Nob29zZVNlcnZpY2U7CgoJaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgKSB7CgkJaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkNyZWF0ZVRpY2tldCIgKSB7CgkJCXJldHVybiAkU2VsZi0+Q3JlYXRlVGlja2V0KCk7CgkJfQoJCWVsc2lmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3ViYWN0aW9uIiApIGVxICJHZXRGb3JtSlNPTiIgKSB7CgkJCXJldHVybiAkU2VsZi0+R2V0Rm9ybUpTT04oIFNlcnZpY2VJRCA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICkgKTsKCQl9Cgl9CgllbHNlIHsKCQlteSAoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT5HZXRGb3JtKCk7CgoJCSREYXRhe1NjaGVtYUZvcm19ID0gJHNjaGVtYTsKCQkkRGF0YXtGaWVsZHNGb3JtfSA9ICRmaWVsZHM7CgoJCSMgYnVpbGQgb3V0cHV0CgkJbXkgJE91dHB1dCA9CgkJICAkU2VsZi0+e0xheW91dE9iamVjdH0KCQkgIC0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCJOZXcgdGlja2V0IHdpemFyZCIpICk7CgoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQlEYXRhICAgICAgICAgPT4gXCVEYXRhLAoJCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZCcsCgkJKTsKCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKCQlyZXR1cm4gJE91dHB1dDsKCX0KfQoKc3ViIEdldEZvcm1KU09OIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlc2VydmljZUZvcm07CgoJaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKCQklc2VydmljZUZvcm0gPSAkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fS0+R2V0U2VydmljZUZvcm0oIFNlcnZpY2VJRCA9PiAkUGFyYW17U2VydmljZUlEfSApOwoJfQoKCW15ICggJHNjaGVtYSwgJGZpZWxkcywgJGludHJvZHVjdGlvbiApID0gJFNlbGYtPkdldEZvcm0oIFNlcnZpY2VGb3JtID0+IFwlc2VydmljZUZvcm0gKTsKCglyZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAoJCUNvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntDaGFyc2V0fSwKCQlDb250ZW50ICAgICA9PiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iLAoJCVR5cGUgICAgICAgID0+ICdpbmxpbmUnLAoJCU5vQ2FjaGUgICAgID0+IDEsCgkpOwp9CgpzdWIgR2V0Rm9ybSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCW15ICRzY2hlbWEgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzU2NoZW1hKCk7CglteSAkZmllbGRzID0gJFNlbGYtPntUaWNrZXRXaXphcmR9LT5HZXRCYXNpY0ZpZWxkc09wdGlvbnMoKTsKCW15ICRpbnRyb2R1Y3Rpb247CgoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTVmFsdWVzKCBTY2hlbWEgICAgICAgID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcywgVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJykgKTsKCSggJHNjaGVtYSwgJGZpZWxkcyApID0gJFNlbGYtPntUaWNrZXRXaXphcmR9LT5SZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMoIFNjaGVtYSA9PiAkc2NoZW1hLCBPcHRpb25zID0+ICRmaWVsZHMgKTsKCgkkaW50cm9kdWN0aW9uID0gJHNlcnZpY2VGb3Jte0ludHJvZHVjdGlvbn07CgkKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX17U2NoZW1hfSApIHsKCQkkc2NoZW1hID1+IHMvQ0ZfU0NIRU1BLy9nOwoJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwkJCgl9CgllbHNlIHsKCQlteSAlc2VydmljZUZvcm0gPSAleyAkUGFyYW17U2VydmljZUZvcm19IH07CgkJbXkgJHNjaGVtYUZvcm0gID0gIiwiIC4gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJbXkgJGZpZWxkc0Zvcm0gID0gIiwiIC4gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCSRzY2hlbWEgPX4gcy9DRl9TQ0hFTUEvJHNjaGVtYUZvcm0vZzsKCQkkZmllbGRzID1+IHMvQ0ZfRk9STS8kZmllbGRzRm9ybS9nOwkJCgl9CgoJcmV0dXJuICggJHNjaGVtYSwgJGZpZWxkcywgJGludHJvZHVjdGlvbiApOwp9CgpzdWIgR2V0UXVldWVJRCgpIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJIyBHZXRzIGRlZmF1bHQgUXVldWUKCW15ICRDb25maWdUaWNrZXQgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIik7CglteSAkQ29uZmlnVGlja2V0V2l6YXJkID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKTsKCglteSAkUXVldWVEZWZhdWx0ID0gJENvbmZpZ1RpY2tldC0+eyJRdWV1ZURlZmF1bHQifTsKCW15ICRRdWV1ZUlEICAgICAgPSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZURlZmF1bHQgKTsKCW15ICRRdWV1ZSAgICAgICAgPSAkUXVldWVEZWZhdWx0OwoKCSMgQ2hlY2tzIGlmIHRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBxdWV1ZQoJcHJpbnQgU1RERVJSIER1bXBlcigkQ29uZmlnVGlja2V0V2l6YXJkKTsKCglteSAkUXVldWVQcmVmaXggPSAkQ29uZmlnVGlja2V0V2l6YXJkLT57IlF1ZXVlUHJlZml4In07CglteSAkUXVldWVGaWVsZCAgPSAkQ29uZmlnVGlja2V0V2l6YXJkLT57IlF1ZXVlRmllbGQifTsKCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIlNlYXJjaGluZyBxdWV1ZSBmb3IgLSAkUXVldWVQcmVmaXggKCRRdWV1ZUZpZWxkKSEiICk7CgoJaWYgKCAkUXVldWVQcmVmaXggJiYgJFF1ZXVlRmllbGQgKSB7CgoJCW15ICRRdWV1ZVNlbGVjdGVkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUXVldWVGaWVsZCApOwoJCW15ICRRdWV1ZU5hbWUgPSAiJFF1ZXVlUHJlZml4ICRRdWV1ZVNlbGVjdGVkIjsKCQkkU2VsZi0+e0xvZ09iamVjdH0KCQkgIC0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIlNlYXJjaGluZyBxdWV1ZSBmb3IgLSAkUXVldWVQcmVmaXggKCRRdWV1ZUZpZWxkKSAtIFskUXVldWVOYW1lXSEiICk7CgoJCW15ICVRdWV1ZUxpc3QgPSByZXZlcnNlICRTZWxmLT57UXVldWVPYmplY3R9LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKCgkJaWYgKCAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9ICkgewoJCQkkUXVldWVJRCA9ICRRdWV1ZUxpc3R7JFF1ZXVlTmFtZX07CgkJCSRRdWV1ZSAgID0gJFF1ZXVlTmFtZTsKCQkJJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdpbmZvJywgTWVzc2FnZSA9PiAiQ3VzdG9tIHF1ZXVlIGZvdW5kIC0gJFF1ZXVlTmFtZSAoJFF1ZXVlSUQpISIgKTsKCQl9CgoJfQoKCXJldHVybiAoICRRdWV1ZSwgJFF1ZXVlSUQgKTsKfQoKc3ViIENyZWF0ZVRpY2tldCB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCgkjIFF1ZXVlCglteSAoICRRdWV1ZSwgJFF1ZXVlSUQgKSA9ICRTZWxmLT5HZXRRdWV1ZUlEKCVQYXJhbSk7CgkkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIik7CgoJbXkgJFRpY2tldElEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRDcmVhdGUoCgkJVGl0bGUgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAoJCVByaW9yaXR5ICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQcmlvcml0eURlZmF1bHR9LAoJCUxvY2sgICAgICAgICA9PiAndW5sb2NrJywKCQlTdGF0ZSAgICAgICAgPT4gJ25ldycsCgkJU2VydmljZUlEICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInNlcnZpY2UiICksCgkJVHlwZUlEICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInR5cGUiICksCgkJQ3VzdG9tZXJJRCAgID0+ICRTZWxmLT57VXNlckN1c3RvbWVySUR9LAoJCUN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCgkJT3duZXJJRCAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJVXNlcklEICAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkpOwoKCW15ICRNaW1lVHlwZSAgICAgID0gJ3RleHQvcGxhaW4nOwoJbXkgJHNlcnZpY2VGaWVsZHMgPSAiXG5cbiI7CgoJIyBTZXJ2aWNlIEZpZWxkcwoJZm9yICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtTmFtZXMoKSApIHsKCQlpZiAoIHN1YnN0ciggJF8sIDAsIDMgKSBlcSAiU0ZfIiApIHsKCQkJJHNlcnZpY2VGaWVsZHMgLj0gc3Vic3RyKCAkXywgMyApIC4gIiA9ICIgLiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRfICkgLiAiXG4iOwoJCX0KCX0KCQoJIyBEeW5hbWljIEZpZWxkcwoJZm9yICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtTmFtZXMoKSApIHsKCQlpZiAoIHN1YnN0ciggJF8sIDAsIDMgKSBlcSAiREZfIiApIHsKCQkJbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e0JhY2tlbmRPYmplY3R9LT5WYWx1ZVNldCgKCQkJCUR5bmFtaWNGaWVsZENvbmZpZyA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZE9iamVjdH0tPkR5bmFtaWNGaWVsZEdldCggTmFtZSA9PiBzdWJzdHIoICRfLCAzICkgKSwKCQkJCU9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCgkJCQlWYWx1ZSAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApLAoJCQkJVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJCSk7CgkJfQoJfQoJCgoJIyBDcmVhdGUgYXJ0aWNsZQoJbXkgJEZ1bGxOYW1lICA9ICRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fS0+Q3VzdG9tZXJOYW1lKCBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LCApOwoJbXkgJEZyb20gICAgICA9ICJcIiRGdWxsTmFtZVwiIDwkU2VsZi0+e1VzZXJFbWFpbH0+IjsKCW15ICRBcnRpY2xlSUQgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkFydGljbGVDcmVhdGUoCgkJVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCgkJQXJ0aWNsZVR5cGUgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntBcnRpY2xlVHlwZX0sCgkJU2VuZGVyVHlwZSAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntTZW5kZXJUeXBlfSwKCQlGcm9tICAgICAgICAgICAgID0+ICRGcm9tLAoJCVRvICAgICAgICAgICAgICAgPT4gJFF1ZXVlLAoJCVN1YmplY3QgICAgICAgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAic3ViamVjdCIgKSwKCQlCb2R5ICAgICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gImRlc2NyaXB0aW9uIiApIC4gJHNlcnZpY2VGaWVsZHMsCgkJTWltZVR5cGUgICAgICAgICA9PiAkTWltZVR5cGUsCgkJQ2hhcnNldCAgICAgICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyQ2hhcnNldH0sCgkJVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCUhpc3RvcnlUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57SGlzdG9yeVR5cGV9LAoJCUhpc3RvcnlDb21tZW50ICAgPT4gJFNlbGYtPntDb25maWd9LT57SGlzdG9yeUNvbW1lbnR9IHx8ICclJScsCgkJQXV0b1Jlc3BvbnNlVHlwZSA9PiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdBdXRvUmVzcG9uc2VGb3JXZWJUaWNrZXRzJykgKQoJCT8gJ2F1dG8gcmVwbHknCgkJOiAnJywKCQlPcmlnSGVhZGVyID0+IHsKCQkJRnJvbSAgICA9PiAkRnJvbSwKCQkJVG8gICAgICA9PiAkUXVldWUsCgkJCVN1YmplY3QgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAic3ViamVjdCIgKSwKCQkJQm9keSAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSwKCQl9LAoJCVF1ZXVlID0+ICRRdWV1ZSwKCSk7CgoKCSMgQXR0YWNobWVudHMKCW15ICVVcGxvYWRTdHVmZiA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRVcGxvYWRBbGwoIFBhcmFtID0+ICJhdHRhY2htZW50IiApOwojCWlmICglVXBsb2FkU3R1ZmYpIHsKIwkJcHJpbnQgU1RERVJSICJcblRlbSBhbmV4byFcbiI7CgkJJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlV3JpdGVBdHRhY2htZW50KAoJCQklVXBsb2FkU3R1ZmYsCgkJCUFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAoJCQlVc2VySUQgICAgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQkpOwojCX0KCgkkRGF0YXtUaWNrZXROdW1iZXJ9ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXROdW1iZXJMb29rdXAoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKCSMgYnVpbGQgb3V0cHV0CglteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gIlRpY2tldCBjcmVhdGVkIiApOwoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKCQlEYXRhICAgICAgICAgPT4gXCVEYXRhLAoJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkVGlja2V0Q3JlYXRlZCcsCgkpOwoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKCn0KCjE7Cg==</File>
  24 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgojIFRPRE86IFRyYWR1Y29lcwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyBuZWVkZWQgb2JqZWN0cwoJJFNlbGYtPntTeXN0ZW1BZGRyZXNzfSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcy0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e0JhY2tlbmRPYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZUVkaXQnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQlteSAlc2VydmljZUZvcm0gPQoJCQkgICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9CgkJCSAgLT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoKCQkJJERhdGF7SW50cm9kdWN0aW9ufSA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJCQkkRGF0YXtGb3JtfSAgICAgICAgID0gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCQkkRGF0YXtTY2hlbWF9ICAgICAgID0gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJCSREYXRhe1NlcnZpY2VJRH0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CgoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm1FZGl0JywKCQkJKTsKCgkJCSMgaHRtbCBvdXRwdXQKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKCQkJcmV0dXJuICRPdXRwdXQ7CgkJfQoJCWVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgoJCQkjIGhlYWRlcgoJCQlteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCgkJCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5TYXZlU2VydmljZUZvcm0oCgkJCQlTZXJ2aWNlSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApLAoJCQkJSW50cm9kdWN0aW9uID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkludHJvZHVjdGlvbiIgKSwKCQkJCUZvcm0gICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGb3JtIiApLAoJCQkJU2NoZW1hICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNjaGVtYSIgKSwKCQkJKTsKCgkJCXJldHVybiAkU2VsZi0+T3ZlcnZpZXcoKTsKCQl9Cgl9CgllbHNlIHsKCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7Cgl9Cn0KCnN1YiBPdmVydmlldyB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCglteSAlRGF0YSA9ICgpOwoKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgkJCWlmICghIGdyZXAgeyBpbmRleCgkXy0+e05hbWV9LCAkU2VydmljZURhdGEtPntOYW1lfSAuICI6OiIpID49IDB9IEB7JFNlcnZpY2VMaXN0fSApIHsKCgkJCQkjIG91dHB1dCByb3cKCQkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCgkJCQkJTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKCQkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCQkpOwoJCQl9CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  27 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgIiByb3dzPSIyMCI+JFFEYXRheyJGb3JtIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2NoZW1hIj4kVGV4dHsiU2NoZW1hIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJTY2hlbWEiIGlkPSJTY2hlbWEiIGNsYXNzPSJXNTBwYyAiIHJvd3M9IjIwIj4kUURhdGF7IlNjaGVtYSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
  28 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  29 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  30 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  31 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  32 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">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</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">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</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">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</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">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</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">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</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  44 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  45 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  46 + </Filelist>
  47 + <DatabaseInstall>
  48 + <TableCreate Type="post" Name="service_form">
  49 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  50 + <Column Name="introduction" Required="true" Type="text"></Column>
  51 + <Column Name="form" Required="true" Type="text"></Column>
  52 + <Column Name="form_schema" Required="true" Type="text"></Column>
  53 + <ForeignKey ForeignTable="service">
  54 + <Reference Foreign="id" Local="service_id">
  55 + </Reference>
  56 + </ForeignKey>
  57 + </TableCreate>
  58 + </DatabaseInstall>
  59 +</otrs_package>
0 60 \ No newline at end of file
... ...
NewTicketWizard-1.0.5.opm 0 → 100644
  1 +++ a/NewTicketWizard-1.0.5.opm
... ... @@ -0,0 +1,59 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.1">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.5</Version>
  5 + <Vendor>SeTIC</Vendor>
  6 + <URL>http://www.setic.ufsc.br</URL>
  7 + <License>Free</License>
  8 + <Description Lang="pt-br">Assistente de chamados
  9 +
  10 + Versão 1.0.0 - Inicial
  11 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  12 + Versão 1.0.2 - Ajuste na hierarquia de servicos
  13 + </Description>
  14 + <Description Lang="en">New Ticket Wizard</Description>
  15 + <Framework>3.x.x</Framework>
  16 + <IntroInstall Lang="pt-br" Title="Obrigado" Type="post">Módulo instalado com sucesso!</IntroInstall>
  17 + <IntroInstall Lang="en" Title="Thank you" Type="post">New Ticket Wizard module installed successfully!</IntroInstall>
  18 + <BuildDate>2014-03-17 19:59:07</BuildDate>
  19 + <BuildHost>yourhost.example.com</BuildHost>
  20 + <Filelist>
  21 + <File Location="Kernel/Config/Files/NewTicketWizard.xml" Permission="644" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjxvdHJzX2NvbmZpZyBpbml0PSJBcHBsaWNhdGlvbiIKCXZlcnNpb249IjEuMCI+Cgk8IS0tIFRPRE86IFRyYW5zZm9ybWFyIGVtIG3Ds2R1bG8gZGUgdXN1w6FyaW8gdGFtYsOpbSAtLT4KCTxDb25maWdJdGVtIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI05ld1RpY2tldFdpemFyZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZE1vZHVsZVJlZ2lzdHJhdGlvbiBmb3IgTmV3VGlja2V0V2l6YXJkIG1vZHVsZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxEZXNjcmlwdGlvbj5Nb2R1bGUgZm9yIGNyZWF0aW5nIGN1c3RvbSBuZXcgdGlja2V0IGludGVyZmFjZXM8L0Rlc2NyaXB0aW9uPgoJCQkJPE5hdkJhck5hbWU+TmV3VGlja2V0V2l6YXJkPC9OYXZCYXJOYW1lPgoJCQkJPE5hdkJhcj4KCQkJCQk8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0IHdpemFyZDwvRGVzY3JpcHRpb24+CgkJCQkJPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgdGlja2V0PC9OYW1lPgoJCQkJCTxMaW5rPkFjdGlvbj1OZXdUaWNrZXRXaXphcmQ8L0xpbms+CgkJCQkJPE5hdkJhcj5OZXdUaWNrZXRXaXphcmQ8L05hdkJhcj4KCQkJCQk8VHlwZT5NZW51PC9UeXBlPgoJCQkJCTxQcmlvPjg0MDA8L1ByaW8+CgkJCQk8L05hdkJhcj4KCQkJCTwhLS0gQ2FycmVnYSBvIGFscGFjYSAtLT4KCQkJCTxMb2FkZXI+CgkJCQkJPEphdmFTY3JpcHQ+TmV3VGlja2V0V2l6YXJkLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvYWxwYWNhL2FscGFjYS1mdWxsLm1pbi5qczwvSmF2YVNjcmlwdD4KCQkJCQk8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS11aS0xLjEwLjMvanF1ZXJ5LXVpLmpzPC9KYXZhU2NyaXB0PgoJCQkJCTxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXZhbGlkYXRlLTEuMTEuMS9qcXVlcnkudmFsaWRhdGUuanM8L0phdmFTY3JpcHQ+CgkJCQkJPENTUz5hbHBhY2EvYWxwYWNhLW5ld3RpY2tldHdpemFyZC5jc3M8L0NTUz4KCQkJCQk8Q1NTPmFscGFjYS9hbHBhY2EtanF1ZXJ5dWktbmV3dGlja2V0d2l6YXJkLmNzczwvQ1NTPgoJCQkJPC9Mb2FkZXI+CgkJCTwvRnJvbnRlbmRNb2R1bGVSZWc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxGcm9udGVuZE1vZHVsZVJlZz4KCQkJCTxHcm91cD5hZG1pbjwvR3JvdXA+CgkJCQk8RGVzY3JpcHRpb24+QWRtaW48L0Rlc2NyaXB0aW9uPgoJCQkJPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBmb3JtczwvVGl0bGU+CgkJCQk8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KCQkJCTxOYXZCYXJNb2R1bGU+CgkJCQkJPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KCQkJCQk8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgZm9ybXM8L05hbWU+CgkJCQkJPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZSBmb3Jtcy48L0Rlc2NyaXB0aW9uPgoJCQkJCTxCbG9jaz5UaWNrZXQ8L0Jsb2NrPgoJCQkJCTxQcmlvPjkwMDwvUHJpbz4KCQkJCTwvTmF2QmFyTW9kdWxlPgoJCQk8L0Zyb250ZW5kTW9kdWxlUmVnPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljU2NoZW1hIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5EZXNjcmliZSB0aGUgZm9ybSBiYXNpYyBzY2hlbWEuIFNlZSBkb2N1bWVudGF0aW9uIGZvciBleGFtcGxlcy48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCURlc2NyZXZhIG8gZXNxdWVtYSBiw6FzaWNvIGRvIGZvcm11bMOhcmlvLiBWZWphIGEgZG9jdW1lbnRhw6fDo28gcGFyYSBtYWlvcmVzIGRldGFsaGVzLgoJCTwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFRleHRBcmVhIFJlZ2V4PSIiPgogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIERGX3VuaWRhZGVfdmFsdWVzCiAgICBdLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgInJlcXVpcmVkIjogInRydWUiCiAgfSwKCQkJCSAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImVudW0iOiBbCiAgICAgIE9UUlNfdHlwZV92YWx1ZXMKICAgIF0sCiAgICAicmVxdWlyZWQiOiAidHJ1ZSIKICB9CiAgQ0ZfU0NIRU1BCiAgLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAic3RyaW5nIiwKICAgICJyZXF1aXJlZCI6ICJ0cnVlIgogIH0sCgkiYXR0YWNobWVudCI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCgkiZm9ybWF0IjogInVyaSIKICB9LAkJCSAgIAogICJBY3Rpb24iOiB7CiAgICAidHlwZSI6ICJzdHJpbmciLAogICAgImRlZmF1bHQiOiAiTmV3VGlja2V0V2l6YXJkIgogIH0sCiAgIlN1YmFjdGlvbiI6IHsKICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAiZGVmYXVsdCI6ICJDcmVhdGVUaWNrZXQiCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI0Jhc2ljRm9ybSIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+RGVzY3JpYmUgdGhlIGZvcm0gYmFzaWMgZmllbGRzLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPgoJCQlEZXNjcmV2YSBvcyBjYW1wb3MgYsOhc2ljb3MgZG8gZm9ybXVsw6FyaW8uIFZlamEgYSBkb2N1bWVudGHDp8OjbyBwYXJhIG1haW9yZXMgZGV0YWxoZXMuCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8VGV4dEFyZWEgUmVnZXg9IiI+CiAgIkRGX3VuaWRhZGUiOiB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgImxhYmVsIjogIlVuaWRhZGU6IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIERGX3VuaWRhZGVfbGFiZWxzCiAgICBdCiAgfSwKICAiREZfbG9jYWwiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJMb2NhbDoiCiAgfSwKICAiREZfdGVsZWZvbmUiOiB7CiAgICAidHlwZSI6ICJ0ZXh0IiwKICAgICJsYWJlbCI6ICJUZWxlZm9uZToiLAogICAgImNvbnRyb2xfd2lkdGgiOiAxMDAKICB9LAogICJ0eXBlIjogewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJsYWJlbCI6ICJNb3Rpdm86IiwKICAgICJvcHRpb25MYWJlbHMiOiBbCiAgICAgIE9UUlNfdHlwZV9sYWJlbHMKICAgIF0KICB9LAogICJzZXJ2aWNlIjogewogICAgInR5cGUiOiAiaGlkZGVuIgogIH0KICBDRl9GT1JNLAogICJzdWJqZWN0IjogewogICAgInR5cGUiOiAidGV4dCIsCiAgICAibGFiZWwiOiAiQXNzdW50bzoiLAogICAgInNpemUiOiA4MAogIH0sCiAgImRlc2NyaXB0aW9uIjogewogICAgInR5cGUiOiAidGV4dGFyZWEiLAogICAgImxhYmVsIjogIkRlc2NyacOnw6NvOiIsCiAgICAiY29scyI6IDgwCiAgfSwKICAiYXR0YWNobWVudCI6IHsKCSJ0eXBlIjogImZpbGUiLAogICAgImxhYmVsIjogIkFuZXhvOiIsCiAgICAiaGVscGVyIjogIkFuZXhlIHVtIGFycXVpdm8gc2UgbmVjZXNzw6FyaW8uIgogIH0sCiAgIkFjdGlvbiI6IHsKICAgICJ0eXBlIjogImhpZGRlbiIKICB9LAogICJTdWJhY3Rpb24iOiB7CiAgICAidHlwZSI6ICJoaWRkZW4iCiAgfQoJCQk8L1RleHRBcmVhPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI1F1ZXVlUHJlZml4IgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5XaGVuIHRoZSBxdWV1ZSBjb21lcyBmcm9tIGEgZmllbGQgaW4gdGhlIGZvcm0sIGEgcHJlZml4IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgdmFsdWUJd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgcXVldWUuIEEgc3BhY2UgaXMgYWRkZWQgYmV0d2VlbiB0aGlzIGFuZCB0aGUgcXVldWUgbmFtZS48L0Rlc2NyaXB0aW9uPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJwdF9CUiI+CgkJCVByZWZpeG8gcGFyYSBzZXIgYW5leGFkbyBhbyB2YWxvciBkbyBjYW1wbyBxdWUgdGVtIGEgZmlsYSBwYXJhIGVudmlhciBvIGNoYW1hZG8uIFVtIGVzcGHDp28gw6kgYWRpY2lvbmFkbyBlbnRyZSBvIHByZWZpeG8gZSBvIHZhbG9yIG8gY2FtcG8uCgkJPC9EZXNjcmlwdGlvbj4KCQk8R3JvdXA+VGlja2V0PC9Hcm91cD4KCQk8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQ8L1N1Ykdyb3VwPgoJCTxTZXR0aW5nPgoJCQk8U3RyaW5nIFJlZ2V4PSIiPlByaW1laXJvIG7DrXZlbCAtPC9TdHJpbmc+CgkJPC9TZXR0aW5nPgoJPC9Db25maWdJdGVtPgoJCgk8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkIyMjUXVldWVGaWVsZCIKCQlSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgoJCTxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm0gd2hpY2ggaW5kaWNhdGVzIHRoZSBxdWV1ZSB0byBzZW5kIHRoZSBmb3JtLjwvRGVzY3JpcHRpb24+CgkJPERlc2NyaXB0aW9uIExhbmc9InB0X0JSIj5Ob21lIGRvIGNhbXBvIG5vIGZvcm11bMOhcmlvIHF1ZSBpbmRpY2EgcGFyYSBxdWFsIGZpbGEgZW52aWFyIG8gY2hhbWFkby48L0Rlc2NyaXB0aW9uPgoJCTxHcm91cD5UaWNrZXQ8L0dyb3VwPgoJCTxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZDwvU3ViR3JvdXA+CgkJPFNldHRpbmc+CgkJCTxTdHJpbmcgUmVnZXg9IiI+REZfdW5pZGFkZTwvU3RyaW5nPgoJCTwvU2V0dGluZz4KCTwvQ29uZmlnSXRlbT4KCQoJPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCMjI01lc3NhZ2VDaG9vc2VTZXJ2aWNlIgoJCVJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CgkJPERlc2NyaXB0aW9uIExhbmc9ImVuIj5NZXNzYWdlIHRvIGxldCB0aGUgdXNlciBjaG9vc2UgYSBzZXJ2ZXIuPC9EZXNjcmlwdGlvbj4KCQk8RGVzY3JpcHRpb24gTGFuZz0icHRfQlIiPk1lbnNhZ2VtIHBhcmEgbyB1c3XDoXJpbyBzZWxlY2lvbmFyIHVtIHNlcnZpw6dvLjwvRGVzY3JpcHRpb24+CgkJPEdyb3VwPlRpY2tldDwvR3JvdXA+CgkJPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6TmV3VGlja2V0V2l6YXJkPC9TdWJHcm91cD4KCQk8U2V0dGluZz4KCQkJPFN0cmluZyBSZWdleD0iIj5Fc2NvbGhhIG8gc2VydmnDp28gcGFyYSBvIHF1YWwgZGVzZWphIHN1cG9ydGU8L1N0cmluZz4KCQk8L1NldHRpbmc+Cgk8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+</File>
  22 + <File Location="Kernel/Language/pt_BR_NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL3B0X0JSX05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIFRyYW5zbGF0aW9ucwojIAojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9OZXdUaWNrZXRXaXphcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKCSRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAnfSA9ICdTZXUgY2hhbWFkbyBmb2kgcmVnaXN0cmFkbyBjb20gc3VjZXNzbyEgTyBuw7ptZXJvIMOpOiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCB3aXphcmQnfSA9ICdBc3Npc3RlbnRlIGRlIG5vdm8gY2hhbWFkbyc7ICAgCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGlja2V0J30gPSAnTm92byBjaGFtYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybXMnfSA9ICdGb3JtdWzDoXJpb3MgZGUgc2VydmnDp29zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZm9ybSd9ID0gJ0Zvcm11bMOhcmlvcyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzZXJ2aWNlIGZvcm1zLid9ID0gJ0NyaWFyIGUgZ2VyZW5jaWFyIGZvcm11bMOhcmlvcyBkZSBzZXJ2acOnb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm0nfSA9ICdGb3JtdWzDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaG9vc2UgdGhlIHNlcnZpY2UgdG8gYXNrIGZvciBzdXBwb3J0J30gPSAnRXNjb2xoYSBvIHNlcnZpJmNjZWRpbDtvIHBhcmEgbyBxdWFsIGRlc2VqYSBzdXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBjcmVhdGVkJ30gPSAnQ2hhbWFkbyBjcmlhZG8gY29tIHN1Y2Vzc28nOwogICAgICAgIAogICAgcmV0dXJuIDE7Cn0KMTs=</File>
  23 + <File Location="Kernel/Modules/NewTicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3JlYXRpbmcgY3VzdG9tIG5ldyB0aWNrZXQgaW50ZXJmYWNlcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZUZvcm07CnVzZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdGF0ZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzOwp1c2UgS2VybmVsOjpTeXN0ZW06OlF1ZXVlOwp1c2UgS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IFF1ZXVlT2JqZWN0IENvbmZpZ09iamVjdCkKCSAgKQoJewoJCWlmICggISRTZWxmLT57JF99ICkgewoJCQkkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CgkJfQoJfQoKCSMgbmVlZGVkIG9iamVjdHMKCSRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXItPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTdGF0ZU9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U3lzdGVtQWRkcmVzc30gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VXBsb2FkQ2FjaGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntCYWNrZW5kT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1RpY2tldFdpemFyZH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VPYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlRGF0YSA9ICgpOwoKCSMgQnVpbGQgc2VydmljZSBjaG9vc2VyCglteSAlU2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCggVXNlcklEID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksICk7CglteSBAU2VydmljZXNDb21ibyA9ICgpOwoKCWZvciBteSAkc2VydmljZUlEICgga2V5cyAlU2VydmljZXMgKSB7CgkJaWYgKCBncmVwIHsgaW5kZXgoICRTZXJ2aWNlc3skX30sICRTZXJ2aWNlc3skc2VydmljZUlEfSAuICI6OiIgKSA+PSAwIH0gKCBrZXlzICVTZXJ2aWNlcyApICkgewoJCQlteSAlc2VydiA9ICgpOwoJCQkkc2VydntWYWx1ZX0gICAgPSAkU2VydmljZXN7JHNlcnZpY2VJRH07CgkJCSRzZXJ2e0tleX0gICAgICA9ICRzZXJ2aWNlSUQ7CgkJCSRzZXJ2e0Rpc2FibGVkfSA9IDE7CgkJCXB1c2ggQFNlcnZpY2VzQ29tYm8sIFwlc2VydjsKCQl9CgkJZWxzZSB7CgkJCW15ICVzZXJ2ID0gKCk7CgkJCSRzZXJ2e1ZhbHVlfSA9ICRTZXJ2aWNlc3skc2VydmljZUlEfTsKCQkJJHNlcnZ7S2V5fSAgID0gJHNlcnZpY2VJRDsKCQkJcHVzaCBAU2VydmljZXNDb21ibywgXCVzZXJ2OwoJCX0KCX0KCglAU2VydmljZXNDb21ibyA9IHNvcnQgeyAkYS0+e1ZhbHVlfSAuICI6OiIgY21wICRiLT57VmFsdWV9IC4gIjo6IiB9IEBTZXJ2aWNlc0NvbWJvOwoKCSREYXRhe1NlcnZpY2VTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCgkJRGF0YSAgICAgICAgID0+IFxAU2VydmljZXNDb21ibywKCQlOYW1lICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCgkJU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAoJCUNsYXNzICAgICAgICA9PiAiVmFsaWRhdGVfUmVxdWlyZWQgIiAuICggJFBhcmFte0Vycm9yc30tPntTZXJ2aWNlSURJbnZhbGlkfSB8fCAnJyApLAoJCVBvc3NpYmxlTm9uZSA9PiAxLAoJCVRyZWVWaWV3ICAgICA9PiAxLAoJCVNvcnQgICAgICAgICA9PiAnVHJlZVZpZXcnLAoJCVRyYW5zbGF0aW9uICA9PiAwLAoJCU1heCAgICAgICAgICA9PiAyMDAKCSk7CgkkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpOwoJbXkgJG1zZ0Nob29zZVNlcnZpY2UgPSAkU2VsZi0+e0NvbmZpZ30tPnsiTWVzc2FnZUNob29zZVNlcnZpY2UifTsKCSREYXRhe01zZ0Nob29zZVNlcnZpY2V9ID0gJG1zZ0Nob29zZVNlcnZpY2U7CgoJaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgKSB7CgkJaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdWJhY3Rpb24iICkgZXEgIkNyZWF0ZVRpY2tldCIgKSB7CgkJCXJldHVybiAkU2VsZi0+Q3JlYXRlVGlja2V0KCk7CgkJfQoJCWVsc2lmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3ViYWN0aW9uIiApIGVxICJHZXRGb3JtSlNPTiIgKSB7CgkJCXJldHVybiAkU2VsZi0+R2V0Rm9ybUpTT04oIFNlcnZpY2VJRCA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICkgKTsKCQl9Cgl9CgllbHNlIHsKCQlteSAoICRzY2hlbWEsICRmaWVsZHMgKSA9ICRTZWxmLT5HZXRGb3JtKCk7CgoJCSREYXRhe1NjaGVtYUZvcm19ID0gJHNjaGVtYTsKCQkkRGF0YXtGaWVsZHNGb3JtfSA9ICRmaWVsZHM7CgoJCSMgYnVpbGQgb3V0cHV0CgkJbXkgJE91dHB1dCA9CgkJICAkU2VsZi0+e0xheW91dE9iamVjdH0KCQkgIC0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCJOZXcgdGlja2V0IHdpemFyZCIpICk7CgoJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQlEYXRhICAgICAgICAgPT4gXCVEYXRhLAoJCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZCcsCgkJKTsKCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKCQlyZXR1cm4gJE91dHB1dDsKCX0KfQoKc3ViIEdldEZvcm1KU09OIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAlc2VydmljZUZvcm07CgoJaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKCQklc2VydmljZUZvcm0gPSAkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fS0+R2V0U2VydmljZUZvcm0oIFNlcnZpY2VJRCA9PiAkUGFyYW17U2VydmljZUlEfSApOwoJfQoKCW15ICggJHNjaGVtYSwgJGZpZWxkcywgJGludHJvZHVjdGlvbiApID0gJFNlbGYtPkdldEZvcm0oIFNlcnZpY2VGb3JtID0+IFwlc2VydmljZUZvcm0gKTsKCglyZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAoJCUNvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntDaGFyc2V0fSwKCQlDb250ZW50ICAgICA9PiAiW3siIC4gJHNjaGVtYSAuICJ9LCB7IiAuICRmaWVsZHMgLiAifSwgXCIiIC4gJGludHJvZHVjdGlvbiAuICJcIl0iLAoJCVR5cGUgICAgICAgID0+ICdpbmxpbmUnLAoJCU5vQ2FjaGUgICAgID0+IDEsCgkpOwp9CgpzdWIgR2V0Rm9ybSB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCW15ICRzY2hlbWEgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPkdldEJhc2ljRmllbGRzU2NoZW1hKCk7CglteSAkZmllbGRzID0gJFNlbGYtPntUaWNrZXRXaXphcmR9LT5HZXRCYXNpY0ZpZWxkc09wdGlvbnMoKTsKCW15ICRpbnRyb2R1Y3Rpb247CgoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTVmFsdWVzKAoJCVNjaGVtYSAgPT4gJHNjaGVtYSwKCQlPcHRpb25zID0+ICRmaWVsZHMsCgkJVXNlcklEICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpCgkpOwoJKCAkc2NoZW1hLCAkZmllbGRzICkgPSAkU2VsZi0+e1RpY2tldFdpemFyZH0tPlJlcGxhY2VPVFJTRHluYW1pY0ZpZWxkcyggU2NoZW1hID0+ICRzY2hlbWEsIE9wdGlvbnMgPT4gJGZpZWxkcyApOwoKCWlmICggISRQYXJhbXtTZXJ2aWNlRm9ybX0gKSB7CgkJJHNjaGVtYSA9fiBzL0NGX1NDSEVNQS8vZzsKCQkkZmllbGRzID1+IHMvQ0ZfRk9STS8vZzsKCQkkaW50cm9kdWN0aW9uID0gIiI7Cgl9CgllbHNlIHsKCQlteSAlc2VydmljZUZvcm0gPSAleyAkUGFyYW17U2VydmljZUZvcm19IH07CgkJJGludHJvZHVjdGlvbiA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoKCQlpZiAoICEkUGFyYW17U2VydmljZUZvcm19e1NjaGVtYX0gKSB7CgkJCSRzY2hlbWEgPX4gcy9DRl9TQ0hFTUEvL2c7CgkJCSRmaWVsZHMgPX4gcy9DRl9GT1JNLy9nOwoJCX0KCQllbHNlIHsKCQkJbXkgJHNjaGVtYUZvcm0gPSAiLCIgLiAkc2VydmljZUZvcm17U2NoZW1hfTsKCQkJbXkgJGZpZWxkc0Zvcm0gPSAiLCIgLiAkc2VydmljZUZvcm17Rm9ybX07CgkJCSRzY2hlbWEgPX4gcy9DRl9TQ0hFTUEvJHNjaGVtYUZvcm0vZzsKCQkJJGZpZWxkcyA9fiBzL0NGX0ZPUk0vJGZpZWxkc0Zvcm0vZzsKCQl9Cgl9CgoJcmV0dXJuICggJHNjaGVtYSwgJGZpZWxkcywgJGludHJvZHVjdGlvbiApOwp9CgpzdWIgR2V0UXVldWVJRCgpIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgoJIyBHZXRzIGRlZmF1bHQgUXVldWUKCW15ICRDb25maWdUaWNrZXQgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIik7CglteSAkQ29uZmlnVGlja2V0V2l6YXJkID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKTsKCglteSAkUXVldWVEZWZhdWx0ID0gJENvbmZpZ1RpY2tldC0+eyJRdWV1ZURlZmF1bHQifTsKCW15ICRRdWV1ZUlEICAgICAgPSAkU2VsZi0+e1F1ZXVlT2JqZWN0fS0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZURlZmF1bHQgKTsKCW15ICRRdWV1ZSAgICAgICAgPSAkUXVldWVEZWZhdWx0OwoKCSMgQ2hlY2tzIGlmIHRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBxdWV1ZQoJcHJpbnQgU1RERVJSIER1bXBlcigkQ29uZmlnVGlja2V0V2l6YXJkKTsKCglteSAkUXVldWVQcmVmaXggPSAkQ29uZmlnVGlja2V0V2l6YXJkLT57IlF1ZXVlUHJlZml4In07CglteSAkUXVldWVGaWVsZCAgPSAkQ29uZmlnVGlja2V0V2l6YXJkLT57IlF1ZXVlRmllbGQifTsKCSRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIlNlYXJjaGluZyBxdWV1ZSBmb3IgLSAkUXVldWVQcmVmaXggKCRRdWV1ZUZpZWxkKSEiICk7CgoJaWYgKCAkUXVldWVQcmVmaXggJiYgJFF1ZXVlRmllbGQgKSB7CgoJCW15ICRRdWV1ZVNlbGVjdGVkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUXVldWVGaWVsZCApOwoJCW15ICRRdWV1ZU5hbWUgPSAiJFF1ZXVlUHJlZml4ICRRdWV1ZVNlbGVjdGVkIjsKCQkkU2VsZi0+e0xvZ09iamVjdH0KCQkgIC0+TG9nKCBQcmlvcml0eSA9PiAnaW5mbycsIE1lc3NhZ2UgPT4gIlNlYXJjaGluZyBxdWV1ZSBmb3IgLSAkUXVldWVQcmVmaXggKCRRdWV1ZUZpZWxkKSAtIFskUXVldWVOYW1lXSEiICk7CgoJCW15ICVRdWV1ZUxpc3QgPSByZXZlcnNlICRTZWxmLT57UXVldWVPYmplY3R9LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKCgkJaWYgKCAkUXVldWVMaXN0eyRRdWV1ZU5hbWV9ICkgewoJCQkkUXVldWVJRCA9ICRRdWV1ZUxpc3R7JFF1ZXVlTmFtZX07CgkJCSRRdWV1ZSAgID0gJFF1ZXVlTmFtZTsKCQkJJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdpbmZvJywgTWVzc2FnZSA9PiAiQ3VzdG9tIHF1ZXVlIGZvdW5kIC0gJFF1ZXVlTmFtZSAoJFF1ZXVlSUQpISIgKTsKCQl9CgoJfQoKCXJldHVybiAoICRRdWV1ZSwgJFF1ZXVlSUQgKTsKfQoKc3ViIENyZWF0ZVRpY2tldCB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCgkjIFF1ZXVlCglteSAoICRRdWV1ZSwgJFF1ZXVlSUQgKSA9ICRTZWxmLT5HZXRRdWV1ZUlEKCVQYXJhbSk7CgkkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIik7CgoJbXkgJFRpY2tldElEID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRDcmVhdGUoCgkJVGl0bGUgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInN1YmplY3QiICksCgkJUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAoJCVByaW9yaXR5ICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQcmlvcml0eURlZmF1bHR9LAoJCUxvY2sgICAgICAgICA9PiAndW5sb2NrJywKCQlTdGF0ZSAgICAgICAgPT4gJ25ldycsCgkJU2VydmljZUlEICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInNlcnZpY2UiICksCgkJVHlwZUlEICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gInR5cGUiICksCgkJQ3VzdG9tZXJJRCAgID0+ICRTZWxmLT57VXNlckN1c3RvbWVySUR9LAoJCUN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCgkJT3duZXJJRCAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkJVXNlcklEICAgICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkpOwoKCW15ICRNaW1lVHlwZSAgICAgID0gJ3RleHQvcGxhaW4nOwoJbXkgJHNlcnZpY2VGaWVsZHMgPSAiXG5cbiI7CgoJIyBTZXJ2aWNlIEZpZWxkcwoJZm9yICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtTmFtZXMoKSApIHsKCQlpZiAoIHN1YnN0ciggJF8sIDAsIDMgKSBlcSAiU0ZfIiApIHsKCQkJJHNlcnZpY2VGaWVsZHMgLj0gc3Vic3RyKCAkXywgMyApIC4gIiA9ICIgLiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRfICkgLiAiXG4iOwoJCX0KCX0KCgkjIER5bmFtaWMgRmllbGRzCglmb3IgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW1OYW1lcygpICkgewoJCWlmICggc3Vic3RyKCAkXywgMCwgMyApIGVxICJERl8iICkgewoJCQlteSAkU3VjY2VzcyA9ICRTZWxmLT57QmFja2VuZE9iamVjdH0tPlZhbHVlU2V0KAoJCQkJRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fS0+RHluYW1pY0ZpZWxkR2V0KCBOYW1lID0+IHN1YnN0ciggJF8sIDMgKSApLAoJCQkJT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKCQkJCVZhbHVlICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRfICksCgkJCQlVc2VySUQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKCQkJKTsKCQl9Cgl9CgoJIyBDcmVhdGUgYXJ0aWNsZQoJbXkgJEZ1bGxOYW1lICA9ICRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fS0+Q3VzdG9tZXJOYW1lKCBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LCApOwoJbXkgJEZyb20gICAgICA9ICJcIiRGdWxsTmFtZVwiIDwkU2VsZi0+e1VzZXJFbWFpbH0+IjsKCW15ICRBcnRpY2xlSUQgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkFydGljbGVDcmVhdGUoCgkJVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCgkJQXJ0aWNsZVR5cGUgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntBcnRpY2xlVHlwZX0sCgkJU2VuZGVyVHlwZSAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntTZW5kZXJUeXBlfSwKCQlGcm9tICAgICAgICAgICAgID0+ICRGcm9tLAoJCVRvICAgICAgICAgICAgICAgPT4gJFF1ZXVlLAoJCVN1YmplY3QgICAgICAgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAic3ViamVjdCIgKSwKCQlCb2R5ICAgICAgICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gImRlc2NyaXB0aW9uIiApIC4gJHNlcnZpY2VGaWVsZHMsCgkJTWltZVR5cGUgICAgICAgICA9PiAkTWltZVR5cGUsCgkJQ2hhcnNldCAgICAgICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyQ2hhcnNldH0sCgkJVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAoJCUhpc3RvcnlUeXBlICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57SGlzdG9yeVR5cGV9LAoJCUhpc3RvcnlDb21tZW50ICAgPT4gJFNlbGYtPntDb25maWd9LT57SGlzdG9yeUNvbW1lbnR9IHx8ICclJScsCgkJQXV0b1Jlc3BvbnNlVHlwZSA9PiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdBdXRvUmVzcG9uc2VGb3JXZWJUaWNrZXRzJykgKQoJCT8gJ2F1dG8gcmVwbHknCgkJOiAnJywKCQlPcmlnSGVhZGVyID0+IHsKCQkJRnJvbSAgICA9PiAkRnJvbSwKCQkJVG8gICAgICA9PiAkUXVldWUsCgkJCVN1YmplY3QgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAic3ViamVjdCIgKSwKCQkJQm9keSAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJkZXNjcmlwdGlvbiIgKSwKCQl9LAoJCVF1ZXVlID0+ICRRdWV1ZSwKCSk7CgoJIyBBdHRhY2htZW50cwoJbXkgJVVwbG9hZFN0dWZmID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFVwbG9hZEFsbCggUGFyYW0gPT4gImF0dGFjaG1lbnQiICk7CgoJIwlpZiAoJVVwbG9hZFN0dWZmKSB7CgkjCQlwcmludCBTVERFUlIgIlxuVGVtIGFuZXhvIVxuIjsKCSRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKCQklVXBsb2FkU3R1ZmYsCgkJQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCgkJVXNlcklEICAgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCgkpOwoKCSMJfQoKCSREYXRhe1RpY2tldE51bWJlcn0gPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldE51bWJlckxvb2t1cCggVGlja2V0SUQgPT4gJFRpY2tldElEICk7CgoJIyBidWlsZCBvdXRwdXQKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCBUaXRsZSA9PiAiVGlja2V0IGNyZWF0ZWQiICk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCURhdGEgICAgICAgICA9PiBcJURhdGEsCgkJVGVtcGxhdGVGaWxlID0+ICdOZXdUaWNrZXRXaXphcmRUaWNrZXRDcmVhdGVkJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKCXJldHVybiAkT3V0cHV0OwoKfQoKMTsK</File>
  24 + <File Location="Kernel/Modules/NewTicketWizardServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9Nb2R1bGVzL05ld1RpY2tldFdpemFyZC5wbSAtIGZyb250ZW5kIG1vZHVsZSBmb3IgY3VzdG9taXppbmcgc2VydmljZSBmb3JtcwojIENvcHlyaWdodCAoQykgMjAxNCAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6Ok5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2VGb3JtOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgojIFRPRE86IFRyYWR1Y29lcwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyBuZWVkZWQgb2JqZWN0cwoJJFNlbGYtPntTeXN0ZW1BZGRyZXNzfSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcy0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e0JhY2tlbmRPYmplY3R9ICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CgkkU2VsZi0+e1NlcnZpY2VGb3JtT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybS0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJURhdGEgPSAoKTsKCglpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1YmFjdGlvbiIgKSApIHsKCQlpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZUVkaXQnICkgewoKCQkJIyBoZWFkZXIKCQkJbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CgkJCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgoJCQlteSAlc2VydmljZUZvcm0gPQoJCQkgICRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9CgkJCSAgLT5HZXRTZXJ2aWNlRm9ybSggU2VydmljZUlEID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKSApOwoKCQkJJERhdGF7SW50cm9kdWN0aW9ufSA9ICRzZXJ2aWNlRm9ybXtJbnRyb2R1Y3Rpb259OwoJCQkkRGF0YXtGb3JtfSAgICAgICAgID0gJHNlcnZpY2VGb3Jte0Zvcm19OwoJCQkkRGF0YXtTY2hlbWF9ICAgICAgID0gJHNlcnZpY2VGb3Jte1NjaGVtYX07CgkJCSREYXRhe1NlcnZpY2VJRH0gICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CgoJCQkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAoJCQkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQkJCVRlbXBsYXRlRmlsZSA9PiAnTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm1FZGl0JywKCQkJKTsKCgkJCSMgaHRtbCBvdXRwdXQKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKCQkJcmV0dXJuICRPdXRwdXQ7CgkJfQoJCWVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgoJCQkjIGhlYWRlcgoJCQlteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKCQkJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCgkJCSRTZWxmLT57U2VydmljZUZvcm1PYmplY3R9LT5TYXZlU2VydmljZUZvcm0oCgkJCQlTZXJ2aWNlSUQgICAgPT4gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApLAoJCQkJSW50cm9kdWN0aW9uID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkludHJvZHVjdGlvbiIgKSwKCQkJCUZvcm0gICAgICAgICA9PiAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJGb3JtIiApLAoJCQkJU2NoZW1hICAgICAgID0+ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNjaGVtYSIgKSwKCQkJKTsKCgkJCXJldHVybiAkU2VsZi0+T3ZlcnZpZXcoKTsKCQl9Cgl9CgllbHNlIHsKCQlyZXR1cm4gJFNlbGYtPk92ZXJ2aWV3KCk7Cgl9Cn0KCnN1YiBPdmVydmlldyB7CgoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCglteSAlRGF0YSA9ICgpOwoKCSMgYnVpbGQgb3V0cHV0CgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3JywKCQlEYXRhID0+IHsgJVBhcmFtLCB9LAoJKTsKCgkkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAoJCU5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCgkJRGF0YSA9PiB7ICVQYXJhbSwgfSwKCSk7CgoJIyBnZXQgc2VydmljZSBsaXN0CglteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKCQlWYWxpZCAgPT4gMSwKCQlVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAoJKTsKCgkjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KCWlmICggQHskU2VydmljZUxpc3R9ICkgewoKCQkjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQoJCUB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgoJCWZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgkJCWlmICghIGdyZXAgeyBpbmRleCgkXy0+e05hbWV9LCAkU2VydmljZURhdGEtPntOYW1lfSAuICI6OiIpID49IDB9IEB7JFNlcnZpY2VMaXN0fSApIHsKCgkJCQkjIG91dHB1dCByb3cKCQkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCgkJCQkJTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKCQkJCQlEYXRhID0+IHsgJXskU2VydmljZURhdGF9IH0sCgkJCQkpOwoJCQl9CgkJfQoJfQoKCW15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoIlNlcnZpY2UgRm9ybSIpICk7CgoJJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCSRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCgkJRGF0YSAgICAgICAgID0+IFwlRGF0YSwKCQlUZW1wbGF0ZUZpbGUgPT4gJ05ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtJywKCSk7CgkkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CglyZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
  25 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxNCkgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IHN0eWxlPSJtYXJnaW46IDVweDsgcGFkZGluZzogMTBweDsgd2lkdGg6IDgwJTsiPgokRGF0YXsiTXNnQ2hvb3NlU2VydmljZSJ9CjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHgiPgo8Zm9ybSBjbGFzcz0iRmllbGQiPgoJCTxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGQiID4KCQk8ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VydmljZSJ9OgogICAgICAgICA8L2Rpdj4KICAgICAgICAgJERhdGF7IlNlcnZpY2VTdHJnIn0gICAgICAKICAgICAgICAgPC9zcGFuPiAgICAgICAgICAgICAgCjwvZm9ybT4KPGRpdiBpZD0ic2VydmljZURlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luOiA1cHg7IHBhZGRpbmc6IDEwcHg7IHdpZHRoOiA4MCU7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IGRpc3BsYXk6IG5vbmUiPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9ImZvcm1UaWNrZXQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7ICI+PC9kaXY+CiAKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIFRvIHR1cm4gb24gZGVidWdnaW5nLCB1bmNvbW1lbnQgdGhpcyBsaW5lCgkvLyBBbHBhY2EubG9nTGV2ZWwgPSBBbHBhY2EuREVCVUc7CgkKCQoJQWxwYWNhLnJlZ2lzdGVyTWVzc2FnZXMoewoJICAgICJkaXNhbGxvd1ZhbHVlIjogInswfSBuw6NvIMOpIHVtIHZhbG9yIHbDoWxpZG8uIiwKICAgIAkibm90T3B0aW9uYWwiOiAiRXN0ZSBjYW1wbyDDqSBvYnJpZ2F0w7NyaW8uIiwKICAgIAkiaW52YWxpZFZhbHVlT2ZFbnVtIjogIiIKCX0pOwoJCQoJJCgiI1NlcnZpY2VJRCIpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgCQljYXJyZWdhRm9ybShudWxsLCAiJFRleHR7IlNlbmQifSIsICIkRW52eyJDR0lIYW5kbGUifSIpOwogIAl9KTsgICAgCQo8L3NjcmlwdD4gICAgCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=</File>
  26 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPiRUZXh0eyJTZXJ2aWNlIGZvcm1zIn08L2gxPgoKCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2VydmljZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmRNc2cgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7Ik5hbWUifSI+JFFEYXRheyJMZXZlbFNwYWNlIn08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRMUURhdGF7IlNlcnZpY2VJRCJ9Ij4kUURhdGF7Ik5hbWUiLCAiODAifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPg==</File>
  27 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl" Permission="644" Encode="Base64">IyAtLQojIE5ld1RpY2tldFdpemFyZFNlcnZpY2VGb3JtLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgTmV3VGlja2V0V2l6YXJkU2VydmljZUZvcm0KIyBDb3B5cmlnaHQgKEMpIDIwMTQgVUZTQwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKCjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXQgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgU2VydmljZSJ9IDogJFFEYXRheyJOYW1lIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSIkUURhdGF7IlNlcnZpY2VJRCJ9Ii8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkludHJvZHVjdGlvbiI+JFRleHR7IkludHJvZHVjdGlvbiJ9OiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iSW50cm9kdWN0aW9uIiBpZD0iSW50cm9kdWN0aW9uIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIHJvd3M9IjUiPiRRRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRm9ybSI+JFRleHR7IkZvcm0ifTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkZvcm0iIGlkPSJGb3JtIiBjbGFzcz0iVzUwcGMgIiByb3dzPSIyMCI+JFFEYXRheyJGb3JtIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2NoZW1hIj4kVGV4dHsiU2NoZW1hIn06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJTY2hlbWEiIGlkPSJTY2hlbWEiIGNsYXNzPSJXNTBwYyAiIHJvd3M9IjIwIj4kUURhdGF7IlNjaGVtYSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9Ij4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
  28 + <File Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9OZXdUaWNrZXRXaXphcmQuZHRsIC0gdGVtcGxhdGUgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCiMgQ29weXJpZ2h0IChDKSAoMjAxMykgKFJvZHJpZ28gR29uY2FsdmVzKSAocm9kcmlnby5nQHVmc2MuYnIpCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjxkaXYgc3R5bGU9Im1hcmdpbjogNXB4OyBwYWRkaW5nOiAxMHB4OyB3aWR0aDogODAlOyI+CiA8aDE+JFRleHR7IllvdXIgdGlja2V0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtYmVyOiAifSREYXRheyJUaWNrZXROdW1iZXIifTwvaDE+CiA8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPg==</File>
  29 + <File Location="Kernel/System/ServiceForm.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZUZvcm0ucG0gLSBjb3JlIG1vZHVsZQojIENvcHlyaWdodCAoQykgKDIwMTMpIChSb2RyaWdvIEdvbmNhbHZlcykgKHJvZHJpZ28uZ0B1ZnNjLmJyKQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlRm9ybTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUeXBlOwp1c2UgS2VybmVsOjpTeXN0ZW06OllBTUw7CnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwoKc3ViIG5ldyB7CglteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKCSMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAoJbXkgJFNlbGYgPSB7JVBhcmFtfTsKCWJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCgkjIGNoZWNrIG5lZWRlZCBvYmplY3RzCglmb3IgKAoJCXF3KERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgUXVldWVPYmplY3QgQ29uZmlnT2JqZWN0KQoJICApCgl7CgkJaWYgKCAhJFNlbGYtPnskX30gKSB7CgkJCSRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRfISIgKTsKCQl9Cgl9CgoJIyByZXF1aXJlZCBvYmplY3RzCgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBhIHNlcnZpY2UgZm9ybQoKPWN1dAoKc3ViIEdldFNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKCSMgZ2V0IHNlcnZpY2UgZm9ybSBmcm9tIGRiCgkkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKCQlTUUwgICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQsIGludHJvZHVjdGlvbiwgZm9ybSwgZm9ybV9zY2hlbWEgRlJPTSBzZXJ2aWNlX2Zvcm0gV0hFUkUgc2VydmljZV9pZCA9ID8nLAoJCUJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCgkJTGltaXQgPT4gMSwKCSk7CgoJIyBmZXRjaCB0aGUgcmVzdWx0CglteSAlU2VydmljZURhdGE7Cgl3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoJCSRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICAgID0gJFJvd1swXTsKCQkkU2VydmljZURhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbMV07CgkJJFNlcnZpY2VEYXRhe0Zvcm19ICAgICAgICAgPSAkUm93WzJdOwoJCSRTZXJ2aWNlRGF0YXtTY2hlbWF9ICAgICAgICAgPSAkUm93WzNdOwoJfQoKCXJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkCgpTYXZlcyBhIHNlcnZpY2UgZm9ybS4gCgo9Y3V0CgpzdWIgU2F2ZVNlcnZpY2VGb3JtIHsKCglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEludHJvZHVjdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgkKCW15ICVzZXJ2aWNlRm9ybSA9ICRTZWxmLT5HZXRTZXJ2aWNlRm9ybShTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0pOwoJbXkgJHVwZGF0ZSA9ICgkc2VydmljZUZvcm17U2VydmljZUlEfSk7CgkKCWlmICgkdXBkYXRlKSB7CQkKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdVUERBVEUgc2VydmljZV9mb3JtIFNFVCBpbnRyb2R1Y3Rpb249Pyxmb3JtPT8sZm9ybV9zY2hlbWE9PyB3aGVyZSBzZXJ2aWNlX2lkPT8nLCAgICAgICAgCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17SW50cm9kdWN0aW9ufSwgXCRQYXJhbXtGb3JtfSwgXCRQYXJhbXtTY2hlbWF9LCBcJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICBdKTsJCQoJfSBlbHNlIHsKCQkkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2Zvcm0oc2VydmljZV9pZCxpbnRyb2R1Y3Rpb24sZm9ybSxmb3JtX3NjaGVtYSkgVkFMVUVTICg/LD8sPyw/KScsICAgICAgICAKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ludHJvZHVjdGlvbn0sIFwkUGFyYW17Rm9ybX0sIFwkUGFyYW17U2NoZW1hfQogICAgICAgIF0pOwoJfQkKCiAgICByZXR1cm4gMTsKCn0KCjE7Cg==</File>
  30 + <File Location="Kernel/System/TicketWizard.pm" Permission="644" Encode="Base64">IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0V2l6YXJkLnBtIC0gY29yZSBtb2R1bGUKIyBDb3B5cmlnaHQgKEMpICgyMDEzKSAoUm9kcmlnbyBHb25jYWx2ZXMpIChyb2RyaWdvLmdAdWZzYy5icikKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0V2l6YXJkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlR5cGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6WUFNTDsKdXNlIERhdGE6OkR1bXBlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ7CgpzdWIgbmV3IHsKCW15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgoJIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CglteSAkU2VsZiA9IHslUGFyYW19OwoJYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKCSMgY2hlY2sgbmVlZGVkIG9iamVjdHMKCWZvciAoCgkJcXcoREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBRdWV1ZU9iamVjdCBDb25maWdPYmplY3QpCgkgICkKCXsKCQlpZiAoICEkU2VsZi0+eyRffSApIHsKCQkJJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIiApOwoJCX0KCX0KCgkjIHJlcXVpcmVkIG9iamVjdHMKCSRTZWxmLT57WUFNTE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpZQU1MLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57U2VydmljZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VHlwZU9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUeXBlLT5uZXcoJVBhcmFtKTsKCSRTZWxmLT57VGlja2V0T2JqZWN0fSAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglUGFyYW0pOwoJJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CgoJcmV0dXJuICRTZWxmOwp9Cgo9aGVhZAoKUmV0dXJucyBmaWVsZHMgc3RydWN0dXJlIGZvciBuZXcgdGlja2V0IGZvcm0gd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNPcHRpb25zIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglyZXR1cm4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyOjpOZXdUaWNrZXRXaXphcmQiKS0+e0Jhc2ljRm9ybX07Cn0KCj1oZWFkCgpSZXR1cm5zIGZpZWxkcyBzY2hlbWEgZm9yIG5ldyB0aWNrZXQgd2l6YXJkCgo9Y3V0CgpzdWIgR2V0QmFzaWNGaWVsZHNTY2hlbWEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCXJldHVybiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXI6Ok5ld1RpY2tldFdpemFyZCIpLT57QmFzaWNTY2hlbWF9Owp9Cgo9aGVhZAoKUmVwbGFjZXMgT1RSUyBzeXN0ZW0gZmllbGQgdmFsdWVzIChzZXJ2aWNlIGFuZCB0eXBlKQoKPWN1dAoKc3ViIFJlcGxhY2VPVFJTVmFsdWVzIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2NoZW1hICA9ICRQYXJhbXtTY2hlbWF9OwoJbXkgJG9wdGlvbnMgPSAkUGFyYW17T3B0aW9uc307CgoJbXkgKCAkc2VydmljZU5hbWVzLCAkc2VydmljZUlEcyApID0gJFNlbGYtPkdldE9UUlNTZXJ2aWNlc0RhdGEoKTsKCSRzY2hlbWEgID1+IHMvT1RSU19zZXJ2aWNlX3ZhbHVlcy8kc2VydmljZUlEcy9nOwoJJG9wdGlvbnMgPX4gcy9PVFJTX3NlcnZpY2VfbGFiZWxzLyRzZXJ2aWNlTmFtZXMvZzsKCglteSAoICR0eXBlTmFtZXMsICR0eXBlSURzICkgPSAkU2VsZi0+R2V0T1RSU1R5cGVzRGF0YShVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0pOwoJJHNjaGVtYSAgPX4gcy9PVFJTX3R5cGVfdmFsdWVzLyR0eXBlSURzL2c7Cgkkb3B0aW9ucyA9fiBzL09UUlNfdHlwZV9sYWJlbHMvJHR5cGVOYW1lcy9nOwoKCXJldHVybiAoICRzY2hlbWEsICRvcHRpb25zICk7Cn0KCnN1YiBHZXRPVFJTU2VydmljZXNEYXRhIHsKCW15ICggJFNlbGYsICVQYXJhbSApID0gQF87CglteSAkc2VydmljZXMgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9OwoKCW15ICVzZXJ2aWNlTGlzdCA9ICRzZXJ2aWNlcy0+U2VydmljZUxpc3QoIFZhbGlkID0+IDEsIFVzZXJJRCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpICk7CglteSAkc2VydmljZU5hbWVzID0gIiI7CglteSAkc2VydmljZUlEcyAgID0gIiI7CgoJIyMjcHJpbnQgU1RERVJSICJcblxuXG4gU2Vydmljb3M6ICIgLiBEdW1wZXIoXCVzZXJ2aWNlTGlzdCkgLiAiXG5cblxuIjsKCglmb3JlYWNoICggc29ydCB7ICggJHNlcnZpY2VMaXN0eyRhfSBjbXAgJHNlcnZpY2VMaXN0eyRifSApIH0ga2V5cyAlc2VydmljZUxpc3QgKSB7CgkJJHNlcnZpY2VOYW1lcyAuPSAiXCIkc2VydmljZUxpc3R7JF99XCIsIjsKCQkkc2VydmljZUlEcyAgIC49ICIkXywiOwoJfQoJJHNlcnZpY2VOYW1lcyA9IHN1YnN0cigkc2VydmljZU5hbWVzLCAwLCAtMSk7Cgkkc2VydmljZUlEcyA9IHN1YnN0cigkc2VydmljZUlEcywgMCwgLTEpOwoJcmV0dXJuICggJHNlcnZpY2VOYW1lcywgJHNlcnZpY2VJRHMgKTsKfQoKc3ViIEdldE9UUlNUeXBlc0RhdGEgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICR0aWNrZXRPYmplY3QgPSAkU2VsZi0+e1RpY2tldE9iamVjdH07CgoJbXkgJXR5cGVMaXN0ICA9ICR0aWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCW15ICR0eXBlTmFtZXMgPSAiIjsKCW15ICR0eXBlSURzICAgPSAiIjsKCglmb3JlYWNoICggc29ydCB7ICggJHR5cGVMaXN0eyRhfSBjbXAgJHR5cGVMaXN0eyRifSApIH0ga2V5cyAldHlwZUxpc3QgKSB7CgkJJHR5cGVOYW1lcyAuPSAiXCIkdHlwZUxpc3R7JF99XCIsIjsKCQkkdHlwZUlEcyAgIC49ICIkXywiOwoJfQoJCgkkdHlwZU5hbWVzID0gc3Vic3RyKCR0eXBlTmFtZXMsIDAsIC0xKTsKCSR0eXBlSURzID0gc3Vic3RyKCR0eXBlSURzLCAwLCAtMSk7CgkKCXJldHVybiAoICR0eXBlTmFtZXMsICR0eXBlSURzICk7Cn0KCnN1YiBSZXBsYWNlT1RSU0R5bmFtaWNGaWVsZHMgewoJbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCW15ICRzY2hlbWEgID0gJFBhcmFte1NjaGVtYX07CglteSAkb3B0aW9ucyA9ICRQYXJhbXtPcHRpb25zfTsKCglteSAkZGZpZWxkcyAgICA9ICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fTsKCW15IEBkZmllbGRMaXN0ID0gQHsgJGRmaWVsZHMtPkR5bmFtaWNGaWVsZExpc3RHZXQoIFZhbGlkID0+IDEgKSB9OwoKCWZvcmVhY2ggKEBkZmllbGRMaXN0KSB7CgkJbXkgJGNhbXBvID0gJF87CgoJCSNEZWJ1ZygiY2FtcG8iLCAkY2FtcG8pOwoJCW15ICRuYW1lICAgICAgICAgID0gJGNhbXBvLT57TmFtZX07CgkJbXkgJGNvbmZpZyAgICAgICAgPSAkY2FtcG8tPntDb25maWd9OwoJCW15ICR0eXBlICAgICAgICAgID0gJGNhbXBvLT57RmllbGRUeXBlfTsKCQlteSAkaWRGaWVsZFZhbHVlcyA9ICJERl8iIC4gJG5hbWUgLiAiX3ZhbHVlcyI7CgkJbXkgJGlkRmllbGRMYWJlbHMgPSAiREZfIiAuICRuYW1lIC4gIl9sYWJlbHMiOwoJCWlmICggJHR5cGUgZXEgIkRyb3Bkb3duIiApIHsKCQkJbXkgKCAkZGZWYWx1ZXMsICRkZkxhYmVscyApID0gJFNlbGYtPkdldER5bmFtaWNGaWVsZFZhbHVlcyggQ29uZmlnREYgPT4gJGNvbmZpZyApOwoJCQkkc2NoZW1hICA9fiBzLyRpZEZpZWxkVmFsdWVzLyRkZlZhbHVlcy9nOwoJCQkkb3B0aW9ucyA9fiBzLyRpZEZpZWxkTGFiZWxzLyRkZkxhYmVscy9nOwoJCX0KCX0KCgkjRGVidWcoInNjaGVtYSIsICRzY2hlbWEpOwoJI0RlYnVnKCJvcHRpb25zIiwgJG9wdGlvbnMpOwoJcmV0dXJuICggJHNjaGVtYSwgJG9wdGlvbnMgKTsKfQoKc3ViIERlYnVnIHsKCW15ICggJGlkLCAkdmFsdWUgKSA9IEBfOwoJIyMjcHJpbnQgU1RERVJSICJcblxuICRpZCA9IiAuIER1bXBlcigkdmFsdWUpIC4gIlxuIjsKfQoKc3ViIEdldER5bmFtaWNGaWVsZFZhbHVlcyB7CglteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoJbXkgJGNvbmZpZyA9ICRQYXJhbXtDb25maWdERn07CglteSAkdmFsdWVzID0gJGNvbmZpZy0+e1Bvc3NpYmxlVmFsdWVzfTsKCglteSAkZGZWYWx1ZXMgPSAiIjsKCW15ICRkZkxhYmVscyA9ICIiOwoKCWZvcmVhY2ggKCBzb3J0IHsgKCAkdmFsdWVzLT57JGF9IGNtcCAkdmFsdWVzLT57JGJ9ICkgfSBrZXlzICV7JHZhbHVlc30gKSB7CgkJJGRmVmFsdWVzIC49ICJcIiRfXCIsIjsKCQkkZGZMYWJlbHMgLj0gIlwiJHZhbHVlcy0+eyRffVwiLCI7Cgl9CgoJJGRmVmFsdWVzID0gc3Vic3RyKCRkZlZhbHVlcywgMCwgLTEpOwoJJGRmTGFiZWxzID0gc3Vic3RyKCRkZkxhYmVscywgMCwgLTEpOwoJRGVidWcoICJkZnZhbHVlcyIsICRkZlZhbHVlcyApOwoJcmV0dXJuICggJGRmVmFsdWVzLCAkZGZMYWJlbHMgKTsKCn0KCjE7Cg==</File>
  31 + <File Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwooZnVuY3Rpb24oYSxjLGIpe2NbYV09YigpfSkoIkJhc2UiLHRoaXMsZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe307YS5leHRlbmQ9ZnVuY3Rpb24oYyxmKXt2YXIgZz1hLnByb3RvdHlwZS5leHRlbmQ7YS5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgZT1uZXcgdGhpcygpO2cuY2FsbChlLGMpO2UuYmFzZT1mdW5jdGlvbigpe307ZGVsZXRlIGEuX3Byb3RvdHlwaW5nO3ZhciBkPWUuY29uc3RydWN0b3I7dmFyIGI9ZS5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFhLl9wcm90b3R5cGluZyl7aWYodGhpcy5fY29uc3RydWN0aW5nfHx0aGlzLmNvbnN0cnVjdG9yPT09Yil7dGhpcy5fY29uc3RydWN0aW5nPXRydWU7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuX2NvbnN0cnVjdGluZ31lbHNle2lmKGFyZ3VtZW50c1swXSE9PW51bGwpe3JldHVybihhcmd1bWVudHNbMF0uZXh0ZW5kfHxnKS5jYWxsKGFyZ3VtZW50c1swXSxlKX19fX07Yi5hbmNlc3Rvcj10aGlzO2IuZXh0ZW5kPXRoaXMuZXh0ZW5kO2IuZm9yRWFjaD10aGlzLmZvckVhY2g7Yi5pbXBsZW1lbnQ9dGhpcy5pbXBsZW1lbnQ7Yi5wcm90b3R5cGU9ZTtiLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Yi52YWx1ZU9mPWZ1bmN0aW9uKGgpe3JldHVybihoPT09Im9iamVjdCIpP2I6ZC52YWx1ZU9mKCl9O2cuY2FsbChiLGYpO2lmKHR5cGVvZiBiLmluaXQ9PT0iZnVuY3Rpb24iKXtiLmluaXQoKX1yZXR1cm4gYn07YS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihjLGwpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7dmFyIGc9dGhpc1tjXTtpZihnJiYodHlwZW9mIGw9PT0iZnVuY3Rpb24iKSYmKCFnLnZhbHVlT2Z8fGcudmFsdWVPZigpIT09bC52YWx1ZU9mKCkpJiYvXGJiYXNlXGIvLnRlc3QobCkpe3ZhciBiPWwudmFsdWVPZigpO2w9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmJhc2V8fGEucHJvdG90eXBlLmJhc2U7dGhpcy5iYXNlPWc7dmFyIGg9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5iYXNlPWk7cmV0dXJuIGh9O2wudmFsdWVPZj1mdW5jdGlvbihoKXtyZXR1cm4oaD09PSJvYmplY3QiKT9sOmJ9O2wudG9TdHJpbmc9YS50b1N0cmluZ310aGlzW2NdPWx9ZWxzZXtpZihjKXt2YXIgaz1hLnByb3RvdHlwZS5leHRlbmQ7aWYoIWEuX3Byb3RvdHlwaW5nJiZ0eXBlb2YgdGhpcyE9PSJmdW5jdGlvbiIpe2s9dGhpcy5leHRlbmR8fGt9dmFyIGY9e3RvU291cmNlOm51bGx9O3ZhciBqPVsiY29uc3RydWN0b3IiLCJ0b1N0cmluZyIsInZhbHVlT2YiXTtmb3IodmFyIGQ9YS5fcHJvdG90eXBpbmc/MDoxO2Q8ai5sZW5ndGg7ZCsrKXt2YXIgZT1qW2RdO2lmKGNbZV0hPT1mW2VdKXtrLmNhbGwodGhpcyxlLGNbZV0pfX1mb3IodmFyIG0gaW4gYyl7aWYoIWZbbV0pe2suY2FsbCh0aGlzLG0sY1ttXSl9fX19cmV0dXJuIHRoaXN9fTthPWEuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSl9fSx7YW5jZXN0b3I6T2JqZWN0LHZlcnNpb246IjEuMSIsZm9yRWFjaDpmdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBjIGluIGIpe2lmKHRoaXMucHJvdG90eXBlW2NdPT09dW5kZWZpbmVkKXtlLmNhbGwoZCxiW2NdLGMsYil9fX0saW1wbGVtZW50OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7aWYodHlwZW9mIGFyZ3VtZW50c1tiXT09PSJmdW5jdGlvbiIpe2FyZ3VtZW50c1tiXSh0aGlzLnByb3RvdHlwZSl9ZWxzZXt0aGlzLnByb3RvdHlwZS5leHRlbmQoYXJndW1lbnRzW2JdKX19cmV0dXJuIHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlT2YoKSl9fSk7cmV0dXJuIGF9KTtpZih0eXBlb2YgSlNPTiE9PSJvYmplY3QiKXtKU09OPXt9fShmdW5jdGlvbigpe2Z1bmN0aW9uIGYobil7cmV0dXJuIG48MTA/IjAiK246bn1pZih0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OIT09ImZ1bmN0aW9uIil7RGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGlzRmluaXRlKHRoaXMudmFsdWVPZigpKT90aGlzLmdldFVUQ0Z1bGxZZWFyKCkrIi0iK2YodGhpcy5nZXRVVENNb250aCgpKzEpKyItIitmKHRoaXMuZ2V0VVRDRGF0ZSgpKSsiVCIrZih0aGlzLmdldFVUQ0hvdXJzKCkpKyI6IitmKHRoaXMuZ2V0VVRDTWludXRlcygpKSsiOiIrZih0aGlzLmdldFVUQ1NlY29uZHMoKSkrIloiOm51bGx9O1N0cmluZy5wcm90b3R5cGUudG9KU09OPU51bWJlci5wcm90b3R5cGUudG9KU09OPUJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiB0aGlzLnZhbHVlT2YoKX19dmFyIGN4PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csZXNjYXBhYmxlPS9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLGdhcCxpbmRlbnQsbWV0YT17IlxiIjoiXFxiIiwiXHQiOiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJcXFxcIn0scmVwO2Z1bmN0aW9uIHF1b3RlKHN0cmluZyl7ZXNjYXBhYmxlLmxhc3RJbmRleD0wO3JldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpPyciJytzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsZnVuY3Rpb24oYSl7dmFyIGM9bWV0YVthXTtyZXR1cm4gdHlwZW9mIGM9PT0ic3RyaW5nIj9jOiJcXHUiKygiMDAwMCIrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkrJyInOiciJytzdHJpbmcrJyInfWZ1bmN0aW9uIHN0cihrZXksaG9sZGVyKXt2YXIgaSxrLHYsbGVuZ3RoLG1pbmQ9Z2FwLHBhcnRpYWwsdmFsdWU9aG9sZGVyW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3QiJiZ0eXBlb2YgdmFsdWUudG9KU09OPT09ImZ1bmN0aW9uIil7dmFsdWU9dmFsdWUudG9KU09OKGtleSl9aWYodHlwZW9mIHJlcD09PSJmdW5jdGlvbiIpe3ZhbHVlPXJlcC5jYWxsKGhvbGRlcixrZXksdmFsdWUpfXN3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gcXVvdGUodmFsdWUpO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodmFsdWUpP1N0cmluZyh2YWx1ZSk6Im51bGwiO2Nhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpyZXR1cm4gU3RyaW5nKHZhbHVlKTtjYXNlIm9iamVjdCI6aWYoIXZhbHVlKXtyZXR1cm4ibnVsbCJ9Z2FwKz1pbmRlbnQ7cGFydGlhbD1bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKT09PSJbb2JqZWN0IEFycmF5XSIpe2xlbmd0aD12YWx1ZS5sZW5ndGg7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtwYXJ0aWFsW2ldPXN0cihpLHZhbHVlKXx8Im51bGwifXY9cGFydGlhbC5sZW5ndGg9PT0wPyJbXSI6Z2FwPyJbXG4iK2dhcCtwYXJ0aWFsLmpvaW4oIixcbiIrZ2FwKSsiXG4iK21pbmQrIl0iOiJbIitwYXJ0aWFsLmpvaW4oIiwiKSsiXSI7Z2FwPW1pbmQ7cmV0dXJuIHZ9aWYocmVwJiZ0eXBlb2YgcmVwPT09Im9iamVjdCIpe2xlbmd0aD1yZXAubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7aWYodHlwZW9mIHJlcFtpXT09PSJzdHJpbmciKXtrPXJlcFtpXTt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19ZWxzZXtmb3IoayBpbiB2YWx1ZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGspKXt2PXN0cihrLHZhbHVlKTtpZih2KXtwYXJ0aWFsLnB1c2gocXVvdGUoaykrKGdhcD8iOiAiOiI6Iikrdil9fX19dj1wYXJ0aWFsLmxlbmd0aD09PTA/Int9IjpnYXA/IntcbiIrZ2FwK3BhcnRpYWwuam9pbigiLFxuIitnYXApKyJcbiIrbWluZCsifSI6InsiK3BhcnRpYWwuam9pbigiLCIpKyJ9IjtnYXA9bWluZDtyZXR1cm4gdn19aWYodHlwZW9mIEpTT04uc3RyaW5naWZ5IT09ImZ1bmN0aW9uIil7SlNPTi5zdHJpbmdpZnk9ZnVuY3Rpb24odmFsdWUscmVwbGFjZXIsc3BhY2Upe3ZhciBpO2dhcD0iIjtpbmRlbnQ9IiI7aWYodHlwZW9mIHNwYWNlPT09Im51bWJlciIpe2ZvcihpPTA7aTxzcGFjZTtpKz0xKXtpbmRlbnQrPSIgIn19ZWxzZXtpZih0eXBlb2Ygc3BhY2U9PT0ic3RyaW5nIil7aW5kZW50PXNwYWNlfX1yZXA9cmVwbGFjZXI7aWYocmVwbGFjZXImJnR5cGVvZiByZXBsYWNlciE9PSJmdW5jdGlvbiImJih0eXBlb2YgcmVwbGFjZXIhPT0ib2JqZWN0Inx8dHlwZW9mIHJlcGxhY2VyLmxlbmd0aCE9PSJudW1iZXIiKSl7dGhyb3cgbmV3IEVycm9yKCJKU09OLnN0cmluZ2lmeSIpfXJldHVybiBzdHIoIiIseyIiOnZhbHVlfSl9fWlmKHR5cGVvZiBKU09OLnBhcnNlIT09ImZ1bmN0aW9uIil7SlNPTi5wYXJzZT1mdW5jdGlvbih0ZXh0LHJldml2ZXIpe3ZhciBqO2Z1bmN0aW9uIHdhbGsoaG9sZGVyLGtleSl7dmFyIGssdix2YWx1ZT1ob2xkZXJba2V5XTtpZih2YWx1ZSYmdHlwZW9mIHZhbHVlPT09Im9iamVjdCIpe2ZvcihrIGluIHZhbHVlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsaykpe3Y9d2Fsayh2YWx1ZSxrKTtpZih2IT09dW5kZWZpbmVkKXt2YWx1ZVtrXT12fWVsc2V7ZGVsZXRlIHZhbHVlW2tdfX19fXJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLGtleSx2YWx1ZSl9dGV4dD1TdHJpbmcodGV4dCk7Y3gubGFzdEluZGV4PTA7aWYoY3gudGVzdCh0ZXh0KSl7dGV4dD10ZXh0LnJlcGxhY2UoY3gsZnVuY3Rpb24oYSl7cmV0dXJuIlxcdSIrKCIwMDAwIithLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCl9KX1pZigvXltcXSw6e31cc10qJC8udGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywiQCIpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCJdIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCIiKSkpe2o9ZXZhbCgiKCIrdGV4dCsiKSIpO3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fsayh7IiI6an0sIiIpOmp9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJKU09OLnBhcnNlIil9fX0oKSk7Ci8qIQogKiBKU09OU2NoZW1hIFZhbGlkYXRvciAtIFZhbGlkYXRlcyBKYXZhU2NyaXB0IG9iamVjdHMgdXNpbmcgSlNPTiBTY2hlbWFzCiAqICAgIChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLykKICoKICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSkKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLgogVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuCiBJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSwKIHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCwKIGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuCiBUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuCiBlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAicHJvcGVydHkiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yCiAibWVzc2FnZSIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhcwogKi8KKGZ1bmN0aW9uKGEpe1ZhbGlkYXRvcj17dmFsaWRhdGU6ZnVuY3Rpb24oYixjKXtyZXR1cm4gVmFsaWRhdG9yLl92YWxpZGF0ZShiLGMse2NoYW5naW5nOmZhbHNlfSl9LGNoZWNrUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZCxiLGMpe3JldHVybiBWYWxpZGF0b3IuX3ZhbGlkYXRlKGQsYix7Y2hhbmdpbmc6Y3x8InByb3BlcnR5In0pfSxfdmFsaWRhdGU6ZnVuY3Rpb24oYyxnLGQpe2lmKCFkKXtkPXt9fXZhciBiPWQuY2hhbmdpbmc7dmFyIGg9W107ZnVuY3Rpb24gZihyLG4sdixwKXt2YXIgbTt2Kz12P3R5cGVvZiBwPT0ibnVtYmVyIj8iWyIrcCsiXSI6dHlwZW9mIHA9PSJ1bmRlZmluZWQiPyIiOiIuIitwOnA7ZnVuY3Rpb24gdyhpKXtoLnB1c2goe3Byb3BlcnR5OnYsbWVzc2FnZTppfSl9aWYoKHR5cGVvZiBuIT0ib2JqZWN0Inx8biBpbnN0YW5jZW9mIEFycmF5KSYmKHZ8fHR5cGVvZiBuIT0iZnVuY3Rpb24iKSYmIShuJiZuLnR5cGUpKXtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil7aWYoIShyIGluc3RhbmNlb2Ygbikpe3coImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgIituLm5hbWUpfX1lbHNle2lmKG4pe3coIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gIituKX19cmV0dXJuIG51bGx9aWYoYiYmbi5yZWFkb25seSl7dygiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIil9aWYoblsiZXh0ZW5kcyJdKXtmKHIsblsiZXh0ZW5kcyJdLHYscCl9ZnVuY3Rpb24gayh6LEEpe2lmKHope2lmKHR5cGVvZiB6PT0ic3RyaW5nIiYmeiE9ImFueSImJih6PT0ibnVsbCI/QSE9PW51bGw6dHlwZW9mIEEhPXopJiYhKEEgaW5zdGFuY2VvZiBBcnJheSYmej09ImFycmF5IikmJiEoQSBpbnN0YW5jZW9mIERhdGUmJno9PSJkYXRlIikmJiEoej09ImludGVnZXIiJiZBJTE9PT0wKSl7cmV0dXJuW3twcm9wZXJ0eTp2LG1lc3NhZ2U6KHR5cGVvZiBBKSsiIHZhbHVlIGZvdW5kLCBidXQgYSAiK3orIiBpcyByZXF1aXJlZCJ9XX1pZih6IGluc3RhbmNlb2YgQXJyYXkpe3ZhciB5PVtdO2Zvcih2YXIgeD0wO3g8ei5sZW5ndGg7eCsrKXtpZighKHk9ayh6W3hdLEEpKS5sZW5ndGgpe2JyZWFrfX1pZih5Lmxlbmd0aCl7cmV0dXJuIHl9fWVsc2V7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgaT1oO2g9W107ZihBLHosdik7dmFyIGw9aDtoPWk7cmV0dXJuIGx9fX1yZXR1cm5bXX1pZihyPT09dW5kZWZpbmVkKXtpZihuLnJlcXVpcmVkKXt3KCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZCIpfX1lbHNle2g9aC5jb25jYXQoayhuLnR5cGUscikpO2lmKG4uZGlzYWxsb3cmJiFrKG4uZGlzYWxsb3cscikubGVuZ3RoKXt3KCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZCIpfWlmKHIhPT1udWxsKXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2lmKG4uaXRlbXMpe3ZhciBzPW4uaXRlbXMgaW5zdGFuY2VvZiBBcnJheTt2YXIgdT1uLml0ZW1zO2ZvcihwPTAsbT1yLmxlbmd0aDtwPG07cCs9MSl7aWYocyl7dT1uLml0ZW1zW3BdfWlmKGQuY29lcmNlKXtyW3BdPWQuY29lcmNlKHJbcF0sdSl9aC5jb25jYXQoZihyW3BdLHUsdixwKSl9fWlmKG4ubWluSXRlbXMmJnIubGVuZ3RoPG4ubWluSXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIrbi5taW5JdGVtcysiIGluIHRoZSBhcnJheSIpfWlmKG4ubWF4SXRlbXMmJnIubGVuZ3RoPm4ubWF4SXRlbXMpe3coIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mICIrbi5tYXhJdGVtcysiIGluIHRoZSBhcnJheSIpfX1lbHNle2lmKG4ucHJvcGVydGllc3x8bi5hZGRpdGlvbmFsUHJvcGVydGllcyl7aC5jb25jYXQoZShyLG4ucHJvcGVydGllcyx2LG4uYWRkaXRpb25hbFByb3BlcnRpZXMpKX19aWYobi5wYXR0ZXJuJiZ0eXBlb2Ygcj09InN0cmluZyImJiFyLm1hdGNoKG4ucGF0dGVybikpe3coImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuICIrbi5wYXR0ZXJuKX1pZihuLm1heExlbmd0aCYmdHlwZW9mIHI9PSJzdHJpbmciJiZyLmxlbmd0aD5uLm1heExlbmd0aCl7dygibWF5IG9ubHkgYmUgIituLm1heExlbmd0aCsiIGNoYXJhY3RlcnMgbG9uZyIpfWlmKG4ubWluTGVuZ3RoJiZ0eXBlb2Ygcj09InN0cmluZyImJnIubGVuZ3RoPG4ubWluTGVuZ3RoKXt3KCJtdXN0IGJlIGF0IGxlYXN0ICIrbi5taW5MZW5ndGgrIiBjaGFyYWN0ZXJzIGxvbmciKX1pZih0eXBlb2Ygbi5taW5pbXVtIT09dW5kZWZpbmVkJiZ0eXBlb2Ygcj09dHlwZW9mIG4ubWluaW11bSYmbi5taW5pbXVtPnIpe3coIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgIituLm1pbmltdW0pfWlmKHR5cGVvZiBuLm1heGltdW0hPT11bmRlZmluZWQmJnR5cGVvZiByPT10eXBlb2Ygbi5tYXhpbXVtJiZuLm1heGltdW08cil7dygibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiAiK24ubWF4aW11bSl9aWYoblsiZW51bSJdKXt2YXIgcT1uWyJlbnVtIl07bT1xLmxlbmd0aDt2YXIgdDtmb3IodmFyIG89MDtvPG07bysrKXtpZihxW29dPT09cil7dD0xO2JyZWFrfX1pZighdCl7dygiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiAiK3Euam9pbigiLCAiKSl9fWlmKHR5cGVvZiBuLm1heERlY2ltYWw9PSJudW1iZXIiJiYoci50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoIlxcLlswLTldeyIrKG4ubWF4RGVjaW1hbCsxKSsiLH0iKSkpKXt3KCJtYXkgb25seSBoYXZlICIrbi5tYXhEZWNpbWFsKyIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzIil9fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGosayxwLG8pe2lmKHR5cGVvZiBrPT0ib2JqZWN0Iil7aWYodHlwZW9mIGohPSJvYmplY3QifHxqIGluc3RhbmNlb2YgQXJyYXkpe2gucHVzaCh7cHJvcGVydHk6cCxtZXNzYWdlOiJhbiBvYmplY3QgaXMgcmVxdWlyZWQifSl9Zm9yKHZhciBsIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobCkpe3ZhciBuPWpbbF07aWYobj09PXVuZGVmaW5lZCYmZC5leGlzdGluZ09ubHkpe2NvbnRpbnVlfXZhciBxPWtbbF07aWYobj09PXVuZGVmaW5lZCYmcVsiZGVmYXVsdCJdKXtuPWpbbF09cVsiZGVmYXVsdCJdfWlmKGQuY29lcmNlJiZsIGluIGope249altsXT1kLmNvZXJjZShuLHEpfWYobixxLHAsbCl9fX1mb3IobCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGwpJiYhKGwuY2hhckF0KDApPT0iXyImJmwuY2hhckF0KDEpPT0iXyIpJiZrJiYha1tsXSYmbz09PWZhbHNlKXtpZihkLmZpbHRlcil7ZGVsZXRlIGpbbF07Y29udGludWV9ZWxzZXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToodHlwZW9mIG4pKyJUaGUgcHJvcGVydHkgIitsKyIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlIHNjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMifSl9fXZhciBtPWsmJmtbbF0mJmtbbF0ucmVxdWlyZXM7aWYobSYmIShtIGluIGopKXtoLnB1c2goe3Byb3BlcnR5OnAsbWVzc2FnZToidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiK2wrIiByZXF1aXJlcyB0aGF0ICIrbSsiIGFsc28gYmUgcHJlc2VudCJ9KX1uPWpbbF07aWYobyYmKCEoayYmdHlwZW9mIGs9PSJvYmplY3QiKXx8IShsIGluIGspKSl7aWYoZC5jb2VyY2Upe249altsXT1kLmNvZXJjZShuLG8pfWYobixvLHAsbCl9aWYoIWImJm4mJm4uJHNjaGVtYSl7aD1oLmNvbmNhdChmKG4sbi4kc2NoZW1hLHAsbCkpfX1yZXR1cm4gaH1pZihnKXtmKGMsZywiIixifHwiIil9aWYoIWImJmMmJmMuJHNjaGVtYSl7ZihjLGMuJHNjaGVtYSwiIiwiIil9cmV0dXJue3ZhbGlkOiFoLmxlbmd0aCxlcnJvcnM6aH19LG11c3RCZVZhbGlkOmZ1bmN0aW9uKGIpe2lmKCFiLnZhbGlkKXt0aHJvdyBuZXcgVHlwZUVycm9yKGIuZXJyb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iZm9yIHByb3BlcnR5ICIrYy5wcm9wZXJ0eSsiOiAiK2MubWVzc2FnZX0pLmpvaW4oIiwgXG4iKSl9fX07U3RyaW5nLnR5cGU9InN0cmluZyI7Qm9vbGVhbi50eXBlPSJib29sZWFuIjtOdW1iZXIudHlwZT0ibnVtYmVyIjtJbnRlZ2VyPXt0eXBlOiJpbnRlZ2VyIn07T2JqZWN0LnR5cGU9Im9iamVjdCI7QXJyYXkudHlwZT0iYXJyYXkiO0RhdGUudHlwZT0iZGF0ZSI7YS52YWxpZGF0b3I9d2luZG93LlZhbGlkYXRvcj1WYWxpZGF0b3J9KShqUXVlcnkpOwovKiEKICogalF1ZXJ5IFRlbXBsYXRlcyBQbHVnaW4gMS4wLjBwcmUKICogaHR0cDovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS10bXBsCiAqIFJlcXVpcmVzIGpRdWVyeSAxLjQuMgogKgogKiBDb3B5cmlnaHQgMjAxMSwgU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeSwgSW5jLgogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKi8KKGZ1bmN0aW9uKGksZil7dmFyIHQ9aS5mbi5kb21NYW5pcCxoPSJfdG1wbGl0ZW0iLHU9L15bXjxdKig8W1x3XFddKz4pW14+XSokfFx7XHtcISAvLHA9e30sZT17fSx5LHg9e2tleTowLGRhdGE6e319LHc9MCxxPTAsZz1bXTtmdW5jdGlvbiBrKEIsQSxELEUpe3ZhciBDPXtkYXRhOkV8fChFPT09MHx8RT09PWZhbHNlKT9FOihBP0EuZGF0YTp7fSksX3dyYXA6QT9BLl93cmFwOm51bGwsdG1wbDpudWxsLHBhcmVudDpBfHxudWxsLG5vZGVzOltdLGNhbGxzOmMsbmVzdDpiLHdyYXA6bixodG1sOnIsdXBkYXRlOnp9O2lmKEIpe2kuZXh0ZW5kKEMsQix7bm9kZXM6W10scGFyZW50OkF9KX1pZihEKXtDLnRtcGw9RDtDLl9jdG50PUMuX2N0bnR8fEMudG1wbChpLEMpO0Mua2V5PSsrdzsoZy5sZW5ndGg/ZTpwKVt3XT1DfXJldHVybiBDfWkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEEsQil7aS5mbltBXT1mdW5jdGlvbihDKXt2YXIgRj1bXSxJPWkoQyksRSxHLEQsSixIPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO3k9cHx8e307aWYoSCYmSC5ub2RlVHlwZT09PTExJiZILmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmSS5sZW5ndGg9PT0xKXtJW0JdKHRoaXNbMF0pO0Y9dGhpc31lbHNle2ZvcihHPTAsRD1JLmxlbmd0aDtHPEQ7RysrKXtxPUc7RT0oRz4wP3RoaXMuY2xvbmUodHJ1ZSk6dGhpcykuZ2V0KCk7aShJW0ddKVtCXShFKTtGPUYuY29uY2F0KEUpfXE9MDtGPXRoaXMucHVzaFN0YWNrKEYsQSxJLnNlbGVjdG9yKX1KPXk7eT1udWxsO2kudG1wbC5jb21wbGV0ZShKKTtyZXR1cm4gRn19KTtpLmZuLmV4dGVuZCh7dG1wbDpmdW5jdGlvbihDLEIsQSl7cmV0dXJuIGkudG1wbCh0aGlzWzBdLEMsQixBKX0sdG1wbEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gaS50bXBsSXRlbSh0aGlzWzBdKX0sdGVtcGxhdGU6ZnVuY3Rpb24oQSl7cmV0dXJuIGkudGVtcGxhdGUoQSx0aGlzWzBdKX0sZG9tTWFuaXA6ZnVuY3Rpb24oRSxILEcsSSl7aWYoRVswXSYmaS5pc0FycmF5KEVbMF0pKXt2YXIgQj1pLm1ha2VBcnJheShhcmd1bWVudHMpLEE9RVswXSxGPUEubGVuZ3RoLEM9MCxEO3doaWxlKEM8RiYmIShEPWkuZGF0YShBW0MrK10sInRtcGxJdGVtIikpKXt9aWYoRCYmcSl7QlsyXT1mdW5jdGlvbihKKXtpLnRtcGwuYWZ0ZXJNYW5pcCh0aGlzLEosRyl9fXQuYXBwbHkodGhpcyxCKX1lbHNle3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXE9MDtpZigheSl7aS50bXBsLmNvbXBsZXRlKHApfXJldHVybiB0aGlzfX0pO2kuZXh0ZW5kKHt0bXBsOmZ1bmN0aW9uKEMsRixFLEIpe3ZhciBELEE9IUI7aWYoQSl7Qj14O0M9aS50ZW1wbGF0ZVtDXXx8aS50ZW1wbGF0ZShudWxsLEMpO2U9e319ZWxzZXtpZighQyl7Qz1CLnRtcGw7cFtCLmtleV09QjtCLm5vZGVzPVtdO2lmKEIud3JhcHBlZCl7cyhCLEIud3JhcHBlZCl9cmV0dXJuIGkobShCLG51bGwsQi50bXBsKGksQikpKX19aWYoIUMpe3JldHVybltdfWlmKHR5cGVvZiBGPT09ImZ1bmN0aW9uIil7Rj1GLmNhbGwoQnx8e30pfWlmKEUmJkUud3JhcHBlZCl7cyhFLEUud3JhcHBlZCl9RD1pLmlzQXJyYXkoRik/aS5tYXAoRixmdW5jdGlvbihHKXtyZXR1cm4gRz9rKEUsQixDLEcpOm51bGx9KTpbayhFLEIsQyxGKV07cmV0dXJuIEE/aShtKEIsbnVsbCxEKSk6RH0sdG1wbEl0ZW06ZnVuY3Rpb24oQil7dmFyIEE7aWYoQiBpbnN0YW5jZW9mIGkpe0I9QlswXX13aGlsZShCJiZCLm5vZGVUeXBlPT09MSYmIShBPWkuZGF0YShCLCJ0bXBsSXRlbSIpKSYmKEI9Qi5wYXJlbnROb2RlKSl7fXJldHVybiBBfHx4fSx0ZW1wbGF0ZTpmdW5jdGlvbihCLEEpe2lmKEEpe2lmKHR5cGVvZiBBPT09InN0cmluZyIpe0E9bChBKX1lbHNle2lmKEEgaW5zdGFuY2VvZiBpKXtBPUFbMF18fHt9fX1pZihBLm5vZGVUeXBlKXtBPWkuZGF0YShBLCJ0bXBsIil8fGkuZGF0YShBLCJ0bXBsIixsKEEuaW5uZXJIVE1MKSl9cmV0dXJuIHR5cGVvZiBCPT09InN0cmluZyI/KGkudGVtcGxhdGVbQl09QSk6QX1yZXR1cm4gQj8odHlwZW9mIEIhPT0ic3RyaW5nIj9pLnRlbXBsYXRlKG51bGwsQik6KGkudGVtcGxhdGVbQl18fGkudGVtcGxhdGUobnVsbCx1LnRlc3QoQik/QjppKEIpKSkpOm51bGx9LGVuY29kZTpmdW5jdGlvbihBKXtyZXR1cm4oIiIrQSkuc3BsaXQoIjwiKS5qb2luKCImbHQ7Iikuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iikuc3BsaXQoJyInKS5qb2luKCImIzM0OyIpLnNwbGl0KCInIikuam9pbigiJiMzOTsiKX19KTtpLmV4dGVuZChpLnRtcGwse3RhZzp7dG1wbDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiaWYoJG5vdG51bGxfMSl7X189X18uY29uY2F0KCRpdGVtLm5lc3QoJDEsJDIpKTt9In0sd3JhcDp7X2RlZmF1bHQ6eyQyOiJudWxsIn0sb3BlbjoiJGl0ZW0uY2FsbHMoX18sJDEsJDIpO19fPVtdOyIsY2xvc2U6ImNhbGw9JGl0ZW0uY2FsbHMoKTtfXz1jYWxsLl8uY29uY2F0KCRpdGVtLndyYXAoY2FsbCxfXykpOyJ9LGVhY2g6e19kZWZhdWx0OnskMjoiJGluZGV4LCAkdmFsdWUifSxvcGVuOiJpZigkbm90bnVsbF8xKXskLmVhY2goJDFhLGZ1bmN0aW9uKCQyKXt3aXRoKHRoaXMpeyIsY2xvc2U6In19KTt9In0sImlmIjp7b3BlbjoiaWYoKCRub3RudWxsXzEpICYmICQxYSl7IixjbG9zZToifSJ9LCJlbHNlIjp7X2RlZmF1bHQ6eyQxOiJ0cnVlIn0sb3BlbjoifWVsc2UgaWYoKCRub3RudWxsXzEpICYmICQxYSl7In0saHRtbDp7b3BlbjoiaWYoJG5vdG51bGxfMSl7X18ucHVzaCgkMWEpO30ifSwiPSI6e19kZWZhdWx0OnskMToiJGRhdGEifSxvcGVuOiJpZigkbm90bnVsbF8xKXtfXy5wdXNoKCQuZW5jb2RlKCQxYSkpO30ifSwiISI6e29wZW46IiJ9fSxjb21wbGV0ZTpmdW5jdGlvbihBKXtwPXt9fSxhZnRlck1hbmlwOmZ1bmN0aW9uIHYoQyxBLEQpe3ZhciBCPUEubm9kZVR5cGU9PT0xMT9pLm1ha2VBcnJheShBLmNoaWxkTm9kZXMpOkEubm9kZVR5cGU9PT0xP1tBXTpbXTtELmNhbGwoQyxBKTtvKEIpO3ErK319KTtmdW5jdGlvbiBtKEEsRSxDKXt2YXIgRCxCPUM/aS5tYXAoQyxmdW5jdGlvbihGKXtyZXR1cm4odHlwZW9mIEY9PT0ic3RyaW5nIik/KEEua2V5P0YucmVwbGFjZSgvKDxcdyspKD89W1xzPl0pKD8hW14+XSpfdG1wbGl0ZW0pKFtePl0qKS9nLCIkMSAiK2grJz0iJytBLmtleSsnIiAkMicpOkYpOm0oRixBLEYuX2N0bnQpfSk6QTtpZihFKXtyZXR1cm4gQn1CPUIuam9pbigiIik7Qi5yZXBsYWNlKC9eXHMqKFtePFxzXVtePF0qKT8oPFtcd1xXXSs+KShbXj5dKltePlxzXSk/XHMqJC8sZnVuY3Rpb24oRyxILEYsSSl7RD1pKEYpLmdldCgpO28oRCk7aWYoSCl7RD1hKEgpLmNvbmNhdChEKX1pZihJKXtEPUQuY29uY2F0KGEoSSkpfX0pO3JldHVybiBEP0Q6YShCKX1mdW5jdGlvbiBhKEIpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuaW5uZXJIVE1MPUI7cmV0dXJuIGkubWFrZUFycmF5KEEuY2hpbGROb2Rlcyl9ZnVuY3Rpb24gbChBKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJqUXVlcnkiLCIkaXRlbSIsInZhciAkPWpRdWVyeSxjYWxsLF9fPVtdLCRkYXRhPSRpdGVtLmRhdGE7d2l0aCgkZGF0YSl7X18ucHVzaCgnIitpLnRyaW0oQSkucmVwbGFjZSgvKFtcXCddKS9nLCJcXCQxIikucmVwbGFjZSgvW1xyXHRcbl0vZywiICIpLnJlcGxhY2UoL1wkXHsoW15cfV0qKVx9L2csInt7PSAkMX19IikucmVwbGFjZSgvXHtceyhcLz8pKFx3K3wuKSg/OlwoKCg/OlteXH1dfFx9KD8hXH0pKSo/KT9cKSk/KD86XHMrKC4qPyk/KT8oXCgoKD86W15cfV18XH0oPyFcfSkpKj8pXCkpP1xzKlx9XH0vZyxmdW5jdGlvbihJLEMsRyxELEUsSixGKXt2YXIgTD1pLnRtcGwudGFnW0ddLEIsSCxLO2lmKCFMKXt0aHJvdyJVbmtub3duIHRlbXBsYXRlIHRhZzogIitHfUI9TC5fZGVmYXVsdHx8W107aWYoSiYmIS9cdyQvLnRlc3QoRSkpe0UrPUo7Sj0iIn1pZihFKXtFPWooRSk7Rj1GPygiLCIraihGKSsiKSIpOihKPyIpIjoiIik7SD1KPyhFLmluZGV4T2YoIi4iKT4tMT9FK2ooSik6KCIoIitFKyIpLmNhbGwoJGl0ZW0iK0YpKTpFO0s9Sj9IOiIodHlwZW9mKCIrRSsiKT09PSdmdW5jdGlvbic/KCIrRSsiKS5jYWxsKCRpdGVtKTooIitFKyIpKSJ9ZWxzZXtLPUg9Qi4kMXx8Im51bGwifUQ9aihEKTtyZXR1cm4iJyk7IitMW0M/ImNsb3NlIjoib3BlbiJdLnNwbGl0KCIkbm90bnVsbF8xIikuam9pbihFPyJ0eXBlb2YoIitFKyIpIT09J3VuZGVmaW5lZCcgJiYgKCIrRSsiKSE9bnVsbCI6InRydWUiKS5zcGxpdCgiJDFhIikuam9pbihLKS5zcGxpdCgiJDEiKS5qb2luKEgpLnNwbGl0KCIkMiIpLmpvaW4oRHx8Qi4kMnx8IiIpKyJfXy5wdXNoKCcifSkrIicpO31yZXR1cm4gX187Iil9ZnVuY3Rpb24gcyhCLEEpe0IuX3dyYXA9bShCLHRydWUsaS5pc0FycmF5KEEpP0E6W3UudGVzdChBKT9BOmkoQSkuaHRtbCgpXSkuam9pbigiIil9ZnVuY3Rpb24gaihBKXtyZXR1cm4gQT9BLnJlcGxhY2UoL1xcJy9nLCInIikucmVwbGFjZSgvXFxcXC9nLCJcXCIpOm51bGx9ZnVuY3Rpb24gZChBKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmFwcGVuZENoaWxkKEEuY2xvbmVOb2RlKHRydWUpKTtyZXR1cm4gQi5pbm5lckhUTUx9ZnVuY3Rpb24gbyhHKXt2YXIgST0iXyIrcSxCLEEsRT17fSxGLEQsQztmb3IoRj0wLEQ9Ry5sZW5ndGg7RjxEO0YrKyl7aWYoKEI9R1tGXSkubm9kZVR5cGUhPT0xKXtjb250aW51ZX1BPUIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IoQz1BLmxlbmd0aC0xO0M+PTA7Qy0tKXtIKEFbQ10pfUgoQil9ZnVuY3Rpb24gSChPKXt2YXIgTCxOPU8sTSxKLEs7aWYoKEs9Ty5nZXRBdHRyaWJ1dGUoaCkpKXt3aGlsZShOLnBhcmVudE5vZGUmJihOPU4ucGFyZW50Tm9kZSkubm9kZVR5cGU9PT0xJiYhKEw9Ti5nZXRBdHRyaWJ1dGUoaCkpKXt9aWYoTCE9PUspe049Ti5wYXJlbnROb2RlPyhOLm5vZGVUeXBlPT09MTE/MDooTi5nZXRBdHRyaWJ1dGUoaCl8fDApKTowO2lmKCEoSj1wW0tdKSl7Sj1lW0tdO0o9ayhKLHBbTl18fGVbTl0pO0oua2V5PSsrdztwW3ddPUp9aWYocSl7UChLKX19Ty5yZW1vdmVBdHRyaWJ1dGUoaCl9ZWxzZXtpZihxJiYoSj1pLmRhdGEoTywidG1wbEl0ZW0iKSkpe1AoSi5rZXkpO3BbSi5rZXldPUo7Tj1pLmRhdGEoTy5wYXJlbnROb2RlLCJ0bXBsSXRlbSIpO049Tj9OLmtleTowfX1pZihKKXtNPUo7d2hpbGUoTSYmTS5rZXkhPU4pe00ubm9kZXMucHVzaChPKTtNPU0ucGFyZW50fWRlbGV0ZSBKLl9jdG50O2RlbGV0ZSBKLl93cmFwO2kuZGF0YShPLCJ0bXBsSXRlbSIsSil9ZnVuY3Rpb24gUChRKXtRPVErSTtKPUVbUV09KEVbUV18fGsoSixwW0oucGFyZW50LmtleStJXXx8Si5wYXJlbnQpKX19fWZ1bmN0aW9uIGMoQyxBLEQsQil7aWYoIUMpe3JldHVybiBnLnBvcCgpfWcucHVzaCh7XzpDLHRtcGw6QSxpdGVtOnRoaXMsZGF0YTpELG9wdGlvbnM6Qn0pfWZ1bmN0aW9uIGIoQSxDLEIpe3JldHVybiBpLnRtcGwoaS50ZW1wbGF0ZShBKSxDLEIsdGhpcyl9ZnVuY3Rpb24gbihDLEEpe3ZhciBCPUMub3B0aW9uc3x8e307Qi53cmFwcGVkPUE7cmV0dXJuIGkudG1wbChpLnRlbXBsYXRlKEMudG1wbCksQy5kYXRhLEIsQy5pdGVtKX1mdW5jdGlvbiByKEIsQyl7dmFyIEE9dGhpcy5fd3JhcDtyZXR1cm4gaS5tYXAoaShpLmlzQXJyYXkoQSk/QS5qb2luKCIiKTpBKS5maWx0ZXIoQnx8IioiKSxmdW5jdGlvbihEKXtyZXR1cm4gQz9ELmlubmVyVGV4dHx8RC50ZXh0Q29udGVudDpELm91dGVySFRNTHx8ZChEKX0pfWZ1bmN0aW9uIHooKXt2YXIgQT10aGlzLm5vZGVzO2kudG1wbChudWxsLG51bGwsbnVsbCx0aGlzKS5pbnNlcnRCZWZvcmUoQVswXSk7aShBKS5yZW1vdmUoKX19KShqUXVlcnkpO2Z1bmN0aW9uIGhvb3ppdChhKXtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXtyZXR1cm4ic3RyaW5nIn1lbHNle2lmKGEuY29uc3RydWN0b3I9PT1Cb29sZWFuKXtyZXR1cm4iYm9vbGVhbiJ9ZWxzZXtpZihhLmNvbnN0cnVjdG9yPT09TnVtYmVyKXtpZihpc05hTihhKSl7cmV0dXJuIm5hbiJ9ZWxzZXtyZXR1cm4ibnVtYmVyIn19ZWxzZXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQiKXtyZXR1cm4idW5kZWZpbmVkIn1lbHNle2lmKGE9PT1udWxsKXtyZXR1cm4ibnVsbCJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiJhcnJheSJ9ZWxzZXtpZihhIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuImRhdGUifWVsc2V7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuInJlZ2V4cCJ9ZWxzZXtpZih0eXBlb2YgYT09PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In1lbHNle2lmKGEgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuImZ1bmN0aW9uIn1lbHNle3JldHVybiB1bmRlZmluZWR9fX19fX19fX19fWZ1bmN0aW9uIGJpbmRDYWxsYmFja3MoYyxiLGEpe3ZhciBkPWhvb3ppdChjKTtpZihkKXtpZihob296aXQoYltkXSk9PT0iZnVuY3Rpb24iKXtyZXR1cm4gYltkXS5hcHBseShiLGEpfWVsc2V7cmV0dXJuIGJbZF19fX12YXIgZXF1aXY9ZnVuY3Rpb24oKXt2YXIgYjt2YXIgYz1bXTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoZSxmKXtpZihlIGluc3RhbmNlb2YgZi5jb25zdHJ1Y3Rvcnx8ZiBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3Ipe3JldHVybiBmPT1lfWVsc2V7cmV0dXJuIGY9PT1lfX1yZXR1cm57c3RyaW5nOmQsImJvb2xlYW4iOmQsbnVtYmVyOmQsIm51bGwiOmQsInVuZGVmaW5lZCI6ZCxuYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSxkYXRlOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJkYXRlIiYmZi52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKX0scmVnZXhwOmZ1bmN0aW9uKGUsZil7cmV0dXJuIGhvb3ppdChlKT09PSJyZWdleHAiJiZmLnNvdXJjZT09PWUuc291cmNlJiZmLmdsb2JhbD09PWUuZ2xvYmFsJiZmLmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2UmJmYubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmV9LCJmdW5jdGlvbiI6ZnVuY3Rpb24oKXt2YXIgZT1jW2MubGVuZ3RoLTFdO3JldHVybiBlIT09T2JqZWN0JiZ0eXBlb2YgZSE9PSJ1bmRlZmluZWQifSxhcnJheTpmdW5jdGlvbihmLGcpe3ZhciBoO3ZhciBlO2lmKCEoaG9veml0KGYpPT09ImFycmF5Iikpe3JldHVybiBmYWxzZX1lPWcubGVuZ3RoO2lmKGUhPT1mLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWZvcihoPTA7aDxlO2grKyl7aWYoIWIoZ1toXSxmW2hdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sb2JqZWN0OmZ1bmN0aW9uKGYsZyl7dmFyIGo7dmFyIGU9dHJ1ZTt2YXIgaD1bXSxrPVtdO2lmKGcuY29uc3RydWN0b3IhPT1mLmNvbnN0cnVjdG9yKXtyZXR1cm4gZmFsc2V9Yy5wdXNoKGcuY29uc3RydWN0b3IpO2ZvcihqIGluIGcpe2gucHVzaChqKTtpZighYihnW2pdLGZbal0pKXtlPWZhbHNlfX1jLnBvcCgpO2ZvcihqIGluIGYpe2sucHVzaChqKX1yZXR1cm4gZSYmYihoLnNvcnQoKSxrLnNvcnQoKSl9fX0oKTtiPWZ1bmN0aW9uKCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyk7aWYoZC5sZW5ndGg8Mil7cmV0dXJuIHRydWV9cmV0dXJuKGZ1bmN0aW9uKGYsZSl7aWYoZj09PWUpe3JldHVybiB0cnVlfWVsc2V7aWYoZj09PW51bGx8fGU9PT1udWxsfHx0eXBlb2YgZj09PSJ1bmRlZmluZWQifHx0eXBlb2YgZT09PSJ1bmRlZmluZWQifHxob296aXQoZikhPT1ob296aXQoZSkpe3JldHVybiBmYWxzZX1lbHNle3JldHVybiBiaW5kQ2FsbGJhY2tzKGYsYSxbZSxmXSl9fX0pKGRbMF0sZFsxXSkmJmFyZ3VtZW50cy5jYWxsZWUuYXBwbHkodGhpcyxkLnNwbGljZSgxLGQubGVuZ3RoLTEpKX07cmV0dXJuIGJ9KCk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGcoKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGg9Im9ucGFzdGUiO2kuc2V0QXR0cmlidXRlKGgsIiIpO3JldHVybih0eXBlb2YgaVtoXT09PSJmdW5jdGlvbiIpPyJwYXN0ZSI6ImlucHV0In12YXIgYj1nKCkrIi5tYXNrIixkPW5hdmlnYXRvci51c2VyQWdlbnQsYz0vaXBob25lL2kudGVzdChkKSxhPS9hbmRyb2lkL2kudGVzdChkKSxmO2UubWFzaz17ZGVmaW5pdGlvbnM6eyI5IjoiWzAtOV0iLGE6IltBLVphLXpdIiwiKiI6IltBLVphLXowLTldIn0sZGF0YU5hbWU6InJhd01hc2tGbiIscGxhY2Vob2xkZXI6Il8ifTtlLmZuLmV4dGVuZCh7Y2FyZXQ6ZnVuY3Rpb24oaixoKXt2YXIgaTtpZih0aGlzLmxlbmd0aD09PTB8fHRoaXMuaXMoIjpoaWRkZW4iKSl7cmV0dXJufWlmKHR5cGVvZiBqPT0ibnVtYmVyIil7aD0odHlwZW9mIGg9PT0ibnVtYmVyIik/aDpqO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLnNldFNlbGVjdGlvblJhbmdlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGosaCl9ZWxzZXtpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSl7aT10aGlzLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UodHJ1ZSk7aS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGgpO2kubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGopO2kuc2VsZWN0KCl9fX0pfWVsc2V7aWYodGhpc1swXS5zZXRTZWxlY3Rpb25SYW5nZSl7aj10aGlzWzBdLnNlbGVjdGlvblN0YXJ0O2g9dGhpc1swXS5zZWxlY3Rpb25FbmR9ZWxzZXtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSl7aT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtqPTAtaS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEwMDAwMCk7aD1qK2kudGV4dC5sZW5ndGh9fXJldHVybntiZWdpbjpqLGVuZDpofX19LHVubWFzazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoInVubWFzayIpfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIGssaSxtLG8sbCxoO2lmKCFqJiZ0aGlzLmxlbmd0aD4wKXtrPWUodGhpc1swXSk7cmV0dXJuIGsuZGF0YShlLm1hc2suZGF0YU5hbWUpKCl9bj1lLmV4dGVuZCh7cGxhY2Vob2xkZXI6ZS5tYXNrLnBsYWNlaG9sZGVyLGNvbXBsZXRlZDpudWxsfSxuKTtpPWUubWFzay5kZWZpbml0aW9uczttPVtdO289aD1qLmxlbmd0aDtsPW51bGw7ZS5lYWNoKGouc3BsaXQoIiIpLGZ1bmN0aW9uKHAscSl7aWYocT09Ij8iKXtoLS07bz1wfWVsc2V7aWYoaVtxXSl7bS5wdXNoKG5ldyBSZWdFeHAoaVtxXSkpO2lmKGw9PT1udWxsKXtsPW0ubGVuZ3RoLTF9fWVsc2V7bS5wdXNoKG51bGwpfX19KTtyZXR1cm4gdGhpcy50cmlnZ2VyKCJ1bm1hc2siKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHk9ZSh0aGlzKSx0PWUubWFwKGouc3BsaXQoIiIpLGZ1bmN0aW9uKEMsQil7aWYoQyE9Ij8iKXtyZXR1cm4gaVtDXT9uLnBsYWNlaG9sZGVyOkN9fSksQT15LnZhbCgpO2Z1bmN0aW9uIHgoQil7d2hpbGUoKytCPGgmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gdShCKXt3aGlsZSgtLUI+PTAmJiFtW0JdKXt9cmV0dXJuIEJ9ZnVuY3Rpb24gcyhFLEIpe3ZhciBELEM7aWYoRTwwKXtyZXR1cm59Zm9yKEQ9RSxDPXgoQik7RDxoO0QrKyl7aWYobVtEXSl7aWYoQzxoJiZtW0RdLnRlc3QodFtDXSkpe3RbRF09dFtDXTt0W0NdPW4ucGxhY2Vob2xkZXJ9ZWxzZXticmVha31DPXgoQyl9fXcoKTt5LmNhcmV0KE1hdGgubWF4KGwsRSkpfWZ1bmN0aW9uIHAoRil7dmFyIEQsRSxCLEM7Zm9yKEQ9RixFPW4ucGxhY2Vob2xkZXI7RDxoO0QrKyl7aWYobVtEXSl7Qj14KEQpO0M9dFtEXTt0W0RdPUU7aWYoQjxoJiZtW0JdLnRlc3QoQykpe0U9Q31lbHNle2JyZWFrfX19fWZ1bmN0aW9uIHYoRSl7dmFyIEM9RS53aGljaCxGLEQsQjtpZihDPT09OHx8Qz09PTQ2fHwoYyYmQz09PTEyNykpe0Y9eS5jYXJldCgpO0Q9Ri5iZWdpbjtCPUYuZW5kO2lmKEItRD09PTApe0Q9QyE9PTQ2P3UoRCk6KEI9eChELTEpKTtCPUM9PT00Nj94KEIpOkJ9cShELEIpO3MoRCxCLTEpO0UucHJldmVudERlZmF1bHQoKX1lbHNle2lmKEM9PTI3KXt5LnZhbChBKTt5LmNhcmV0KDAscigpKTtFLnByZXZlbnREZWZhdWx0KCl9fX1mdW5jdGlvbiB6KEUpe3ZhciBCPUUud2hpY2gsRz15LmNhcmV0KCksRCxGLEM7aWYoRS5jdHJsS2V5fHxFLmFsdEtleXx8RS5tZXRhS2V5fHxCPDMyKXtyZXR1cm59ZWxzZXtpZihCKXtpZihHLmVuZC1HLmJlZ2luIT09MCl7cShHLmJlZ2luLEcuZW5kKTtzKEcuYmVnaW4sRy5lbmQtMSl9RD14KEcuYmVnaW4tMSk7aWYoRDxoKXtGPVN0cmluZy5mcm9tQ2hhckNvZGUoQik7aWYobVtEXS50ZXN0KEYpKXtwKEQpO3RbRF09Rjt3KCk7Qz14KEQpO2lmKGEpe3NldFRpbWVvdXQoZS5wcm94eShlLmZuLmNhcmV0LHksQyksMCl9ZWxzZXt5LmNhcmV0KEMpfWlmKG4uY29tcGxldGVkJiZDPj1oKXtuLmNvbXBsZXRlZC5jYWxsKHkpfX19RS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gcShELEIpe3ZhciBDO2ZvcihDPUQ7QzxCJiZDPGg7QysrKXtpZihtW0NdKXt0W0NdPW4ucGxhY2Vob2xkZXJ9fX1mdW5jdGlvbiB3KCl7eS52YWwodC5qb2luKCIiKSl9ZnVuY3Rpb24gcihDKXt2YXIgRj15LnZhbCgpLEU9LTEsQixEO2ZvcihCPTAscG9zPTA7QjxoO0IrKyl7aWYobVtCXSl7dFtCXT1uLnBsYWNlaG9sZGVyO3doaWxlKHBvcysrPEYubGVuZ3RoKXtEPUYuY2hhckF0KHBvcy0xKTtpZihtW0JdLnRlc3QoRCkpe3RbQl09RDtFPUI7YnJlYWt9fWlmKHBvcz5GLmxlbmd0aCl7YnJlYWt9fWVsc2V7aWYodFtCXT09PUYuY2hhckF0KHBvcykmJkIhPT1vKXtwb3MrKztFPUJ9fX1pZihDKXt3KCl9ZWxzZXtpZihFKzE8byl7eS52YWwoIiIpO3EoMCxoKX1lbHNle3coKTt5LnZhbCh5LnZhbCgpLnN1YnN0cmluZygwLEUrMSkpfX1yZXR1cm4obz9COmwpfXkuZGF0YShlLm1hc2suZGF0YU5hbWUsZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihDLEIpe3JldHVybiBtW0JdJiZDIT1uLnBsYWNlaG9sZGVyP0M6bnVsbH0pLmpvaW4oIiIpfSk7aWYoIXkuYXR0cigicmVhZG9ubHkiKSl7eS5vbmUoInVubWFzayIsZnVuY3Rpb24oKXt5LnVuYmluZCgiLm1hc2siKS5yZW1vdmVEYXRhKGUubWFzay5kYXRhTmFtZSl9KS5iaW5kKCJmb2N1cy5tYXNrIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTt2YXIgQyxCO0E9eS52YWwoKTtpZihBPT09IiIpe3EoMCxoKTt3KCk7Qz0wfWVsc2V7Qz1yKCl9Zj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dygpO2lmKEM9PWoubGVuZ3RoKXt5LmNhcmV0KDAsQyl9ZWxzZXt5LmNhcmV0KEMpfX0sMTApfSkuYmluZCgiYmx1ci5tYXNrIixmdW5jdGlvbigpe3IoKTtpZih5LnZhbCgpIT1BKXt5LmNoYW5nZSgpfX0pLmJpbmQoImtleWRvd24ubWFzayIsdikuYmluZCgia2V5cHJlc3MubWFzayIseikuYmluZChiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBCPXIodHJ1ZSk7eS5jYXJldChCKTtpZihuLmNvbXBsZXRlZCYmQj09eS52YWwoKS5sZW5ndGgpe24uY29tcGxldGVkLmNhbGwoeSl9fSwwKX0pfXIoKX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE7YT1mdW5jdGlvbigpe3ZhciBnPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgZWxlbWVudCBhZ2FpbnN0IHdoaWNoIHRvIGFwcGx5IHRoZSBBbHBhY2EgZ2VuZXJhdGVkIGZvcm0iKX12YXIgZT1nWzBdO3ZhciBFPW51bGw7dmFyIHM9bnVsbDt2YXIgbD1udWxsO3ZhciBvPW51bGw7dmFyIG09bnVsbDt2YXIgaD1udWxsO3ZhciBuPW51bGw7dmFyIGM9bnVsbDt2YXIgaz1mYWxzZTt2YXIgRD1mYWxzZTt2YXIgcD17fTt2YXIgej1udWxsO3ZhciB2PW51bGw7dmFyIHE9bnVsbDt2YXIgZj1udWxsO2lmKGcubGVuZ3RoPT0xKXt2YXIgdD1iKGUpLmZpbmQoIjpmaXJzdCIpO3ZhciBkPW51bGw7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBCPXRbeF07dmFyIHc9YihCKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKTtpZih3KXt2YXIgdT1hLmZpZWxkSW5zdGFuY2VzW3ddO2lmKHUpe2Q9dX19fWlmKGQhPT1udWxsKXtyZXR1cm4gZH1lbHNle3ZhciBqPWIoZSkuaHRtbCgpO2IoZSkuaHRtbCgiIik7RT1qfX1pZihnLmxlbmd0aD49Mil7aWYoYS5pc09iamVjdChnWzFdKSl7RT1nWzFdLmRhdGE7cz1nWzFdLnNjaGVtYTtsPWdbMV0ub3B0aW9ucztvPWdbMV0udmlldzttPWdbMV0ucmVuZGVyO2g9Z1sxXS5wb3N0UmVuZGVyO249Z1sxXS5lcnJvcjtjPWdbMV0uY29ubmVjdG9yO3o9Z1sxXS5kYXRhU291cmNlO3Y9Z1sxXS5zY2hlbWFTb3VyY2U7cT1nWzFdLm9wdGlvbnNTb3VyY2U7Zj1nWzFdLnZpZXdTb3VyY2U7aWYoZ1sxXS51aSl7cC51aT1nWzFdLnVpfWlmKGdbMV0udHlwZSl7cC50eXBlPWdbMV0udHlwZX1pZighYS5pc0VtcHR5KGdbMV0ubm90VG9wTGV2ZWwpKXtrPWdbMV0ubm90VG9wTGV2ZWx9aWYoIWEuaXNFbXB0eShnWzFdLmlzRHluYW1pY0NyZWF0aW9uKSl7RD1nWzFdLmlzRHluYW1pY0NyZWF0aW9ufX1lbHNle0U9Z1sxXTtpZihhLmlzRnVuY3Rpb24oRSkpe0U9RSgpfX19aWYoYS5pc0VtcHR5KG4pKXtuPWEuZGVmYXVsdEVycm9yQ2FsbGJhY2t9aWYoYS5pc0VtcHR5KGMpKXt2YXIgeT1hLmdldENvbm5lY3RvckNsYXNzKCJkZWZhdWx0Iik7Yz1uZXcgeSgiZGVmYXVsdCIpfWlmKGUpe2lmKGEuaXNTdHJpbmcoZSkpe2U9YigiIyIrZSl9fXZhciBBPWM7aWYoayl7dmFyIEM9YS5nZXRDb25uZWN0b3JDbGFzcygiZGVmYXVsdCIpO0E9bmV3IEMoImRlZmF1bHQiKX1pZighbCl7bD17fX1pZihhLmlzVW5kZWZpbmVkKGwuZm9jdXMpKXtsLmZvY3VzPWZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe2lmKGwmJmwuZm9jdXMpe2lmKGwuZm9jdXM9PT10cnVlKXtpZihpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmxlbmd0aD4wKXtpZihpLmNoaWxkcmVuWzBdLmZpZWxkJiZpLmNoaWxkcmVuWzBdLmZpZWxkWzBdKXtiKGkuY2hpbGRyZW5bMF0pLmZvY3VzKCl9fX1lbHNle3ZhciBGPWkuZ2V0Q29udHJvbEJ5UGF0aChsLmZvY3VzKTtpZihGJiZGLmZpZWxkKXtiKEYpLmZvY3VzKCl9fX1pZihoKXtoKGkpfX07QS5sb2FkQWxsKHtkYXRhOkUsc2NoZW1hOnMsb3B0aW9uczpsLHZpZXc6byxkYXRhU291cmNlOnosc2NoZW1hU291cmNlOnYsb3B0aW9uc1NvdXJjZTpxLHZpZXdTb3VyY2U6Zn0sZnVuY3Rpb24oaSxGLEcsSCl7aT1pP2k6RTtHPUc/RzpzO0Y9Rj9GOmw7SD1IP0g6bztpZihhLmlzRW1wdHkoaSkpe2lmKGEuaXNFbXB0eShHKSYmKGEuaXNFbXB0eShGKXx8YS5pc0VtcHR5KEYudHlwZSkpKXtpPSIiO2lmKGEuaXNFbXB0eShGKSl7Rj0idGV4dCJ9ZWxzZXtpZihsJiZhLmlzT2JqZWN0KGwpKXtGLnR5cGU9InRleHQifX19fXJldHVybiBhLmluaXQoZSxpLEYsRyxILHAsbSxyLGMsbixEKX0sZnVuY3Rpb24oaSl7bihpKTtyZXR1cm4gbnVsbH0pO3JldHVybiBiKGUpfTthLkZpZWxkcz17fTthLkNvbm5lY3RvcnM9e307Yi5leHRlbmQoYSx7VkVSU0lPTjoiMC4xLjAiLG1ha2VBcnJheTpmdW5jdGlvbihjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYyl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09InN0cmluZyIpfSxpc09iamVjdDpmdW5jdGlvbihjKXtpZihjPT09dHJ1ZXx8Yz09PWZhbHNlfHxhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybih0eXBlb2YoYyk9PT0ib2JqZWN0IikmJih0eXBlb2YoYy5sZW5ndGgpPT09InVuZGVmaW5lZCIpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGMpe3JldHVybiBiLmlzUGxhaW5PYmplY3QoYyl9LGlzTnVtYmVyOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09Im51bWJlciIpfSxpc0FycmF5OmZ1bmN0aW9uKGMpe2lmKGM9PT10cnVlfHxjPT09ZmFsc2V8fGEuaXNVbmRlZmluZWQoYyl8fGM9PT1udWxsKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGMucHVzaCYmYy5zbGljZX0saXNCb29sZWFuOmZ1bmN0aW9uKGMpe3JldHVybih0eXBlb2YgYz09ImJvb2xlYW4iKX0saXNVbmRlZmluZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjPT0idW5kZWZpbmVkIil9LHRyaW06ZnVuY3Rpb24oZCl7dmFyIGM9ZDtpZihjJiZhLmlzU3RyaW5nKGMpKXtjPWMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfXJldHVybiBjfSxzYWZlRG9tUGFyc2U6ZnVuY3Rpb24oYyl7aWYoYyYmYS5pc1N0cmluZyhjKSl7Yz1hLnRyaW0oYyk7Yz1iKGMpfXJldHVybiBjfSxpc0VtcHR5OmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzVW5kZWZpbmVkKGMpfHxjPT09bnVsbH0sY29weU9mOmZ1bmN0aW9uKGQpe3ZhciBmPWQ7aWYoYS5pc0FycmF5KGQpKXtmPVtdO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtmLnB1c2goYS5jb3B5T2YoZFtlXSkpfX1lbHNle2lmKGEuaXNPYmplY3QoZCkpe2lmKGQgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gbmV3IERhdGUoZC5nZXRUaW1lKCkpfWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7cmV0dXJuIG5ldyBSZWdFeHAoZCl9ZWxzZXtpZihkLm5vZGVUeXBlJiYiY2xvbmVOb2RlIiBpbiBkKXtmPWQuY2xvbmVOb2RlKHRydWUpfWVsc2V7aWYoYi5pc1BsYWluT2JqZWN0KGQpKXtmPXt9O2Zvcih2YXIgYyBpbiBkKXtpZihkLmhhc093blByb3BlcnR5KGMpKXtmW2NdPWEuY29weU9mKGRbY10pfX19ZWxzZXt9fX19fX1yZXR1cm4gZn0sY2xvbmVPYmplY3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuY29weU9mKGMpfSxzcGxpY2VJbjpmdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZCkrZStjLnN1YnN0cmluZyhkLGMubGVuZ3RoKX0sY29tcGFjdEFycmF5OmZ1bmN0aW9uKGMpe3ZhciBmPVtdLGQ9Yy5sZW5ndGgsZTtmb3IoZT0wO2U8ZDtlKyspe2lmKCFsYW5nLmlzTnVsbChjW2VdKSYmIWxhbmcuaXNVbmRlZmluZWQoY1tlXSkpe2YucHVzaChjW2VdKX19cmV0dXJuIGZ9LHJlbW92ZUFjY2VudHM6ZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywiYSIpLnJlcGxhY2UoL1vDqMOpw6rDq10vZywiZSIpLnJlcGxhY2UoL1vDrMOtw67Dr10vZywiaSIpLnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCJvIikucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCJ1IikucmVwbGFjZSgvW8O9w79dL2csInkiKS5yZXBsYWNlKC9bw7FdL2csIm4iKS5yZXBsYWNlKC9bw6ddL2csImMiKS5yZXBsYWNlKC9bxZNdL2csIm9lIikucmVwbGFjZSgvW8OmXS9nLCJhZSIpfSxpbmRleE9mOmZ1bmN0aW9uKGcsYyxmKXt2YXIgZD1jLmxlbmd0aCxlO2lmKCFhLmlzRnVuY3Rpb24oZikpe2Y9ZnVuY3Rpb24oaCxpKXtyZXR1cm4gaD09PWl9fWZvcihlPTA7ZTxkO2UrKyl7aWYoZi5jYWxsKHt9LGcsY1tlXSkpe3JldHVybiBlfX1yZXR1cm4gLTF9LGxvZzpmdW5jdGlvbihjKXtpZih0eXBlb2YoY29uc29sZSkhPT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYyl9fSx1bmlxdWVJZENvdW50ZXI6MCxkZWZhdWx0TG9jYWxlOiJlbl9VUyIsc2V0RGVmYXVsdExvY2FsZTpmdW5jdGlvbihjKXt0aGlzLmRlZmF1bHRMb2NhbGU9Y30sZGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZzp7fSxyZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmc6ZnVuY3Rpb24oZCxjKXtpZihkJiZjKXt0aGlzLmRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmdbZF09Y319LGRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmc6e30scmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nOmZ1bmN0aW9uKGQsYyl7aWYoZCYmYyl7dGhpcy5kZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nW2RdPWN9fSxnZXRTY2hlbWFUeXBlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc09iamVjdChjKSl7cmV0dXJuIm9iamVjdCJ9aWYoYS5pc1N0cmluZyhjKSl7cmV0dXJuInN0cmluZyJ9aWYoYS5pc051bWJlcihjKSl7cmV0dXJuIm51bWJlciJ9aWYoYS5pc0FycmF5KGMpKXtyZXR1cm4iYXJyYXkifWlmKGEuaXNCb29sZWFuKGMpKXtyZXR1cm4iYm9vbGVhbiJ9aWYodHlwZW9mIGM9PSJvYmplY3QiKXtyZXR1cm4ib2JqZWN0In19LHZpZXdzOnt9LHZpZXdJZFByZWZpeDoiVklFV18iLGlzVmFsaWRWaWV3SWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuc3RhcnRzV2l0aChjLHRoaXMudmlld0lkUHJlZml4KX0sZ2VuZXJhdGVWaWV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3SWRQcmVmaXgrdGhpcy5nZW5lcmF0ZUlkKCl9LHJlZ2lzdGVyVmlldzpmdW5jdGlvbihkKXt2YXIgZT1kLmlkO2lmKCFlKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIHZpZXcgd2l0aCBtaXNzaW5nIHZpZXcgaWQ6ICIrZSl9dmFyIGM9dGhpcy52aWV3c1tlXTtpZihjKXthLm1lcmdlT2JqZWN0KGMsZCl9ZWxzZXt0aGlzLnZpZXdzW2VdPWR9fSxkZWZhdWx0VmlldzoiVklFV19XRUJfRURJVCIsc2V0RGVmYXVsdFZpZXc6ZnVuY3Rpb24oYyl7aWYoYyYmdGhpcy52aWV3cy5oYXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5kZWZhdWx0Vmlldz1jfX0sZ2V0Tm9ybWFsaXplZFZpZXc6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubm9ybWFsaXplZFZpZXdzW2NdfSxsb29rdXBOb3JtYWxpemVkVmlldzpmdW5jdGlvbihnLGYpe3ZhciBkPW51bGw7Zm9yKHZhciBjIGluIHRoaXMubm9ybWFsaXplZFZpZXdzKXt2YXIgZT10aGlzLm5vcm1hbGl6ZWRWaWV3c1tjXTtpZihlLnVpPT1nJiZlLnR5cGU9PWYpe2Q9YzticmVha319cmV0dXJuIGR9LHJlZ2lzdGVyVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS50ZW1wbGF0ZXMpe3RoaXMudmlld3NbY10udGVtcGxhdGVzPXt9fXRoaXMudmlld3NbY10udGVtcGxhdGVzW2RdPWV9LHJlZ2lzdGVyVGVtcGxhdGVzOmZ1bmN0aW9uKGUsYyl7Zm9yKHZhciBkIGluIGUpe3RoaXMucmVnaXN0ZXJUZW1wbGF0ZShkLGVbZF0sYyl9fSxyZWdpc3Rlck1lc3NhZ2U6ZnVuY3Rpb24oZCxlLGMpe2lmKCFjKXtjPSJWSUVXX0JBU0UifWlmKCF0aGlzLnZpZXdzW2NdKXt0aGlzLnZpZXdzW2NdPXt9O3RoaXMudmlld3NbY10uaWQ9Y31pZighdGhpcy52aWV3c1tjXS5tZXNzYWdlcyl7dGhpcy52aWV3c1tjXS5tZXNzYWdlcz17fX10aGlzLnZpZXdzW2NdLm1lc3NhZ2VzW2RdPWV9LHJlZ2lzdGVyTWVzc2FnZXM6ZnVuY3Rpb24oZSxjKXtmb3IodmFyIGQgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShkKSl7dGhpcy5yZWdpc3Rlck1lc3NhZ2UoZCxlW2RdLGMpfX19LGZpZWxkVGVtcGxhdGVQb3N0Zml4Ontjb250cm9sRmllbGRNZXNzYWdlQ29udGFpbmVyOiItY29udHJvbGZpZWxkLW1lc3NhZ2UtY29udGFpbmVyIixjb250cm9sRmllbGRMYWJlbDoiLWNvbnRyb2xmaWVsZC1sYWJlbCIsY29udHJvbEZpZWxkQ29udGFpbmVyOiItY29udHJvbGZpZWxkLWNvbnRhaW5lciIsY29udHJvbEZpZWxkSGVscGVyOiItY29udHJvbGZpZWxkLWhlbHBlciIsZmllbGRTZXRMZWdlbmQ6Ii1maWVsZHNldC1sZWdlbmQiLGZpZWxkU2V0SXRlbXNDb250YWluZXI6Ii1maWVsZHNldC1pdGVtcy1jb250YWluZXIiLGZpZWxkU2V0SGVscGVyOiItZmllbGRzZXQtaGVscGVyIixmaWVsZFNldE91dGVyRWw6Ii1maWVsZHNldCIsZm9ybUJ1dHRvbnNDb250YWluZXI6Ii1mb3JtLWJ1dHRvbnMtY29udGFpbmVyIixmb3JtRmllbGRzQ29udGFpbmVyOiItZm9ybS1maWVsZHMtY29udGFpbmVyIn0sZmllbGRUZW1wbGF0ZTpmdW5jdGlvbihlLGMsZCl7dmFyIGg9dGhpczt2YXIgaz1lLmRhdGE7dmFyIGk9ZS5kYXRhLnZpZXc7dmFyIGc9IiI7aWYoIWMpe2M9ImNvbnRyb2xGaWVsZExhYmVsIn12YXIgZj10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcihpLGMsayk7aWYoZCl7dmFyIGw9Zi50ZW1wbGF0ZS52YWx1ZTtpZihiKCIuYWxwYWNhIit0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdLGEuc2FmZURvbVBhcnNlKGwpKS5sZW5ndGg9PT0wKXtpZih0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKXtsPWEuc2FmZURvbVBhcnNlKGwpLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfX1nPWEuc2FmZURvbVBhcnNlKGwpLm91dGVySFRNTCh0cnVlKX1lbHNle3ZhciBqPWkudG1wbChmLGUuZGF0YSk7aWYoail7aWYodGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSl7aWYoYigiLmFscGFjYSIrdGhpcy5maWVsZFRlbXBsYXRlUG9zdGZpeFtjXSxqKS5sZW5ndGg9PT0wKXtqLmFkZENsYXNzKCJhbHBhY2EiK3RoaXMuZmllbGRUZW1wbGF0ZVBvc3RmaXhbY10pfWlmKCFqLmF0dHIoImlkIikpe2ouYXR0cigiaWQiLGUuZGF0YS5pZCt0aGlzLmZpZWxkVGVtcGxhdGVQb3N0Zml4W2NdKX19Zz1qLm91dGVySFRNTCh0cnVlKX1lbHNle2c9IiJ9fXJldHVybiBnfSxkZWZhdWx0RGF0ZUZvcm1hdDoibW0vZGQveXkiLHJlZ2V4cHM6e2VtYWlsOi9eW2EtejAtOSFcI1wkJSYnXCpcLVwvPVw/XCtcLVxeX2Bce1x8XH1+XSsoPzpcLlthLXowLTkhXCNcJCUmJ1wqXC1cLz1cP1wrXC1cXl9gXHtcfFx9fl0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16XXsyLDZ9JC9pLHVybDovXihodHRwfGh0dHBzKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KFw6WzAtOV17MSw1fSk/KChbMC05XXsxLDV9KT9cLy4qKT8kL2kscGFzc3dvcmQ6L15bMC05YS16QS1aXHgyMC1ceDdFXSokLyxkYXRlOi9eKDBbMS05XXwxWzAxMl0pWy0gLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gLy5dXGRcZCQvLGludGVnZXI6L14oW1wrXC1dPyhbMS05XVxkKil8MCkkLyxudW1iZXI6L14oW1wrXC1dPygoKFswLTldKyhcLik/KXwoWzAtOV0qXC5bMC05XSspKShbZUVdWystXT9bMC05XSspPykpJC8scGhvbmU6L14oXEQ/KFxkezN9KVxEP1xEPyhcZHszfSlcRD8oXGR7NH0pKT8kLyxpcHY0Oi9eKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSg/OlwuKD86MVxkP1xkP3wyKD86WzAtNF1cZD98WzY3ODldfDVbMC01XT8pP3xbMy05XVxkP3wwKSl7M30kLywiemlwY29kZS1maXZlIjovXihcZHs1fSk/JC8sInppcGNvZGUtbmluZSI6L14oXGR7NX0oLVxkezR9KT8pPyQvfSxmaWVsZEluc3RhbmNlczp7fSxmaWVsZENsYXNzUmVnaXN0cnk6e30scmVnaXN0ZXJGaWVsZENsYXNzOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY109ZH0sZ2V0RmllbGRDbGFzczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5maWVsZENsYXNzUmVnaXN0cnlbY119LGdldEZpZWxkQ2xhc3NUeXBlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLmZpZWxkQ2xhc3NSZWdpc3RyeSl7aWYodGhpcy5maWVsZENsYXNzUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoYykpe2lmKHRoaXMuZmllbGRDbGFzc1JlZ2lzdHJ5W2NdPT1kKXtyZXR1cm4gY319fXJldHVybiBudWxsfSxjb25uZWN0b3JDbGFzc1JlZ2lzdHJ5Ont9LHJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oZCxjKXt0aGlzLmNvbm5lY3RvckNsYXNzUmVnaXN0cnlbZF09Y30sZ2V0Q29ubmVjdG9yQ2xhc3M6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY29ubmVjdG9yQ2xhc3NSZWdpc3RyeVtjXX0scmVwbGFjZUFsbDpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKGMsImciKSxkKX0sZWxlbWVudDpmdW5jdGlvbihjLGUsZCxoKXt2YXIgZz1iKCI8IitjKyIvPiIpO2lmKGUpe2cuYXR0cihlKX1pZihkKXtnLmNzcyhkKX1pZihoKXtmb3IodmFyIGYgaW4gaCl7Zy5hZGRDbGFzcyhmKX19fSxlbGVtZW50RnJvbVRlbXBsYXRlOmZ1bmN0aW9uKGUsZil7dmFyIGQ9ZTtpZihmKXtmb3IodmFyIGMgaW4gZil7ZD1hLnJlcGxhY2VBbGwoZCwiJHsiK2MrIn0iLGZbY10pfX1yZXR1cm4gYihkKX0sZ2VuZXJhdGVJZDpmdW5jdGlvbigpe2EudW5pcXVlSWRDb3VudGVyKys7cmV0dXJuImFscGFjYSIrYS51bmlxdWVJZENvdW50ZXJ9LGxhdGVyOmZ1bmN0aW9uKGwsZSxuLGgsaSl7bD1sfHwwO2U9ZXx8e307dmFyIGc9bixrPWIubWFrZUFycmF5KGgpLGosYztpZih0eXBlb2Ygbj09PSJzdHJpbmciKXtnPWVbbl19aWYoIWcpe3Rocm93IHtuYW1lOiJUeXBlRXJyb3IiLG1lc3NhZ2U6IlRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIn19aj1mdW5jdGlvbigpe2cuYXBwbHkoZSxrKX07Yz0oaSk/c2V0SW50ZXJ2YWwoaixsKTpzZXRUaW1lb3V0KGosbCk7cmV0dXJue2lkOmMsaW50ZXJ2YWw6aSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhckludGVydmFsKGMpfWVsc2V7Y2xlYXJUaW1lb3V0KGMpfX19fSxlbmRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLmluZGV4T2YoYyxkLmxlbmd0aC1jLmxlbmd0aCkhPT0tMX0sc3RhcnRzV2l0aDpmdW5jdGlvbihkLGMpe3JldHVybiBkLnN1YnN0cigwLGMubGVuZ3RoKT09PWN9LGlzVXJpOmZ1bmN0aW9uKGMpe3JldHVybiBhLmlzU3RyaW5nKGMpJiYoYS5zdGFydHNXaXRoKGMsImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKGMsImh0dHBzOi8vIil8fGEuc3RhcnRzV2l0aChjLCIvIil8fGEuc3RhcnRzV2l0aChjLCIuLyIpfHxhLnN0YXJ0c1dpdGgoYywiLi4vIikpfSx0cmF2ZXJzZU9iamVjdDpmdW5jdGlvbihjLGcsZil7aWYoYS5pc1N0cmluZyhnKSl7Zz1nLnNwbGl0KCIuIil9dmFyIGU9bnVsbDt2YXIgaD1jO3ZhciBkPW51bGw7ZG97ZD1nLnNoaWZ0KCk7aWYoZiYmZD09Zil7ZD1nLnNoaWZ0KCl9aWYoIWEuaXNFbXB0eShoW2RdKSl7aD1oW2RdO2lmKGcubGVuZ3RoPT09MCl7ZT1ofX1lbHNle2c9W119fXdoaWxlKGcubGVuZ3RoPjApO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGYsZSl7aWYoYS5pc0FycmF5KGYpKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7ZS5hcHBseShmW2RdKX19ZWxzZXtpZihhLmlzT2JqZWN0KGYpKXtmb3IodmFyIGMgaW4gZil7ZS5hcHBseShmW2NdKX19fX0sbWVyZ2U6ZnVuY3Rpb24oZyxmLGQpe2lmKCFnKXtnPXt9fWZvcih2YXIgYyBpbiBmKXt2YXIgZT10cnVlO2lmKGQpe2U9ZChjKX1pZihlKXtpZihhLmlzRW1wdHkoZltjXSkpe2dbY109ZltjXX1lbHNle2lmKGEuaXNPYmplY3QoZltjXSkpe2lmKCFnW2NdKXtnW2NdPXt9fWdbY109YS5tZXJnZShnW2NdLGZbY10pfWVsc2V7Z1tjXT1mW2NdfX19fXJldHVybiBnfSxtZXJnZU9iamVjdDpmdW5jdGlvbihkLGMpe2lmKCFkKXtkPXt9fWlmKCFjKXtjPXt9fXRoaXMubWVyZ2VPYmplY3QyKGMsZCk7cmV0dXJuIGR9LG1lcmdlT2JqZWN0MjpmdW5jdGlvbihoLGkpe3ZhciBkPWEuaXNBcnJheTt2YXIgYz1hLmlzT2JqZWN0O3ZhciBmPWEuaXNVbmRlZmluZWQ7dmFyIGU9YS5jb3B5T2Y7dmFyIGc9ZnVuY3Rpb24oaixrKXtpZihkKGopKXtpZihkKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtrLnB1c2goZShqW2xdKSl9KX1lbHNle319ZWxzZXtpZihjKGopKXtpZihjKGspKXtiLmVhY2goaixmdW5jdGlvbihsKXtpZihmKGtbbF0pKXtrW2xdPWUoaltsXSl9ZWxzZXtrW2xdPWcoaltsXSxrW2xdKX19KX1lbHNle319ZWxzZXtrPWUoail9fXJldHVybiBrfTtnKGgsaSk7cmV0dXJuIGl9LHN1YnN0aXR1dGVUb2tlbnM6ZnVuY3Rpb24oaCxkKXtpZighYS5pc0VtcHR5KGgpKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGY9InsiK2crIn0iO3ZhciBjPWguaW5kZXhPZihmKTtpZihjPi0xKXt2YXIgZT1oLnN1YnN0cmluZygwLGMpK2RbZ10raC5zdWJzdHJpbmcoYyszKTtoPWV9fX1yZXR1cm4gaH0sY29tcGFyZU9iamVjdDpmdW5jdGlvbihkLGMpe3JldHVybiBlcXVpdihkLGMpfSxjb21wYXJlQXJyYXlDb250ZW50OmZ1bmN0aW9uKGQsYyl7dmFyIGU9ZCYmYyYmKGQubGVuZ3RoPT1jLmxlbmd0aCk7aWYoZSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxmKXtpZighZSl7cmV0dXJuIGZhbHNlfWlmKGIuaW5BcnJheShmLGMpPT0tMSl7ZT1mYWxzZX1lbHNle2U9dHJ1ZX19KX1yZXR1cm4gZX0saXNWYWxFbXB0eTpmdW5jdGlvbihkKXt2YXIgYz1mYWxzZTtpZihhLmlzRW1wdHkoZCkpe2M9dHJ1ZX1lbHNle2lmKGEuaXNTdHJpbmcoZCkmJmQ9PT0iIil7Yz10cnVlfWlmKGEuaXNPYmplY3QoZCkmJmIuaXNFbXB0eU9iamVjdChkKSl7Yz10cnVlfWlmKGEuaXNBcnJheShkKSYmZC5sZW5ndGg9PT0wKXtjPXRydWV9aWYoYS5pc051bWJlcihkKSYmaXNOYU4oZCkpe2M9dHJ1ZX19cmV0dXJuIGN9LGluaXQ6ZnVuY3Rpb24oYyxnLHAsZixsLGQsbixqLGUsaSxrKXt2YXIgbz10aGlzO2lmKGEuaXNPYmplY3QobCkpe3ZhciBtPWwuaWQ7aWYoIW0pe2wuaWQ9dGhpcy5nZW5lcmF0ZVZpZXdJZCgpfXZhciBoPWwucGFyZW50O2lmKCFoKXtsLnBhcmVudD0iVklFV19XRUJfRURJVCJ9dGhpcy5yZWdpc3RlclZpZXcobCk7bD1sLmlkfXRoaXMuY29tcGlsZShmdW5jdGlvbihyKXtpZihyLmVycm9ycyYmci5lcnJvcnMubGVuZ3RoPjApe2Zvcih2YXIgdD0wO3Q8ci5lcnJvcnMubGVuZ3RoO3QrKyl7dmFyIHE9ci5lcnJvcnNbdF0udmlld0lkO3ZhciBzPXIuZXJyb3JzW3RdLnRlbXBsYXRlSWQ7dmFyIHU9ci5lcnJvcnNbdF0uZXJyO2EubG9nRXJyb3IoIlRoZSB0ZW1wbGF0ZTogIitzKyIgZm9yIHZpZXc6ICIrcSsiIGZhaWxlZCB0byBjb21waWxlIik7YS5sb2dFcnJvcihKU09OLnN0cmluZ2lmeSh1KSl9cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVmlldyBjb21waWxhdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGkpfW8uX2luaXQoYyxnLHAsZixsLGQsbixqLGUsaSxrKX0saSl9LF9pbml0OmZ1bmN0aW9uKGUsdCxnLHEsbSxuLGksZixjLGoscyl7dmFyIGw9bnVsbDt2YXIgcD1udWxsO3ZhciByPW51bGw7aWYoYi5tb2JpbGUpe2w9Im1vYmlsZSI7aWYodCl7cD0iZWRpdCI7cj0iVklFV19NT0JJTEVfRURJVCJ9ZWxzZXtwPSJjcmVhdGUiO3I9IlZJRVdfTU9CSUxFX0NSRUFURSJ9fXZhciBrPSh0eXBlb2YgYigpLm1vZGFsPT0iZnVuY3Rpb24iKTtpZihrKXtsPSJib290c3RyYXAiO2lmKHQpe3A9ImVkaXQiO3I9IlZJRVdfQk9PVFNUUkFQX0VESVQifWVsc2V7cD0iY3JlYXRlIjtyPSJWSUVXX0JPT1RTVFJBUF9DUkVBVEUifX1pZighbSl7dmFyIG89bi51aTt2YXIgaD1uLnR5cGU7aWYoIW8pe2lmKCFsKXtsPWEuZGVmYXVsdFVJfWlmKGwpe289bH19aWYobyl7aWYoIWgpe2g9cD9wOiJlZGl0In1hLmxvZ0RlYnVnKCJObyB2aWV3IHByb3ZpZGVkIGJ1dCBmb3VuZCByZXF1ZXN0IGZvciBVSTogIitvKyIgYW5kIHR5cGU6ICIraCk7bT10aGlzLmxvb2t1cE5vcm1hbGl6ZWRWaWV3KG8saCk7aWYobSl7YS5sb2dEZWJ1ZygiRm91bmQgdmlldzogIittKX1lbHNle2EubG9nRGVidWcoIk5vIHZpZXcgZm91bmQgZm9yIFVJOiAiK28rIiBhbmQgdHlwZTogIitoKX19fWlmKCFtKXthLmxvZ0RlYnVnKCJBIHZpZXcgd2FzIG5vdCBzcGVjaWZpZWQuIik7aWYocil7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRldGVjdGVkIHZpZXc6ICIrcik7bT1yfWVsc2V7YS5sb2dEZWJ1ZygiRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdmlldzogIit0aGlzLmRlZmF1bHRWaWV3KTttPXRoaXMuZGVmYXVsdFZpZXd9fWlmKGEuaXNTdHJpbmcobSkpe2lmKCF0aGlzLm5vcm1hbGl6ZWRWaWV3c1ttXSl7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiVGhlIGRlc2lyZWQgdmlldzogIittKyIgY291bGQgbm90IGJlIGxvYWRlZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbG9hZGVkIGFuZCBub3QgbWlzc3BlbGxlZC4iLGopfX12YXIgZD1hLmNyZWF0ZUZpZWxkSW5zdGFuY2UoZSx0LGcscSxtLGMsaik7aWYoZCl7ZC5pc0R5bmFtaWNDcmVhdGlvbj1zO2EuZmllbGRJbnN0YW5jZXNbZC5nZXRJZCgpXT1kO2QuYWxsRmllbGRJbnN0YW5jZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5maWVsZEluc3RhbmNlc307aWYoYS5pc0VtcHR5KGkpKXtpPWQudmlldy5yZW5kZXJ9aWYoYS5pc0VtcHR5KGYpKXtmPWQudmlldy5wb3N0UmVuZGVyfWlmKCFhLmlzRW1wdHkoaSkpe2koZCxmKX1lbHNle2QucmVuZGVyKGYpfWQuY2FsbGJhY2s9aTtkLnJlbmRlcmVkQ2FsbGJhY2s9Zn1yZXR1cm4gZH0sY3JlYXRlRmllbGRJbnN0YW5jZTpmdW5jdGlvbihjLGYsayxlLGosZCxnKXtpZihhLmlzVmFsRW1wdHkoaykpe2s9e319aWYoYS5pc1ZhbEVtcHR5KGUpKXtlPXt9fWlmKGsmJmEuaXNTdHJpbmcoaykpe3ZhciBoPWs7az17fTtrLnR5cGU9aH1pZighay50eXBlKXtpZighZS50eXBlKXtlLnR5cGU9YS5nZXRTY2hlbWFUeXBlKGYpfWlmKGUmJmVbImVudW0iXSl7aWYoZVsiZW51bSJdLmxlbmd0aD4zKXtrLnR5cGU9InNlbGVjdCJ9ZWxzZXtrLnR5cGU9InJhZGlvIn19ZWxzZXtrLnR5cGU9YS5kZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nW2UudHlwZV19aWYoZS5mb3JtYXQmJmEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZ1tlLmZvcm1hdF0pe2sudHlwZT1hLmRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmdbZS5mb3JtYXRdfX12YXIgaT1hLmdldEZpZWxkQ2xhc3Moay50eXBlKTtpZighaSl7Zyh7bWVzc2FnZToiVW5hYmxlIHRvIGZpbmQgZmllbGQgY2xhc3MgZm9yIHR5cGU6ICIray50eXBlLHJlYXNvbjoiRklFTERfSU5TVEFOVElBVElPTl9FUlJPUiJ9KTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYyxmLGssZSxqLGQsZyl9LHBhcnNlSlNPTjpmdW5jdGlvbihjKXtpZighYyl7cmV0dXJuIG51bGx9cmV0dXJuIGIucGFyc2VKU09OKGMpfSxjb21waWxlOmZ1bmN0aW9uKGQsZyl7dmFyIGs9dGhpczt2YXIgZj17ZXJyb3JzOltdLGNvdW50OjAsc3VjY2Vzc0NvdW50OjB9O3ZhciBpPWZ1bmN0aW9uKGwpe2lmKGYuZXJyb3JzLmxlbmd0aD09PTApe2Zvcih2YXIgbSBpbiBsKXtrLm5vcm1hbGl6ZWRWaWV3c1ttXT1sW21dfX1kKGYpfTt2YXIgaD1mdW5jdGlvbihuLHAsbSxvLHEscil7dmFyIGw9bS5pZDtmLmNvdW50Kys7aWYocCl7Zi5lcnJvcnMucHVzaCh7dmlldzpsLHRlbXBsYXRlOm8sZXJyOnB9KX1lbHNle2Yuc3VjY2Vzc0NvdW50Kys7bS5jb21waWxlZFRlbXBsYXRlc1tvXT1xfWlmKGYuY291bnQ9PXIpe2kobil9fTt2YXIgYz1mdW5jdGlvbih2LHIsdCx1LG0pe3ZhciBzPXIuaWQ7dmFyIHA9bnVsbDtpZihhLmlzT2JqZWN0KHUpKXtwPXUudHlwZTt1PXUudGVtcGxhdGV9aWYoIXApe3A9InRleHQveC1qcXVlcnktdG1wbCJ9dmFyIHE9YS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LmZpbmQocCk7aWYoIXEpe2EubG9nRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitwKTtoKHYsbCxyLHQsbixtKX12YXIgbj1zKyJfIit0O2lmKHEuaXNDYWNoZWQobikpe2godixudWxsLHIsdCxuLG0pfWVsc2V7dmFyIG89ci5jb21waWxlZFRlbXBsYXRlc1sidmlldy0iK3VdO2lmKG8pe3U9YS5UZW1wbGF0ZUNhY2hlW29dfXEuY29tcGlsZShuLHUsZnVuY3Rpb24odyx4KXtoKHYsdyxyLHQsbixtKX0pfX07dmFyIGo9ZnVuY3Rpb24ocyl7dmFyIG09W107Zm9yKHZhciBxIGluIHMpe3ZhciBwPXNbcV07cC5jb21waWxlZFRlbXBsYXRlcz17fTtpZihwLnRlbXBsYXRlcyl7Zm9yKHZhciBsIGluIHAudGVtcGxhdGVzKXt2YXIgcj1wLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwidmlldy0iK2wscikpfX1pZihwLmZpZWxkcyl7Zm9yKHZhciB0IGluIHAuZmllbGRzKXtpZihwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe2Zvcih2YXIgbCBpbiBwLmZpZWxkc1t0XS50ZW1wbGF0ZXMpe3ZhciByPXAuZmllbGRzW3RdLnRlbXBsYXRlc1tsXTttLnB1c2goZnVuY3Rpb24odix1LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKHkpe2Modix1LHgsdyx5KX19KHMscCwiZmllbGQtIit0KyItIitsLHIpKX19fX1pZihwLmxheW91dCYmcC5sYXlvdXQudGVtcGxhdGUpe3ZhciByPXAubGF5b3V0LnRlbXBsYXRlO20ucHVzaChmdW5jdGlvbih2LHUseCx3KXtyZXR1cm4gZnVuY3Rpb24oeSl7Yyh2LHUseCx3LHkpfX0ocyxwLCJsYXlvdXRUZW1wbGF0ZSIscikpfWlmKHAuZ2xvYmFsVGVtcGxhdGUpe3ZhciByPXAuZ2xvYmFsVGVtcGxhdGU7bS5wdXNoKGZ1bmN0aW9uKHYsdSx4LHcpe3JldHVybiBmdW5jdGlvbih5KXtjKHYsdSx4LHcseSl9fShzLHAsImdsb2JhbFRlbXBsYXRlIixyKSl9fXZhciBuPW0ubGVuZ3RoO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXttW29dKG4pfX07dmFyIGU9ZnVuY3Rpb24oKXt2YXIgbT17fTt2YXIgbz0wO2lmKCFhLm5vcm1hbGl6ZWRWaWV3cyl7YS5ub3JtYWxpemVkVmlld3M9e319ay5ub3JtYWxpemVkVmlld3M9YS5ub3JtYWxpemVkVmlld3M7Zm9yKHZhciBsIGluIGsudmlld3Mpe2lmKCFhLm5vcm1hbGl6ZWRWaWV3c1tsXSl7dmFyIG49bmV3IGEuTm9ybWFsaXplZFZpZXcobCk7aWYobi5ub3JtYWxpemUoKSl7bVtsXT1uO28rK31lbHNle3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIlZpZXcgbm9ybWFsaXphdGlvbiBmYWlsZWQsIGNhbm5vdCBpbml0aWFsaXplIEFscGFjYS4gIFBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbG9ncy4iLGcpfX19aWYobz4wKXtqKG0pfWVsc2V7aShtKX19O2UoKX0sZ2V0VGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKGksZCxqKXt2YXIgYz17fTt2YXIgbTt2YXIgZTtpZihpLnRlbXBsYXRlcyYmaS50ZW1wbGF0ZXNbZF0pe209aS50ZW1wbGF0ZXNbZF07ZT0idmlldyJ9aWYoaiYmai5wYXRoKXt2YXIgbj1qLnBhdGg7aWYoaSYmaS5maWVsZHMmJmkuZmllbGRzW25dJiZpLmZpZWxkc1tuXS50ZW1wbGF0ZXMmJmkuZmllbGRzW25dLnRlbXBsYXRlc1tkXSl7bT1pLmZpZWxkc1tuXS50ZW1wbGF0ZXNbZF07ZT0iZmllbGQifX1pZihkPT0iZ2xvYmFsVGVtcGxhdGUiKXttPSJnbG9iYWxUZW1wbGF0ZSI7ZT0iZ2xvYmFsIn1pZihkPT0ibGF5b3V0VGVtcGxhdGUiKXttPSJsYXlvdXRUZW1wbGF0ZSI7ZT0ibGF5b3V0In1jLnRlbXBsYXRlPXt9O2MudGVtcGxhdGUuaWQ9ZDtjLnRlbXBsYXRlLnR5cGU9ZTtjLnRlbXBsYXRlLnZhbHVlPW07dmFyIGc9bnVsbDt2YXIgbD1tO2lmKGEuaXNPYmplY3QobCkpe2c9bC50eXBlO2w9bC50ZW1wbGF0ZX1pZighZyl7Zz0idGV4dC94LWpxdWVyeS10bXBsIn12YXIgaD1hLlRlbXBsYXRlRW5naW5lUmVnaXN0cnkuZmluZChnKTtpZighaCl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIGVuZ2luZSBmb3IgdHlwZTogIitnKX1jLmVuZ2luZT17fTtjLmVuZ2luZS50eXBlPWc7Yy5lbmdpbmUuaWQ9aC5pZDt2YXIgaz1udWxsO2lmKGU9PSJ2aWV3Iil7az0idmlldy0iK2R9ZWxzZXtpZihlPT0iZmllbGQiKXtrPSJmaWVsZC0iK2oucGF0aCsiLSIrZH1lbHNle2lmKGU9PSJsYXlvdXQiKXtrPSJsYXlvdXRUZW1wbGF0ZSJ9ZWxzZXtpZihlPT0iZ2xvYmFsIil7az0iZ2xvYmFsVGVtcGxhdGUifX19fWMuY29tcGlsZWRUZW1wbGF0ZUlkPWs7dmFyIGY9aS5jb21waWxlZFRlbXBsYXRlc1trXTtpZighZnx8IWguaXNDYWNoZWQoZikpe3JldHVybiBudWxsfWMuY2FjaGU9e307Yy5jYWNoZS5rZXk9ZjtyZXR1cm4gY30sdG1wbDpmdW5jdGlvbihkLGMsZSl7aWYoYS5pc1N0cmluZyhkKSl7ZD10aGlzLm5vcm1hbGl6ZWRWaWV3c1tkXX12YXIgaT1jLmVuZ2luZS50eXBlO3ZhciBoPWMuY29tcGlsZWRUZW1wbGF0ZUlkO3ZhciBnPWEuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5maW5kKGkpO2lmKCFnKXtyZXR1cm4gYS50aHJvd0RlZmF1bHRFcnJvcigiQ2Fubm90IGZpbmQgdGVtcGxhdGUgZW5naW5lIGZvciB0eXBlOiAiK2kpfXZhciBqPWMuY2FjaGUua2V5O3ZhciBmPWcuZXhlY3V0ZShqLGUsZnVuY3Rpb24oayl7cmV0dXJuIGEudGhyb3dEZWZhdWx0RXJyb3IoIlRoZSBjb21waWxlZCB0ZW1wbGF0ZTogIitoKyIgZm9yIHZpZXc6ICIrZC5pZCsiIGZhaWxlZCB0byBleGVjdXRlOiAiK0pTT04uc3RyaW5naWZ5KGspKX0pO3JldHVybiBhLnNhZmVEb21QYXJzZShmKX19KTthLkRFQlVHPTA7YS5JTkZPPTE7YS5XQVJOPTI7YS5FUlJPUj0zO2EubG9nTGV2ZWw9YS5XQVJOO2EubG9nRGVidWc9ZnVuY3Rpb24oYyl7YS5sb2coYS5ERUJVRyxjKX07YS5sb2dJbmZvPWZ1bmN0aW9uKGMpe2EubG9nKGEuSU5GTyxjKX07YS5sb2dXYXJuPWZ1bmN0aW9uKGMpe2EubG9nKGEuV0FSTixjKX07YS5sb2dFcnJvcj1mdW5jdGlvbihjKXthLmxvZyhhLkVSUk9SLGMpfTthLmxvZz1mdW5jdGlvbihmLGMpe3ZhciBlPXswOiJkZWJ1ZyIsMToiaW5mbyIsMjoid2FybiIsMzoiZXJyb3IifTtpZihhLmxvZ0xldmVsPD1mKXt2YXIgZD1lW2ZdO2lmKHR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGVbZF0pe2lmKCJkZWJ1ZyI9PWQpe2NvbnNvbGUuZGVidWcoYyl9ZWxzZXtpZigiaW5mbyI9PWQpe2NvbnNvbGUuaW5mbyhjKX1lbHNle2lmKCJ3YXJuIj09ZCl7Y29uc29sZS53YXJuKGMpfWVsc2V7aWYoImVycm9yIj09ZCl7Y29uc29sZS5lcnJvcihjKX1lbHNle2NvbnNvbGUubG9nKGMpfX19fX19fTthLmNoZWNrZWQ9ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS5hdHRyUHJvcChjLCJjaGVja2VkIixkKX07YS5hdHRyUHJvcD1mdW5jdGlvbihkLGMsZSl7aWYoISh0eXBlb2YoZSk9PT0idW5kZWZpbmVkIikpe2lmKGIoZCkucHJvcCl7YihkKS5wcm9wKGMsZSl9ZWxzZXtpZihlKXtiKGQpLmF0dHIoYyxlKX1lbHNle2IoZCkucmVtb3ZlQXR0cihjKX19fWlmKGIoZCkucHJvcCl7cmV0dXJuIGIoZCkucHJvcChjKX1yZXR1cm4gYihkKS5hdHRyKGMpfTthLmxvYWRSZWZTY2hlbWFPcHRpb25zPWZ1bmN0aW9uKGgsZyxpKXtpZihnLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik+LTEpe3ZhciBkPWcuc3Vic3RyaW5nKDE0KTt2YXIgYz1udWxsO2lmKGguc2NoZW1hLmRlZmluaXRpb25zKXtjPWguc2NoZW1hLmRlZmluaXRpb25zW2RdfXZhciBmPW51bGw7aWYoaC5vcHRpb25zLmRlZmluaXRpb25zKXtmPWgub3B0aW9ucy5kZWZpbml0aW9uc1tkXX1pKGMsZil9ZWxzZXt2YXIgZT1hLnJlc29sdmVSZWZlcmVuY2UoaC5zY2hlbWEsaC5vcHRpb25zLGcpO2lmKGUpe2koZS5zY2hlbWEsZS5vcHRpb25zKX1lbHNle2koKX19fTthLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s9ZnVuY3Rpb24oYyl7aWYoYyYmYy5tZXNzYWdlKXthLmxvZ0Vycm9yKGMubWVzc2FnZSk7dGhyb3cgbmV3IEVycm9yKCJBbHBhY2EgY2F1Z2h0IGFuIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcjogIitjLm1lc3NhZ2UpfX07YS5kZWZhdWx0RXJyb3JDYWxsYmFjaz1hLkRFRkFVTFRfRVJST1JfQ0FMTEJBQ0s7YS50aHJvd0RlZmF1bHRFcnJvcj1mdW5jdGlvbihkKXtpZihkJiZhLmlzT2JqZWN0KGQpKXtkPUpTT04uc3RyaW5naWZ5KGQpfXZhciBjPXttZXNzYWdlOmR9O2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soYyl9O2EudGhyb3dFcnJvcldpdGhDYWxsYmFjaz1mdW5jdGlvbihlLGMpe2lmKGUmJmEuaXNPYmplY3QoZSkpe2U9SlNPTi5zdHJpbmdpZnkoZSl9dmFyIGQ9e21lc3NhZ2U6ZX07aWYoYyl7YyhkKX1lbHNle2EuZGVmYXVsdEVycm9yQ2FsbGJhY2soZCl9fTthLnJlc29sdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZyxlLGgpe2lmKGcuaWQ9PWgpe3ZhciBkPXt9O2lmKGcpe2Quc2NoZW1hPWd9aWYoZSl7ZC5vcHRpb25zPWV9cmV0dXJuIGR9ZWxzZXtpZihnJiZnLnByb3BlcnRpZXMpe2Zvcih2YXIgaSBpbiBnLnByb3BlcnRpZXMpe3ZhciBmPWcucHJvcGVydGllc1tpXTt2YXIgaj1udWxsO2lmKGUmJmUuZmllbGRzJiZlLmZpZWxkc1tpXSl7aj1lLmZpZWxkc1tpXX12YXIgYz1hLnJlc29sdmVSZWZlcmVuY2UoZixqLGgpO2lmKGMpe3JldHVybiBjfX19fXJldHVybiBudWxsfTtiLmFscGFjYT13aW5kb3cuQWxwYWNhPWE7Yi5mbi5hbHBhY2E9ZnVuY3Rpb24oKXt2YXIgZD1hLm1ha2VBcnJheShhcmd1bWVudHMpO3ZhciBjPVtdLmNvbmNhdCh0aGlzLGQpO3JldHVybiBhLmFwcGx5KHRoaXMsYyl9O2IuZm4ub3V0ZXJIVE1MPWZ1bmN0aW9uKGMpe2lmKGMpe3JldHVybiBiKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZCh0aGlzKS5odG1sKCl9ZWxzZXtyZXR1cm4gYigiPGRpdj48L2Rpdj4iKS5hcHBlbmQodGhpcy5jbG9uZSgpKS5odG1sKCl9fTtiLmZuLnN3YXBXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1iKGMpLmNsb25lKCk7dmFyIGU9Yih0aGlzKS5jbG9uZSgpO2IoYykucmVwbGFjZVdpdGgoZSk7Yih0aGlzKS5yZXBsYWNlV2l0aChkKX0pfTtiLmZuLmF0dHJQcm9wPWZ1bmN0aW9uKGMsZCl7cmV0dXJuIGEuYXR0clByb3AoYih0aGlzKSxjLGQpfTtiLmV2ZW50LnNwZWNpYWwuZGVzdHJveWVkPXtyZW1vdmU6ZnVuY3Rpb24oYyl7aWYoYy5oYW5kbGVyKXtjLmhhbmRsZXIoKX19fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCl7QWxwYWNhLlRlbXBsYXRlRW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgYT17fTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oYyxiKXthW2NdPWJ9LGZpbmQ6ZnVuY3Rpb24oZCl7dmFyIGU9bnVsbDtpZihhW2RdKXtlPWFbZF19ZWxzZXtmb3IodmFyIGYgaW4gYSl7dmFyIGM9YVtmXS5zdXBwb3J0ZWRNaW1ldHlwZXMoKTtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7aWYoZC50b0xvd2VyQ2FzZSgpPT1jW2JdLnRvTG93ZXJDYXNlKCkpe2U9YVtmXTticmVha319fX1yZXR1cm4gZX0saWRzOmZ1bmN0aW9uKCl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpe2IucHVzaChjKX1yZXR1cm4gYn19fSgpfSkoKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mKEFscGFjYS5UZW1wbGF0ZUNhY2hlKT09InVuZGVmaW5lZCIpe0FscGFjYS5UZW1wbGF0ZUNhY2hlPXt9fUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmJhc2UoKTt0aGlzLmlkPWI7dGhpcy5jbGVhbk1hcmt1cD1mdW5jdGlvbihjKXt2YXIgZD1BbHBhY2Euc2FmZURvbVBhcnNlKGMpO2lmKGEoZCkubGVuZ3RoPT0xKXtpZihhKGQpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtjPWEoZCkuaHRtbCgpfX1yZXR1cm4gY319LGNvbXBpbGU6ZnVuY3Rpb24oaCxmLGkpe3ZhciBiPXRoaXM7dmFyIGU9Imh0bWwiO2lmKEFscGFjYS5pc1N0cmluZyhmKSl7aWYoZi5pbmRleE9mKCIuLyIpPT09MHx8Zi5pbmRleE9mKCIvIik9PT0wfHxmLmluZGV4T2YoIi4uLyIpPT09MCl7ZT0idXJpIn1lbHNle2lmKGYuaW5kZXhPZigiIyIpPT09MHx8Zi5pbmRleE9mKCIuIik9PT0wfHxmLmluZGV4T2YoIlsiKT09PTApe2U9InNlbGVjdG9yIn19fWVsc2V7fWlmKGU9PSJzZWxlY3RvciIpe2IuX2NvbXBpbGUoaCxmLGkpfWVsc2V7aWYoZT09InVyaSIpe3ZhciBnPWIuZmlsZUV4dGVuc2lvbigpO3ZhciBjPWY7aWYoYy5pbmRleE9mKCIuIitnKT09PS0xKXtjKz0iLiIrZ31hLmFqYXgoe3VybDpjLGRhdGFUeXBlOiJodG1sIixzdWNjZXNzOmZ1bmN0aW9uKGope2o9Yi5jbGVhbk1hcmt1cChqKTtiLl9jb21waWxlKGgsaixpKX0sZmFpbHVyZTpmdW5jdGlvbihqKXtpKGosbnVsbCl9fSl9ZWxzZXtpZihlPT0iaHRtbCIpe3ZhciBkPWY7aWYoZCBpbnN0YW5jZW9mIGpRdWVyeSl7ZD1BbHBhY2Euc2FmZURvbVBhcnNlKGYpLm91dGVySFRNTCgpfWIuX2NvbXBpbGUoaCxkLGkpfWVsc2V7aShuZXcgRXJyb3IoIlRlbXBsYXRlIGVuZ2luZSBjYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdHlwZTogIitlKSl9fX19LF9jb21waWxlOmZ1bmN0aW9uKGMsYixkKXtpZihBbHBhY2EuaXNFbXB0eShiKSl7Yj0iIn1iPUFscGFjYS50cmltKGIpO2lmKGIudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI8c2NyaXB0Iik9PT0wKXt9ZWxzZXtiPSI8c2NyaXB0IHR5cGU9JyIrdGhpcy5zdXBwb3J0ZWRNaW1ldHlwZXMoKVswXSsiJz4iK2IrIjxcL3NjcmlwdD4ifUFscGFjYS5sb2dEZWJ1ZygiQ29tcGlsaW5nIHRlbXBsYXRlOiAiK3RoaXMuaWQrIiwgY2FjaGVLZXk6ICIrYysiLCB0ZW1wbGF0ZTogIitiKTt0aGlzLmRvQ29tcGlsZShjLGIsZCl9LGRvQ29tcGlsZTpmdW5jdGlvbihjLGIsZCl7fSxleGVjdXRlOmZ1bmN0aW9uKGUsYixmKXtBbHBhY2EubG9nRGVidWcoIkV4ZWN1dGluZyB0ZW1wbGF0ZSBmb3IgY2FjaGUga2V5OiAiK2UpO3ZhciBjPXRoaXMuZG9FeGVjdXRlKGUsYixmKTt2YXIgZD1mdW5jdGlvbihnKXt2YXIgaD1BbHBhY2Euc2FmZURvbVBhcnNlKGcpO2lmKGEoaCkubGVuZ3RoPT0xKXtpZihhKGgpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJzY3JpcHQiKXtyZXR1cm4gYShoKS5odG1sKCl9fXJldHVybiBnfTtjPWQoYyk7cmV0dXJuIGN9LGRvRXhlY3V0ZTpmdW5jdGlvbihjLGIsZCl7fSxmaWxlRXh0ZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuImh0bWwifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtanF1ZXJ5LXRlbXBsYXRlIiwidGV4dC94LWpxdWVyeS10bXBsIl19LGRvQ29tcGlsZTpmdW5jdGlvbihkLGIsZil7dHJ5e2EudGVtcGxhdGUoZCxiKX1jYXRjaChjKXtmKGMpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtkXT1iO2YoKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGssZyxsKXt2YXIgbT10aGlzO3ZhciBmPW51bGw7dHJ5e3ZhciBiPWEudG1wbChrLGcpO2I9Yi5vdXRlckhUTUwoKTt2YXIgZD0tMTtkb3tkPWIuaW5kZXhPZigiX3RtcGxpdGVtPSIpO2lmKGQ+LTEpe3ZhciBjPWIuaW5kZXhPZigiICIsZCk7aWYoYz09LTEpe2M9Yi5pbmRleE9mKCI+IixkKX1pZihjPT0tMSl7bCh7bWVzc2FnZToiU2hvdWxkIGhhdmUgZm91bmQgY2xvc2luZyB3aGl0ZXNwYWNlIG9yICc+JyBmb3IgX3RtcGxpdGVtIGF0dHJpYnV0ZSJ9KTtyZXR1cm59Yj1iLnN1YnN0cmluZygwLGQpK2Iuc3Vic3RyaW5nKGMpfX13aGlsZShkPi0xKTtmPUFscGFjYS5zYWZlRG9tUGFyc2UoYil9Y2F0Y2goaCl7bCh7bWVzc2FnZTpoLm1lc3NhZ2V9KTtyZXR1cm4gbnVsbH1yZXR1cm4gZn0saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJ0bXBsIixuZXcgQWxwYWNhLkpRdWVyeVRlbXBsYXRlRW5naW5lKCJ0bXBsIikpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYSl7QWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJlanMifSxzdXBwb3J0ZWRNaW1ldHlwZXM6ZnVuY3Rpb24oKXtyZXR1cm5bInRleHQveC1lanMtdGVtcGxhdGUiLCJ0ZXh0L3gtZWpzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYyxnKXt2YXIgYj1udWxsO3RyeXtiPW5ldyBFSlMoe25hbWU6Zix0ZXh0OmN9KX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1iO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYyxoKXt2YXIgYj1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgZD1udWxsO3RyeXtkPWIucmVuZGVyKGMpfWNhdGNoKGYpe2goZik7cmV0dXJuIG51bGx9cmV0dXJuIGR9LGlzQ2FjaGVkOmZ1bmN0aW9uKGIpe3JldHVybihBbHBhY2EuVGVtcGxhdGVDYWNoZVtiXT90cnVlOmZhbHNlKX19KTtBbHBhY2EuVGVtcGxhdGVFbmdpbmVSZWdpc3RyeS5yZWdpc3RlcigiZWpzIixuZXcgQWxwYWNhLkVKU1RlbXBsYXRlRW5naW5lKCJlanMiKSl9KShqUXVlcnkpOyhmdW5jdGlvbihhKXtBbHBhY2EuSGFuZGxlYmFyc1RlbXBsYXRlRW5naW5lPUFscGFjYS5BYnN0cmFjdFRlbXBsYXRlRW5naW5lLmV4dGVuZCh7ZmlsZUV4dGVuc2lvbjpmdW5jdGlvbigpe3JldHVybiJodG1sIn0sc3VwcG9ydGVkTWltZXR5cGVzOmZ1bmN0aW9uKCl7cmV0dXJuWyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSIsInRleHQveC1oYW5kbGViYXJzLXRtcGwiXX0sZG9Db21waWxlOmZ1bmN0aW9uKGYsYixnKXt2YXIgYz1udWxsO3RyeXtjPUhhbmRsZWJhcnMuY29tcGlsZShiKX1jYXRjaChkKXtnKGQpO3JldHVybn1BbHBhY2EuVGVtcGxhdGVDYWNoZVtmXT1jO2coKX0sZG9FeGVjdXRlOmZ1bmN0aW9uKGcsYixoKXt2YXIgZD1BbHBhY2EuVGVtcGxhdGVDYWNoZVtnXTt2YXIgYz1udWxsO3RyeXtjPWQoYil9Y2F0Y2goZil7aChmKTtyZXR1cm4gbnVsbH1yZXR1cm4gY30saXNDYWNoZWQ6ZnVuY3Rpb24oYil7cmV0dXJuKEFscGFjYS5UZW1wbGF0ZUNhY2hlW2JdP3RydWU6ZmFsc2UpfX0pO0FscGFjYS5UZW1wbGF0ZUVuZ2luZVJlZ2lzdHJ5LnJlZ2lzdGVyKCJoYW5kbGViYXJzIixuZXcgQWxwYWNhLkhhbmRsZWJhcnNUZW1wbGF0ZUVuZ2luZSgiaGFuZGxlYmFycyIpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIix0aXRsZToiQWJzdHJhY3QgYmFzZSB2aWV3IixkZXNjcmlwdGlvbjoiRm91bmRhdGlvbiB2aWV3IHdoaWNoIHByb3ZpZGVzIGFuIGFic3RyYWN0IHZpZXcgZnJvbSB3aGljaCBhbGwgb3RoZXIgdmlld3MgZXh0ZW5kLiIsbWVzc2FnZXM6e2NvdW50cmllczp7YWZnOiJBZmdoYW5pc3RhbiIsYWxhOiJBbGFuZCBJc2xhbmRzIixhbGI6IkFsYmFuaWEiLGR6YToiQWxnZXJpYSIsYXNtOiJBbWVyaWNhbiBTYW1vYSIsYW5kOiJBbmRvcnJhIixhZ286IkFuZ29sYSIsYWlhOiJBbmd1aWxsYSIsYXRhOiJBbnRhcmN0aWNhIixhdGc6IkFudGlndWEgYW5kIEJhcmJ1ZGEiLGFyZzoiQXJnZW50aW5hIixhcm06IkFybWVuaWEiLGFidzoiQXJ1YmEiLGF1czoiQXVzdHJhbGlhIixhdXQ6IkF1c3RyaWEiLGF6ZToiQXplcmJhaWphbiIsYmhzOiJCYWhhbWFzIixiaHI6IkJhaHJhaW4iLGJnZDoiQmFuZ2xhZGVzaCIsYnJiOiJCYXJiYWRvcyIsYmxyOiJCZWxhcnVzIixiZWw6IkJlbGdpdW0iLGJsejoiQmVsaXplIixiZW46IkJlbmluIixibXU6IkJlcm11ZGEiLGJ0bjoiQmh1dGFuIixib2w6IkJvbGl2aWEiLGJpaDoiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsYndhOiJCb3Rzd2FuYSIsYnZ0OiJCb3V2ZXQgSXNsYW5kIixicmE6IkJyYXppbCIsaW90OiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGJybjoiQnJ1bmVpIERhcnVzc2FsYW0iLGJncjoiQnVsZ2FyaWEiLGJmYToiQnVya2luYSBGYXNvIixiZGk6IkJ1cnVuZGkiLGtobToiQ2FtYm9kaWEiLGNtcjoiQ2FtZXJvb24iLGNhbjoiQ2FuYWRhIixjcHY6IkNhcGUgVmVyZGUiLGN5bToiQ2F5bWFuIElzbGFuZHMiLGNhZjoiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIix0Y2Q6IkNoYWQiLGNobDoiQ2hpbGUiLGNobjoiQ2hpbmEiLGN4cjoiQ2hyaXN0bWFzIElzbGFuZCIsY2NrOiJDb2NvcyAoS2VlbGluZyksIElzbGFuZHMiLGNvbDoiQ29sb21iaWEiLGNvbToiQ29tb3JvcyIsY29nOiJDb25nbyIsY29kOiJDb25nbywgdGhlIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIixjb2s6IkNvb2sgSXNsYW5kcyIsY3JpOiJDb3N0YSBSaWNhIixocnY6IkNyb2F0aWEiLGN1YjoiQ3ViYSIsY3lwOiJDeXBydXMiLGN6ZToiQ3plY2ggUmVwdWJsaWMiLGNpdjoiQ290ZSBkJ0l2b2lyZSIsZG5rOiJEZW5tYXJrIixkamk6IkRqaWJvdXRpIixkbWE6IkRvbWluaWNhIixkb206IkRvbWluaWNhbiBSZXB1YmxpYyIsZWN1OiJFY3VhZG9yIixlZ3k6IkVneXB0IixzbHY6IkVsIFNhbHZhZG9yIixnbnE6IkVxdWF0b3JpYWwgR3VpbmVhIixlcmk6IkVyaXRyZWEiLGVzdDoiRXN0b25pYSIsZXRoOiJFdGhpb3BpYSIsZmxrOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcyksIixmcm86IkZhcm9lIElzbGFuZHMiLGZqaToiRmlqaSIsZmluOiJGaW5sYW5kIixmcmE6IkZyYW5jZSIsZ3VmOiJGcmVuY2ggR3VpYW5hIixweWY6IkZyZW5jaCBQb2x5bmVzaWEiLGF0ZjoiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIixnYWI6IkdhYm9uIixnbWI6IkdhbWJpYSIsZ2VvOiJHZW9yZ2lhIixkZXU6Ikdlcm1hbnkiLGdoYToiR2hhbmEiLGdpYjoiR2licmFsdGFyIixncmM6IkdyZWVjZSIsZ3JsOiJHcmVlbmxhbmQiLGdyZDoiR3JlbmFkYSIsZ2xwOiJHdWFkZWxvdXBlIixndW06Ikd1YW0iLGd0bToiR3VhdGVtYWxhIixnZ3k6Ikd1ZXJuc2V5IixnaW46Ikd1aW5lYSIsZ25iOiJHdWluZWEtQmlzc2F1IixndXk6Ikd1eWFuYSIsaHRpOiJIYWl0aSIsaG1kOiJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMiLHZhdDoiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIixobmQ6IkhvbmR1cmFzIixoa2c6IkhvbmcgS29uZyIsaHVuOiJIdW5nYXJ5Iixpc2w6IkljZWxhbmQiLGluZDoiSW5kaWEiLGlkbjoiSW5kb25lc2lhIixpcm46IklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YiLGlycToiSXJhcSIsaXJsOiJJcmVsYW5kIixpbW46IklzbGUgb2YgTWFuIixpc3I6IklzcmFlbCIsaXRhOiJJdGFseSIsamFtOiJKYW1haWNhIixqcG46IkphcGFuIixqZXk6IkplcnNleSIsam9yOiJKb3JkYW4iLGthejoiS2F6YWtoc3RhbiIsa2VuOiJLZW55YSIsa2lyOiJLaXJpYmF0aSIscHJrOiJLb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiIsa29yOiJLb3JlYSwgUmVwdWJsaWMgb2YiLGt3dDoiS3V3YWl0IixrZ3o6Ikt5cmd5enN0YW4iLGxhbzoiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLGx2YToiTGF0dmlhIixsYm46IkxlYmFub24iLGxzbzoiTGVzb3RobyIsbGJyOiJMaWJlcmlhIixsYnk6IkxpYnlhbiBBcmFiIEphbWFoaXJpeWEiLGxpZToiTGllY2h0ZW5zdGVpbiIsbHR1OiJMaXRodWFuaWEiLGx1eDoiTHV4ZW1ib3VyZyIsbWFjOiJNYWNhbyIsbWtkOiJNYWNlZG9uaWEsIHRoZSBmb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YiLG1kZzoiTWFkYWdhc2NhciIsbXdpOiJNYWxhd2kiLG15czoiTWFsYXlzaWEiLG1kdjoiTWFsZGl2ZXMiLG1saToiTWFsaSIsbWx0OiJNYWx0YSIsbWhsOiJNYXJzaGFsbCBJc2xhbmRzIixtdHE6Ik1hcnRpbmlxdWUiLG1ydDoiTWF1cml0YW5pYSIsbXVzOiJNYXVyaXRpdXMiLG15dDoiTWF5b3R0ZSIsbWV4OiJNZXhpY28iLGZzbToiTWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiIsbWRhOiJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsbWNvOiJNb25hY28iLG1uZzoiTW9uZ29saWEiLG1uZToiTW9udGVuZWdybyIsbXNyOiJNb250c2VycmF0IixtYXI6Ik1vcm9jY28iLG1vejoiTW96YW1iaXF1ZSIsbW1yOiJNeWFubWFyIixuYW06Ik5hbWliaWEiLG5ydToiTmF1cnUiLG5wbDoiTmVwYWwiLG5sZDoiTmV0aGVybGFuZHMiLGFudDoiTmV0aGVybGFuZHMgQW50aWxsZXMiLG5jbDoiTmV3IENhbGVkb25pYSIsbnpsOiJOZXcgWmVhbGFuZCIsbmljOiJOaWNhcmFndWEiLG5lcjoiTmlnZXIiLG5nYToiTmlnZXJpYSIsbml1OiJOaXVlIixuZms6Ik5vcmZvbGsgSXNsYW5kIixtbnA6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsbm9yOiJOb3J3YXkiLG9tbjoiT21hbiIscGFrOiJQYWtpc3RhbiIscGx3OiJQYWxhdSIscHNlOiJQYWxlc3RpbmlhbiBUZXJyaXRvcnksIE9jY3VwaWVkIixwYW46IlBhbmFtYSIscG5nOiJQYXB1YSBOZXcgR3VpbmVhIixwcnk6IlBhcmFndWF5IixwZXI6IlBlcnUiLHBobDoiUGhpbGlwcGluZXMiLHBjbjoiUGl0Y2Fpcm4iLHBvbDoiUG9sYW5kIixwcnQ6IlBvcnR1Z2FsIixwcmk6IlB1ZXJ0byBSaWNvIixxYXQ6IlFhdGFyIixyb3U6IlJvbWFuaWEiLHJ1czoiUnVzc2lhbiBGZWRlcmF0aW9uIixyd2E6IlJ3YW5kYSIscmV1OiJSZXVuaW9uIixibG06IlNhaW50IEJhcnRoZWxlbXkiLHNobjoiU2FpbnQgSGVsZW5hIixrbmE6IlNhaW50IEtpdHRzIGFuZCBOZXZpcyIsbGNhOiJTYWludCBMdWNpYSIsbWFmOiJTYWludCBNYXJ0aW4gKEZyZW5jaCBwYXJ0KSIsc3BtOiJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIix2Y3Q6IlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIix3c206IlNhbW9hIixzbXI6IlNhbiBNYXJpbm8iLHN0cDoiU2FvIFRvbWUgYW5kIFByaW5jaXBlIixzYXU6IlNhdWRpIEFyYWJpYSIsc2VuOiJTZW5lZ2FsIixzcmI6IlNlcmJpYSIsc3ljOiJTZXljaGVsbGVzIixzbGU6IlNpZXJyYSBMZW9uZSIsc2dwOiJTaW5nYXBvcmUiLHN2azoiU2xvdmFraWEiLHN2bjoiU2xvdmVuaWEiLHNsYjoiU29sb21vbiBJc2xhbmRzIixzb206IlNvbWFsaWEiLHphZjoiU291dGggQWZyaWNhIixzZ3M6IlNvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzIixlc3A6IlNwYWluIixsa2E6IlNyaSBMYW5rYSIsc2RuOiJTdWRhbiIsc3VyOiJTdXJpbmFtZSIsc2ptOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIixzd3o6IlN3YXppbGFuZCIsc3dlOiJTd2VkZW4iLGNoZToiU3dpdHplcmxhbmQiLHN5cjoiU3lyaWFuIEFyYWIgUmVwdWJsaWMiLHR3bjoiVGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSIsdGprOiJUYWppa2lzdGFuIix0emE6IlRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YiLHRoYToiVGhhaWxhbmQiLHRsczoiVGltb3ItTGVzdGUiLHRnbzoiVG9nbyIsdGtsOiJUb2tlbGF1Iix0b246IlRvbmdhIix0dG86IlRyaW5pZGFkIGFuZCBUb2JhZ28iLHR1bjoiVHVuaXNpYSIsdHVyOiJUdXJrZXkiLHRrbToiVHVya21lbmlzdGFuIix0Y2E6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsdHV2OiJUdXZhbHUiLHVnYToiVWdhbmRhIix1a3I6IlVrcmFpbmUiLGFyZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGdicjoiVW5pdGVkIEtpbmdkb20iLHVzYToiVW5pdGVkIFN0YXRlcyIsdW1pOiJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLHVyeToiVXJ1Z3VheSIsdXpiOiJVemJla2lzdGFuIix2dXQ6IlZhbnVhdHUiLHZlbjoiVmVuZXp1ZWxhIix2bm06IlZpZXQgTmFtIix2Z2I6IlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoIix2aXI6IlZpcmdpbiBJc2xhbmRzLCBVLlMuIix3bGY6IldhbGxpcyBhbmQgRnV0dW5hIixlc2g6Ildlc3Rlcm4gU2FoYXJhIix5ZW06IlllbWVuIix6bWI6IlphbWJpYSIsendlOiJaaW1iYWJ3ZSJ9LGVtcHR5OiIiLHJlcXVpcmVkOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZDoiIixpbnZhbGlkOiJUaGlzIGZpZWxkIGlzIGludmFsaWQiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6InNlY29uZHMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaG91cnMiLERBWToiZGF5cyIsTU9OVEg6Im1vbnRocyIsWUVBUjoieWVhcnMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2Euc3R5bGVJbmplY3Rpb25zPXt9O2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWSIscGFyZW50OiJWSUVXX0JBU0UiLHRpdGxlOiJEZWZhdWx0IFdlYiBEaXNwbGF5IFZpZXciLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBlZGl0IHZpZXcgd2hpY2ggZ29lcyB0aG91Z2ggZmllbGQgaGllcmFyY2h5LiIsdHlwZToidmlldyIscGxhdGZvcm06IndlYiIsZGlzcGxheVJlYWRvbmx5OnRydWUsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6JzxkaXYgY2xhc3M9ImFscGFjYS1kYXRhLWNvbnRhaW5lciI+e3tpZiBvcHRpb25zLmxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YS1sYWJlbCI+JHtvcHRpb25zLmxhYmVsfTwvZGl2Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtZGF0YSI+Jm5ic3A7JHtkYXRhfTwvZGl2PjwvZGl2PicsZmllbGRTZXRPdXRlckVsOic8ZGl2IGNsYXNzPSJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsYXJyYXlUb29sYmFyOiIiLGFycmF5SXRlbVRvb2xiYXI6IiJ9fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIixwYXJlbnQ6IlZJRVdfQkFTRSIsdGl0bGU6IkRlZmF1bHQgV2ViIEVkaXQgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGVkaXQgdmlldyB3aGljaCBnb2VzIHRob3VnaCBmaWVsZCBoaWVyYXJjaHkuIix0eXBlOiJlZGl0IixwbGF0Zm9ybToid2ViIixkaXNwbGF5UmVhZG9ubHk6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6IjxzcGFuPnt7aHRtbCB0aGlzLmh0bWx9fTwvc3Bhbj4iLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij48ZGl2PiR7b3B0aW9ucy5sYWJlbH08L2Rpdj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlci10ZXh0Ij4ke29wdGlvbnMuaGVscGVyfTwvc3Bhbj48L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+Iixjb250cm9sRmllbGQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkT3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRMYWJlbCIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZENvbnRhaW5lciIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRIZWxwZXIiKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldE91dGVyRWw6IjxmaWVsZHNldD57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PiIsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiIHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiAuM2VtOyI+PC9zcGFuPjxzcGFuPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+JyxmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvZGl2Pnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6IjxkaXY+e3todG1sIHRoaXMuaHRtbH19PC9kaXY+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOiI8ZGl2PjwvZGl2PiIsZm9ybUZpZWxkc0NvbnRhaW5lcjoiPGRpdj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4iLGZvcm1CdXR0b25zQ29udGFpbmVyOic8ZGl2Pnt7aWYgb3B0aW9ucy5idXR0b25zfX17e2VhY2goayx2KSBvcHRpb25zLmJ1dHRvbnN9fTxidXR0b24gZGF0YS1rZXk9IiR7a30iIGNsYXNzPSJhbHBhY2EtZm9ybS1idXR0b24gYWxwYWNhLWZvcm0tYnV0dG9uLSR7a30iIHt7ZWFjaChrMSx2MSkgdn19JHtrMX09IiR7djF9Int7L2VhY2h9fT4ke3YudmFsdWV9PC9idXR0b24+e3svZWFjaH19e3svaWZ9fTwvZGl2PicsZm9ybTonPGZvcm0+e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1GaWVsZHNDb250YWluZXIiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZvcm1CdXR0b25zQ29udGFpbmVyIil9fTwvZm9ybT4nLHdpemFyZFN0ZXA6JzxkaXYgY2xhc3M9ImFscGFjYS1jbGVhciI+PC9kaXY+Jyx3aXphcmROYXZCYXI6IjxkaXY+PC9kaXY+Iix3aXphcmRQcmVCdXR0b246IjxidXR0b24+QmFjazwvYnV0dG9uPiIsd2l6YXJkTmV4dEJ1dHRvbjoiPGJ1dHRvbj5OZXh0PC9idXR0b24+Iix3aXphcmREb25lQnV0dG9uOiI8YnV0dG9uPkRvbmU8L2J1dHRvbj4iLHdpemFyZFN0YXR1c0JhcjonPG9sIGlkPSIke2lkfSI+e3tlYWNoKGksdikgdGl0bGVzfX08bGkgaWQ9InN0ZXBEZXNjJHtpfSI+PGRpdj48c3Ryb25nPjxzcGFuPiR7di50aXRsZX08L3NwYW4+JHt2LmRlc2NyaXB0aW9ufTwvc3Ryb25nPjwvZGl2PjwvbGk+e3svZWFjaH19PC9vbD4nfX0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgd2ViIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYyl7dmFyIGI9Yy5hbHBhY2E7dmFyIGE9e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxzcGFuIGNsYXNzPSJhbHBhY2Etdmlldy13ZWItbGlzdCI+e3todG1sIHRoaXMuaHRtbH19PC9zcGFuPicsY29udHJvbEZpZWxkTWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0Ij48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS10ZXh0Ij4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsY29udHJvbEZpZWxkTGFiZWw6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCI+JHtvcHRpb25zLmhlbHBlcn08L3NwYW4+PC9kaXY+e3svaWZ9fScsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1saXN0Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQgYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3Ij48L3NwYW4+PHNwYW4+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxkaXYgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9kaXY+e3svaWZ9fScsZmllbGRTZXRJdGVtc0NvbnRhaW5lcjoiPG9sPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+IixmaWVsZFNldDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRMZWdlbmQiKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SGVscGVyIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRJdGVtc0NvbnRhaW5lciIsdHJ1ZSl9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTsiPjwvbGk+JyxpdGVtTGFiZWw6J3t7aWYgb3B0aW9ucy5pdGVtTGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCBhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3QtdmlldyI+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXciPiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj48L3NwYW4+e3svaWZ9fTwvbGFiZWw+e3svaWZ9fSd9O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVkiLHRpdGxlOiJXZWIgRGlzcGxheSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZGlzcGxheSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJXZWIgRWRpdCBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsbGVnZW5kU3R5bGU6ImxpbmsiLHRlbXBsYXRlczphLHN0eWxlczp7fSxmaWVsZHM6eyIvIjp7dGVtcGxhdGVzOntmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8b2wgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIj57e2h0bWwgdGhpcy5odG1sfX08L29sPicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8bGkgY2xhc3M9ImFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPjwvbGk+J319fX0pO2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IExpc3QgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgY3JlYXRlIHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOmEsc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnN0eWxlSW5qZWN0aW9uc1sianF1ZXJ5LXVpIl09e2ZpZWxkOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXdpZGdldCIpfSxyZXF1aXJlZDpmdW5jdGlvbihjKXtiKCc8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLXN0YXIiPjwvc3Bhbj4nKS5wcmVwZW5kVG8oYyl9LGVycm9yOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS1zdGF0ZS1lcnJvci10ZXh0Iil9LHJlbW92ZUVycm9yOmZ1bmN0aW9uKGMpe2MucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWVycm9yIil9LGNvbnRhaW5lcjpmdW5jdGlvbihjKXtjLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpfSx3aXphcmRTdGF0dXNCYXI6ZnVuY3Rpb24oYyl7Yy5hZGRDbGFzcygidWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIil9LHdpemFyZEN1cnJlbnRTdGVwOmZ1bmN0aW9uKGMpe2MuYWRkQ2xhc3MoInVpLXN0YXRlLWhpZ2hsaWdodCB1aS1jb3JuZXItYWxsIil9LHdpemFyZFVuQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYyl7Yy5yZW1vdmVDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sY29udGFpbmVyRXhwYW5kZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1zIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1lIixjb21tb25JY29uOiJ1aS1pY29uIixhZGRJY29uOiJ1aS1pY29uLWNpcmNsZS1wbHVzIixyZW1vdmVJY29uOiJ1aS1pY29uLWNpcmNsZS1taW51cyIsdXBJY29uOiJ1aS1pY29uLWNpcmNsZS1hcnJvdy1uIixkb3duSWNvbjoidWktaWNvbi1jaXJjbGUtYXJyb3ctcyIsd2l6YXJkUHJlSWNvbjoidWktaWNvbi10cmlhbmdsZS0xLXciLHdpemFyZE5leHRJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsd2l6YXJkRG9uZUljb246InVpLWljb24tdHJpYW5nbGUtMS1lIixidXR0b25CZWF1dGlmaWVyOmZ1bmN0aW9uKGQsYyxmKXtkLmFkZENsYXNzKCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpO2lmKGYpe2QuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSIpfWVsc2V7ZC5hZGRDbGFzcygidWktYnV0dG9uLWljb24tb25seSIpfXZhciBlPWQuaHRtbCgpO2QuYXR0cigidGl0bGUiLGUpO2QuZW1wdHkoKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1idXR0b24gJytjKyciPjwvc3Bhbj48c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPicrZSsiPC9zcGFuPiIpO2QuaG92ZXIoZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0sZnVuY3Rpb24oKXtpZighZC5oYXNDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpKXtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfX07YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0pRVUVSWVVJX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsZGVzY3JpcHRpb246IldlYiBEaXNwbGF5IFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVCIscGFyZW50OiJWSUVXX1dFQl9FRElUIix0aXRsZToiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixkZXNjcmlwdGlvbjoiV2ViIEVkaXQgVmlldyBmb3IgalF1ZXJ5IFVJIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEUiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFIix0aXRsZToiV2ViIENyZWF0ZSBWaWV3IGZvciBqUXVlcnkgVUkiLGRlc2NyaXB0aW9uOiJXZWIgQ3JlYXRlIFZpZXcgZm9yIGpRdWVyeSBVSSIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfSlFVRVJZVUlfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IkpRdWVyeSBVSSBlZGl0IHZpZXcgYmFzZWQgb24gbGlzdCBzdHlsZXMuIixzdHlsZToianF1ZXJ5LXVpIix1aToianF1ZXJ5LXVpIn0pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19KUVVFUllVSV9DUkVBVEVfTElTVCIscGFyZW50OiJWSUVXX1dFQl9DUkVBVEVfTElTVCIsdGl0bGU6IkpRdWVyeSBVSSBDcmVhdGUgVmlldyBMaXN0IFN0eWxlIixkZXNjcmlwdGlvbjoiSlF1ZXJ5IFVJIGNyZWF0ZSB2aWV3IGJhc2VkIG9uIGxpc3Qgc3R5bGVzLiIsc3R5bGU6ImpxdWVyeS11aSIsdWk6ImpxdWVyeS11aSJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGMpe3ZhciBiPWMuYWxwYWNhO2Iuc3R5bGVJbmplY3Rpb25zWyJqcXVlcnktbW9iaWxlIl09e2FycmF5OmZ1bmN0aW9uKGQpe2lmKGQpe2lmKGQuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4pe2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maWVsZGNvbnRhaW4oKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImZpZWxkY29udGFpbiJdJykuZmluZCgiW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddIikuY2hlY2tib3hyYWRpbygpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJidXR0b24sIFtkYXRhLXJvbGU9J2J1dHRvbiddLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikubm90KCIudWktbm9qcyIpLmJ1dHRvbigpO2QuZmluZCgnW2RhdGEtcm9sZT0iZmllbGRjb250YWluIl0nKS5maW5kKCJpbnB1dCwgdGV4dGFyZWEiKS5ub3QoIlt0eXBlPSdyYWRpbyddLCBbdHlwZT0nY2hlY2tib3gnXSwgYnV0dG9uLCBbdHlwZT0nYnV0dG9uJ10sIFt0eXBlPSdzdWJtaXQnXSwgW3R5cGU9J3Jlc2V0J10sIFt0eXBlPSdpbWFnZSddIikudGV4dGlucHV0KCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoImlucHV0LCBzZWxlY3QiKS5maWx0ZXIoIltkYXRhLXJvbGU9J3NsaWRlciddLCBbZGF0YS10eXBlPSdyYW5nZSddIikuc2xpZGVyKCk7ZC5maW5kKCdbZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iXScpLmZpbmQoInNlbGVjdDpub3QoW2RhdGEtcm9sZT0nc2xpZGVyJ10pIikuc2VsZWN0bWVudSgpO2QuZmluZCgnW2RhdGEtcm9sZT0iYnV0dG9uIl0nKS5idXR0b25NYXJrdXAoKTtkLmZpbmQoJ1tkYXRhLXJvbGU9ImNvbnRyb2xncm91cCJdJykuY29udHJvbGdyb3VwKCl9fX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfRElTUExBWSIscGFyZW50OiJWSUVXX1dFQl9ESVNQTEFZIix0aXRsZToiTW9iaWxlIERJU1BMQVkgVmlldyIsZGVzY3JpcHRpb246Ik1vYmlsZSBkaXNwbGF5IHZpZXcgdXNpbmcgSlF1ZXJ5IE1vYmlsZSBMaWJyYXJ5Iix0eXBlOiJ2aWV3IixwbGF0Zm9ybToibW9iaWxlIixzdHlsZToianF1ZXJ5LW1vYmlsZSIsdWk6Im1vYmlsZSIsbGVnZW5kU3R5bGU6ImxpbmsiLHRvb2xiYXJTdHlsZToibGluayIsYnV0dG9uVHlwZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGQ6Jzx1bCBkYXRhLXJvbGU9Imxpc3R2aWV3Ij48bGk+e3tpZiBvcHRpb25zLmxhYmVsfX08aDQ+JHtvcHRpb25zLmxhYmVsfTwvaDQ+e3svaWZ9fTxwPjxzdHJvbmc+JHtkYXRhfTwvc3Ryb25nPjwvcD48L2xpPjwvdWw+JyxmaWVsZFNldE91dGVyRWw6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbGxhcHNpYmxlIiBpZD0iJHtpZH0iIGRhdGEtY29sbGFwc2VkPSJ7e2lmIG9wdGlvbnMuY29sbGFwc2VkfX10cnVle3tlbHNlfX1mYWxzZXt7L2lmfX0iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6IjxkaXY+KiAke21lc3NhZ2V9PC9kaXY+IixmaWVsZFNldExlZ2VuZDone3tpZiBvcHRpb25zLmxhYmVsfX08bGVnZW5kIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGVnZW5kPnt7L2lmfX0nLGZpZWxkU2V0SGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08aDMgY2xhc3M9Int7aWYgb3B0aW9ucy5oZWxwZXJDbGFzc319JHtvcHRpb25zLmhlbHBlckNsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5oZWxwZXJ9PC9oMz57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOic8ZGl2IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6IjxkaXY+PC9kaXY+In0sbWVzc2FnZXM6e3JlcXVpcmVkOiJSZXF1aXJlZCBGaWVsZCIsaW52YWxpZDoiSW52YWxpZCBGaWVsZCJ9LHJlbmRlcjpmdW5jdGlvbihlLGYpe3ZhciBkPXRoaXM7ZS5yZW5kZXIoZS52aWV3LGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTtiLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfTU9CSUxFX0VESVQiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6Ik1vYmlsZSBFZGl0IFZpZXciLGRlc2NyaXB0aW9uOiJNb2JpbGUgZWRpdCB2aWV3IHVzaW5nIEpRdWVyeSBNb2JpbGUgTGlicmFyeSIsdHlwZToiZWRpdCIscGxhdGZvcm06Im1vYmlsZSIsc3R5bGU6ImpxdWVyeS1tb2JpbGUiLHVpOiJtb2JpbGUiLGxlZ2VuZFN0eWxlOiJsaW5rIix0b29sYmFyU3R5bGU6ImxpbmsiLGJ1dHRvblR5cGU6ImxpbmsiLHRvb2xiYXJTdGlja3k6dHJ1ZSx0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6JzxkaXYgZGF0YS1yb2xlPSJmaWVsZGNvbnRhaW4iPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsY29udHJvbEZpZWxkTWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGNvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBmb3I9IiR7aWR9IiBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xhYmVsPnt7L2lmfX0nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19Jyxjb250cm9sRmllbGRDb250YWluZXI6JzxkaXYgZGF0YS1yZXBsYWNlPSJ0cnVlIj57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGNvbnRyb2xGaWVsZDone3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGlkPSIke2lkfSIgZGF0YS1jb2xsYXBzZWQ9Int7aWYgb3B0aW9ucy5jb2xsYXBzZWR9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZToiPGRpdj4qICR7bWVzc2FnZX08L2Rpdj4iLGZpZWxkU2V0TGVnZW5kOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsZWdlbmQgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9PC9sZWdlbmQ+e3svaWZ9fScsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxoMyBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2gzPnt7L2lmfX0nLGZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PicsZmllbGRTZXQ6J3t7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRPdXRlckVsIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0TGVnZW5kIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEhlbHBlciIpfX17e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0SXRlbXNDb250YWluZXIiLHRydWUpfX17ey93cmFwfX17ey93cmFwfX0nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjoiPGRpdj48L2Rpdj4iLGZvcm1GaWVsZHNDb250YWluZXI6JzxkaXYgZGF0YS1yb2xlPSJjb250ZW50Ij57e2h0bWwgdGhpcy5odG1sfX08L2Rpdj4nLGZvcm06Jzxmb3JtPnt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtRmllbGRzQ29udGFpbmVyIil9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmb3JtQnV0dG9uc0NvbnRhaW5lciIpfX08L2Zvcm0+Jyxjb250cm9sRmllbGRSYWRpbzonPGZpZWxkc2V0IGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBjbGFzcz0iYWxwYWNhLXJhZGlvLWZpZWxkc2V0IiBpZD0iJHtpZH0iPnt7ZWFjaCBzZWxlY3RPcHRpb25zfX08aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgaWQ9IiR7aWR9LSR7JGluZGV4fSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PGxhYmVsIGZvcj0iJHtpZH0tJHskaW5kZXh9Ij4ke3RleHR9PC9sYWJlbD57ey9lYWNofX08L2ZpZWxkc2V0PicsY29udHJvbEZpZWxkQ2hlY2tib3g6JzxmaWVsZHNldCBkYXRhLXJvbGU9ImNvbnRyb2xncm91cCIgY2xhc3M9ImFscGFjYS1yYWRpby1maWVsZHNldCIgaWQ9IiR7aWR9LTAiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9LTEiIG5hbWU9IiR7aWR9LTEiIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2ZpZWxkSWR9PSIke3ZhbHVlfSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMucmlnaHRMYWJlbH08L2xhYmVsPnt7ZWxzZX19e3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfS0xIj4ke29wdGlvbnMubGFiZWx9PzwvbGFiZWw+e3svaWZ9fXt7L2lmfX08L2ZpZWxkc2V0PicsYXJyYXlJdGVtVG9vbGJhcjonPGRpdiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiIGRhdGEtdHlwZT0iaG9yaXpvbnRhbCIgZGF0YS1taW5pPSJ0cnVlIj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1hZGQiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFkZCIgZGF0YS1pY29ucG9zPSJub3RleHQiPkFkZDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1yZW1vdmUiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImRlbGV0ZSIgZGF0YS1pY29ucG9zPSJub3RleHQiPkRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci11cCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYXJyb3ctdSIgZGF0YS1pY29ucG9zPSJub3RleHQiPlVwPC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24iIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LWQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5Eb3duPC9zcGFuPjwvZGl2PicsYXJyYXlUb29sYmFyOic8ZGl2IGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciIgZGF0YS1yb2xlPSJjb250cm9sZ3JvdXAiICBkYXRhLW1pbmk9InRydWUiPjxzcGFuIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCIgZGF0YS1yb2xlPSJidXR0b24iIGRhdGEtaWNvbj0iYWRkIiBkYXRhLWlubGluZT0idHJ1ZSIgdGl0bGU9IkFkZCI+QWRkPC9zcGFuPjwvZGl2Pid9LG1lc3NhZ2VzOntyZXF1aXJlZDoiUmVxdWlyZWQgRmllbGQiLGludmFsaWQ6IkludmFsaWQgRmllbGQifSxyZW5kZXI6ZnVuY3Rpb24oZSxmKXt2YXIgZD10aGlzO2UucmVuZGVyKGZ1bmN0aW9uKGcpe2EoZy5nZXRFbCgpKTtpZihmKXtmLmNhbGwoZCxnKX19KX19KTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgZD1lO3doaWxlKCFiLmlzRW1wdHkoZCkmJmQuYXR0cigiZGF0YS1yb2xlIikhPT0icGFnZSIpe2Q9ZC5wYXJlbnQoKX1pZighYi5pc0VtcHR5KGQpKXtjKGQpLnRyaWdnZXIoInBhZ2VjcmVhdGUiKX19O2IucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19NT0JJTEVfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfTU9CSUxFX0VESVQiLHRpdGxlOiJEZWZhdWx0IE1vYmlsZSBDcmVhdGUgVmlldyIsZGVzY3JpcHRpb246IkRlZmF1bHQgbW9iaWxlIGNyZWF0ZSB2aWV3IHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5zdHlsZUluamVjdGlvbnMuYm9vdHN0cmFwPXtlcnJvcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJjb250cm9sLWdyb3VwIGVycm9yIil9LGVycm9yTWVzc2FnZTpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCIiKX0scmVtb3ZlRXJyb3I6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVDbGFzcygiZXJyb3IiKX0sdG9vbHRpcEVycm9yTWVzc2FnZTpmdW5jdGlvbihmLGUpe2lmKGIuZm4udG9vbHRpcCl7Zi50b29sdGlwKHtodG1sOmV9KS5jbGljaygpfX0sZmllbGQ6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiY29udHJvbC1ncm91cCIpfSxyZXF1aXJlZDpmdW5jdGlvbihlKXtiKCc8c3BhbiBjbGFzcz0iaWNvbi1zdGFyIj48L3NwYW4+Jm5ic3A7JykucHJlcGVuZFRvKGUpfSxjb250YWluZXI6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygiIil9LHdpemFyZFN0YXR1c0JhcjpmdW5jdGlvbihlKXtlLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkQ3VycmVudFN0ZXA6ZnVuY3Rpb24oZSl7ZS5hZGRDbGFzcygidWktc3RhdGUtaGlnaGxpZ2h0IHVpLWNvcm5lci1hbGwiKX0sd2l6YXJkVW5DdXJyZW50U3RlcDpmdW5jdGlvbihlKXtlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1oaWdobGlnaHQgdWktY29ybmVyLWFsbCIpfSxjb21tb25JY29uOiIiLGFkZEljb246Imljb24tcGx1cy1zaWduIixyZW1vdmVJY29uOiJpY29uLW1pbnVzLXNpZ24iLHVwSWNvbjoiaWNvbi1jaGV2cm9uLXVwIixkb3duSWNvbjoiaWNvbi1jaGV2cm9uLWRvd24iLHdpemFyZFByZUljb246InVpLWljb24tdHJpYW5nbGUtMS13Iix3aXphcmROZXh0SWNvbjoidWktaWNvbi10cmlhbmdsZS0xLWUiLHdpemFyZERvbmVJY29uOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSIsY29udGFpbmVyRXhwYW5kZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1kb3duIixjb250YWluZXJDb2xsYXBzZWRJY29uOiJpY29uLWNpcmNsZS1hcnJvdy1yaWdodCIsYnV0dG9uQmVhdXRpZmllcjpmdW5jdGlvbihnLGUsaSl7dmFyIGg9Zy5odG1sKCk7Zy5hdHRyKCJ0aXRsZSIsaCk7dmFyIGY9aT9oOiIiO2cuZW1wdHkoKS5hcHBlbmQoJzxiIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiAnK2UrJyI+PC9iPjxzcGFuPicrZisiPC9zcGFuPiIpfX07dmFyIGQ9e2NvbnRyb2xGaWVsZExhYmVsOid7e2lmIG9wdGlvbnMubGFiZWx9fTxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCB7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSIgZm9yPSIke2lkfSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOid7e2lmIG9wdGlvbnMuaGVscGVyfX08ZGl2IGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij48aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iPjwvaT4gPHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9Imljb24tZXhjbGFtYXRpb24tc2lnbiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCBoZWxwLWlubGluZSI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGFycmF5VG9vbGJhcjonPHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJidG4gYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItaWNvbiBhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1hZGQiPiR7YWRkSXRlbUxhYmVsfTwvYnV0dG9uPjwvc3Bhbj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIGFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiPjxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+e3tlYWNoKGssdikgYnV0dG9uc319PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj48L2Rpdj4nLGNvbnRyb2xGaWVsZENoZWNrYm94Oic8c3Bhbj57e2lmIG9wdGlvbnMucmlnaHRMYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJjaGVja2JveCI+e3svaWZ9fTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IiR7aWR9IiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+e3tpZiBvcHRpb25zLnJpZ2h0TGFiZWx9fSR7b3B0aW9ucy5yaWdodExhYmVsfTwvbGFiZWw+e3svaWZ9fTwvc3Bhbj4nLGNvbnRyb2xGaWVsZFJhZGlvOic8ZGl2IGlkPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iPnt7aWYgIXJlcXVpcmVkfX08bGFiZWwgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwgcmFkaW8gaW5saW5lIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiIvPk5vbmU8L2xhYmVsPnt7L2lmfX17e2VhY2ggc2VsZWN0T3B0aW9uc319PGxhYmVsIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHJhZGlvIGlubGluZSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIke3ZhbHVlfSIge3tpZiB2YWx1ZSA9PSBkYXRhfX1jaGVja2VkPSJjaGVja2VkInt7L2lmfX0vPiR7dGV4dH08L2xhYmVsPnt7L2VhY2h9fTwvZGl2PicsZmllbGRTZXRIZWxwZXI6J3t7aWYgb3B0aW9ucy5oZWxwZXJ9fTxwIGNsYXNzPSJ7e2lmIG9wdGlvbnMuaGVscGVyQ2xhc3N9fSR7b3B0aW9ucy5oZWxwZXJDbGFzc317ey9pZn19Ij4ke29wdGlvbnMuaGVscGVyfTwvcD57ey9pZn19J307dmFyIGM9ZnVuY3Rpb24oZixnKXt2YXIgZT10aGlzO2YucmVuZGVyKGZ1bmN0aW9uKGgpe2IoInNlbGVjdCxpbnB1dCx0ZXh0YXJlYSIsaC5vdXRlckVsKS5hZGRDbGFzcygiaW5wdXQteGxhcmdlIik7YigiYnV0dG9uOnN1Ym1pdCwgYnV0dG9uOnJlc2V0LCAuYWxwYWNhLWZvcm0tYnV0dG9uIikuYWRkQ2xhc3MoImJ0biIpO2lmKGcpe2cuY2FsbChlLGgpfX0pfTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQk9PVFNUUkFQX0RJU1BMQVkiLHBhcmVudDoiVklFV19XRUJfRElTUExBWSIsdGl0bGU6IkRpc3BsYXkgVmlldyBmb3IgQm9vdHN0cmFwIixkZXNjcmlwdGlvbjoiRGlzcGxheSBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX0JPT1RTVFJBUF9FRElUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJFZGl0IFZpZXcgZm9yIEJvb3RzdHJhcCIsZGVzY3JpcHRpb246IkVkaXQgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFIixwYXJlbnQ6IlZJRVdfV0VCX0NSRUFURSIsdGl0bGU6IkNyZWF0ZSBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRElTUExBWV9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0RJU1BMQVlfTElTVCIsdGl0bGU6IkRpc3BsYXkgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfRURJVF9MSVNUIixwYXJlbnQ6IlZJRVdfV0VCX0VESVRfTElTVCIsdGl0bGU6IkVkaXQgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJFZGl0IExpc3QgVmlldyBmb3IgQm9vdHN0cmFwIixzdHlsZToiYm9vdHN0cmFwIix1aToiYm9vdHN0cmFwIix0ZW1wbGF0ZXM6ZCxyZW5kZXI6Y30pO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CT09UU1RSQVBfQ1JFQVRFX0xJU1QiLHBhcmVudDoiVklFV19XRUJfQ1JFQVRFX0xJU1QiLHRpdGxlOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLGRlc2NyaXB0aW9uOiJDcmVhdGUgTGlzdCBWaWV3IGZvciBCb290c3RyYXAiLHN0eWxlOiJib290c3RyYXAiLHVpOiJib290c3RyYXAiLHRlbXBsYXRlczpkLHJlbmRlcjpjfSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgVGFibGUgU3R5bGUiLGRlc2NyaXB0aW9uOiJXZWIgZWRpdCB2aWV3IGJhc2VkIG9uIHRhYmxlIHN0eWxlcy4iLHR5cGU6ImVkaXQiLGRpc3BsYXlSZWFkb25seTp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGxlZ2VuZFN0eWxlOiJsaW5rIix0ZW1wbGF0ZXM6e2NvbnRyb2xGaWVsZE91dGVyRWw6bnVsbCxjb250cm9sRmllbGRMYWJlbDonPHRkPnt7aWYgb3B0aW9ucy5sYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJ7e2lmIG9wdGlvbnMubGFiZWxDbGFzc319JHtvcHRpb25zLmxhYmVsQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmxhYmVsfTwvbGFiZWw+e3svaWZ9fTwvdGQ+Jyxjb250cm9sRmllbGRDb250YWluZXI6Jzx0ZCBkYXRhLWNvbnRyb2w9ImFwcGVuZCI+e3todG1sIHRoaXMuaHRtbH19PC90ZD4nLGNvbnRyb2xGaWVsZE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCI+JHttZXNzYWdlfTwvc3Bhbj48L2Rpdj4nLGNvbnRyb2xGaWVsZEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtaGVscGVyLXRleHQiPiR7b3B0aW9ucy5oZWxwZXJ9PC9zcGFuPjwvZGl2Pnt7L2lmfX0nLGNvbnRyb2xGaWVsZDone3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZExhYmVsIil9fXt7d3JhcChudWxsLCB7fSkgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkQ29udGFpbmVyIix0cnVlKX19e3todG1sIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZEhlbHBlciIpfX17ey93cmFwfX0nLGZpZWxkU2V0T3V0ZXJFbDonPGZpZWxkc2V0IGNsYXNzPSJhbHBhY2Etdmlldy13ZWItZWRpdC10YWJsZSI+e3todG1sIHRoaXMuaHRtbH19PC9maWVsZHNldD4nLGZpZWxkU2V0TWVzc2FnZTonPGRpdj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWFsZXJ0IGFscGFjYS1maWVsZHNldC1tZXNzYWdlLXRhYmxlLXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8dGFibGU+PHRib2R5Pnt7aHRtbCB0aGlzLmh0bWx9fTwvdGJvZHk+PC90YWJsZT4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6Ijx0cj48L3RyPiIsaXRlbUxhYmVsOid7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXciPjxzcGFuIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWl0ZW0tbGFiZWwtbGlzdC12aWV3Ij4ke29wdGlvbnMuaXRlbUxhYmVsfXt7aWYgaW5kZXh9fSA8c3BhbiBjbGFzcz0iYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciI+JHtpbmRleH08L3NwYW4+PC9zcGFuPnt7L2lmfX08L2xhYmVsPnt7L2lmfX0nfSxzdHlsZXM6e30sZmllbGRzOnsiLyI6e3RlbXBsYXRlczp7ZmllbGRTZXRJdGVtc0NvbnRhaW5lcjonPHRhYmxlIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+e3todG1sIHRoaXMuaHRtbH19PC90YWJsZT4nLGZpZWxkU2V0SXRlbUNvbnRhaW5lcjonPHRyIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtaXRlbXNjb250YWluZXItbGlzdC12aWV3LXRvcCI+PC90cj4nfX19fSk7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9DUkVBVEVfVEFCTEUiLHBhcmVudDoiVklFV19XRUJfRURJVF9UQUJMRSIsdGl0bGU6IkRlZmF1bHQgV2ViIENyZWF0ZSBWaWV3IFRhYmxlIFN0bGUiLGRlc2NyaXB0aW9uOiJEZWZhdWx0IHdlYiBjcmVhdGUgdmlldyAoVGFibGUgU3R5bGUpIHdoaWNoIGRvZXNuJ3QgYmluZCBpbml0aWFsIGRhdGEuIix0eXBlOiJjcmVhdGUiLGRpc3BsYXlSZWFkb25seTpmYWxzZX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUX1lBTUwiLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgTGlzdCBTdHlsZSIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3Qgc3R5bGVkIHRvIGxvb2sgbGlrZSBhIFlBTUwgZWRpdG9yLiIsdHlwZToiZWRpdCIsZGlzcGxheVJlYWRvbmx5OnRydWUsY29sbGFwc2libGU6dHJ1ZSxsZWdlbmRTdHlsZToibGluayIsdGVtcGxhdGVzOntjb250cm9sRmllbGRPdXRlckVsOic8c3BhbiBjbGFzcz0iYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCIgdGl0bGU9IiR7b3B0aW9ucy5oZWxwZXJ9Ij57e2h0bWwgdGhpcy5odG1sfX08L3NwYW4+Jyxjb250cm9sRmllbGRNZXNzYWdlOic8ZGl2PjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tYWxlcnQiPjwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQiPiR7bWVzc2FnZX08L3NwYW4+PC9kaXY+Jyxjb250cm9sRmllbGRMYWJlbDone3tpZiBvcHRpb25zLmxhYmVsfX08bGFiZWwgZm9yPSIke2lkfSIgY2xhc3M9Int7aWYgb3B0aW9ucy5sYWJlbENsYXNzfX0ke29wdGlvbnMubGFiZWxDbGFzc317ey9pZn19Ij4ke29wdGlvbnMubGFiZWx9OjwvbGFiZWw+e3svaWZ9fScsY29udHJvbEZpZWxkSGVscGVyOic8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIiAvPicsY29udHJvbEZpZWxkQ29udGFpbmVyOiI8ZGl2Pnt7aHRtbCB0aGlzLmh0bWx9fTwvZGl2PiIsY29udHJvbEZpZWxkOid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImNvbnRyb2xGaWVsZE91dGVyRWwiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkTGFiZWwiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJjb250cm9sRmllbGRDb250YWluZXIiLHRydWUpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiY29udHJvbEZpZWxkSGVscGVyIil9fXt7L3dyYXB9fXt7L3dyYXB9fScsZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9ImFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwiPnt7aHRtbCB0aGlzLmh0bWx9fTwvZmllbGRzZXQ+JyxmaWVsZFNldE1lc3NhZ2U6JzxkaXY+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1hbGVydCBhbHBhY2EtZmllbGRzZXQtbWVzc2FnZS1saXN0LXZpZXciPjwvc3Bhbj48c3Bhbj4ke21lc3NhZ2V9PC9zcGFuPjwvZGl2PicsZmllbGRTZXRMZWdlbmQ6J3t7aWYgb3B0aW9ucy5sYWJlbH19PGxlZ2VuZCBjbGFzcz0ie3tpZiBvcHRpb25zLmxhYmVsQ2xhc3N9fSR7b3B0aW9ucy5sYWJlbENsYXNzfXt7L2lmfX0iPiR7b3B0aW9ucy5sYWJlbH08L2xlZ2VuZD57ey9pZn19JyxmaWVsZFNldEhlbHBlcjone3tpZiBvcHRpb25zLmhlbHBlcn19PGRpdiBjbGFzcz0ie3tpZiBvcHRpb25zLmhlbHBlckNsYXNzfX0ke29wdGlvbnMuaGVscGVyQ2xhc3N9e3svaWZ9fSI+JHtvcHRpb25zLmhlbHBlcn08L2Rpdj57ey9pZn19JyxmaWVsZFNldEl0ZW1zQ29udGFpbmVyOiI8b2w+e3todG1sIHRoaXMuaHRtbH19PC9vbD4iLGZpZWxkU2V0Oid7e3dyYXAobnVsbCwge30pIEFscGFjYS5maWVsZFRlbXBsYXRlKHRoaXMsImZpZWxkU2V0T3V0ZXJFbCIsdHJ1ZSl9fXt7aHRtbCBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldExlZ2VuZCIpfX17e2h0bWwgQWxwYWNhLmZpZWxkVGVtcGxhdGUodGhpcywiZmllbGRTZXRIZWxwZXIiKX19e3t3cmFwKG51bGwsIHt9KSBBbHBhY2EuZmllbGRUZW1wbGF0ZSh0aGlzLCJmaWVsZFNldEl0ZW1zQ29udGFpbmVyIix0cnVlKX19e3svd3JhcH19e3svd3JhcH19JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBzdHlsZT0ibGlzdC1zdHlsZTpub25lOyI+PC9saT4nLGl0ZW1MYWJlbDone3tpZiBvcHRpb25zLml0ZW1MYWJlbH19PGxhYmVsIGZvcj0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIGFscGFjYS1jb250cm9sZmllbGQtbGFiZWwtbGlzdC12aWV3Ij48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1pdGVtLWxhYmVsLWxpc3QtdmlldyI+JHtvcHRpb25zLml0ZW1MYWJlbH17e2lmIGluZGV4fX0gPHNwYW4gY2xhc3M9ImFscGFjYS1pdGVtLWxhYmVsLWNvdW50ZXIiPiR7aW5kZXh9PC9zcGFuPjwvc3Bhbj57ey9pZn19PC9sYWJlbD57ey9pZn19J30sc3R5bGVzOnt9LGZpZWxkczp7Ii8iOnt0ZW1wbGF0ZXM6e2ZpZWxkU2V0SXRlbXNDb250YWluZXI6JzxvbCBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1zY29udGFpbmVyLWxpc3Qtdmlldy10b3AiPnt7aHRtbCB0aGlzLmh0bWx9fTwvb2w+JyxmaWVsZFNldEl0ZW1Db250YWluZXI6JzxsaSBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCI+PC9saT4nfX19fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfSU5MSU5FIixwYXJlbnQ6IlZJRVdfV0VCX0VESVQiLHRpdGxlOiJEZWZhdWx0IFdlYiBFZGl0IHdpdGggZmllbGRzIGlubGluaW5nIGNhcGFiaWxpdGllcyIsZGVzY3JpcHRpb246IkVkaXQgdGVtcGxhdGUgd2l0aCBmb3JtIGZpZWxkcyBpbmxpbmluZyBjYXBhYmlsaXRpZXMsIHZpYSBvcHRpb25zLmlubGluZSBsZXZlbCB0byBkaXNwbGF5IHNvbWUgZm9ybXMgcGFydHMgaW5saW5lLiBVc2VmdWwgdG8gZGlzcGxheSBmb3IgZXhhbXBsZSBhbiBBcnJheUZpZWxkIGNvbnRhaW5pbmcgT2JqZWN0RmllbGQgaXRlbXMgaW4gYSBjb21wYWN0IG1hbm5lci4iLHR5cGU6ImVkaXQiLHBsYXRmb3JtOiJ3ZWIiLHN0eWxlOiJqcXVlcnktdWkiLGRpc3BsYXlSZWFkb25seTp0cnVlLHRlbXBsYXRlczp7ZmllbGRTZXRPdXRlckVsOic8ZmllbGRzZXQgY2xhc3M9Int7aWYgb3B0aW9ucy5pbmxpbmV9fWFscGFjYS1pbmxpbmV7ey9pZn19Ij57e2h0bWwgdGhpcy5odG1sfX08L2ZpZWxkc2V0PicsZmllbGRTZXRJdGVtQ29udGFpbmVyOic8ZGl2IGNsYXNzPSJhbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIj48L2Rpdj4nLGFycmF5SXRlbVRvb2xiYXI6JzxkaXYgY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiIGRhdGEtcm9sZT0iY29udHJvbGdyb3VwIiBkYXRhLXR5cGU9Imhvcml6b250YWwiIGRhdGEtbWluaT0idHJ1ZSI+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhZGQiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5BZGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJkZWxldGUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5EZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9ImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAiIGRhdGEtcm9sZT0iYnV0dG9uIiBkYXRhLWljb249ImFycm93LXUiIGRhdGEtaWNvbnBvcz0ibm90ZXh0Ij5VcDwvc3Bhbj48c3BhbiBjbGFzcz0iYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kb3duIiBkYXRhLXJvbGU9ImJ1dHRvbiIgZGF0YS1pY29uPSJhcnJvdy1kIiBkYXRhLWljb25wb3M9Im5vdGV4dCI+RG93bjwvc3Bhbj48L2Rpdj4nfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5yZWdpc3RlclZpZXcoe2lkOiJWSUVXX1dFQl9FRElUIix0ZW1wbGF0ZXM6e3R3b0NvbHVtbkxheW91dDonPGRpdiBjbGFzcz0iYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2siPnt7aWYgb3B0aW9ucy5sYWJlbH19PGgzPiR7b3B0aW9ucy5sYWJlbH08L2gzPnt7L2lmfX17e2lmIG9wdGlvbnMuaGVscGVyfX08aDQ+JHtvcHRpb25zLmhlbHBlcn08L2g0Pnt7L2lmfX08ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbGVmdCBhbHBhY2EtbGF5b3V0LXJlZ2lvbiIgIGlkPSJsZWZ0Y29sdW1uIj48L2Rpdj48ZGl2IGNsYXNzPSJhbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tcmlnaHQgYWxwYWNhLWxheW91dC1yZWdpb24iIGlkPSJyaWdodGNvbHVtbiI+PC9kaXY+PC9kaXY+J319KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTEFZT1VUX1RXT19DT0xVTU4iLHBhcmVudDoiVklFV19XRUJfRURJVCIsdGl0bGU6IldlYiBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGRlZmF1bHQgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfV0VCX0VESVRfTElTVF9MQVlPVVRfVFdPX0NPTFVNTiIscGFyZW50OiJWSUVXX1dFQl9FRElUX0xJU1QiLHRpdGxlOiJXZWIgTGlzdCBFZGl0IFZpZXcgd2l0aCBUd28tQ29sdW1uIExheW91dCIsZGVzY3JpcHRpb246IldlYiBlZGl0IGxpc3QgdmlldyB3aXRoIHR3by1jb2x1bW4gbGF5b3V0LiIsbGF5b3V0Ont0ZW1wbGF0ZToidHdvQ29sdW1uTGF5b3V0In19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuTm9ybWFsaXplZFZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuaWQ9Y30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dmFyIGw9YS52aWV3c1t0aGlzLmlkXTtpZighbCl7YS5sb2dFcnJvcigiVmlldyBjb21waWxhdGlvbiBmYWlsZWQgLSB2aWV3IG5vdCBmb3VuZDogIit0aGlzLmlkKTtyZXR1cm4gZmFsc2V9dmFyIGM9W107dmFyIGc9bDt3aGlsZShnKXtjLnB1c2goZyk7dmFyIGY9Zy5wYXJlbnQ7aWYoZil7dmFyIGo9YS52aWV3c1tnLnBhcmVudF07aWYoIWope2EubG9nRXJyb3IoIlZpZXcgY29tcGlsYXRpb24gZmFpbGVkIC0gY2Fubm90IGZpbmQgcGFyZW50IHZpZXc6ICIrZisiIGZvciB2aWV3OiAiK2cuaWQpO3JldHVybiBmYWxzZX1nPWp9ZWxzZXtnPW51bGx9fWM9Yy5yZXZlcnNlKCk7dmFyIGs9ZnVuY3Rpb24ocCxvLHEpe3ZhciBuPW9bcV07dmFyIGk9cFtxXTtpZighYS5pc1VuZGVmaW5lZChpKSYmIWEuaXNVbmRlZmluZWQobikpe2EubG9nRGVidWcoIlZpZXcgcHJvcGVydHk6ICIrcSsiIGFscmVhZHkgaGFzIHZhbHVlOiAiK2krIiBhbmQgb3ZlcndyaXRpbmcgdG86ICIrbil9aWYoIWEuaXNVbmRlZmluZWQobikpe3BbcV09bn19O3ZhciBoPWZ1bmN0aW9uKHAsbyxxKXt2YXIgbj1vW3FdO3ZhciBpPXBbcV07aWYoIWEuaXNVbmRlZmluZWQoaSkmJiFhLmlzVW5kZWZpbmVkKG4pKXthLmxvZ0RlYnVnKCJWaWV3IHByb3BlcnR5OiAiK3ErIiBhbHJlYWR5IGhhcyBmdW5jdGlvbiwgb3ZlcndyaXRpbmciKX1pZighYS5pc1VuZGVmaW5lZChuKSl7cFtxXT1ufX07dmFyIG09ZnVuY3Rpb24obixpLHApe3ZhciBvPWlbcF07aWYobyl7aWYoIW5bcF0pe25bcF09e319YS5tZXJnZU9iamVjdDIobyxuW3BdKX19O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZD1jW2VdO2sodGhpcyxkLCJ0eXBlIik7ayh0aGlzLGQsImRpc3BsYXlSZWFkb25seSIpO2sodGhpcyxkLCJwbGF0Zm9ybSIpO2sodGhpcyxkLCJkZXZpY2UiKTtrKHRoaXMsZCwic3R5bGUiKTtrKHRoaXMsZCwidWkiKTtrKHRoaXMsZCwiY29sbGFwc2libGUiKTtrKHRoaXMsZCwibGVnZW5kU3R5bGUiKTtrKHRoaXMsZCwidG9vbGJhclN0eWxlIik7ayh0aGlzLGQsImJ1dHRvblN0eWxlIik7ayh0aGlzLGQsInRvb2xiYXJTdGlja3kiKTtrKHRoaXMsZCwiZ2xvYmFsVGVtcGxhdGUiKTtoKHRoaXMsZCwicmVuZGVyIik7aCh0aGlzLGQsInBvc3RSZW5kZXIiKTttKHRoaXMsZCwic3R5bGVzIik7bSh0aGlzLGQsInRlbXBsYXRlcyIpO20odGhpcyxkLCJtZXNzYWdlcyIpO20odGhpcyxkLCJ3aXphcmQiKTttKHRoaXMsZCwiZmllbGRzIik7bSh0aGlzLGQsImxheW91dCIpO20odGhpcyxkLCJjb21waWxlZFRlbXBsYXRlcyIpfWEubG9nRGVidWcoIlZpZXcgY29tcGlsYXRpb24gY29tcGxldGUgZm9yIHZpZXc6ICIrdGhpcy5pZCk7YS5sb2dEZWJ1ZygiRmluYWwgdmlldzogIik7YS5sb2dEZWJ1ZyhKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsIiAgICIpKTtyZXR1cm4gdHJ1ZX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuUnVudGltZVZpZXc9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMsZCl7dGhpcy5maWVsZD1kO3RoaXMuc2V0VmlldyhjKX0sc2V0VmlldzpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5pZD0iVklFV19XRUJfRURJVCI7cmV0dXJufXZhciBlPWEuZ2V0Tm9ybWFsaXplZFZpZXcoYyk7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSB2aWV3IGZvciB2aWV3IGlkOiAiK2MrIiBjb3VsZCBub3QgZmluZCBhIG5vcm1hbGl6ZWQgdmlldyIpfWZvcih2YXIgZCBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KGQpKXt0aGlzW2RdPWVbZF19fX0sZ2V0V2l6YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Vmlld1BhcmFtKCJ3aXphcmQiKX0sZ2V0R2xvYmFsVGVtcGxhdGVEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJnbG9iYWxUZW1wbGF0ZSIpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigibGF5b3V0VGVtcGxhdGUiKTtyZXR1cm57dGVtcGxhdGVEZXNjcmlwdG9yOmMsYmluZGluZ3M6dGhpcy5nZXRWaWV3UGFyYW0oWyJsYXlvdXQiLCJiaW5kaW5ncyJdLHRydWUpfX0sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGVzfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKHRoaXMsYyl9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5nZXRWaWV3UGFyYW0oWyJtZXNzYWdlcyIsYS5kZWZhdWx0TG9jYWxlLGNdKTtyZXR1cm4gYS5pc0VtcHR5KGQpP3RoaXMuZ2V0Vmlld1BhcmFtKFsibWVzc2FnZXMiLGNdKTpkfSxnZXRWaWV3UGFyYW06ZnVuY3Rpb24oZixkKXt2YXIgYz10aGlzLmZpZWxkLnBhdGg7aWYodGhpcy5maWVsZHMmJnRoaXMuZmllbGRzW2NdKXt2YXIgZT10aGlzLl9nZXRDb25maWdWYWwodGhpcy5maWVsZHNbY10sZik7aWYoIWEuaXNFbXB0eShlKSl7cmV0dXJuIGV9fWlmKGMmJmMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMucmVwbGFjZSgvXFtcZCtcXS9nLCJbKl0iKTtpZih0aGlzLmZpZWxkcyYmdGhpcy5maWVsZHNbY10pe3ZhciBlPXRoaXMuX2dldENvbmZpZ1ZhbCh0aGlzLmZpZWxkc1tjXSxmKTtpZighYS5pc0VtcHR5KGUpKXtyZXR1cm4gZX19fWlmKCFhLmlzRW1wdHkoZCkmJmQmJnRoaXMuZmllbGQucGF0aCE9Ii8iKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5fZ2V0Q29uZmlnVmFsKHRoaXMsZil9LF9nZXRDb25maWdWYWw6ZnVuY3Rpb24oZCxlKXtpZihhLmlzQXJyYXkoZSkpe2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGgmJiFhLmlzRW1wdHkoZCk7YysrKXtkPWRbZVtjXV19fWVsc2V7aWYoIWEuaXNFbXB0eShkKSl7ZD1kW2VdfX1yZXR1cm4gZH0sZ2V0SW5qZWN0ZWRTdHlsZTpmdW5jdGlvbihmKXt2YXIgZT1udWxsO3ZhciBjPXt9O2lmKHRoaXMuc3R5bGUpe3ZhciBkPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMuc3R5bGVdO2lmKGQpe2EubWVyZ2VPYmplY3QoZCxjKX19cmV0dXJuIGVbZl19LHRtcGw6ZnVuY3Rpb24oYyxkKXtyZXR1cm4gYS50bXBsKHRoaXMsYyxkKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGQ9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGQsaCxsLGcsaixmLGkpe3ZhciBrPXRoaXM7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTt0aGlzLmNvbnRhaW5lcj1kO3RoaXMucGFyZW50PW51bGw7dGhpcy5kYXRhPWg7dGhpcy5vcHRpb25zPWw7dGhpcy5zY2hlbWE9Zzt0aGlzLmNvbm5lY3Rvcj1mO3RoaXMuZXJyb3JDYWxsYmFjaz1mdW5jdGlvbihtKXtpZihpKXtpKG0pfWVsc2V7YS5kZWZhdWx0RXJyb3JDYWxsYmFjay5jYWxsKGssbSl9fTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPWZhbHNlO3RoaXMudmlldz1uZXcgYS5SdW50aW1lVmlldyhqLHRoaXMpO3ZhciBlPWZhbHNlO2lmKCF0aGlzLm9wdGlvbnMpe3RoaXMub3B0aW9ucz17fTtlPXRydWV9dGhpcy5pZD10aGlzLm9wdGlvbnMuaWQ7dGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlO2lmKCF0aGlzLmlkKXt0aGlzLmlkPWEuZ2VuZXJhdGVJZCgpfXZhciBjPWZhbHNlO2lmKCF0aGlzLnNjaGVtYSl7dGhpcy5zY2hlbWE9e307Yz10cnVlfWlmKCF0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuc2NoZW1hLnRpdGxlIT09bnVsbCl7dGhpcy5vcHRpb25zLmxhYmVsPXRoaXMuc2NoZW1hLnRpdGxlfWlmKCF0aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbiE9PW51bGwpe3RoaXMub3B0aW9ucy5oZWxwZXI9dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5yZWFkb25seSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEucmVhZG9ubHkpKXt0aGlzLm9wdGlvbnMucmVhZG9ubHk9dGhpcy5zY2hlbWEucmVhZG9ubHl9aWYoYS5pc1ZhbEVtcHR5KHRoaXMuZGF0YSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWFbImRlZmF1bHQiXSkpe3RoaXMuZGF0YT10aGlzLnNjaGVtYVsiZGVmYXVsdCJdO3RoaXMuc2hvd2luZ0RlZmF1bHREYXRhPXRydWV9dGhpcy5wYXRoPSIvIjt0aGlzLnZhbGlkYXRpb249e307dGhpcy5fZXZlbnRzPXt9O3RoaXMuaXNEaXNwbGF5T25seT1mdW5jdGlvbigpe3JldHVybihrLnZpZXcudHlwZT09InZpZXciKX19LGdldERlZmF1bHRGaWVsZFRlbXBsYXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4iY29udHJvbEZpZWxkIn0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IodGhpcy5nZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkKCkpO3ZhciBkPXRoaXMudmlldy5nZXRHbG9iYWxUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgZT10aGlzLnZpZXcuZ2V0TGF5b3V0KCk7dmFyIGY9ZmFsc2U7aWYoIXRoaXMucGFyZW50KXtpZihkKXt0aGlzLnNldFRlbXBsYXRlRGVzY3JpcHRvcihkKTt0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nPXRydWU7Zj10cnVlfWVsc2V7aWYoZSYmZS50ZW1wbGF0ZURlc2NyaXB0b3Ipe3RoaXMuc2V0VGVtcGxhdGVEZXNjcmlwdG9yKGUudGVtcGxhdGVEZXNjcmlwdG9yKTtmPXRydWV9fX1pZighZiYmYyl7dGhpcy5zZXRUZW1wbGF0ZURlc2NyaXB0b3IoYyl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKX10aGlzLnNldERlZmF1bHRUZW1wbGF0ZURlc2NyaXB0b3IoKTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSl7dGhpcy5zY2hlbWEucmVxdWlyZWQ9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMudmFsaWRhdGUpKXt0aGlzLm9wdGlvbnMudmFsaWRhdGU9dHJ1ZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD1mYWxzZX1pZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpKXt0aGlzLm9wdGlvbnMuc2hvd01lc3NhZ2VzPXRydWV9fSxvbjpmdW5jdGlvbihjLGQpe2EubG9nRGVidWcoIkFkZGluZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIrYyk7dGhpcy5fZXZlbnRzW2NdPWQ7cmV0dXJuIHRoaXN9LHRyaWdnZXJXaXRoUHJvcGFnYXRpb246ZnVuY3Rpb24oYyxkKXt0aGlzLnRyaWdnZXIuY2FsbCh0aGlzLGMsZCk7aWYodGhpcy5wYXJlbnQpe3RoaXMucGFyZW50LnRyaWdnZXJXaXRoUHJvcGFnYXRpb24uY2FsbCh0aGlzLnBhcmVudCxjLGQpfX0sdHJpZ2dlcjpmdW5jdGlvbihkLGcpe2EubG9nRGVidWcoIkZpcmluZyBldmVudDogIitkKTt2YXIgZj10aGlzLl9ldmVudHNbZF07dmFyIGM9bnVsbDtpZih0eXBlb2YoZik9PSJmdW5jdGlvbiIpe2EubG9nRGVidWcoIkZvdW5kIGV2ZW50IGhhbmRsZXIsIGNhbGxpbmc6ICIrZCk7dHJ5e2M9Zi5jYWxsKHRoaXMsZyl9Y2F0Y2goaCl7YS5sb2dEZWJ1ZygiVGhlIGV2ZW50IGhhbmRsZXIgY2F1Z2h0IGFuIGV4Y2VwdGlvbjogIitkKX19ZWxzZXthLmxvZ0RlYnVnKCJDb3VsZCBub3QgZmluZCBhbiBldmVudCBoYW5kbGVyIGZvcjogIitkKX1yZXR1cm4gY30sYmluZERhdGE6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuZGF0YSkpe3RoaXMuc2V0VmFsdWUodGhpcy5kYXRhKX19LHJlbmRlcjpmdW5jdGlvbihkLGUpe2lmKGQmJihhLmlzU3RyaW5nKGQpfHxhLmlzT2JqZWN0KGQpKSl7dGhpcy52aWV3LnNldFZpZXcoZCl9ZWxzZXtpZihhLmlzRW1wdHkoZSkmJmEuaXNGdW5jdGlvbihkKSl7ZT1kfX1pZih0aGlzLm9wdGlvbnMubGFiZWw9PT1udWxsJiZ0aGlzLnByb3BlcnR5SWQpe3RoaXMub3B0aW9ucy5sYWJlbD10aGlzLnByb3BlcnR5SWR9aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1pZighdGhpcy5uYW1lKXtpZih0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubmFtZSYmdGhpcy5wYXRoKXt2YXIgYz10aGlzLnBhdGguc3Vic3RyaW5nKHRoaXMucGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpO2lmKGMuaW5kZXhPZigiWyIpIT0tMSYmYy5pbmRleE9mKCJdIikhPS0xKXtjPWMuc3Vic3RyaW5nKGMuaW5kZXhPZigiWyIpKzEsYy5pbmRleE9mKCJdIikpfWlmKGMpe3RoaXMubmFtZT10aGlzLnBhcmVudC5uYW1lKyJfIitjO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19ZWxzZXtpZih0aGlzLnBhdGgpe3RoaXMubmFtZT10aGlzLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpO3RoaXMubmFtZUNhbGN1bGF0ZWQ9dHJ1ZX19fXRoaXMuc2V0dXAoKTt0aGlzLl9yZW5kZXIoZSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhpcztpZih0aGlzLmdldEVsKCkpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKX1pZih0aGlzLm9wdGlvbnMucmVuZGVyRm9ybSl7dGhpcy5vcHRpb25zLmZvcm0udmlld1R5cGU9dGhpcy52aWV3LnR5cGU7dmFyIGM9dGhpcy5mb3JtO2lmKCFjKXtjPW5ldyBhLkZvcm0odGhpcy5jb250YWluZXIsdGhpcy5vcHRpb25zLmZvcm0sdGhpcy52aWV3LmlkLHRoaXMuY29ubmVjdG9yLHRoaXMuZXJyb3JDYWxsYmFjayl9Yy5yZW5kZXIoZnVuY3Rpb24oZil7ZC5fcHJvY2Vzc1JlbmRlcihmLmZvcm1GaWVsZHNDb250YWluZXIsZnVuY3Rpb24oKXtkLmdldEVsKCkuYXBwZW5kVG8oZi5mb3JtRmllbGRzQ29udGFpbmVyKTtmLnRvcENvbnRyb2w9ZDtpZihkLnZpZXcudHlwZSYmZC52aWV3LnR5cGUhPSJ2aWV3Iil7Zi5pbml0RXZlbnRzKCl9ZC5mb3JtPWY7ZC5wb3N0UmVuZGVyKCk7aWYoZSYmYS5pc0Z1bmN0aW9uKGUpKXtlKGQpfX0pfSl9ZWxzZXt0aGlzLl9wcm9jZXNzUmVuZGVyKHRoaXMuY29udGFpbmVyLGZ1bmN0aW9uKCl7ZC5nZXRFbCgpLmFwcGVuZFRvKGQuY29udGFpbmVyKTtkLnBvc3RSZW5kZXIoKTtpZihlJiZhLmlzRnVuY3Rpb24oZSkpe2UoZCl9fSl9fSxfcHJvY2Vzc1JlbmRlcjpmdW5jdGlvbihlLGgpe3ZhciBpPXRoaXM7dmFyIGQ9dGhpcy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoKTt2YXIgYz10aGlzLmRhdGE7aWYodGhpcy5pc0Rpc3BsYXlPbmx5KCkmJnR5cGVvZihjKT09Im9iamVjdCIpe2M9SlNPTi5zdHJpbmdpZnkoYyl9dmFyIGY9aS52aWV3LnRtcGwoZCx7aWQ6dGhpcy5nZXRJZCgpLG9wdGlvbnM6dGhpcy5vcHRpb25zLHNjaGVtYTp0aGlzLnNjaGVtYSxkYXRhOmMsdmlldzp0aGlzLnZpZXcscGF0aDp0aGlzLnBhdGh9LHt9KTtmLmFwcGVuZFRvKGUpO3ZhciBnPWY7aWYoZi5zaXplKCk+MSl7Zi5lYWNoKGZ1bmN0aW9uKGwsail7aWYoYih0aGlzKS5hdHRyKCJkYXRhLWNvbnRyb2wiKT09ImFwcGVuZCIpe2c9Yih0aGlzKX19KX10aGlzLnNldEVsKGcpO2lmKCF0aGlzLnNpbmdsZUxldmVsUmVuZGVyaW5nKXtpZighdGhpcy5pc0Rpc3BsYXlPbmx5KCl8fCghdGhpcy5pc0NvbnRyb2xGaWVsZCkpe3RoaXMucmVuZGVyRmllbGQoZnVuY3Rpb24oKXtpZihoKXtoKHRoaXMpfX0pfWVsc2V7aWYoaCl7aCh0aGlzKX19fWVsc2V7aWYoaCl7aCh0aGlzKX19fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt9LGdldFN0eWxlSW5qZWN0aW9uOmZ1bmN0aW9uKGUsZixkLGMpe2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXSl7YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVtlXS5jYWxsKHRoaXMsZixkLGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMudmlldy50eXBlIT0idmlldyIpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImZpZWxkIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkIik7aWYodGhpcy5nZXRFbCgpLmF0dHIoImlkIik9PT1udWxsKXt0aGlzLmdldEVsKCkuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZpZWxkLW91dGVyIil9aWYoYS5pc0VtcHR5KHRoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiKSkpe3RoaXMuZ2V0RWwoKS5hdHRyKCJhbHBhY2EtZmllbGQtaWQiLHRoaXMuZ2V0SWQoKSl9aWYodGhpcy5zY2hlbWEucmVxdWlyZWQpe3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLXJlcXVpcmVkIil9ZWxzZXt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1vcHRpb25hbCIpfWlmKHRoaXMub3B0aW9ucy5yZWFkb25seSl7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtcmVhZG9ubHkiKTtiKCI6aW5wdXQiLHRoaXMuZ2V0RWwoKSkuYXR0cigicmVhZG9ubHkiLCJyZWFkb25seSIpO2IoInNlbGVjdCIsdGhpcy5nZXRFbCgpKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7YigiOnJhZGlvIix0aGlzLmdldEVsKCkpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTtiKCI6Y2hlY2tib3giLHRoaXMuZ2V0RWwoKSkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpfXZhciBkPWZ1bmN0aW9uKGosZyl7aWYoZyl7dmFyIGg9MDt2YXIgaz1udWxsO2lmKGEuaXNBcnJheShnKSl7Zm9yKGg9MDtoPGcubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhnW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiwiKT4tMSl7az1nLnNwbGl0KCIsIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtpZihnLmluZGV4T2YoIiAiKT4tMSl7az1nLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGsubGVuZ3RoO2grKyl7ai5hZGRDbGFzcyhrW2hdKX19ZWxzZXtqLmFkZENsYXNzKGcpfX19fX07ZCh0aGlzLmdldEVsKCksdGhpcy5vcHRpb25zLmZpZWxkQ2xhc3MpO3ZhciBlPXRoaXMudmlldy5nZXRTdHlsZXMoKTtpZihlKXtmb3IodmFyIGMgaW4gZSl7YihjLHRoaXMuY29udGFpbmVyKS5jc3MoZVtjXSl9fWlmKHRoaXMubGFiZWxEaXYmJnRoaXMuc2NoZW1hLnJlcXVpcmVkKXt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZXF1aXJlZCIsdGhpcy5sYWJlbERpdil9aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXt0aGlzLmRpc2FibGUoKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGU9PSJlZGl0Iil7dGhpcy5iaW5kRGF0YSgpfWVsc2V7aWYodGhpcy5zaG93aW5nRGVmYXVsdERhdGEpe3RoaXMuYmluZERhdGEoKX19aWYodGhpcy52aWV3LnR5cGU9PSJjcmVhdGUiKXthLmxvZ0RlYnVnKCJTa2lwcGluZyBkYXRhIGJpbmRpbmcgZm9yIGZpZWxkOiAiK3RoaXMuaWQrIiBzaW5jZSB2aWV3IG1vZGUgaXMgJ2NyZWF0ZSciKX1pZih0aGlzLnZpZXcudHlwZSYmdGhpcy52aWV3LnR5cGUhPSJ2aWV3Iil7dGhpcy5pbml0RXZlbnRzKCl9fWlmKHRoaXMub3B0aW9ucy5oaWRkZW4pe3RoaXMuZ2V0RWwoKS5oaWRlKCl9dGhpcy5pbml0aWFsaXppbmc9ZmFsc2U7dmFyIGY9KHRoaXMudmlldy50eXBlPT0iY3JlYXRlIik7dGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcj1hLmlzVmFsRW1wdHkodGhpcy5vcHRpb25zLmhpZGVJbml0VmFsaWRhdGlvbkVycm9yKT9mOnRoaXMub3B0aW9ucy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcjtpZih0aGlzLnZpZXcudHlwZSE9InZpZXciKXt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3I9ZmFsc2U7aWYoIXRoaXMudmlldy5kaXNwbGF5UmVhZG9ubHkpe2IoIi5hbHBhY2EtZmllbGQtcmVhZG9ubHkiLHRoaXMuZ2V0RWwoKSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5wb3N0UmVuZGVyKXt0aGlzLm9wdGlvbnMucG9zdFJlbmRlcih0aGlzKX19LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0ZXJFbH0sc2V0RWw6ZnVuY3Rpb24oYyl7dGhpcy5vdXRlckVsPWN9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWR9LGdldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0saXNUb3BMZXZlbDpmdW5jdGlvbigpe3JldHVybiBhLmlzRW1wdHkodGhpcy5wYXJlbnQpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe3RoaXMuZGF0YT1jO3RoaXMudHJpZ2dlclVwZGF0ZSgpfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7fSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihkLGMpe3ZhciBlPXRoaXM7YigiW2lkXj0nIitlLmdldElkKCkrIi1maWVsZC1tZXNzYWdlJ10iLGUuZ2V0RWwoKSkucmVtb3ZlKCk7aWYoZCYmZC5sZW5ndGg+MCl7Yi5lYWNoKGQsZnVuY3Rpb24oZixoKXtpZihoLmxlbmd0aD4wKXt2YXIgZz1lLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRNZXNzYWdlIik7aWYoZyl7ZS5tZXNzYWdlRWxlbWVudD1lLnZpZXcudG1wbChnLHttZXNzYWdlOmh9KTtlLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvck1lc3NhZ2UiLGUubWVzc2FnZUVsZW1lbnQpO2lmKGUuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW4iKX1lbHNle2UubWVzc2FnZUVsZW1lbnQuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSIpfWUubWVzc2FnZUVsZW1lbnQuYXR0cigiaWQiLGUuZ2V0SWQoKSsiLWZpZWxkLW1lc3NhZ2UtIitmKTtpZihiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWNvbnRhaW5lciIsZS5nZXRFbCgpKS5sZW5ndGgpe2UubWVzc2FnZUVsZW1lbnQuYXBwZW5kVG8oYigiLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1jb250YWluZXIiLGUuZ2V0RWwoKSkpfWVsc2V7ZS5tZXNzYWdlRWxlbWVudC5hcHBlbmRUbyhlLmdldEVsKCkpfX1lLmdldFN0eWxlSW5qZWN0aW9uKCJ0b29sdGlwRXJyb3JNZXNzYWdlIixlLmdldEVsKCksaCl9fSl9fSxyZW5kZXJWYWxpZGF0aW9uU3RhdGU6ZnVuY3Rpb24oZCl7dmFyIGM9ZnVuY3Rpb24oZyxuKXtpZih0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2lmKGcmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgaz0wO2s8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aysrKXtjLmNhbGwodGhpcy5jaGlsZHJlbltrXSxnLHRydWUpfX12YXIgZj10aGlzLmlzVmFsaWQoKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJyZW1vdmVFcnJvciIsdGhpcy5nZXRFbCgpKTt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1pbnZhbGlkIGFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiBhbHBhY2EtZmllbGQtdmFsaWQiKTtpZih0aGlzLnZhbGlkYXRlKCkpe3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigidmFsaWRhdGVkIik7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtdmFsaWQiKX1lbHNle3RoaXMudHJpZ2dlcldpdGhQcm9wYWdhdGlvbigiaW52YWxpZGF0ZWQiKTtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7dGhpcy5nZXRTdHlsZUluamVjdGlvbigiZXJyb3IiLHRoaXMuZ2V0RWwoKSk7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZCIpfWVsc2V7dGhpcy5nZXRFbCgpLmFkZENsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKX19ZWxzZXthLmxvZ1dhcm4oIlRoZSBmaWVsZCAoaWQ9Iit0aGlzLmdldElkKCkrIiwgdGl0bGU9Iit0aGlzLmdldFRpdGxlKCkrIiwgbGFiZWw9Iit0aGlzLm9wdGlvbnMubGFiZWwrIikgaXMgaW52YWxpZCBhbmQgYWxzbyByZWFkLW9ubHkiKX19dmFyIGU9dGhpcy5pc1ZhbGlkKCk7aWYodGhpcy5vcHRpb25zLnNob3dNZXNzYWdlcyl7aWYoIXRoaXMuaW5pdGlhbGl6aW5nKXtpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1bXTtmb3IodmFyIGwgaW4gdGhpcy52YWxpZGF0aW9uKXtpZighdGhpcy52YWxpZGF0aW9uW2xdWyJzdGF0dXMiXSl7ai5wdXNoKHRoaXMudmFsaWRhdGlvbltsXVsibWVzc2FnZSJdKX19dGhpcy5kaXNwbGF5TWVzc2FnZShqLGYpfX19aWYoIW4pe3ZhciBoPWZhbHNlO3ZhciBtPXRoaXMucGFyZW50O3doaWxlKG0pe2lmKG0ub3B0aW9ucyYmKG0ub3B0aW9ucy5mb3JjZVJldmFsaWRhdGlvbnx8bS5vcHRpb25zLnZhbGlkYXRvcikpe2g9dHJ1ZX1tPW0ucGFyZW50fWlmKChmIT1lJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKXx8aCl7dGhpcy5wYXJlbnQucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fXRoaXMuX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yKCl9fTtjLmNhbGwodGhpcyxkLGZhbHNlKX0sc2hvd0hpZGRlbk1lc3NhZ2VzOmZ1bmN0aW9uKCl7dmFyIGM9YigiLmFscGFjYS1maWVsZC1pbnZhbGlkLWhpZGRlbiIsdGhpcy5vdXRlckVsKTtjLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtaW52YWxpZC1oaWRkZW4iKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJlcnJvciIsYyk7Yy5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKTtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIsdGhpcy5vdXRlckVsKS5yZW1vdmVDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLWhpZGRlbiIpLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UiKX0sdXBkYXRlVmFsaWRhdGlvblN0YXRlOmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5vcHRpb25zLnZhbGlkYXRlKXt2YXIgYz10aGlzLmlzVmFsaWQoKTt0aGlzLnZhbGlkYXRpb25bZ109ZDtpZighdGhpcy5oaWRlSW5pdFZhbGlkYXRpb25FcnJvcil7aWYoIXRoaXMub3B0aW9ucy5yZWFkb25seSl7aWYoZCYmIWQuc3RhdHVzKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC12YWxpZCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImVycm9yIix0aGlzLmdldEVsKCkpO3RoaXMuZ2V0RWwoKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkLWludmFsaWQiKX19fXRoaXMudmFsaWRhdGlvbltnXT1kO2lmKHRoaXMub3B0aW9ucy5zaG93TWVzc2FnZXMpe2lmKCF0aGlzLmluaXRpYWxpemluZyl7aWYoIXRoaXMuaGlkZUluaXRWYWxpZGF0aW9uRXJyb3Ipe2lmKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpe3ZhciBmPVtdO2Zvcih2YXIgZSBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZV1bInN0YXR1cyJdKXtmLnB1c2godGhpcy52YWxpZGF0aW9uW2VdWyJtZXNzYWdlIl0pfX10aGlzLmRpc3BsYXlNZXNzYWdlKGYsYyl9fX19aWYodGhpcy5pc1ZhbGlkKCkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUpe3RoaXMucGFyZW50LnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfX19LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGRyZW4mJmUpe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdO2YudmFsaWRhdGUoZSl9fXZhciBjPXRydWU7aWYoIXRoaXMuaW5pdGlhbGl6aW5nJiZ0aGlzLm9wdGlvbnMudmFsaWRhdGUpe2M9dGhpcy5oYW5kbGVWYWxpZGF0ZSgpfXJldHVybiBjfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU9wdGlvbmFsKCk7ZC5ub3RPcHRpb25hbD17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RPcHRpb25hbCIpLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlRGlzYWxsb3coKTtkLmRpc2FsbG93VmFsdWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImRpc2FsbG93VmFsdWUiKSxbdGhpcy5zY2hlbWEuZGlzYWxsb3cuam9pbigiLCIpXSksc3RhdHVzOmN9O3JldHVybiBkLm5vdE9wdGlvbmFsWyJzdGF0dXMiXSYmZC5kaXNhbGxvd1ZhbHVlWyJzdGF0dXMiXX0sX3ZhbGlkYXRlQ3VzdG9tVmFsaWRhdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztpZih0aGlzLm9wdGlvbnMudmFsaWRhdG9yJiZhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZhbGlkYXRvcikpe3RoaXMub3B0aW9ucy52YWxpZGF0b3IodGhpcyxmdW5jdGlvbihkKXtjLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZSgiY3VzdG9tVmFsaWRhdG9yIixkKX0pfX0sX3ZhbGlkYXRlT3B0aW9uYWw6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5yZXF1aXJlZCYmdGhpcy5pc0VtcHR5KCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlRGlzYWxsb3c6ZnVuY3Rpb24oKXtpZighYS5pc1ZhbEVtcHR5KHRoaXMuc2NoZW1hLmRpc2FsbG93KSl7dmFyIGU9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPXRoaXMuc2NoZW1hLmRpc2FsbG93O2lmKGEuaXNBcnJheShkKSl7dmFyIGM9dHJ1ZTtiLmVhY2goZCxmdW5jdGlvbihmLGcpe2lmKChhLmlzT2JqZWN0KGUpfHxhLmlzQXJyYXkoZSkpJiZhLmlzU3RyaW5nKGcpKXtnPWEucGFyc2VKU09OKGcpfWlmKGEuY29tcGFyZU9iamVjdChlLGcpKXtjPWZhbHNlfX0pO3JldHVybiBjfWVsc2V7aWYoKGEuaXNPYmplY3QoZSl8fGEuaXNBcnJheShlKSkmJmEuaXNTdHJpbmcoZCkpe2Q9YS5wYXJzZUpTT04oZCl9cmV0dXJuICFhLmNvbXBhcmVPYmplY3QoZSxkKX19cmV0dXJuIHRydWV9LHRyaWdnZXJVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmdldEVsKCkudHJpZ2dlcigiZmllbGR1cGRhdGUiKX0sZGlzYWJsZTpmdW5jdGlvbigpe30sZW5hYmxlOmZ1bmN0aW9uKCl7fSxmb2N1czpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEmJmEuZmllbGRJbnN0YW5jZXMpe2lmKGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXSl7ZGVsZXRlIGEuZmllbGRJbnN0YW5jZXNbdGhpcy5nZXRJZCgpXX19dGhpcy5nZXRFbCgpLnJlbW92ZSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaGlkZGVuKXtyZXR1cm59ZWxzZXt0aGlzLmdldEVsKCkuY3NzKHtkaXNwbGF5OiIifSk7dGhpcy5vblNob3coKX19LG9uU2hvdzpmdW5jdGlvbigpe30saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSk7dGhpcy5vbkhpZGUoKX0sb25IaWRlOmZ1bmN0aW9uKCl7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNIaWRkZW4oKX0saXNIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4ibm9uZSI9PXRoaXMuZ2V0RWwoKS5jc3MoImRpc3BsYXkiKX0scHJpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wcmludEFyZWEpe3RoaXMuY29udGFpbmVyLnByaW50QXJlYSgpfX0sb25EZXBlbmRlbnRSZXZlYWw6ZnVuY3Rpb24oKXt9LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe30scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXppbmc9dHJ1ZTtpZighYS5pc0VtcHR5KHRoaXMuY2FsbGJhY2spKXt0aGlzLmNhbGxiYWNrKHRoaXMsdGhpcy5yZW5kZXJlZENhbGxiYWNrKX1lbHNle3RoaXMucmVuZGVyKHRoaXMucmVuZGVyZWRDYWxsYmFjayl9fSxjbGVhcjpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5kYXRhKXtjPXRoaXMuZGF0YX10aGlzLnNldFZhbHVlKGMpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNWYWxFbXB0eSh0aGlzLmdldFZhbHVlKCkpfSxpc1ZhbGlkOmZ1bmN0aW9uKGMpe2lmKGMmJnRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2VdO2lmKCFmLmlzVmFsaWQoYykpe3JldHVybiBmYWxzZX19fWlmKGIuaXNFbXB0eU9iamVjdCh0aGlzLnZhbGlkYXRpb24pKXtyZXR1cm4gdHJ1ZX1lbHNle2Zvcih2YXIgZCBpbiB0aGlzLnZhbGlkYXRpb24pe2lmKCF0aGlzLnZhbGlkYXRpb25bZF0uc3RhdHVzKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5jaGFuZ2UoZnVuY3Rpb24oZCl7Yy5vbkNoYW5nZS5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjaGFuZ2UiLGQpfSk7dGhpcy5maWVsZC5mb2N1cyhmdW5jdGlvbihkKXtjLm9uRm9jdXMuY2FsbChjLGQpO2MudHJpZ2dlcigiZm9jdXMiLGQpfSk7dGhpcy5maWVsZC5ibHVyKGZ1bmN0aW9uKGQpe2Mub25CbHVyLmNhbGwoYyxkKTtjLnRyaWdnZXIoImJsdXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW92ZXIoZnVuY3Rpb24oZCl7Yy5vbk1vdXNlT3Zlci5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJtb3VzZW92ZXIiLGQpfSk7dGhpcy5maWVsZC5tb3VzZW91dChmdW5jdGlvbihkKXtjLm9uTW91c2VPdXQuY2FsbChjLGQpO2MudHJpZ2dlcigibW91c2VvdXQiLGQpfSk7Yi5lYWNoKHRoaXMub3B0aW9ucyxmdW5jdGlvbihkLGYpe2lmKGEuc3RhcnRzV2l0aChkLCJvbkZpZWxkIikmJmEuaXNGdW5jdGlvbihmKSl7dmFyIGU9ZC5zdWJzdHJpbmcoNykudG9Mb3dlckNhc2UoKTtjLmZpZWxkLm9uKGUsZnVuY3Rpb24oZyl7Zi5jYWxsKGMsZyl9KX19KX19LG9uRm9jdXM6ZnVuY3Rpb24oYyl7dGhpcy5nZXRFbCgpLnJlbW92ZUNsYXNzKCJhbHBhY2EtZmllbGQtZW1wdHkiKTt0aGlzLmdldEVsKCkuYWRkQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIil9LG9uQmx1cjpmdW5jdGlvbihjKXt0aGlzLmdldEVsKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZC1mb2N1c2VkIik7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5kYXRhPXRoaXMuZ2V0VmFsdWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sb25Nb3VzZU92ZXI6ZnVuY3Rpb24oYyl7fSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGMpe30sZ2V0Q29udHJvbEJ5UGF0aDpmdW5jdGlvbihmKXt2YXIgZD10aGlzO2lmKGYpe3ZhciBlPWYuc3BsaXQoIi8iKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoIWEuaXNWYWxFbXB0eShlW2NdKSl7aWYoZCYmZC5jaGlsZHJlbkJ5UHJvcGVydHlJZCl7aWYoZC5jaGlsZHJlbkJ5UHJvcGVydHlJZFtlW2NdXSl7ZD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2VbY11dfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7cmV0dXJuIG51bGx9fXJldHVybiBkfX0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPXt0aXRsZTp0aGlzLmdldFRpdGxlKCksZGVzY3JpcHRpb246dGhpcy5nZXREZXNjcmlwdGlvbigpLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7dGl0bGU6e3RpdGxlOiJUaXRsZSIsZGVzY3JpcHRpb246IlNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0aXRsZToiRGVzY3JpcHRpb24iLGRlc2NyaXB0aW9uOiJEZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxyZWFkb25seTp7dGl0bGU6IlJlYWRvbmx5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgd2lsbCBiZSByZWFkb25seSBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxyZXF1aXJlZDp7dGl0bGU6IlJlcXVpcmVkIixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBzZXQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sImRlZmF1bHQiOnt0aXRsZToiRGVmYXVsdCIsZGVzY3JpcHRpb246IkRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiYW55In0sdHlwZTp7dGl0bGU6IlR5cGUiLGRlc2NyaXB0aW9uOiJEYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToic3RyaW5nIixyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRhIGZvcm1hdCBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJzdHJpbmcifSxkaXNhbGxvdzp7dGl0bGU6IkRpc2FsbG93ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBkaXNhbGxvd2VkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5LiIsdHlwZToiYXJyYXkifSxkZXBlbmRlbmNpZXM6e3RpdGxlOiJEZXBlbmRlbmNpZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIHByb3BlcnR5IGRlcGVuZGVuY2llcy4iLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmdldFR5cGUmJiFhLmlzVmFsRW1wdHkodGhpcy5nZXRUeXBlKCkpKXtjLnByb3BlcnRpZXMudHlwZVsiZGVmYXVsdCJdPXRoaXMuZ2V0VHlwZSgpO2MucHJvcGVydGllcy50eXBlWyJlbnVtIl09W3RoaXMuZ2V0VHlwZSgpXX1yZXR1cm4gY30sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybntmaWVsZHM6e3RpdGxlOntoZWxwZXI6IkZpZWxkIHNob3J0IGRlc2NyaXB0aW9uIix0eXBlOiJ0ZXh0In0sZGVzY3JpcHRpb246e2hlbHBlcjoiRmllbGQgZGV0YWlsZWQgZGVzY3JpcHRpb24iLHR5cGU6InRleHRhcmVhIn0scmVhZG9ubHk6e2hlbHBlcjoiRmllbGQgd2lsbCBiZSByZWFkIG9ubHkgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZWFkLW9ubHkiLHR5cGU6ImNoZWNrYm94In0scmVxdWlyZWQ6e2hlbHBlcjoiRmllbGQgdmFsdWUgbXVzdCBiZSBzZXQgaWYgY2hlY2tlZCIscmlnaHRMYWJlbDoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIsdHlwZToiY2hlY2tib3gifSwiZGVmYXVsdCI6e2hlbHBlcjoiRmllbGQgZGVmYXVsdCB2YWx1ZSIsdHlwZToidGV4dGFyZWEifSx0eXBlOntoZWxwZXI6IkZpZWxkIGRhdGEgdHlwZSIsdHlwZToidGV4dCJ9LGZvcm1hdDp7dHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7Zm9yKHZhciBjIGluIGEuZGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZyl7ZC5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmMsdGV4dDpjfSl9aWYoZSl7ZSgpfX19LGRpc2FsbG93OntoZWxwZXI6IkRpc2FsbG93ZWQgdmFsdWVzIGZvciB0aGUgZmllbGQiLGl0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In0sZGVwZW5kZW5jaWVzOntoZWxwZXI6IkZpZWxkIERlcGVuZGVuY2llcyIsbXVsdGlwbGU6dHJ1ZSxzaXplOjMsdHlwZToic2VsZWN0IixkYXRhU291cmNlOmZ1bmN0aW9uKGQsZSl7aWYoZC5wYXJlbnQmJmQucGFyZW50LnNjaGVtYVBhcmVudCYmZC5wYXJlbnQuc2NoZW1hUGFyZW50LnBhcmVudCl7Zm9yKHZhciBjIGluIGQucGFyZW50LnNjaGVtYVBhcmVudC5wYXJlbnQuY2hpbGRyZW5CeVByb3BlcnR5SWQpe2lmKGMhPWQucGFyZW50LnNjaGVtYVBhcmVudC5wcm9wZXJ0eUlkKXtkLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmN9KX19fWlmKGUpe2UoKX19fX19fSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dGl0bGU6Ik9wdGlvbnMgZm9yICIrdGhpcy5nZXRUaXRsZSgpLGRlc2NyaXB0aW9uOnRoaXMuZ2V0RGVzY3JpcHRpb24oKSsiIChPcHRpb25zKSIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntyZW5kZXJGb3JtOnt9LGZvcm06e30saWQ6e3RpdGxlOiJGaWVsZCBJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmaWVsZCBpZC4gQXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiIsdHlwZToic3RyaW5nIn0sdHlwZTp7dGl0bGU6IkZpZWxkIFR5cGUiLGRlc2NyaXB0aW9uOiJGaWVsZCB0eXBlLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5nZXRGaWVsZFR5cGUoKSxyZWFkb25seTp0cnVlfSx2YWxpZGF0ZTp7dGl0bGU6IlZhbGlkYXRpb24iLGRlc2NyaXB0aW9uOiJGaWVsZCB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01lc3NhZ2VzOnt0aXRsZToiU2hvdyBNZXNzYWdlcyIsZGVzY3JpcHRpb246IkRpc3BsYXkgdmFsaWRhdGlvbiBtZXNzYWdlcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOnRydWV9LGRpc2FibGVkOnt0aXRsZToiRGlzYWJsZWQiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIGRpc2FibGVkIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHJlYWRvbmx5Ont0aXRsZToiUmVhZG9ubHkiLGRlc2NyaXB0aW9uOiJGaWVsZCB3aWxsIGJlIHJlYWRvbmx5IGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGhpZGRlbjp7dGl0bGU6IkhpZGRlbiIsZGVzY3JpcHRpb246IkZpZWxkIHdpbGwgYmUgaGlkZGVuIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGxhYmVsOnt0aXRsZToiTGFiZWwiLGRlc2NyaXB0aW9uOiJGaWVsZCBsYWJlbC4iLHR5cGU6InN0cmluZyJ9LGhlbHBlcjp7dGl0bGU6IkhlbHBlciIsZGVzY3JpcHRpb246IkZpZWxkIGhlbHAgbWVzc2FnZS4iLHR5cGU6InN0cmluZyJ9LGZpZWxkQ2xhc3M6e3RpdGxlOiJDU1MgY2xhc3MiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZG9tIGVsZW1lbnQgZm9yIHRoaXMgZmllbGQgb25jZSBpdCBpcyByZW5kZXJlZC4gIFN1cHBvcnRzIGEgc2luZ2xlIHZhbHVlLCBjb21tYS1kZWxpbWl0ZWQgdmFsdWVzLCBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIG9yIHZhbHVlcyBwYXNzZWQgaW4gYXMgYW4gYXJyYXkuIix0eXBlOiJzdHJpbmcifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7dGl0bGU6IkhpZGUgSW5pdGlhbCBWYWxpZGF0aW9uIEVycm9ycyIsZGVzY3JpcHRpb246IkhpZGUgaW5pdGlhbCB2YWxpZGF0aW9uIGVycm9ycyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxmb2N1czp7dGl0bGU6IkZvY3VzIixkZXNjcmlwdGlvbjoiSWYgdHJ1ZSwgdGhlIGluaXRpYWwgZm9jdXMgZm9yIHRoZSBmb3JtIHdpbGwgYmUgc2V0IHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50ICh1c3VhbGx5IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgZm9ybSkuICBJZiBhIGZpZWxkIG5hbWUgb3IgcGF0aCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3BlY2lmaWVkIGNoaWxkIGZpZWxkIHdpbGwgcmVjZWl2ZSBmb2N1cy4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2V0IGZvY3VzIHRvICduYW1lJyAoc2VsZWN0aW5nIHRoZSAnbmFtZScgZmllbGQpIG9yIHlvdSBtaWdodCBzZXQgaXQgdG8gJ2NsaWVudC9uYW1lJyB3aGljaCBwaWNrcyB0aGUgJ25hbWUnIGZpZWxkIG9uIHRoZSAnY2xpZW50JyBvYmplY3QuIix0eXBlOiJjaGVja2JveCIsImRlZmF1bHQiOnRydWV9LG9wdGlvbkxhYmVsczp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWUgTGFiZWxzIixkZXNjcmlwdGlvbjoiQW4gYXJyYXkgb2Ygc3RyaW5nIGxhYmVscyBmb3IgaXRlbXMgaW4gdGhlIGVudW0gYXJyYXkiLHR5cGU6ImFycmF5In19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5wcm9wZXJ0aWVzLnJlbmRlckZvcm09e3RpdGxlOiJSZW5kZXIgRm9ybSIsZGVzY3JpcHRpb246IlJlbmRlciBhIEZPUk0gdGFnIGFzIHRoZSBjb250YWluZXIgZm9yIHRoZSByZXN0IG9mIGZpZWxkcyBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfTtjLnByb3BlcnRpZXMuZm9ybT17dGl0bGU6IkZvcm0iLGRlc2NyaXB0aW9uOiJPcHRpb25zIGZvciByZW5kZXJpbmcgdGhlIEZPUk0gdGFnLiIsdHlwZToib2JqZWN0IixkZXBlbmRlbmNpZXM6InJlbmRlckZvcm0iLHByb3BlcnRpZXM6e2F0dHJpYnV0ZXM6e3RpdGxlOiJGb3JtIEF0dHJpYnV0ZXMiLGRlc2NyaXB0aW9uOiJMaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIHRoZSBGT1JNIHRhZy4iLHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3RpdGxlOiJJZCIsZGVzY3JpcHRpb246IlVuaXF1ZSBmb3JtIGlkLiBBdXRvLWdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuIix0eXBlOiJzdHJpbmcifSxhY3Rpb246e3RpdGxlOiJBY3Rpb24iLGRlc2NyaXB0aW9uOiJGb3JtIHN1Ym1pc3Npb24gZW5kcG9pbnQiLHR5cGU6InN0cmluZyJ9LG1ldGhvZDp7dGl0bGU6Ik1ldGhvZCIsZGVzY3JpcHRpb246IkZvcm0gc3VibWlzc2lvbiBtZXRob2QiLCJlbnVtIjpbInBvc3QiLCJnZXQiXSx0eXBlOiJzdHJpbmcifSxuYW1lOnt0aXRsZToiTmFtZSIsZGVzY3JpcHRpb246IkZvcm0gbmFtZSIsdHlwZToic3RyaW5nIn0sZm9jdXM6e3RpdGxlOiJGb2N1cyIsZGVzY3JpcHRpb246IkZvY3VzIFNldHRpbmciLHR5cGU6ImFueSJ9fX0sYnV0dG9uczp7dGl0bGU6IkZvcm0gQnV0dG9ucyIsZGVzY3JpcHRpb246IkNvbmZpZ3VyYXRpb24gZm9yIGZvcm0tYm91bmQgYnV0dG9ucyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdWJtaXQ6e3R5cGU6Im9iamVjdCIsdGl0bGU6IlN1Ym1pdCBCdXR0b24iLHJlcXVpcmVkOmZhbHNlfSxyZXNldDp7dHlwZToib2JqZWN0Iix0aXRsZToiUmVzZXQgYnV0dG9uIixyZXF1aXJlZDpmYWxzZX19fSx0b2dnbGVTdWJtaXRWYWxpZFN0YXRlOnt0aXRsZToiVG9nZ2xlIFN1Ym1pdCBWYWxpZCBTdGF0ZSIsZGVzY3JpcHRpb246IlRvZ2dsZSB0aGUgdmFsaWRpdHkgc3RhdGUgb2YgdGhlIFN1Ym1pdCBidXR0b24iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlfX19fWVsc2V7ZGVsZXRlIGMucHJvcGVydGllcy5yZW5kZXJGb3JtO2RlbGV0ZSBjLnByb3BlcnRpZXMuZm9ybX1yZXR1cm4gY30sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSx0eXBlOnt0eXBlOiJ0ZXh0In0sdmFsaWRhdGU6e3JpZ2h0TGFiZWw6IkVuZm9yY2UgdmFsaWRhdGlvbiIsdHlwZToiY2hlY2tib3gifSxzaG93TWVzc2FnZXM6e3JpZ2h0TGFiZWw6IlNob3cgdmFsaWRhdGlvbiBtZXNzYWdlcyIsdHlwZToiY2hlY2tib3gifSxkaXNhYmxlZDp7cmlnaHRMYWJlbDoiRGlzYWJsZSB0aGlzIGZpZWxkIix0eXBlOiJjaGVja2JveCJ9LGhpZGRlbjp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IkhpZGUgdGhpcyBmaWVsZCJ9LGxhYmVsOnt0eXBlOiJ0ZXh0In0saGVscGVyOnt0eXBlOiJ0ZXh0YXJlYSJ9LGZpZWxkQ2xhc3M6e3R5cGU6InRleHQifSxoaWRlSW5pdFZhbGlkYXRpb25FcnJvcjp7cmlnaHRMYWJlbDoiSGlkZSBpbml0aWFsIHZhbGlkYXRpb24gZXJyb3JzIix0eXBlOiJjaGVja2JveCJ9LGZvY3VzOnt0eXBlOiJjaGVja2JveCIscmlnaHRMYWJlbDoiQXV0by1mb2N1cyBmaXJzdCBjaGlsZCBmaWVsZCJ9LG9wdGlvbkxhYmVsczp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifX19fTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7Yy5maWVsZHMucmVuZGVyRm9ybT17dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6IlllcyJ9O2MuZmllbGRzLmZvcm09e3R5cGU6Im9iamVjdCIsZGVwZW5kZW5jaWVzOntyZW5kZXJGb3JtOnRydWV9LGZpZWxkczp7YXR0cmlidXRlczp7dHlwZToib2JqZWN0IixmaWVsZHM6e2lkOnt0eXBlOiJ0ZXh0IixyZWFkb25seTp0cnVlfSxhY3Rpb246e3R5cGU6InRleHQifSxtZXRob2Q6e3R5cGU6InNlbGVjdCJ9LG5hbWU6e3R5cGU6InRleHQifX19fX19cmV0dXJuIGN9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtkaXNhbGxvd1ZhbHVlOiJ7MH0gYXJlIGRpc2FsbG93ZWQgdmFsdWVzLiIsbm90T3B0aW9uYWw6IlRoaXMgZmllbGQgaXMgbm90IG9wdGlvbmFsLiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udHJvbEZpZWxkPWEuRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZik7dGhpcy5pc0NvbnRyb2xGaWVsZD10cnVlfSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGM9YS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pPyIiOnRoaXMuc2NoZW1hWyJkZWZhdWx0Il07dGhpcy5zZXRWYWx1ZShjKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oYyl7fSxpbmplY3RGaWVsZDpmdW5jdGlvbihlKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMuZmllbGRDb250YWluZXI9ZH1lbHNle3RoaXMuZmllbGRDb250YWluZXI9dGhpcy5vdXRlckVsfXZhciBjPWIoIi5hbHBhY2EtZmllbGQtY29udGFpbmVyLWZpZWxkIix0aGlzLmZpZWxkQ29udGFpbmVyKTtpZihjLmxlbmd0aD4wKXtpZihjLmF0dHIoImRhdGEtcmVwbGFjZSIpPT0idHJ1ZSIpe2MucmVwbGFjZVdpdGgoZSl9ZWxzZXtlLmFwcGVuZFRvKGMpfX1lbHNle2lmKHRoaXMuZmllbGRDb250YWluZXIuYXR0cigiZGF0YS1yZXBsYWNlIik9PSJ0cnVlIil7dGhpcy5maWVsZENvbnRhaW5lci5yZXBsYWNlV2l0aChlKX1lbHNle2UucHJlcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZD1iKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCIsdGhpcy5vdXRlckVsKTtpZihkLmxlbmd0aCl7dGhpcy5sYWJlbERpdj1kfXZhciBjPWIoIi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciIsdGhpcy5vdXRlckVsKTtpZihjLmxlbmd0aCl7dGhpcy5oZWxwZXJEaXY9Y310aGlzLmJhc2UoKTt0aGlzLm91dGVyRWwuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQiKX0sX3ZhbGlkYXRlRW51bTpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hWyJlbnVtIl0pe3ZhciBjPXRoaXMuZGF0YTtpZighdGhpcy5zY2hlbWEucmVxdWlyZWQmJmEuaXNWYWxFbXB0eShjKSl7cmV0dXJuIHRydWV9aWYoYi5pbkFycmF5KGMsdGhpcy5zY2hlbWFbImVudW0iXSk+LTEpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiB0cnVlfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVFbnVtKCk7ZC5pbnZhbGlkVmFsdWVPZkVudW09e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRWYWx1ZU9mRW51bSIpLFt0aGlzLnNjaGVtYVsiZW51bSJdLmpvaW4oIiwiKV0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5pbnZhbGlkVmFsdWVPZkVudW1bInN0YXR1cyJdfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dmFyIGM9dGhpcztpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmtleXByZXNzKGZ1bmN0aW9uKGQpe2Mub25LZXlQcmVzcy5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXlwcmVzcyIsZCl9KTt0aGlzLmZpZWxkLmtleXVwKGZ1bmN0aW9uKGQpe2Mub25LZXlVcC5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJrZXl1cCIsZCl9KTt0aGlzLmZpZWxkLmtleWRvd24oZnVuY3Rpb24oZCl7Yy5vbktleURvd24uY2FsbChjLGQpO2MudHJpZ2dlcigia2V5ZG93biIsZCl9KTt0aGlzLmZpZWxkLmNsaWNrKGZ1bmN0aW9uKGQpe2Mub25DbGljay5jYWxsKGMsZCk7Yy50cmlnZ2VyKCJjbGljayIsZCl9KX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oZil7dmFyIGM9dGhpczt2YXIgZD10aGlzLmlzVmFsaWQoKTtpZighZCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSw1MCl9fSxvbktleURvd246ZnVuY3Rpb24oYyl7fSxvbktleVVwOmZ1bmN0aW9uKGMpe30sb25DbGljazpmdW5jdGlvbihjKXt9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0ZWQgVmFsdWVzIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoaXMgcHJvcGVydHkiLHR5cGU6ImFycmF5In19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnsiZW51bSI6e2l0ZW1MYWJlbDoiVmFsdWUiLHR5cGU6ImFycmF5In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZToiRmllbGQgTmFtZSIsZGVzY3JpcHRpb246IkZpZWxkIE5hbWUuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntuYW1lOnt0eXBlOiJ0ZXh0In19fSl9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkVmFsdWVPZkVudW06IlRoaXMgZmllbGQgc2hvdWxkIGhhdmUgb25lIG9mIHRoZSB2YWx1ZXMgaW4gezB9LiJ9KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuQ29udGFpbmVyRmllbGQ9YS5GaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10cnVlO2lmKCFhLmlzRW1wdHkodGhpcy52aWV3LmNvbGxhcHNpYmxlKSl7Yz10aGlzLnZpZXcuY29sbGFwc2libGV9aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpKXtjPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZX10aGlzLm9wdGlvbnMuY29sbGFwc2libGU9Yzt2YXIgZD0iYnV0dG9uIjtpZighYS5pc0VtcHR5KHRoaXMudmlldy5sZWdlbmRTdHlsZSkpe2Q9dGhpcy52aWV3LmxlZ2VuZFN0eWxlfWlmKCFhLmlzRW1wdHkodGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlKSl7ZD10aGlzLm9wdGlvbnMubGVnZW5kU3R5bGV9dGhpcy5vcHRpb25zLmxlZ2VuZFN0eWxlPWQ7dGhpcy5sYXp5TG9hZGluZz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5sYXp5TG9hZGluZykpe3RoaXMubGF6eUxvYWRpbmc9dGhpcy5vcHRpb25zLmxhenlMb2FkaW5nO2lmKHRoaXMubGF6eUxvYWRpbmcpe3RoaXMub3B0aW9ucy5jb2xsYXBzZWQ9dHJ1ZX19dGhpcy5jaGlsZHJlbj1bXTt0aGlzLmNoaWxkcmVuQnlJZD1bXTt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkPVtdO3RoaXMuZXhwYW5kZWRJY29uPSIiO3RoaXMuY29sbGFwc2VkSWNvbj0iIjt0aGlzLmNvbW1vbkljb249IiI7dGhpcy5hZGRJY29uPSIiO3RoaXMucmVtb3ZlSWNvbj0iIjt0aGlzLnVwSWNvbj0iIjt0aGlzLmRvd25JY29uPSIiO2lmKHRoaXMudmlldy5zdHlsZSYmYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXSl7aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdKXt0aGlzLmNvbW1vbkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiY29tbW9uSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImNvbnRhaW5lckV4cGFuZGVkSWNvbiJdKXt0aGlzLmV4cGFuZGVkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJFeHBhbmRlZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl0pe3RoaXMuY29sbGFwc2VkSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJjb250YWluZXJDb2xsYXBzZWRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdKXt0aGlzLmJ1dHRvbkJlYXV0aWZpZXI9YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiYnV0dG9uQmVhdXRpZmllciJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXSl7dGhpcy5hZGRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImFkZEljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl0pe3RoaXMucmVtb3ZlSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJyZW1vdmVJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsidXBJY29uIl0pe3RoaXMudXBJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bInVwSWNvbiJdfWlmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bImRvd25JY29uIl0pe3RoaXMuZG93bkljb249YS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsiZG93bkljb24iXX19fSxnZXREZWZhdWx0RmllbGRUZW1wbGF0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuImZpZWxkU2V0In0sc2V0RGVmYXVsdFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxhZGRDaGlsZDpmdW5jdGlvbihkLGMpe2lmKCFhLmlzRW1wdHkoYykpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKGMsMCxkKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaChkKX10aGlzLmNoaWxkcmVuQnlJZFtkLmdldElkKCldPWQ7aWYoZC5wcm9wZXJ0eUlkKXt0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2QucHJvcGVydHlJZF09ZH1kLnBhcmVudD10aGlzfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmxhYmVsRGl2KXtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2libGUpe3RoaXMubGFiZWxEaXYuYWRkQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO3RoaXMuZmllbGRTZXREaXYuYWRkQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dmFyIGM9dGhpcy5leHBhbmRlZEljb247aWYoIWEuaXNFbXB0eSh0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSYmdGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7Yz10aGlzLmNvbGxhcHNlZEljb247dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7dGhpcy5sYWJlbERpdi5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApO3RoaXMuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7dGhpcy5maWVsZFNldERpdi50b2dnbGVDbGFzcygiZmllbGRzZXQtY29sbGFwc2VkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWV4cGFuZGVkIik7dGhpcy5sYWJlbERpdi50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImxpbmsiKXtiKCc8c3BhbiBjbGFzcz0iJyt0aGlzLmNvbW1vbkljb24rIiAiK2MrJyBhbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiPjwvc3Bhbj4nKS5wcmVwZW5kVG8odGhpcy5sYWJlbERpdik7dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWxpbmsiLHRoaXMpLnRvZ2dsZUNsYXNzKGQuY29sbGFwc2VkSWNvbikudG9nZ2xlQ2xhc3MoZC5leHBhbmRlZEljb24pO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1oZWxwZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIiKS5zbGlkZVRvZ2dsZSg1MDApO2IodGhpcykubmV4dEFsbCgiLmFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIikuc2xpZGVUb2dnbGUoNTAwKX0pfWlmKHRoaXMub3B0aW9ucy5sZWdlbmRTdHlsZT09ImJ1dHRvbiIpe2lmKHRoaXMuYnV0dG9uQmVhdXRpZmllcil7dGhpcy5idXR0b25CZWF1dGlmaWVyLmNhbGwodGhpcyx0aGlzLmxhYmVsRGl2LGMsdHJ1ZSl9dGhpcy5sYWJlbERpdi5jbGljayhmdW5jdGlvbigpe2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWNvbGxhcHNlZCIpO2QuZmllbGRTZXREaXYudG9nZ2xlQ2xhc3MoImZpZWxkc2V0LWV4cGFuZGVkIik7Yih0aGlzKS50b2dnbGVDbGFzcygibGVnZW5kLWNvbGxhcHNlZCIpO2IodGhpcykudG9nZ2xlQ2xhc3MoImxlZ2VuZC1leHBhbmRlZCIpO2IoIi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLWJ1dHRvbiIsdGhpcykudG9nZ2xlQ2xhc3MoZC5jb2xsYXBzZWRJY29uKS50b2dnbGVDbGFzcyhkLmV4cGFuZGVkSWNvbik7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWhlbHBlciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciIpLnNsaWRlVG9nZ2xlKDUwMCk7Yih0aGlzKS5uZXh0QWxsKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXIiKS5zbGlkZVRvZ2dsZSg1MDApfSl9fX19LGNsZWFyOmZ1bmN0aW9uKGMpe2EuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKCl7dGhpcy5jbGVhcihmYWxzZSl9KTtpZighYyl7dGhpcy50cmlnZ2VyVXBkYXRlKCl9fSxzZXREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoYS5pc0VtcHR5KHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pKXthLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdCgpfSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRoaXMuc2NoZW1hWyJkZWZhdWx0Il0pfX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLmRlc3Ryb3kodHJ1ZSk7ZGVsZXRlIHRoaXMuZm9ybX1hLmVhY2godGhpcy5jaGlsZHJlbixmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSk7dGhpcy5iYXNlKCl9LHJlbmRlckl0ZW1Db250YWluZXI6ZnVuY3Rpb24oayxqLGYpe3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiZmllbGRTZXRJdGVtQ29udGFpbmVyIik7aWYoZyl7dmFyIGQ9aC52aWV3LnRtcGwoZyx7fSk7aWYoZC5hdHRyKCJkYXRhLXJlcGxhY2UiKT09InRydWUiKXtyZXR1cm4gdGhpcy5maWVsZENvbnRhaW5lcn1lbHNle2lmKGspe2IoIiMiK2srIi1pdGVtLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKS5hZnRlcihkKX1lbHNle3ZhciBlPXRoaXMuZmllbGRDb250YWluZXI7dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2lmKGMpe3ZhciBpPWNbZl07aWYoaSYmYigiIyIraSxlKS5sZW5ndGg+MCl7ZT1iKCIjIitpLGUpfX1kLmFwcGVuZFRvKGUpfX1yZXR1cm4gZH1lbHNle3JldHVybiB0aGlzLmZpZWxkQ29udGFpbmVyfX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZil7dmFyIGc9dGhpczt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJjb250YWluZXIiLHRoaXMub3V0ZXJFbCk7dmFyIGQ9YigiLmFscGFjYS1maWVsZHNldC1sZWdlbmQiLHRoaXMub3V0ZXJFbCk7aWYoZC5sZW5ndGgpe3RoaXMubGFiZWxEaXY9ZH1lbHNle3RoaXMub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LW5vLWxlZ2VuZCIpfXZhciBjPWIoIi5hbHBhY2EtZmllbGRzZXQiLHRoaXMub3V0ZXJFbCk7aWYoYy5sZW5ndGgpe3RoaXMuZmllbGRTZXREaXY9Y31lbHNle3RoaXMuZmllbGRTZXREaXY9dGhpcy5vdXRlckVsfXZhciBlPWIoIi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpO2lmKGUubGVuZ3RoKXt0aGlzLmZpZWxkQ29udGFpbmVyPWV9ZWxzZXt0aGlzLmZpZWxkQ29udGFpbmVyPXRoaXMub3V0ZXJFbH1pZighdGhpcy5zaW5nbGVMZXZlbFJlbmRlcmluZyYmIXRoaXMubGF6eUxvYWRpbmcpe3RoaXMucmVuZGVySXRlbXMoKX1pZih0aGlzLmxhenlMb2FkaW5nKXtpZih0aGlzLmxhYmVsRGl2KXtiKHRoaXMubGFiZWxEaXYpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoZy5sYXp5TG9hZGluZyl7Zy5yZW5kZXJJdGVtcygpO2cubGF6eUxvYWRpbmc9ZmFsc2V9fSl9fWlmKGYpe2YoKX19LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe3RoaXMuY2hpbGRyZW5bY10ub25EZXBlbmRlbnRSZXZlYWwoKX19LG9uRGVwZW5kZW50Q29uY2VhbDpmdW5jdGlvbigpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKXt0aGlzLmNoaWxkcmVuW2NdLm9uRGVwZW5kZW50Q29uY2VhbCgpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oYyl7fSxpc0NvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0cnVlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bGF6eUxvYWRpbmc6e3RpdGxlOiJMYXp5IExvYWRpbmciLGRlc2NyaXB0aW9uOiJDaGlsZCBmaWVsZHMgd2lsbCBvbmx5IGJlIHJlbmRlcmVkIHdoZW4gdGhlIGZpZWxkc2V0IGlzIGV4cGFuZGVkIGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSxjb2xsYXBzaWJsZTp7dGl0bGU6IkNvbGxhcHNpYmxlIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGNvbGxhcHNpYmxlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sY29sbGFwc2VkOnt0aXRsZToiQ29sbGFwc2VkIixkZXNjcmlwdGlvbjoiRmllbGQgc2V0IGlzIGluaXRpYWxseSBjb2xsYXBzZWQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0sbGVnZW5kU3R5bGU6e3RpdGxlOiJMZWdlbmQgU3R5bGUiLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgbGVnZW5kIHN0eWxlLiIsdHlwZToic3RyaW5nIiwiZW51bSI6WyJidXR0b24iLCJsaW5rIl0sImRlZmF1bHQiOiJidXR0b24ifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntsYXp5TG9hZGluZzp7cmlnaHRMYWJlbDoiTGF6eSBsb2FkaW5nIGNoaWxkIGZpZWxkcyA/IixoZWxwZXI6IkxhenkgbG9hZGluZyB3aWxsIGJlIGVuYWJsZWQgaWYgY2hlY2tlZC4iLHR5cGU6ImNoZWNrYm94In0sY29sbGFwc2libGU6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBjb2xsYXBzaWJsZSA/IixoZWxwZXI6IkZpZWxkIHNldCBpcyBjb2xsYXBzaWJsZSBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxjb2xsYXBzZWQ6e3JpZ2h0TGFiZWw6IkZpZWxkIHNldCBpbml0aWFsbHkgY29sbGFwc2VkID8iLGRlc2NyaXB0aW9uOiJGaWVsZCBzZXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZCBpZiBjaGVja2VkLiIsdHlwZToiY2hlY2tib3gifSxsZWdlbmRTdHlsZTp7dHlwZToic2VsZWN0In19fSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkNvbm5lY3Rvcj1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5pZD1jfSxjb25uZWN0OmZ1bmN0aW9uKGQsYyl7aWYoZCYmYS5pc0Z1bmN0aW9uKGQpKXtkKCl9fSxsb2FkVGVtcGxhdGU6ZnVuY3Rpb24oZCxlLGMpe2lmKCFhLmlzRW1wdHkoZCkpe2lmKGEuaXNVcmkoZCkpe3RoaXMubG9hZFVyaShkLGZhbHNlLGZ1bmN0aW9uKGYpe2lmKGUmJmEuaXNGdW5jdGlvbihlKSl7ZShmKX19LGZ1bmN0aW9uKGYpe2lmKGMmJmEuaXNGdW5jdGlvbihjKSl7YyhmKX19KX1lbHNle2UoZCl9fWVsc2V7Yyh7bWVzc2FnZToiRW1wdHkgZGF0YSBzb3VyY2UuIixyZWFzb246IlRFTVBMQVRFX0xPQURJTkdfRVJST1IifSl9fSxsb2FkRGF0YTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZFNjaGVtYTpmdW5jdGlvbihmLGMsZCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gIWEuaXNFbXB0eShmKSYmYS5pc1VyaShmKX07aWYoZSgpKXt0aGlzLmxvYWRKc29uKGYsZnVuY3Rpb24oZyl7YyhnKX0sZCl9ZWxzZXtjKGYpfX0sbG9hZE9wdGlvbnM6ZnVuY3Rpb24oZixjLGQpe3ZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuICFhLmlzRW1wdHkoZikmJmEuaXNVcmkoZil9O2lmKGUoKSl7dGhpcy5sb2FkSnNvbihmLGZ1bmN0aW9uKGcpe2MoZyl9LGQpfWVsc2V7YyhmKX19LGxvYWRWaWV3OmZ1bmN0aW9uKGYsYyxkKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiAhYS5pc0VtcHR5KGYpJiZhLmlzVXJpKGYpfTtpZihlKCkpe3RoaXMubG9hZEpzb24oZixmdW5jdGlvbihnKXtjKGcpfSxkKX1lbHNle2MoZil9fSxsb2FkQWxsOmZ1bmN0aW9uKGQsayxpKXt2YXIgYz1kLmRhdGFTb3VyY2U7dmFyIGw9ZC5zY2hlbWFTb3VyY2U7dmFyIG49ZC5vcHRpb25zU291cmNlO3ZhciBqPWQudmlld1NvdXJjZTtpZighbCl7bD1kLnNjaGVtYX1pZighbil7bj1kLm9wdGlvbnN9aWYoIWope2o9ZC52aWV3fXZhciBnPXt9O3ZhciBlPTA7dmFyIG09MDt2YXIgZj1mdW5jdGlvbigpe2lmKGU9PT1tKXtpZihrJiZhLmlzRnVuY3Rpb24oaykpe2soZy5kYXRhLGcub3B0aW9ucyxnLnNjaGVtYSxnLnZpZXcpfX19O3ZhciBoPWZ1bmN0aW9uKG8pe2lmKGkmJmEuaXNGdW5jdGlvbihpKSl7aShvKX19O2lmKGMpe20rK31pZihsKXttKyt9aWYobil7bSsrfWlmKGope20rK31pZihtPT09MCl7ZigpO3JldHVybn1pZihjKXt0aGlzLmxvYWREYXRhKGMsZnVuY3Rpb24obyl7Zy5kYXRhPW87ZSsrO2YoKX0saCl9aWYobCl7dGhpcy5sb2FkU2NoZW1hKGwsZnVuY3Rpb24obyl7Zy5zY2hlbWE9bztlKys7ZigpfSxoKX1pZihuKXt0aGlzLmxvYWRPcHRpb25zKG4sZnVuY3Rpb24obyl7Zy5vcHRpb25zPW87ZSsrO2YoKX0saCl9aWYoail7dGhpcy5sb2FkVmlldyhqLGZ1bmN0aW9uKG8pe2cudmlldz1vO2UrKztmKCl9LGgpfX0sbG9hZEpzb246ZnVuY3Rpb24oZCxlLGMpe3RoaXMubG9hZFVyaShkLHRydWUsZSxjKX0sbG9hZFVyaTpmdW5jdGlvbihlLGMsZyxkKXt2YXIgZj17dXJsOmUsdHlwZToiZ2V0IixzdWNjZXNzOmZ1bmN0aW9uKGgpe2lmKGcmJmEuaXNGdW5jdGlvbihnKSl7ZyhoKX19LGVycm9yOmZ1bmN0aW9uKGgsaixpKXtpZihkJiZhLmlzRnVuY3Rpb24oZCkpe2Qoe21lc3NhZ2U6IlVuYWJsZSB0byBsb2FkIGRhdGEgZnJvbSB1cmkgOiAiK2Usc3RhZ2U6IkRBVEFfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6aCx0ZXh0U3RhdHVzOmosZXJyb3JUaHJvd246aX19KX19fTtpZihjKXtmLmRhdGFUeXBlPSJqc29uIn1lbHNle2YuZGF0YVR5cGU9InRleHQifWIuYWpheChmKX19KTthLnJlZ2lzdGVyQ29ubmVjdG9yQ2xhc3MoImRlZmF1bHQiLGEuQ29ubmVjdG9yKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRm9ybT1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxnLGMsZCxmKXt2YXIgaD10aGlzO3RoaXMuY29udGFpbmVyPWU7dGhpcy5wYXJlbnQ9bnVsbDt0aGlzLmNvbm5lY3Rvcj1kO3RoaXMuZXJyb3JDYWxsYmFjaz1mO3RoaXMub3B0aW9ucz1nO2lmKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9dGhpcy5vcHRpb25zLmF0dHJpYnV0ZXN9ZWxzZXt0aGlzLmF0dHJpYnV0ZXM9e319aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMpe2lmKHRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdCl7aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudHlwZT0ic3VibWl0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC5uYW1lPSJzdWJtaXQifWlmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnN1Ym1pdC52YWx1ZT0iU3VibWl0In19aWYodGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQpe2lmKCF0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlKXt0aGlzLm9wdGlvbnMuYnV0dG9ucy5yZXNldC50eXBlPSJyZXNldCJ9aWYoIXRoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0Lm5hbWU9InJlc2V0In1pZighdGhpcy5vcHRpb25zLmJ1dHRvbnMucmVzZXQudmFsdWUpe3RoaXMub3B0aW9ucy5idXR0b25zLnJlc2V0LnZhbHVlPSJSZXNldCJ9fX1pZih0aGlzLmF0dHJpYnV0ZXMuaWQpe3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVzLmlkfWVsc2V7dGhpcy5pZD1hLmdlbmVyYXRlSWQoKTt0aGlzLmF0dHJpYnV0ZXMuaWQ9dGhpcy5pZH1pZih0aGlzLm9wdGlvbnMuYnV0dG9ucyYmdGhpcy5vcHRpb25zLmJ1dHRvbnMuc3VibWl0JiZhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy50b2dnbGVTdWJtaXRWYWxpZFN0YXRlKSl7dGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGU9dHJ1ZX10aGlzLnZpZXdUeXBlPWcudmlld1R5cGU7dGhpcy52aWV3PW5ldyBhLlJ1bnRpbWVWaWV3KGMsdGhpcyl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO3RoaXMudGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImZvcm0iKTtpZih0aGlzLm91dGVyRWwpe3RoaXMub3V0ZXJFbC5yZW1vdmUoKX10aGlzLnByb2Nlc3NSZW5kZXIodGhpcy5jb250YWluZXIsZnVuY3Rpb24oKXtkLm91dGVyRWwuYXBwZW5kVG8oZC5jb250YWluZXIpO2Qub3V0ZXJFbC5hZGRDbGFzcygiYWxwYWNhLWZvcm0iKTtpZihjKXtjKGQpfX0pfSxpc0Zvcm1WYWxpZDpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC52YWxpZGF0ZSh0cnVlKTt2YXIgYz10aGlzLnRvcENvbnRyb2wuaXNWYWxpZCh0cnVlKTt0aGlzLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpO3JldHVybiBjfSx2YWxpZGF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50b3BDb250cm9sLnZhbGlkYXRlKGMpfSxlbmFibGVTdWJtaXRCdXR0b246ZnVuY3Rpb24oKXtiKCIuYWxwYWNhLWZvcm0tYnV0dG9uLXN1Ym1pdCIpLmF0dHJQcm9wKCJkaXNhYmxlZCIsZmFsc2UpO2lmKGIubW9iaWxlKXt0cnl7YigiLmFscGFjYS1mb3JtLWJ1dHRvbi1zdWJtaXQiKS5idXR0b24oInJlZnJlc2giKX1jYXRjaChjKXt9fX0sZGlzYWJsZVN1Ym1pdEJ1dHRvbjpmdW5jdGlvbigpe2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYXR0clByb3AoImRpc2FibGVkIix0cnVlKTtpZihiLm1vYmlsZSl7dHJ5e2IoIi5hbHBhY2EtZm9ybS1idXR0b24tc3VibWl0IikuYnV0dG9uKCJyZWZyZXNoIil9Y2F0Y2goYyl7fX19LGFkanVzdFN1Ym1pdEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlU3VibWl0QnV0dG9uKCk7dmFyIGM9dGhpcy5pc0Zvcm1WYWxpZCgpO2NvbnNvbGUubG9nKCJpc0Zvcm1WYWxpZDogIitjKTtpZih0aGlzLmlzRm9ybVZhbGlkKCkpe3RoaXMuZW5hYmxlU3VibWl0QnV0dG9uKCl9fSxwcm9jZXNzUmVuZGVyOmZ1bmN0aW9uKGUsZyl7dmFyIGg9dGhpczt2YXIgYz10aGlzLmdldFRlbXBsYXRlRGVzY3JpcHRvcigpO3ZhciBkPXtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMsdmlldzp0aGlzLnZpZXd9O3ZhciBmPWgudmlldy50bXBsKGMsZCx7fSk7Zi5hcHBlbmRUbyhlKTt0aGlzLm91dGVyRWw9ZjtpZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImlkIikpKXt0aGlzLm91dGVyRWwuYXR0cigiaWQiLHRoaXMuZ2V0SWQoKSsiLWZvcm0tb3V0ZXIiKX1pZihhLmlzRW1wdHkodGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIpKSl7dGhpcy5vdXRlckVsLmF0dHIoImFscGFjYS1maWVsZC1pZCIsdGhpcy5nZXRJZCgpKX1pZihiKCIuYWxwYWNhLWZvcm0tZmllbGRzLWNvbnRhaW5lciIsdGhpcy5vdXRlckVsKSl7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPWIoIi5hbHBhY2EtZm9ybS1maWVsZHMtY29udGFpbmVyIix0aGlzLm91dGVyRWwpfWVsc2V7dGhpcy5mb3JtRmllbGRzQ29udGFpbmVyPXRoaXMub3V0ZXJFbH10aGlzLmZpZWxkPWIoImZvcm0iLHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmF0dHIodGhpcy5hdHRyaWJ1dGVzKX10aGlzLmJ1dHRvbnM9e307Yi5lYWNoKGIoIi5hbHBhY2EtZm9ybS1idXR0b24iLHRoaXMuY29udGFpbmVyKSxmdW5jdGlvbihqLGkpe2IoaSkubW91c2Vkb3duKGZ1bmN0aW9uKCl7dmFyIGs9Yih0aGlzKTtrLmF0dHIoImJ1dHRvbi1wdXNoZWQiLCJ0cnVlIik7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGsuYXR0cigiYnV0dG9uLXB1c2hlZCIpJiZrLmF0dHIoImJ1dHRvbi1wdXNoZWQiKT09InRydWUiKXtrLmNsaWNrKCl9fSwxNTApfSk7YihpKS5jbGljayhmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQXR0cigiYnV0dG9uLXB1c2hlZCIpfSk7aC5idXR0b25zW2IoaSkuYXR0cigiZGF0YS1rZXkiKV09YihpKX0pO2coKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRlckVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX0sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuZ2V0VmFsdWUoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dGhpcy50b3BDb250cm9sLnNldFZhbHVlKGMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZih0aGlzLmZpZWxkKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7Yih0aGlzLmZpZWxkKS5zdWJtaXQoYyxmdW5jdGlvbihmKXtyZXR1cm4gZC5vblN1Ym1pdChmLGQpfSl9aWYodGhpcy5vcHRpb25zLnRvZ2dsZVN1Ym1pdFZhbGlkU3RhdGUpe2IoZC50b3BDb250cm9sLmdldEVsKCkpLmJpbmQoImZpZWxkdXBkYXRlIixmdW5jdGlvbigpe2QuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX0pO3RoaXMuYWRqdXN0U3VibWl0QnV0dG9uU3RhdGUoKX19LG9uU3VibWl0OmZ1bmN0aW9uKGYsZCl7aWYodGhpcy5zdWJtaXRIYW5kbGVyKXtmLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBjPXRoaXMuc3VibWl0SGFuZGxlcihmLGQpO2lmKGEuaXNVbmRlZmluZWQoYykpe2M9ZmFsc2V9cmV0dXJuIGN9fSxyZWdpc3RlclN1Ym1pdEhhbmRsZXI6ZnVuY3Rpb24oYyl7aWYoYS5pc0Z1bmN0aW9uKGMpKXt0aGlzLnN1Ym1pdEhhbmRsZXI9Y319LHJlbmRlclZhbGlkYXRpb25TdGF0ZTpmdW5jdGlvbihjKXt0aGlzLnRvcENvbnRyb2wucmVuZGVyVmFsaWRhdGlvblN0YXRlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmRpc2FibGUoKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy50b3BDb250cm9sLmVuYWJsZSgpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMudG9wQ29udHJvbC5mb2N1cygpfSxkZXN0cm95OmZ1bmN0aW9uKGMpe3RoaXMuZ2V0RWwoKS5yZW1vdmUoKTtpZighYyl7dGhpcy5wYXJlbnQuZGVzdHJveSgpfX0sc2hvdzpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6IiJ9KX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZ2V0RWwoKS5jc3Moe2Rpc3BsYXk6Im5vbmUifSl9LGNsZWFyOmZ1bmN0aW9uKGMpe3RoaXMudG9wQ29udHJvbC5jbGVhcihjKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcENvbnRyb2wuaXNFbXB0eSgpfSxnZXRUZW1wbGF0ZURlc2NyaXB0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZURlc2NyaXB0b3J9LHNldFRlbXBsYXRlRGVzY3JpcHRvcjpmdW5jdGlvbihjKXt0aGlzLnRlbXBsYXRlRGVzY3JpcHRvcj1jfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLm9wdGlvbnMuc2l6ZSl7dGhpcy5vcHRpb25zLnNpemU9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dCIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe2IodGhpcy5maWVsZCkudHlwZWFoZWFkKCJkZXN0cm95Iil9fSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGQpe2lmKHRoaXMuZmllbGQmJnRoaXMuZmllbGQubWFzayYmdGhpcy5vcHRpb25zLm1hc2tTdHJpbmcpe3RoaXMuZmllbGQubWFzayh0aGlzLm9wdGlvbnMubWFza1N0cmluZyl9aWYodGhpcy5maWVsZCYmdGhpcy5maWVsZC50eXBlYWhlYWQmJnRoaXMub3B0aW9ucy50eXBlYWhlYWQpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiB0aGlzLm9wdGlvbnMudHlwZWFoZWFkKXtjW2RdPXRoaXMub3B0aW9ucy50eXBlYWhlYWRbZF19aWYoIWMubmFtZSl7Yy5uYW1lPXRoaXMuZ2V0SWQoKX1iKHRoaXMuZmllbGQpLnR5cGVhaGVhZChjKTtiKHRoaXMuZmllbGQpLm9uKCJ0eXBlYWhlYWQ6YXV0b2NvbXBsZXRlZCIsZnVuY3Rpb24oZyxmKXtlLnNldFZhbHVlKGYudmFsdWUpfSk7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOnNlbGVjdGVkIixmdW5jdGlvbihnLGYpe2Uuc2V0VmFsdWUoZi52YWx1ZSl9KTtpZihjLmV2ZW50cyl7aWYoYy5ldmVudHMuYXV0b2NvbXBsZXRlZCl7Yih0aGlzLmZpZWxkKS5vbigidHlwZWFoZWFkOmF1dG9jb21wbGV0ZWQiLGZ1bmN0aW9uKGcsZil7Yy5ldmVudHMuYXV0b2NvbXBsZXRlZChnLGYpfSl9aWYoYy5ldmVudHMuc2VsZWN0ZWQpe2IodGhpcy5maWVsZCkub24oInR5cGVhaGVhZDpzZWxlY3RlZCIsZnVuY3Rpb24oZyxmKXtjLmV2ZW50cy5zZWxlY3RlZChnLGYpfSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRleHQiKX19fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPW51bGw7aWYodGhpcy5maWVsZCl7Yz10aGlzLmZpZWxkLnZhbCgpfWVsc2V7Yz10aGlzLmJhc2UoKX1yZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYodGhpcy5maWVsZCl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX19dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZVBhdHRlcm4oKTtkLmludmFsaWRQYXR0ZXJuPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGF0dGVybiIpLFt0aGlzLnNjaGVtYS5wYXR0ZXJuXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhMZW5ndGgoKTtkLnN0cmluZ1Rvb0xvbmc9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ1Rvb0xvbmciKSxbdGhpcy5zY2hlbWEubWF4TGVuZ3RoXSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNaW5MZW5ndGgoKTtkLnN0cmluZ1Rvb1Nob3J0PXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdUb29TaG9ydCIpLFt0aGlzLnNjaGVtYS5taW5MZW5ndGhdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdJiZkLnN0cmluZ1Rvb0xvbmdbInN0YXR1cyJdJiZkLnN0cmluZ1Rvb1Nob3J0WyJzdGF0dXMiXX0sX3ZhbGlkYXRlUGF0dGVybjpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4pe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKCFjLm1hdGNoKHRoaXMuc2NoZW1hLnBhdHRlcm4pKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNaW5MZW5ndGg6ZnVuY3Rpb24oKXtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbkxlbmd0aCkpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZihjPT09IiImJnRoaXMub3B0aW9ucy5hbGxvd09wdGlvbmFsRW1wdHkmJiF0aGlzLnNjaGVtYS5yZXF1aXJlZCl7cmV0dXJuIHRydWV9aWYoYS5pc0VtcHR5KGMpKXtjPSIifWlmKGMubGVuZ3RoPHRoaXMuc2NoZW1hLm1pbkxlbmd0aCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4TGVuZ3RoOmZ1bmN0aW9uKCl7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKXt2YXIgYz10aGlzLmdldFZhbHVlKCk7aWYoYz09PSIiJiZ0aGlzLm9wdGlvbnMuYWxsb3dPcHRpb25hbEVtcHR5JiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybiB0cnVlfWlmKGEuaXNFbXB0eShjKSl7Yz0iIn1pZihjLmxlbmd0aD50aGlzLnNjaGVtYS5tYXhMZW5ndGgpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPXRydWV9fSxlbmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXt0aGlzLmZpZWxkLmZvY3VzKCl9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5MZW5ndGg6e3RpdGxlOiJNaW5pbWFsIExlbmd0aCIsZGVzY3JpcHRpb246Ik1pbmltYWwgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7dGl0bGU6Ik1heGltdW0gTGVuZ3RoIixkZXNjcmlwdGlvbjoiTWF4aW11bSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlLiIsdHlwZToibnVtYmVyIn0scGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB2YWx1ZS4iLHR5cGU6InN0cmluZyJ9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ImRlZmF1bHQiOntoZWxwZXI6IkZpZWxkIGRlZmF1bHQgdmFsdWUiLHR5cGU6InRleHQifSxtaW5MZW5ndGg6e3R5cGU6ImludGVnZXIifSxtYXhMZW5ndGg6e3R5cGU6ImludGVnZXIifSxwYXR0ZXJuOnt0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzaXplOnt0aXRsZToiRmllbGQgU2l6ZSIsZGVzY3JpcHRpb246IkZpZWxkIHNpemUuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0Ijo0MH0sbWFza1N0cmluZzp7dGl0bGU6Ik1hc2sgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IkV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtYXNrLiBGaWVsZCBtYXNraW5nIHdpbGwgYmUgZW5hYmxlZCBpZiBub3QgZW1wdHkuIix0eXBlOiJzdHJpbmcifSxwbGFjZWhvbGRlcjp7dGl0bGU6IkZpZWxkIFBsYWNlaG9sZGVyIixkZXNjcmlwdGlvbjoiRmllbGQgcGxhY2Vob2xkZXIuIix0eXBlOiJzdHJpbmcifSx0eXBlYWhlYWQ6e3RpdGxlOiJUeXBlIEFoZWFkIixkZXNjcmlwdGlvbjoiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlICQudHlwZWFoZWFkIHBsdWdpbiBpZiBpdCBpcyBhdmFpbGFibGUuICBGb3IgZnVsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzIn0sYWxsb3dPcHRpb25hbEVtcHR5Ont0aXRsZToiQWxsb3cgT3B0aW9uYWwgRW1wdHkiLGRlc2NyaXB0aW9uOiJBbGxvd3MgdGhpcyBub24tcmVxdWlyZWQgZmllbGQgdG8gdmFsaWRhdGUgd2hlbiB0aGUgdmFsdWUgaXMgZW1wdHkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzaXplOnt0eXBlOiJpbnRlZ2VyIn0sbWFza1N0cmluZzp7aGVscGVyOiJhIC0gYW4gYWxwaGEgY2hhcmFjdGVyOzkgLSBhIG51bWVyaWMgY2hhcmFjdGVyOyogLSBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIix0eXBlOiJ0ZXh0In0sdHlwZWFoZWFkOnt0eXBlOiJvYmplY3QifSxhbGxvd09wdGlvbmFsRW1wdHk6e3R5cGU6ImNoZWNrYm94In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZS1MaW5lIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBzaW5nbGUtbGluZSB0ZXh0LiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ic3RyaW5nIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkVGV4dCIsJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJHtpZH0iICB7e2lmIG9wdGlvbnMucGxhY2Vob2xkZXJ9fXBsYWNlaG9sZGVyPSIke29wdGlvbnMucGxhY2Vob2xkZXJ9Int7L2lmfX0ge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXR0ZXJuOiJUaGlzIGZpZWxkIHNob3VsZCBoYXZlIHBhdHRlcm4gezB9IixzdHJpbmdUb29TaG9ydDoiVGhpcyBmaWVsZCBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB7MH0gbnVtYmVycyBvciBjaGFyYWN0ZXJzIixzdHJpbmdUb29Mb25nOiJUaGlzIGZpZWxkIHNob3VsZCBjb250YWluIGF0IG1vc3QgezB9IG51bWJlcnMgb3IgY2hhcmFjdGVycyJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygidGV4dCIsYS5GaWVsZHMuVGV4dEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygic3RyaW5nIiwidGV4dCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVGV4dEFyZWFGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yb3dzKXt0aGlzLm9wdGlvbnMucm93cz01fWlmKCF0aGlzLm9wdGlvbnMuY29scyl7dGhpcy5vcHRpb25zLmNvbHM9NDB9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkVGV4dGFyZWEiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtdGV4dGFyZWEiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlV29yZENvdW50KCk7ZC53b3JkTGltaXRFeGNlZWRlZD17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgid29yZExpbWl0RXhjZWVkZWQiKSxbdGhpcy5vcHRpb25zLndvcmRsaW1pdF0pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC53b3JkTGltaXRFeGNlZWRlZFsic3RhdHVzIl19LF92YWxpZGF0ZVdvcmRDb3VudDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy53b3JkbGltaXQmJnRoaXMub3B0aW9ucy53b3JkbGltaXQ+LTEpe3ZhciBkPXRoaXMuZGF0YTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2IodGhpcy5maWVsZCkudmFsKGMpO3RoaXMuYmFzZShjKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLmZpZWxkKS52YWwoKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3Jvd3M6e3RpdGxlOiJSb3dzIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIHJvd3MiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjV9LGNvbHM6e3RpdGxlOiJDb2x1bW5zIixkZXNjcmlwdGlvbjoiTnVtYmVyIG9mIGNvbHVtbnMiLHR5cGU6Im51bWJlciIsImRlZmF1bHQiOjQwfSx3b3JkbGltaXQ6e3RpdGxlOiJXb3JkIExpbWl0IixkZXNjcmlwdGlvbjoiTGltaXRzIHRoZSBudW1iZXIgb2Ygd29yZHMgYWxsb3dlZCBpbiB0aGUgdGV4dCBhcmVhLiIsdHlwZToibnVtYmVyIiwiZGVmYXVsdCI6LTF9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3Jvd3M6e3R5cGU6ImludGVnZXIifSxjb2xzOnt0eXBlOiJpbnRlZ2VyIn0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIk11bHRpLUxpbmUgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHRhcmVhIGZpZWxkIGZvciBtdWx0aXBsZSBsaW5lIHRleHQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3dvcmRMaW1pdEV4Y2VlZGVkOiJUaGUgbWF4aW11bSB3b3JkIGxpbWl0IG9mIHswfSBoYXMgYmVlbiBleGNlZWRlZC4ifSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRUZXh0YXJlYSIsJzx0ZXh0YXJlYSBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yb3dzfX1yb3dzPSIke29wdGlvbnMucm93c30ie3svaWZ9fSB7e2lmIG9wdGlvbnMuY29sc319Y29scz0iJHtvcHRpb25zLmNvbHN9Int7L2lmfX0ge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2ggb3B0aW9ucy5kYXRhfX1kYXRhLSR7ZmllbGRJZH09IiR7dmFsdWV9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRleHRhcmVhIixhLkZpZWxkcy5UZXh0QXJlYUZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNoZWNrQm94RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy5yaWdodExhYmVsKXt0aGlzLm9wdGlvbnMucmlnaHRMYWJlbD0iIn19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0scmVuZGVyRmllbGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpczt2YXIgYz10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRDaGVja2JveCIpO2lmKGMpe3RoaXMuZmllbGQ9ZS52aWV3LnRtcGwoYyx7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKTt0aGlzLmZpZWxkPWIoJ2lucHV0W2lkPSInK3RoaXMuZ2V0SWQoKSsnIl0nLHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0cnVlKX19aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3giKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2hlY2tlZCh0aGlzLmZpZWxkKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc1N0cmluZyhjKSl7Yz0oYz09PSJ0cnVlIil9YS5jaGVja2VkKHRoaXMuZmllbGQsYyk7dGhpcy5iYXNlKGMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cmlnaHRMYWJlbDp7dGl0bGU6Ik9wdGlvbiBMYWJlbCIsZGVzY3JpcHRpb246Ik9wdGlvbmFsIHJpZ2h0LWhhbmQgc2lkZSBsYWJlbCBmb3IgY2hlY2tib3ggZmllbGQuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntyaWdodExhYmVsOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkNoZWNrYm94IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ2hlY2tib3ggRmllbGQgZm9yIGJvb2xlYW4gZGF0YS4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImJvb2xlYW4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkQ2hlY2tib3giLCc8c3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPnt7aWYgb3B0aW9ucy5yaWdodExhYmVsfX08bGFiZWwgZm9yPSIke2lkfSI+JHtvcHRpb25zLnJpZ2h0TGFiZWx9PC9sYWJlbD57ey9pZn19PC9zcGFuPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJjaGVja2JveCIsYS5GaWVsZHMuQ2hlY2tCb3hGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImJvb2xlYW4iLCJjaGVja2JveCIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRmlsZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRGaWxlIil9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZmllbGQ7dGhpcy5maWVsZD1iKCIuYWxwYWNhLWZpbGVmaWVsZC1jb250cm9sIix0aGlzLmZpZWxkQ29udGFpbmVyKTt0aGlzLmJhc2UoZCk7dGhpcy5maWVsZD1jfSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7aWYodGhpcy5vcHRpb25zLnNlbGVjdGlvbkhhbmRsZXIpe3RoaXMucHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXIoYy50YXJnZXQuZmlsZXMpfX0scHJvY2Vzc1NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oZyl7aWYoZyYmZy5sZW5ndGg+MCl7aWYodHlwZW9mKEZpbGVSZWFkZXIpIT09InVuZGVmaW5lZCIpe3ZhciBlPVtdO3ZhciBmPTA7dmFyIGM9bmV3IEZpbGVSZWFkZXIoKTtjLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgaD10aGlzO3JldHVybiBmdW5jdGlvbihqKXt2YXIgaT1qLnRhcmdldC5yZXN1bHQ7ZS5wdXNoKGkpO2YrKztpZihmPT09Zy5sZW5ndGgpe2gub3B0aW9ucy5zZWxlY3Rpb25IYW5kbGVyLmNhbGwoaCxnLGUpfX19KS5jYWxsKHRoaXMpO2Zvcih2YXIgZD0wO2Q8Zy5sZW5ndGg7ZCsrKXtjLnJlYWRBc0RhdGFVUkwoZ1tkXSl9fX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWZpbGUiKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzZWxlY3Rpb25IYW5kbGVyOnt0aXRsZToiU2VsZWN0aW9uIEhhbmRsZXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQuICBSZXF1aXJlcyBIVE1MNS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VsZWN0aW9uSGFuZGxlcjp7dHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRmlsZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB1cGxvYWRpbmcgZmlsZXMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImZpbGUifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkRmlsZSIsJzxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5zaXplfX1zaXplPSIke29wdGlvbnMuc2l6ZX0ie3svaWZ9fSB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IHt7aWYgbmFtZX19bmFtZT0iJHtuYW1lfSJ7ey9pZn19IHt7ZWFjaChpLHYpIG9wdGlvbnMuZGF0YX19ZGF0YS0ke2l9PSIke3Z9Int7L2VhY2h9fS8+Jyk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImZpbGUiLGEuRmllbGRzLkZpbGVGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5MaXN0RmllbGQ9YS5Db250cm9sRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztjLmJhc2UoKTtjLnNlbGVjdE9wdGlvbnM9W107aWYoYy5nZXRFbnVtKCkpe2IuZWFjaChjLmdldEVudW0oKSxmdW5jdGlvbihkLGUpe3ZhciBmPWU7aWYoYy5vcHRpb25zLm9wdGlvbkxhYmVscyl7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2RdfWVsc2V7aWYoIWEuaXNFbXB0eShjLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdKSl7Zj1jLm9wdGlvbnMub3B0aW9uTGFiZWxzW2VdfX19Yy5zZWxlY3RPcHRpb25zLnB1c2goe3ZhbHVlOmUsdGV4dDpmfSl9KX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19fSxnZXRWYWx1ZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oZSxmKXtiLmVhY2goZC5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGgsZyl7aWYoZy52YWx1ZT09Zil7Y1tlXT1nLnZhbHVlfX0pfSl9ZWxzZXtiLmVhY2godGhpcy5zZWxlY3RPcHRpb25zLGZ1bmN0aW9uKGYsZSl7aWYoZS52YWx1ZT09Yyl7Yz1lLnZhbHVlfX0pfXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKHRoaXMub3B0aW9ucy5kYXRhU291cmNlKXtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXt0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSh0aGlzLGZ1bmN0aW9uKCl7Zi5fcmVuZGVyRmllbGQoZSl9KX1lbHNle2lmKGEuaXNVcmkodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UpKXtiLmFqYXgoe3VybDp0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSx0eXBlOiJnZXQiLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGgpe3ZhciBnPWg7aWYoZi5vcHRpb25zLmRzVHJhbnNmb3JtZXImJmEuaXNGdW5jdGlvbihmLm9wdGlvbnMuZHNUcmFuc2Zvcm1lcikpe2c9Zi5vcHRpb25zLmRzVHJhbnNmb3JtZXIoZyl9aWYoZyl7aWYoYS5pc0FycmF5KGcpKXtiLmVhY2goZyxmdW5jdGlvbihpLGope2Yuc2VsZWN0T3B0aW9ucy5wdXNoKHt2YWx1ZTpqLHRleHQ6an0pfSl9aWYoYS5pc09iamVjdChnKSl7Yi5lYWNoKGcsZnVuY3Rpb24oaSxqKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aSx0ZXh0Omp9KX0pfX1mLl9yZW5kZXJGaWVsZChlKX0sZXJyb3I6ZnVuY3Rpb24oZyxpLGgpe2YuZXJyb3JDYWxsYmFjayh7bWVzc2FnZToiVW5hYmxlIHRvIGxvYWQgZGF0YSBmcm9tIHVyaSA6ICIrZi5vcHRpb25zLmRhdGFTb3VyY2Usc3RhZ2U6IkRBVEFTT1VSQ0VfTE9BRElOR19FUlJPUiIsZGV0YWlsczp7anFYSFI6Zyx0ZXh0U3RhdHVzOmksZXJyb3JUaHJvd246aH19KX19KX1lbHNle3ZhciBkPXRoaXMub3B0aW9ucy5kYXRhU291cmNlO2lmKGYub3B0aW9ucy5kc1RyYW5zZm9ybWVyJiZhLmlzRnVuY3Rpb24oZi5vcHRpb25zLmRzVHJhbnNmb3JtZXIpKXtkPWYub3B0aW9ucy5kc1RyYW5zZm9ybWVyKGQpfWlmKGQpe2lmKGEuaXNBcnJheShkKSl7Yi5lYWNoKGQsZnVuY3Rpb24oZyxoKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6aCx0ZXh0Omh9KX0pfWlmKGEuaXNPYmplY3QoZCkpe2Zvcih2YXIgYyBpbiBkKXtmLnNlbGVjdE9wdGlvbnMucHVzaCh7dmFsdWU6Yyx0ZXh0OmRbY119KX19Zi5fcmVuZGVyRmllbGQoZSl9fX19ZWxzZXt0aGlzLl9yZW5kZXJGaWVsZChlKX19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6eyJlbnVtIjp7dGl0bGU6IkVudW1lcmF0aW9uIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBmaWVsZCB2YWx1ZSBvcHRpb25zIix0eXBlOiJhcnJheSIscmVxdWlyZWQ6dHJ1ZX19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntvcHRpb25MYWJlbHM6e3RpdGxlOiJPcHRpb24gTGFiZWxzIixkZXNjcmlwdGlvbjoiTGFiZWxzIGZvciBvcHRpb25zLiBJdCBjYW4gZWl0aGVyIGJlIGEgbWFwIG9iamVjdCBvciBhbiBhcnJheSBmaWVsZCB0aGF0IG1hcHMgbGFiZWxzIHRvIGl0ZW1zIGRlZmluZWQgYnkgZW51bSBzY2hlbWEgcHJvcGVydHkgb25lIGJ5IG9uZS4iLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dGl0bGU6Ik9wdGlvbiBEYXRhc291cmNlIixkZXNjcmlwdGlvbjoiRGF0YXNvdXJjZSBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIG9wdGlvbnMuIix0eXBlOiJzdHJpbmcifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntvcHRpb25MYWJlbHM6e2l0ZW1MYWJlbDoiTGFiZWwiLHR5cGU6ImFycmF5In0sZGF0YVNvdXJjZTp7dHlwZToidGV4dCJ9fX0pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUmFkaW9GaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5vcHRpb25zLm5hbWUpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZX1lbHNle2lmKCF0aGlzLm5hbWUpe3RoaXMubmFtZT10aGlzLmdldElkKCkrIi1uYW1lIn19aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmJhc2UoYigiaW5wdXQ6cmFkaW9bbmFtZT0iK3RoaXMubmFtZSsiXTpjaGVja2VkIix0aGlzLmZpZWxkKS52YWwoKSk7Yi5lYWNoKHRoaXMuc2VsZWN0T3B0aW9ucyxmdW5jdGlvbigpe2lmKFN0cmluZyh0aGlzWyJ2YWx1ZSJdKT09Yyl7Yz10aGlzWyJ2YWx1ZSJdfX0pO3JldHVybiBjfSxzZXRWYWx1ZTpmdW5jdGlvbihjKXtpZihjIT10aGlzLmdldFZhbHVlKCkpe2IuZWFjaChiKCJpbnB1dDpyYWRpb1tuYW1lPSIrdGhpcy5uYW1lKyJdIix0aGlzLmZpZWxkKSxmdW5jdGlvbigpe2lmKGIodGhpcykudmFsKCk9PWMpe2IodGhpcykuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX1lbHNle2IodGhpcykucmVtb3ZlQXR0cigiY2hlY2tlZCIpfX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0KXtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19dGhpcy5iYXNlKGMpfX0sX3JlbmRlckZpZWxkOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUmFkaW8iKTtpZihjKXt0aGlzLmZpZWxkPWUudmlldy50bXBsKGMse2lkOnRoaXMuZ2V0SWQoKSxvcHRpb25zOnRoaXMub3B0aW9ucyxzZWxlY3RPcHRpb25zOnRoaXMuc2VsZWN0T3B0aW9ucyxyZXF1aXJlZDp0aGlzLnNjaGVtYS5yZXF1aXJlZCxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YX0pO2lmKHRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZTtpZihiKCJpbnB1dDpyYWRpbzpjaGVja2VkIix0aGlzLmZpZWxkKS5sZW5ndGg9PT0wKXtiKCJpbnB1dDpyYWRpbzpmaXJzdCIsdGhpcy5maWVsZCkuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKX19aWYodGhpcy5vcHRpb25zLnZlcnRpY2FsKXtiKCIuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIix0aGlzLmZpZWxkKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfXRoaXMuaW5qZWN0RmllbGQodGhpcy5maWVsZCl9aWYoZCl7ZCgpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8iKX19LG9uQ2xpY2s6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bmFtZTp7dGl0bGU6IkZpZWxkIG5hbWUiLGRlc2NyaXB0aW9uOiJGaWVsZCBuYW1lLiIsdHlwZToic3RyaW5nIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfSx2ZXJ0aWNhbDp7dGl0bGU6IlBvc2l0aW9uIHRoZSByYWRpbyBzZWxlY3RvciBpdGVtcyB2ZXJ0aWNhbGx5IixkZXNjcmlwdGlvbjoiV2hlbiB0cnVlLCB0aGUgcmFkaW8gc2VsZWN0b3IgaXRlbXMgd2lsbCBiZSBzdGFja2VkIHZlcnRpY2FsbHkgYW5kIG5vdCBob3Jpem9udGFsbHkiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlJhZGlvIEdyb3VwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUmFkaW8gR3JvdXAgRmllbGQgd2l0aCBsaXN0IG9mIG9wdGlvbnMuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInJhZGlvIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFJhZGlvIiwnPGRpdiBpZD0iJHtpZH0iIGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIj57e2lmICFyZXF1aXJlZH19PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8taXRlbSI+PGlucHV0IHR5cGU9InJhZGlvIiB7e2lmIG9wdGlvbnMucmVhZG9ubHl9fXJlYWRvbmx5PSJyZWFkb25seSJ7ey9pZn19IG5hbWU9IiR7bmFtZX0iIHZhbHVlPSIiLz48c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1sYWJlbCI+Tm9uZTwvc3Bhbj48L3NwYW4+e3svaWZ9fXt7ZWFjaCBzZWxlY3RPcHRpb25zfX08c3BhbiBjbGFzcz0iYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpby1pdGVtIj48aW5wdXQgdHlwZT0icmFkaW8iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0gbmFtZT0iJHtuYW1lfSIgdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fWNoZWNrZWQ9ImNoZWNrZWQie3svaWZ9fS8+PHNwYW4gY2xhc3M9ImFscGFjYS1jb250cm9sZmllbGQtcmFkaW8tbGFiZWwiPiR7dGV4dH08L3NwYW4+PC9zcGFuPnt7L2VhY2h9fTwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJyYWRpbyIsYS5GaWVsZHMuUmFkaW9GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5TZWxlY3RGaWVsZD1hLkZpZWxkcy5MaXN0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW1wdHlTZWxlY3RGaXJzdCkpe3RoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0PWZhbHNlfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpZWxkKXtyZXR1cm4gdGhpcy5iYXNlKHRoaXMuZmllbGQudmFsKCkpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0FycmF5KGMpKXtpZighYS5jb21wYXJlQXJyYXlDb250ZW50KGMsdGhpcy5nZXRWYWx1ZSgpKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX1lbHNle2lmKGMhPXRoaXMuZ2V0VmFsdWUoKSl7aWYoIWEuaXNFbXB0eShjKSYmdGhpcy5maWVsZCl7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfX19LGdldEVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYSl7aWYodGhpcy5zY2hlbWFbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hWyJlbnVtIl19ZWxzZXtpZih0aGlzLnNjaGVtYS50eXBlJiZ0aGlzLnNjaGVtYS50eXBlPT0iYXJyYXkiJiZ0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXNbImVudW0iXSl7cmV0dXJuIHRoaXMuc2NoZW1hLml0ZW1zWyJlbnVtIl19fX19LF9yZW5kZXJGaWVsZDpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2lmKHRoaXMuc2NoZW1hLnR5cGUmJnRoaXMuc2NoZW1hLnR5cGU9PSJhcnJheSIpe3RoaXMub3B0aW9ucy5tdWx0aXBsZT10cnVlfXZhciBjO2lmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSYmYS5pc0FycmF5KHRoaXMuZGF0YSkpe2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0TXVsdGlwbGUiKX1lbHNle2M9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkU2VsZWN0Iil9aWYoYyl7dGhpcy5maWVsZD1lLnZpZXcudG1wbChjLHtpZDp0aGlzLmdldElkKCksb3B0aW9uczp0aGlzLm9wdGlvbnMscmVxdWlyZWQ6dGhpcy5zY2hlbWEucmVxdWlyZWQsc2VsZWN0T3B0aW9uczp0aGlzLnNlbGVjdE9wdGlvbnMsbmFtZTp0aGlzLm5hbWUsZGF0YTp0aGlzLmRhdGF9KTtpZihhLmlzVW5kZWZpbmVkKHRoaXMuZGF0YSkmJnRoaXMub3B0aW9ucy5lbXB0eVNlbGVjdEZpcnN0JiZ0aGlzLnNlbGVjdE9wdGlvbnMmJnRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg+MCl7dGhpcy5kYXRhPXRoaXMuc2VsZWN0T3B0aW9uc1swXS52YWx1ZX10aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpO2lmKHRoaXMuZGF0YSl7dGhpcy5zZXRWYWx1ZSh0aGlzLmRhdGEpfX1pZihkKXtkKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3QiKX19LF92YWxpZGF0ZUVudW06ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYVsiZW51bSJdKXt2YXIgZD10aGlzLmRhdGE7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiZhLmlzVmFsRW1wdHkoZCkpe3JldHVybiB0cnVlfWlmKHRoaXMub3B0aW9ucy5tdWx0aXBsZSl7dmFyIGM9dHJ1ZTt2YXIgZT10aGlzO2IuZWFjaChkLGZ1bmN0aW9uKGcsZil7aWYoYi5pbkFycmF5KGYsZS5zY2hlbWFbImVudW0iXSk8PS0xKXtjPWZhbHNlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gY31lbHNle3JldHVybihiLmluQXJyYXkoZCx0aGlzLnNjaGVtYVsiZW51bSJdKT4tMSl9fWVsc2V7cmV0dXJuIHRydWV9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9LF92YWxpZGF0ZU1pbkl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtpZihiKCI6c2VsZWN0ZWQiLHRoaXMuZmllbGQpLmxlbmd0aDx0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4SXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe2lmKGIoIjpzZWxlY3RlZCIsdGhpcy5maWVsZCkubGVuZ3RoPnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC50b29NYW55SXRlbXNbInN0YXR1cyJdJiZkLm5vdEVub3VnaEl0ZW1zWyJzdGF0dXMiXX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e211bHRpcGxlOnt0aXRsZToiTXVsaXRwbGUgU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHNpemU6e3RpdGxlOiJEaXNwbGF5ZWQgT3B0aW9ucyIsZGVzY3JpcHRpb246Ik51bWJlciBvZiBvcHRpb25zIHRvIGJlIHNob3duLiIsdHlwZToibnVtYmVyIn0sZW1wdHlTZWxlY3RGaXJzdDp7dGl0bGU6IkVtcHR5IFNlbGVjdCBGaXJzdCIsZGVzY3JpcHRpb246IklmIHRoZSBkYXRhIGlzIGVtcHR5LCB0aGVuIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttdWx0aXBsZTp7cmlnaHRMYWJlbDoiQWxsb3cgbXVsaXRwbGUgc2VsZWN0aW9uID8iLGhlbHBlcjoiQWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9uIGlmIGNoZWNrZWQiLHR5cGU6ImNoZWNrYm94In0sc2l6ZTp7dHlwZToiaW50ZWdlciJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBTZWxlY3QifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEcm9wZG93biBzZWxlY3QgZmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInNlbGVjdCJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRTZWxlY3QiLCc8c2VsZWN0IGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG9wdGlvbnMubXVsdGlwbGV9fW11bHRpcGxle3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+PG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+e3tlYWNoKGksdmFsdWUpIHNlbGVjdE9wdGlvbnN9fTxvcHRpb24gdmFsdWU9IiR7dmFsdWV9IiB7e2lmIHZhbHVlID09IGRhdGF9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZFNlbGVjdE11bHRpcGxlIiwnPHNlbGVjdCBpZD0iJHtpZH0iIHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBvcHRpb25zLm11bHRpcGxlfX1tdWx0aXBsZT0ibXVsdGlwbGUie3svaWZ9fSB7e2lmIG9wdGlvbnMuc2l6ZX19c2l6ZT0iJHtvcHRpb25zLnNpemV9Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0+e3tpZiAhcmVxdWlyZWR9fTxvcHRpb24gdmFsdWU9IiI+Tm9uZTwvb3B0aW9uPnt7L2lmfX17e2VhY2goaSx2YWx1ZSkgc2VsZWN0T3B0aW9uc319PG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZX0iIHt7ZWFjaChqLHZhbCkgZGF0YX19e3tpZiB2YWx1ZSA9PSB2YWx9fXNlbGVjdGVkPSJzZWxlY3RlZCJ7ey9pZn19e3svZWFjaH19PiR7dGV4dH08L29wdGlvbj57ey9lYWNofX08L3NlbGVjdD4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygic2VsZWN0IixhLkZpZWxkcy5TZWxlY3RGaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5OdW1iZXJGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUZsb2F0KGMpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgYz10aGlzLl92YWxpZGF0ZU51bWJlcigpO2Quc3RyaW5nTm90QU51bWJlcj17bWVzc2FnZTpjPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBTnVtYmVyIiksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVEaXZpc2libGVCeSgpO2Quc3RyaW5nRGl2aXNpYmxlQnk9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInN0cmluZ0RpdmlzaWJsZUJ5IiksW3RoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5XSksc3RhdHVzOmN9O2M9dGhpcy5fdmFsaWRhdGVNYXhpbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSl7ZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb0xhcmdlRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1heGltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29MYXJnZVsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29MYXJnZSIpLFt0aGlzLnNjaGVtYS5tYXhpbXVtXSl9fWM9dGhpcy5fdmFsaWRhdGVNaW5pbXVtKCk7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsPXttZXNzYWdlOiIiLHN0YXR1czpjfTtpZighYyl7aWYodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSl7ZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJtZXNzYWdlIl09YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlIiksW3RoaXMuc2NoZW1hLm1pbmltdW1dKX1lbHNle2Quc3RyaW5nVmFsdWVUb29TbWFsbFsibWVzc2FnZSJdPWEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nVmFsdWVUb29TbWFsbCIpLFt0aGlzLnNjaGVtYS5taW5pbXVtXSl9fXJldHVybiBlJiZkLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdJiZkLnN0cmluZ0RpdmlzaWJsZUJ5WyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb0xhcmdlWyJzdGF0dXMiXSYmZC5zdHJpbmdWYWx1ZVRvb1NtYWxsWyJzdGF0dXMiXX0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5udW1iZXIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LF92YWxpZGF0ZURpdmlzaWJsZUJ5OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEuZGl2aXNpYmxlQnkpKXtpZihjJXRoaXMuc2NoZW1hLmRpdmlzaWJsZUJ5IT09MCl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWF4aW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1heGltdW0pKXtpZihjPnRoaXMuc2NoZW1hLm1heGltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5tYXhpbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluaW11bTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0VmFsdWUoKTtpZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLm1pbmltdW0pKXtpZihjPHRoaXMuc2NoZW1hLm1pbmltdW0pe3JldHVybiBmYWxzZX1pZighYS5pc0VtcHR5KHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKXtpZihjPT10aGlzLnNjaGVtYS5taW5pbXVtJiZ0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6Im51bWJlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0aXRsZToiRXhjbHVzaXZlIE1pbmltdW0iLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBjYW4gbm90IGVxdWFsIHRoZSBudW1iZXIgZGVmaW5lZCBieSB0aGUgbWluaW11bSBzY2hlbWEgcHJvcGVydHkuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LGV4Y2x1c2l2ZU1heGltdW06e3RpdGxlOiJFeGNsdXNpdmUgTWF4aW11bSIsZGVzY3JpcHRpb246IlByb3BlcnR5IHZhbHVlIGNhbiBub3QgZXF1YWwgdGhlIG51bWJlciBkZWZpbmVkIGJ5IHRoZSBtYXhpbXVtIHNjaGVtYSBwcm9wZXJ0eS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5Iix0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgbWluaW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifSxleGNsdXNpdmVNYXhpbXVtOntyaWdodExhYmVsOiJFeGNsdXNpdmUgTWF4aW11bSA/IixoZWxwZXI6IkZpZWxkIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIGJ1dCBub3QgZXF1YWwgdG8gdGhpcyBudW1iZXIgaWYgY2hlY2tlZCIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTnVtYmVyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGZsb2F0IG51bWJlcnMuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJudW1iZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ1ZhbHVlVG9vU21hbGw6IlRoZSBtaW5pbXVtIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJWYWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiVmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiB7MH0iLHN0cmluZ0RpdmlzaWJsZUJ5OiJUaGUgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgezB9IixzdHJpbmdOb3RBTnVtYmVyOiJUaGlzIHZhbHVlIGlzIG5vdCBhIG51bWJlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm51bWJlciIsYS5GaWVsZHMuTnVtYmVyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJudW1iZXIiLCJudW1iZXIiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFycmF5RmllbGQ9YS5Db250YWluZXJGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLm9wdGlvbnMudG9vbGJhclN0eWxlPWEuaXNFbXB0eSh0aGlzLnZpZXcudG9vbGJhclN0eWxlKT8iYnV0dG9uIjp0aGlzLnZpZXcudG9vbGJhclN0eWxlO2lmKCF0aGlzLm9wdGlvbnMuaXRlbXMpe3RoaXMub3B0aW9ucy5pdGVtcz17fX12YXIgYz1mYWxzZTtpZighYS5pc0VtcHR5KHRoaXMudmlldy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLnZpZXcudG9vbGJhclN0aWNreX1pZighYS5pc0VtcHR5KHRoaXMub3B0aW9ucy50b29sYmFyU3RpY2t5KSl7Yz10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreX1pZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlVXBJdGVtQnV0dG9uPXRydWV9aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5pdGVtcy5zaG93TW92ZURvd25JdGVtQnV0dG9uKSl7dGhpcy5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b249dHJ1ZX10aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreT1jO2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyl7YS5tZXJnZU9iamVjdCh0aGlzLm9wdGlvbnMse2ZvcmNlUmV2YWxpZGF0aW9uOnRydWV9KX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7aWYoIWEuaXNTdHJpbmcodGhpcy5kYXRhKSl7cmV0dXJufWVsc2V7dHJ5e3RoaXMuZGF0YT1hLnBhcnNlSlNPTih0aGlzLmRhdGEpO2lmKCFhLmlzQXJyYXkodGhpcy5kYXRhKSl7YS5sb2dXYXJuKCJBcnJheUZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIGFycmF5OiAiK0pTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO3JldHVybn19Y2F0Y2goZCl7dGhpcy5kYXRhPVt0aGlzLmRhdGFdfX19fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgZj10aGlzO2lmKCFlfHwhYS5pc0FycmF5KGUpKXtyZXR1cm59Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF07aWYoZS5sZW5ndGg+ZCl7Yy5zZXRWYWx1ZShlW2RdKX1lbHNle3RoaXMucmVtb3ZlSXRlbShjLmlkKX19Zi5yZXNvbHZlSXRlbVNjaGVtYU9wdGlvbnMoZnVuY3Rpb24oaCxnKXt3aGlsZShkPGUubGVuZ3RoKXtmLmFkZEl0ZW0oZCxoLGcsZVtkXSk7ZCsrfX0pfSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGU9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZF0uZ2V0VmFsdWUoKTtpZih0eXBlb2YoYykhPT0idW5kZWZpbmVkIil7ZS5wdXNoKGMpfX1yZXR1cm4gZX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aH0sdXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZTpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKGMuY2hpbGRyZW4pe2IuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGYsZSl7aWYoYy5wcmVQYXRoJiZhLnN0YXJ0c1dpdGgoZS5wYXRoLGMucHJlUGF0aCkpe2UucHJlUGF0aD1lLnBhdGg7ZS5wYXRoPWUucGF0aC5yZXBsYWNlKGMucHJlUGF0aCxjLnBhdGgpfWlmKGMucHJlTmFtZSYmYS5zdGFydHNXaXRoKGUubmFtZSxjLnByZU5hbWUpKXtlLnByZU5hbWU9ZS5uYW1lO2UubmFtZT1lLm5hbWUucmVwbGFjZShjLnByZU5hbWUsYy5uYW1lKTtpZihlLmZpZWxkKXtiKGUuZmllbGQpLmF0dHIoIm5hbWUiLGUubmFtZSl9fWQudXBkYXRlQ2hpbGRyZW5QYXRoQW5kTmFtZShlKX0pfX0sdXBkYXRlUGF0aEFuZE5hbWU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuY2hpbGRyZW4pe2IuZWFjaCh0aGlzLmNoaWxkcmVuLGZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5wYXRoLmxhc3RJbmRleE9mKCIvIik7dmFyIGU9Zi5wYXRoLnN1YnN0cmluZyhkKzEpO2lmKGUuaW5kZXhPZigiWyIpIT0tMSYmZS5pbmRleE9mKCJdIikhPS0xKXtlPWUuc3Vic3RyaW5nKGUuaW5kZXhPZigiWyIpKzEsZS5pbmRleE9mKCJdIikpfWlmKGUhPWcpe2YucHJlUGF0aD1mLnBhdGg7Zi5wYXRoPWYucGF0aC5zdWJzdHJpbmcoMCxkKSsiL1siK2crIl0ifWlmKGYubmFtZUNhbGN1bGF0ZWQpe2YucHJlTmFtZT1mLm5hbWU7aWYoZi5wYXJlbnQmJmYucGFyZW50Lm5hbWUmJmYucGF0aCl7Zi5uYW1lPWYucGFyZW50Lm5hbWUrIl8iK2d9ZWxzZXtpZihmLnBhdGgpe2YubmFtZT1mLnBhdGgucmVwbGFjZSgvXC8vZywiIikucmVwbGFjZSgvXFsvZywiXyIpLnJlcGxhY2UoL1xdL2csIiIpfX1iKGYuZmllbGQpLmF0dHIoIm5hbWUiLGYubmFtZSl9aWYoIWYucHJlUGF0aCl7Zi5wcmVQYXRoPWYucGF0aH1jLnVwZGF0ZUNoaWxkcmVuUGF0aEFuZE5hbWUoZil9KX19LG1vdmVJdGVtOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcztpZih0aGlzLmNoaWxkcmVuQnlJZFtjXSl7Yi5lYWNoKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZyxsKXtpZihsLmdldElkKCk9PWMpe3ZhciBqO2lmKGQ9PT10cnVlKXtqPWctMTtpZihqPDApe2o9ZS5jaGlsZHJlbi5sZW5ndGgtMX19ZWxzZXtqPWcrMTtpZihqPj1lLmNoaWxkcmVuLmxlbmd0aCl7aj0wfX1pZihlLmNoaWxkcmVuW2pdKXt2YXIgZj1lLmNoaWxkcmVuW2pdLmdldElkKCk7dmFyIGs9YigiIyIrYysiLWl0ZW0tY29udGFpbmVyIik7dmFyIGk9YigiIyIrZisiLWl0ZW0tY29udGFpbmVyIik7ZS5yZVJlbmRlckl0ZW0oZS5jaGlsZHJlbltnXSxpKTtlLnJlUmVuZGVySXRlbShlLmNoaWxkcmVuW2pdLGspO3ZhciBoPWUuY2hpbGRyZW5bZ107ZS5jaGlsZHJlbltnXT1lLmNoaWxkcmVuW2pdO2UuY2hpbGRyZW5bal09aDtlLnVwZGF0ZVBhdGhBbmROYW1lKCk7cmV0dXJuIGZhbHNlfX19KX19LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYyl7aWYodGhpcy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZSxkKXtyZXR1cm4oZS5nZXRJZCgpIT1jKX0pO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtjXTtiKCIjIitjKyItaXRlbS1jb250YWluZXIiLHRoaXMub3V0ZXJFbCkucmVtb3ZlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1cygpO3RoaXMudXBkYXRlUGF0aEFuZE5hbWUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX19LHVwZGF0ZVRvb2xiYXJJdGVtc1N0YXR1czpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYoYy5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItYWRkIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYoYy5fdmFsaWRhdGVFcXVhbE1pbkl0ZW1zKCkpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQiKX0pfWVsc2V7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItcmVtb3ZlIix0aGlzLm91dGVyRWwpLmVhY2goZnVuY3Rpb24oZCl7Yih0aGlzKS5hZGRDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZCIpfSl9aWYodGhpcy5nZXRTaXplKCk9PT0wKXt0aGlzLnJlbmRlckFycmF5VG9vbGJhcih0aGlzLm91dGVyRWwpfWVsc2V7aWYodGhpcy5hcnJheVRvb2xiYXIpe3RoaXMuYXJyYXlUb29sYmFyLnJlbW92ZSgpfX1iKCIuYWxwYWNhLWl0ZW0tbGFiZWwtY291bnRlciIsdGhpcy5vdXRlckVsKS5lYWNoKGZ1bmN0aW9uKGQpe2IodGhpcykuaHRtbChkKzEpfSl9LHJlbmRlclRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGs9dGhpcztpZighdGhpcy5vcHRpb25zLnJlYWRvbmx5KXt2YXIgaj1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMuY2hpbGRyZW5CeUlkW2pdO3ZhciBoPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5SXRlbVRvb2xiYXIiKTtpZihoKXt2YXIgZz1be2ZlYXR1cmU6ImFkZCIsaWNvbjprLmFkZEljb24sbGFiZWw6KGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbCk/ay5vcHRpb25zLml0ZW1zLmFkZEl0ZW1MYWJlbDoiQWRkIEl0ZW0iLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtrLnJlc29sdmVJdGVtU2NoZW1hT3B0aW9ucyhmdW5jdGlvbihuLG0pe3ZhciBvPWkuYWRkSXRlbShjLmluZGV4KCkrMSxuLG0sbnVsbCxsLHRydWUpO2kuZW5yaWNoRWxlbWVudHMobyl9KTtyZXR1cm4gZmFsc2V9fSx7ZmVhdHVyZToicmVtb3ZlIixpY29uOmsucmVtb3ZlSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsKT9rLm9wdGlvbnMuaXRlbXMucmVtb3ZlSXRlbUxhYmVsOiJSZW1vdmUgSXRlbSIsY2xpY2tDYWxsYmFjazpmdW5jdGlvbihsLGkpe2kucmVtb3ZlSXRlbShsKX19XTtpZigoay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMuc2hvd01vdmVVcEl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6InVwIixpY29uOmsudXBJY29uLGxhYmVsOihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlVXBJdGVtTGFiZWw6Ik1vdmUgVXAiLGNsaWNrQ2FsbGJhY2s6ZnVuY3Rpb24obCxpKXtpLm1vdmVJdGVtKGwsdHJ1ZSl9fSl9aWYoKGsub3B0aW9ucy5pdGVtcyYmay5vcHRpb25zLml0ZW1zLnNob3dNb3ZlRG93bkl0ZW1CdXR0b24pKXtnLnB1c2goe2ZlYXR1cmU6ImRvd24iLGljb246ay5kb3duSWNvbixsYWJlbDooay5vcHRpb25zLml0ZW1zJiZrLm9wdGlvbnMuaXRlbXMubW92ZURvd25JdGVtTGFiZWwpP2sub3B0aW9ucy5pdGVtcy5tb3ZlRG93bkl0ZW1MYWJlbDoiTW92ZSBEb3duIixjbGlja0NhbGxiYWNrOmZ1bmN0aW9uKGwsaSl7aS5tb3ZlSXRlbShsLGZhbHNlKX19KX1pZihrLm9wdGlvbnMuaXRlbXMmJmsub3B0aW9ucy5pdGVtcy5leHRyYVRvb2xiYXJCdXR0b25zKXtnPWIubWVyZ2UoZyxrLm9wdGlvbnMuaXRlbXMuZXh0cmFUb29sYmFyQnV0dG9ucyl9dmFyIGU9ay52aWV3LnRtcGwoaCx7aWQ6aixidXR0b25zOmd9KTtpZihlLmF0dHIoImlkIik9PT1udWxsKXtlLmF0dHIoImlkIixqKyItaXRlbS10b29sYmFyIil9Zm9yKHZhciBkIGluIGcpeyhmdW5jdGlvbihsKXt2YXIgaT1lLmZpbmQoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLSIrbC5mZWF0dXJlKTtpLmNsaWNrKGZ1bmN0aW9uKG0pe3JldHVybiBsLmNsaWNrQ2FsbGJhY2soaixrLG0pfSk7aWYoay5idXR0b25CZWF1dGlmaWVyKXtrLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChrLGksbC5pY29uKX19KShnW2RdKX1pZih0aGlzLm9wdGlvbnMudG9vbGJhclN0aWNreSl7ZS5wcmVwZW5kVG8oYyl9ZWxzZXtlLmhpZGUoKS5wcmVwZW5kVG8oYyk7Yy5ob3ZlcihmdW5jdGlvbigpe2IoIi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIix0aGlzKS5zaG93KCl9LGZ1bmN0aW9uKCl7YigiLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIiLHRoaXMpLmhpZGUoKX0pfX19fSxyZW5kZXJBcnJheVRvb2xiYXI6ZnVuY3Rpb24oYyl7dmFyIGg9dGhpczt2YXIgZz1jLmF0dHIoImFscGFjYS1pZCIpO3ZhciBmPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImFycmF5VG9vbGJhciIpO2lmKGYpe3ZhciBlPWgudmlldy50bXBsKGYse2lkOmcsYWRkSXRlbUxhYmVsOihoLm9wdGlvbnMuaXRlbXMmJmgub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWwpP2gub3B0aW9ucy5pdGVtcy5hZGRJdGVtTGFiZWw6IkFkZCBJdGVtIn0pO2lmKGUuYXR0cigiaWQiKT09PW51bGwpe2UuYXR0cigiaWQiLGcrIi1hcnJheS10b29sYmFyIil9aWYodGhpcy5vcHRpb25zLnRvb2xiYXJTdHlsZT09ImxpbmsiKXtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKS5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7dmFyIGs9aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSk7aC5lbnJpY2hFbGVtZW50cyhrKX0pfSl9ZWxzZXt2YXIgZD1iKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXItYWRkIixlKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZCxoLmFkZEljb24sdHJ1ZSl9ZC5jbGljayhmdW5jdGlvbigpe2gucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGosaSl7aC5hZGRJdGVtKDAsaixpLCIiLGcsdHJ1ZSl9KTtyZXR1cm4gZmFsc2V9KS53cmFwKCI8c21hbGw+PC9zbWFsbD4iKX1lLmFwcGVuZFRvKGMpO3RoaXMuYXJyYXlUb29sYmFyPWV9fSxyZVJlbmRlckl0ZW06ZnVuY3Rpb24oZCxjKXtkLmNvbnRhaW5lcj1jO2QucmVuZGVyKCk7Yy5hdHRyKCJpZCIsZC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsZC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXIiKTtiKCIuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciIsYykucmVtb3ZlKCk7dGhpcy5yZW5kZXJUb29sYmFyKGMpO3RoaXMuZW5yaWNoRWxlbWVudHMoYyl9LGFkZEl0ZW06ZnVuY3Rpb24oZCxmLGUsYyxnLGgpe3JldHVybiB0aGlzLl9hZGRJdGVtKGQsZixlLGMsZyxoKX0sX2FkZEl0ZW06ZnVuY3Rpb24oZSxnLGYsZCxoLGkpe3ZhciBqPXRoaXM7aWYoai5fdmFsaWRhdGVFcXVhbE1heEl0ZW1zKCkpe2lmKGY9PT1udWxsJiZqLm9wdGlvbnMmJmoub3B0aW9ucy5maWVsZHMmJmoub3B0aW9ucy5maWVsZHMuaXRlbSl7Zj1qLm9wdGlvbnMuZmllbGRzLml0ZW19dmFyIGM9ai5yZW5kZXJJdGVtQ29udGFpbmVyKGgpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczpmLHNjaGVtYTpnLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGl8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihtKXttLnBhcmVudD1qO20ucGF0aD1qLnBhdGgrIlsiK2UrIl0iO20ubmFtZUNhbGN1bGF0ZWQ9dHJ1ZTttLnJlbmRlcigpO2MuYXR0cigiaWQiLG0uZ2V0SWQoKSsiLWl0ZW0tY29udGFpbmVyIik7Yy5hdHRyKCJhbHBhY2EtaWQiLG0uZ2V0SWQoKSk7Yy5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyIik7aWYoai5vcHRpb25zJiZqLm9wdGlvbnMuaXRlbUxhYmVsKXt2YXIgaz1qLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJpdGVtTGFiZWwiKTt2YXIgbD1qLnZpZXcudG1wbChrLHtvcHRpb25zOmoub3B0aW9ucyxpbmRleDplP2UrMToxLGlkOmouaWR9KTtsLnByZXBlbmRUbyhjKX1qLmFkZENoaWxkKG0sZSk7ai5yZW5kZXJUb29sYmFyKGMpO2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCk7ai51cGRhdGVQYXRoQW5kTmFtZSgpO2oudHJpZ2dlclVwZGF0ZSgpO2lmKGIoYykuc2libGluZ3MoKS5hZGRCYWNrKCkubGVuZ3RoPjApe2IoYykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItbGFzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkuZmlyc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWZpcnN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sYXN0KCkuYWRkQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iil9YihjKS5hdHRyKCJkYXRhLWFscGFjYS1pdGVtLWNvbnRhaW5lci1pdGVtLWtleSIsZSl9fSk7dGhpcy51cGRhdGVUb29sYmFySXRlbXNTdGF0dXModGhpcy5vdXRlckVsKTtyZXR1cm4gY319LGVucmljaEVsZW1lbnRzOmZ1bmN0aW9uKGMpe3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oImFycmF5IixjKX0scmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBoPXRoaXM7dmFyIGU7aWYoaC5vcHRpb25zJiZoLm9wdGlvbnMuZmllbGRzJiZoLm9wdGlvbnMuZmllbGRzLml0ZW0pe2U9aC5vcHRpb25zLmZpZWxkcy5pdGVtfXZhciBkO2lmKGguc2NoZW1hJiZoLnNjaGVtYS5pdGVtcyl7ZD1oLnNjaGVtYS5pdGVtc31pZihkJiZkWyIkcmVmIl0pe3ZhciBmPWRbIiRyZWYiXTt2YXIgZz10aGlzO3ZhciBjPVtnXTt3aGlsZShnLnBhcmVudCl7Zz1nLnBhcmVudDtjLnB1c2goZyl9YS5sb2FkUmVmU2NoZW1hT3B0aW9ucyhnLGYsZnVuY3Rpb24obixtKXt2YXIgaj0wO2Zvcih2YXIgaz0wO2s8Yy5sZW5ndGg7aysrKXtpZihjW2tdLnNjaGVtYSYmY1trXS5zY2hlbWEuaWQ9PT1mKXtqKyt9fXZhciBsPShqPjEpO2lmKG4pe249YS5jb3B5T2Yobik7ZGVsZXRlIG4uaWR9aWYobSl7bT1hLmNvcHlPZihtKX1pKG4sbSxsKX0pfWVsc2V7aShkLGUpfX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXItZW1wdHkiKTtpZih0aGlzLmRhdGEpe2MucmVzb2x2ZUl0ZW1TY2hlbWFPcHRpb25zKGZ1bmN0aW9uKGUsZCl7Yi5lYWNoKGMuZGF0YSxmdW5jdGlvbihmLGcpe2MuYWRkSXRlbShmLGUsZCxnLGZhbHNlKX0pO2MudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9KX1lbHNle3RoaXMudXBkYXRlVG9vbGJhckl0ZW1zU3RhdHVzKCl9fSxfdmFsaWRhdGVFcXVhbE1heEl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLml0ZW1zLm1heEl0ZW1zKXtpZih0aGlzLmdldFNpemUoKT49dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZUVxdWFsTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPD10aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtcyl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sX3ZhbGlkYXRlTWluSXRlbXM6ZnVuY3Rpb24oKXtpZih0aGlzLnNjaGVtYS5pdGVtcyYmdGhpcy5zY2hlbWEuaXRlbXMubWluSXRlbXMpe2lmKHRoaXMuZ2V0U2l6ZSgpPHRoaXMuc2NoZW1hLml0ZW1zLm1pbkl0ZW1zKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfSxfdmFsaWRhdGVNYXhJdGVtczpmdW5jdGlvbigpe2lmKHRoaXMuc2NoZW1hLml0ZW1zJiZ0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtcyl7aWYodGhpcy5nZXRTaXplKCk+dGhpcy5zY2hlbWEuaXRlbXMubWF4SXRlbXMpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9LF92YWxpZGF0ZVVuaXF1ZUl0ZW1zOmZ1bmN0aW9uKCl7aWYodGhpcy5zY2hlbWEuaXRlbXMmJnRoaXMuc2NoZW1hLnVuaXF1ZUl0ZW1zKXt2YXIgZT17fTtmb3IodmFyIGQ9MCxjPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Q8YzsrK2Qpe2lmKCFlLmhhc093blByb3BlcnR5KHRoaXMuY2hpbGRyZW5bZF0pKXtlW3RoaXMuY2hpbGRyZW5bZF1dPXRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVVbmlxdWVJdGVtcygpO2QudmFsdWVOb3RVbmlxdWU9e21lc3NhZ2U6Yz8iIjp0aGlzLnZpZXcuZ2V0TWVzc2FnZSgidmFsdWVOb3RVbmlxdWUiKSxzdGF0dXM6Y307Yz10aGlzLl92YWxpZGF0ZU1heEl0ZW1zKCk7ZC50b29NYW55SXRlbXM9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoInRvb01hbnlJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5tYXhJdGVtc10pLHN0YXR1czpjfTtjPXRoaXMuX3ZhbGlkYXRlTWluSXRlbXMoKTtkLm5vdEVub3VnaEl0ZW1zPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJub3RFbm91Z2hJdGVtcyIpLFt0aGlzLnNjaGVtYS5pdGVtcy5taW5JdGVtc10pLHN0YXR1czpjfTtyZXR1cm4gZSYmZC52YWx1ZU5vdFVuaXF1ZVsic3RhdHVzIl0mJmQudG9vTWFueUl0ZW1zWyJzdGF0dXMiXSYmZC5ub3RFbm91Z2hJdGVtc1sic3RhdHVzIl19LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9e3Byb3BlcnRpZXM6e2l0ZW1zOnt0aXRsZToiQXJyYXkgSXRlbXMiLGRlc2NyaXB0aW9uOiJTY2hlbWEgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOnttaW5JdGVtczp7dGl0bGU6Ik1pbmltdW0gSXRlbXMiLGRlc2NyaXB0aW9uOiJNaW5pbXVtIG51bWJlciBvZiBpdGVtcy4iLHR5cGU6Im51bWJlciJ9LG1heEl0ZW1zOnt0aXRsZToiTWF4aW11bSBJdGVtcyIsZGVzY3JpcHRpb246Ik1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLiIsdHlwZToibnVtYmVyIn0sdW5pcXVlSXRlbXM6e3RpdGxlOiJJdGVtcyBVbmlxdWUiLGRlc2NyaXB0aW9uOiJJdGVtIHZhbHVlcyBzaG91bGQgYmUgdW5pcXVlIGlmIHRydWUuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9fX19fTtpZih0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuWzBdKXthLm1lcmdlKGMucHJvcGVydGllcy5pdGVtcy5wcm9wZXJ0aWVzLHRoaXMuY2hpbGRyZW5bMF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKSl9cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCksYyl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntpdGVtczp7dHlwZToib2JqZWN0IixmaWVsZHM6e21pbkl0ZW1zOnt0eXBlOiJpbnRlZ2VyIn0sbWF4SXRlbXM6e3R5cGU6ImludGVnZXIifSx1bmlxdWVJdGVtczp7dHlwZToiY2hlY2tib3gifX19fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYz17cHJvcGVydGllczp7dG9vbGJhclN0aWNreTp7dGl0bGU6IlN0aWNreSBUb29sYmFyIixkZXNjcmlwdGlvbjoiQXJyYXkgaXRlbSB0b29sYmFyIHdpbGwgYmUgYXdheXMgb24gaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX0saXRlbXM6e3RpdGxlOiJBcnJheSBJdGVtcyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgZm9yIGFycmF5IGl0ZW1zLiIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntleHRyYVRvb2xiYXJCdXR0b25zOnt0aXRsZToiRXh0cmEgVG9vbGJhciBidXR0b25zIixkZXNjcmlwdGlvbjoiQnV0dG9ucyB0byBiZSBhZGRlZCBuZXh0IHRvIGFkZC9yZW1vdmUvdXAvZG93biwgc2VlIGV4YW1wbGVzIix0eXBlOiJhcnJheSIsImRlZmF1bHQiOnVuZGVmaW5lZH0sbW92ZVVwSXRlbUxhYmVsOnt0aXRsZToiTW92ZSBVcCBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSB1cCcgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Ik1vdmUgVXAifSxtb3ZlRG93bkl0ZW1MYWJlbDp7dGl0bGU6Ik1vdmUgRG93biBJdGVtIExhYmVsIixkZXNjcmlwdGlvbjoiVGhlIGxhYmVsIHRvIHVzZSBmb3IgdGhlIHRvb2xiYXIncyAnbW92ZSBkb3duJyBidXR0b24uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiTW92ZSBEb3duIn0scmVtb3ZlSXRlbUxhYmVsOnt0aXRsZToiUmVtb3ZlIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdyZW1vdmUgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IlJlbW92ZSBJdGVtIn0sYWRkSXRlbUxhYmVsOnt0aXRsZToiQWRkIEl0ZW0gTGFiZWwiLGRlc2NyaXB0aW9uOiJUaGUgbGFiZWwgdG8gdXNlIGZvciB0aGUgdG9vbGJhcidzICdhZGQgaXRlbScgYnV0dG9uLiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IkFkZCBJdGVtIn0sc2hvd01vdmVEb3duSXRlbUJ1dHRvbjp7dGl0bGU6IlNob3cgTW92ZSBEb3duIEl0ZW0gQnV0dG9uIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBzaG93IHRvIHRoZSAnTW92ZSBEb3duJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01vdmVVcEl0ZW1CdXR0b246e3RpdGxlOiJTaG93IE1vdmUgVXAgSXRlbSBCdXR0b24iLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIHNob3cgdGhlICdNb3ZlIFVwJyBidXR0b24gb24gdGhlIHRvb2xiYXIuIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX19fX19O2lmKHRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW5bMF0pe2EubWVyZ2UoYy5wcm9wZXJ0aWVzLml0ZW1zLnByb3BlcnRpZXMsdGhpcy5jaGlsZHJlblswXS5nZXRTY2hlbWFPZlNjaGVtYSgpKX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxjKX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0b29sYmFyU3RpY2t5Ont0eXBlOiJjaGVja2JveCJ9LGl0ZW1zOnt0eXBlOiJvYmplY3QiLGZpZWxkczp7fX19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGxpc3Qgb2YgaXRlbXMgd2l0aCBzYW1lIGRhdGEgdHlwZSBvciBzdHJ1Y3R1cmUuIn0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJhcnJheSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJpdGVtTGFiZWwiLCd7e2lmIG9wdGlvbnMuaXRlbUxhYmVsfX08ZGl2IGNsYXNzPSJhbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsIj48ZGl2PiR7b3B0aW9ucy5pdGVtTGFiZWx9e3tpZiBpbmRleH19IDxzcGFuIGNsYXNzPSJhbHBhY2EtaXRlbS1sYWJlbC1jb3VudGVyIj4ke2luZGV4fTwvc3Bhbj57ey9pZn19PC9kaXY+PC9kaXY+e3svaWZ9fScpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlUb29sYmFyIiwnPHNwYW4gY2xhc3M9InVpLXdpZGdldCB1aS1jb3JuZXItYWxsIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyIj48YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhci1pY29uIGFscGFjYS1maWVsZHNldC1hcnJheS10b29sYmFyLWFkZCI+JHthZGRJdGVtTGFiZWx9PC9idXR0b24+PC9zcGFuPicpO2EucmVnaXN0ZXJUZW1wbGF0ZSgiYXJyYXlJdGVtVG9vbGJhciIsJzxkaXYgY2xhc3M9InVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCBhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIj57e2VhY2goayx2KSBidXR0b25zfX08YnV0dG9uIGNsYXNzPSJhbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWljb24gYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci0ke3YuZmVhdHVyZX0iPiR7di5sYWJlbH08L2J1dHRvbj57ey9lYWNofX08L2Rpdj4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe25vdEVub3VnaEl0ZW1zOiJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgaXMgezB9Iix0b29NYW55SXRlbXM6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpcyB7MH0iLHZhbHVlTm90VW5pcXVlOiJWYWx1ZXMgYXJlIG5vdCB1bmlxdWUiLG5vdEFuQXJyYXk6IlRoaXMgdmFsdWUgaXMgbm90IGFuIEFycmF5In0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhcnJheSIsYS5GaWVsZHMuQXJyYXlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImFycmF5IiwiYXJyYXkiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLk9iamVjdEZpZWxkPWEuQ29udGFpbmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7dGhpcy53aXphcmRQcmVJY29uPSIiO3RoaXMud2l6YXJkTmV4dEljb249IiI7dGhpcy53aXphcmREb25lSWNvbj0iIjtpZih0aGlzLnZpZXcuc3R5bGUmJmEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV0pe2lmKGEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXSl7dGhpcy53aXphcmRQcmVJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZFByZUljb24iXX1pZihhLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmROZXh0SWNvbiJdKXt0aGlzLndpemFyZE5leHRJY29uPWEuc3R5bGVJbmplY3Rpb25zW3RoaXMudmlldy5zdHlsZV1bIndpemFyZE5leHRJY29uIl19aWYoYS5zdHlsZUluamVjdGlvbnNbdGhpcy52aWV3LnN0eWxlXVsid2l6YXJkRG9uZUljb24iXSl7dGhpcy53aXphcmREb25lSWNvbj1hLnN0eWxlSW5qZWN0aW9uc1t0aGlzLnZpZXcuc3R5bGVdWyJ3aXphcmREb25lSWNvbiJdfX1pZihhLmlzRW1wdHkodGhpcy5kYXRhKSl7cmV0dXJufWlmKCFhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe2lmKCFhLmlzU3RyaW5nKHRoaXMuZGF0YSkpe3JldHVybn1lbHNle3RyeXt0aGlzLmRhdGE9YS5wYXJzZUpTT04odGhpcy5kYXRhKTtpZighYS5pc09iamVjdCh0aGlzLmRhdGEpKXthLmxvZ1dhcm4oIk9iamVjdEZpZWxkIHBhcnNlZCBkYXRhIGJ1dCBpdCB3YXMgbm90IGFuIG9iamVjdDogIitKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtyZXR1cm59fWNhdGNoKGMpe3JldHVybn19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oZil7aWYoIWZ8fCFhLmlzT2JqZWN0KGYpKXtyZXR1cm59Zm9yKHZhciBjIGluIHRoaXMuY2hpbGRyZW5CeUlkKXt2YXIgZz10aGlzLmNoaWxkcmVuQnlJZFtjXS5wcm9wZXJ0eUlkO3ZhciBlPWEudHJhdmVyc2VPYmplY3QoZixnKTtpZighYS5pc0VtcHR5KGUpKXt2YXIgZD10aGlzLmNoaWxkcmVuQnlJZFtjXTtkLnNldFZhbHVlKGUpfX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0wJiYhdGhpcy5zY2hlbWEucmVxdWlyZWQpe3JldHVybn12YXIgZj17fTtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7dmFyIGU9dGhpcy5jaGlsZHJlbltjXS5wcm9wZXJ0eUlkO3ZhciBkPXRoaXMuY2hpbGRyZW5bY10uZ2V0VmFsdWUoKTtpZih0eXBlb2YoZCkhPT0idW5kZWZpbmVkIil7aWYodGhpcy5kZXRlcm1pbmVBbGxEZXBlbmRlbmNpZXNWYWxpZChlKSl7ZltlXT1kfX19cmV0dXJuIGZ9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmlzVG9wTGV2ZWwoKSl7aWYodGhpcy52aWV3KXt0aGlzLndpemFyZENvbmZpZ3M9dGhpcy52aWV3LmdldFdpemFyZCgpO2lmKHRoaXMud2l6YXJkQ29uZmlncyl7aWYoYS5pc1VuZGVmaW5lZCh0aGlzLndpemFyZENvbmZpZ3MudmFsaWRhdGlvbikpe3RoaXMud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uPXRydWV9aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zKXt0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucz17fX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZT17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMuZG9uZS52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldj17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX1pZighdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dD17fX1pZihhLmlzVW5kZWZpbmVkKHRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKSl7dGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dC52YWxpZGF0ZU9uQ2xpY2s9dHJ1ZX19dmFyIGM9dGhpcy52aWV3LmdldExheW91dCgpLnRlbXBsYXRlRGVzY3JpcHRvcjtpZih0aGlzLndpemFyZENvbmZpZ3MmJnRoaXMud2l6YXJkQ29uZmlncy5yZW5kZXJXaXphcmQpe2lmKGMpe3RoaXMud2l6YXJkKCl9ZWxzZXt0aGlzLmF1dG9XaXphcmQoKX19fX19LGdldEluZGV4OmZ1bmN0aW9uKGUpe2lmKGEuaXNFbXB0eShlKSl7cmV0dXJuIC0xfWZvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7aWYoYz09ZSl7cmV0dXJuIGR9fXJldHVybiAtMX0scmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9uczpmdW5jdGlvbihoLGope3ZhciBpPXRoaXM7dmFyIGU9bnVsbDtpZihpLnNjaGVtYSYmaS5zY2hlbWEucHJvcGVydGllcyYmaS5zY2hlbWEucHJvcGVydGllc1toXSl7ZT1pLnNjaGVtYS5wcm9wZXJ0aWVzW2hdfXZhciBjPXt9O2lmKGkub3B0aW9ucyYmaS5vcHRpb25zLmZpZWxkcyYmaS5vcHRpb25zLmZpZWxkc1toXSl7Yz1pLm9wdGlvbnMuZmllbGRzW2hdfWlmKGUmJmVbIiRyZWYiXSl7dmFyIGY9ZVsiJHJlZiJdO3ZhciBnPXRoaXM7dmFyIGQ9W2ddO3doaWxlKGcucGFyZW50KXtnPWcucGFyZW50O2QucHVzaChnKX1hLmxvYWRSZWZTY2hlbWFPcHRpb25zKGcsZixmdW5jdGlvbihuLGwpe3ZhciBrPTA7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspe2lmKGRbbV0uc2NoZW1hJiZkW21dLnNjaGVtYS5pZD09PWYpe2srK319dmFyIG89KGs+MSk7aWYobil7bj1hLmNvcHlPZihuKTtkZWxldGUgbi5pZH1pZihsKXtsPWEuY29weU9mKGwpfWoobixsLG8pfSl9ZWxzZXtqKGUsYyl9fSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGQpe3RoaXMuY2hpbGRyZW49Yi5ncmVwKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oZixlKXtyZXR1cm4oZi5nZXRJZCgpIT1kKX0pO3ZhciBjPXRoaXMuY2hpbGRyZW5CeUlkW2RdO2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlJZFtkXTtpZihjLnByb3BlcnR5SWQpe2RlbGV0ZSB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2MucHJvcGVydHlJZF19Yy5kZXN0cm95KCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKTt0aGlzLnRyaWdnZXJVcGRhdGUoKX0sYWRkSXRlbTpmdW5jdGlvbihpLGYsZSxkLGcsaCl7dmFyIGo9dGhpczt2YXIgYz1qLnJlbmRlckl0ZW1Db250YWluZXIoZyx0aGlzLGkpO2MuYWxwYWNhKHtkYXRhOmQsb3B0aW9uczplLHNjaGVtYTpmLHZpZXc6dGhpcy52aWV3LmlkP3RoaXMudmlldy5pZDp0aGlzLnZpZXcsY29ubmVjdG9yOnRoaXMuY29ubmVjdG9yLGVycm9yOmZ1bmN0aW9uKGspe2ouZGVzdHJveSgpO2ouZXJyb3JDYWxsYmFjay5jYWxsKGosayl9LG5vdFRvcExldmVsOnRydWUsaXNEeW5hbWljQ3JlYXRpb246KGh8fHRoaXMuaXNEeW5hbWljQ3JlYXRpb24pLHJlbmRlcjpmdW5jdGlvbihsKXtsLnBhcmVudD1qO2wucHJvcGVydHlJZD1pO2lmKGoucGF0aCE9Ii8iKXtsLnBhdGg9ai5wYXRoKyIvIitpfWVsc2V7bC5wYXRoPWoucGF0aCtpfWwucmVuZGVyKCk7Yy5hdHRyKCJpZCIsbC5nZXRJZCgpKyItaXRlbS1jb250YWluZXIiKTtjLmF0dHIoImFscGFjYS1pZCIsbC5nZXRJZCgpKTtjLmFkZENsYXNzKCJhbHBhY2EtZmllbGRzZXQtaXRlbS1jb250YWluZXIiKTtpZihhLmlzRW1wdHkoZykpe2ouYWRkQ2hpbGQobCl9ZWxzZXt2YXIgaz1qLmdldEluZGV4KGcpO2lmKGshPS0xKXtqLmFkZENoaWxkKGwsaysxKX1lbHNle2ouYWRkQ2hpbGQobCl9fWlmKGcpe2oucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9aWYoYihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5sZW5ndGg+MCl7YihjKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lci1lbXB0eSIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1maXJzdCIpO2IoYykuc2libGluZ3MoKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoImFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0Iik7YihjKS5zaWJsaW5ncygpLmFkZEJhY2soKS5maXJzdCgpLmFkZENsYXNzKCJhbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QiKTtiKGMpLnNpYmxpbmdzKCkuYWRkQmFjaygpLmxhc3QoKS5hZGRDbGFzcygiYWxwYWNhLWl0ZW0tY29udGFpbmVyLWxhc3QiKX1iKGMpLmF0dHIoImRhdGEtYWxwYWNhLWl0ZW0tY29udGFpbmVyLWl0ZW0ta2V5IixpKTtqLnRyaWdnZXJVcGRhdGUoKX19KX0scmVuZGVySXRlbXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3ZhciBmPXt9O2Zvcih2YXIgZyBpbiBpLmRhdGEpe2ZbZ109Z312YXIgaj1pLmRhdGE7aWYoaS5zY2hlbWEmJmkuc2NoZW1hLnByb3BlcnRpZXMpe2o9aS5zY2hlbWEucHJvcGVydGllc312YXIgYz1mdW5jdGlvbihtKXt2YXIgbj1bXTtmb3IodmFyIGwgaW4gZil7bi5wdXNoKGwpfWlmKG4ubGVuZ3RoPjApe2EubG9nRGVidWcoIlRoZXJlIHdlcmUgIituLmxlbmd0aCsiIGV4dHJhIGRhdGEga2V5cyB0aGF0IHdlcmUgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSAiK0pTT04uc3RyaW5naWZ5KG4pKX1mb3IodmFyIG8gaW4gail7aS5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKG8pfWZvcih2YXIgbyBpbiBqKXtpLmJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudChvKX1pLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfTt2YXIgaz0wO2Zvcih2YXIgaCBpbiBqKXtrKyt9dmFyIGQ9MDtmb3IodmFyIGggaW4gail7dmFyIGU9bnVsbDtpZihpLmRhdGEpe2U9aS5kYXRhW2hdfWkucmVzb2x2ZVByb3BlcnR5U2NoZW1hT3B0aW9ucyhoLGZ1bmN0aW9uKG4sbCxtKXtpZihtKXtyZXR1cm4gYS50aHJvd0Vycm9yV2l0aENhbGxiYWNrKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHNjaGVtYTogIituLGkuZXJyb3JDYWxsYmFjayl9aWYoIW4pe2EubG9nRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHNjaGVtYSBmb3IgcHJvcGVydHk6ICIraCl9aS5hZGRJdGVtKGgsbixsLGUpO2RlbGV0ZSBmW2hdO2QrKztpZihkPT09ayl7YygpfX0pfX0sc2hvd09ySGlkZVByb3BlcnR5QmFzZWRPbkRlcGVuZGVuY2llczpmdW5jdGlvbihmKXt2YXIgYz10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZl07aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZixjLmVycm9yQ2FsbGJhY2spfXZhciBkPXRoaXMuZGV0ZXJtaW5lQWxsRGVwZW5kZW5jaWVzVmFsaWQoZik7aWYoZCl7ZS5zaG93KCk7ZS5vbkRlcGVuZGVudFJldmVhbCgpfWVsc2V7ZS5oaWRlKCk7ZS5vbkRlcGVuZGVudENvbmNlYWwoKX19LGRldGVybWluZUFsbERlcGVuZGVuY2llc1ZhbGlkOmZ1bmN0aW9uKGcpe3ZhciBkPXRoaXM7dmFyIGY9dGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtnXTtpZighZil7cmV0dXJuIGEudGhyb3dFcnJvcldpdGhDYWxsYmFjaygiTWlzc2luZyBwcm9wZXJ0eTogIitnLGQuZXJyb3JDYWxsYmFjayl9dmFyIGM9Zi5zY2hlbWEuZGVwZW5kZW5jaWVzO2lmKCFjKXtyZXR1cm4gdHJ1ZX12YXIgZT10cnVlO2lmKGEuaXNTdHJpbmcoYykpe2U9ZC5kZXRlcm1pbmVTaW5nbGVEZXBlbmRlbmN5VmFsaWQoZyxjKX1lbHNle2lmKGEuaXNBcnJheShjKSl7Yi5lYWNoKGMsZnVuY3Rpb24oaCxpKXtlPWUmJmQuZGV0ZXJtaW5lU2luZ2xlRGVwZW5kZW5jeVZhbGlkKGcsaSl9KX19cmV0dXJuIGV9LGJpbmREZXBlbmRlbmN5RmllbGRVcGRhdGVFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbZ107aWYoIWUpe3JldHVybiBhLnRocm93RXJyb3JXaXRoQ2FsbGJhY2soIk1pc3NpbmcgcHJvcGVydHk6ICIrZyxkLmVycm9yQ2FsbGJhY2spfXZhciBjPWUuc2NoZW1hLmRlcGVuZGVuY2llcztpZighYyl7cmV0dXJuIHRydWV9dmFyIGY9ZnVuY3Rpb24oaixpKXt2YXIgaD1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2ldO2lmKGgpe2guZ2V0RWwoKS5iaW5kKCJmaWVsZHVwZGF0ZSIsZnVuY3Rpb24obCl7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGopO2Zvcih2YXIgayBpbiBkLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgbj1kLnNjaGVtYS5wcm9wZXJ0aWVzW2tdO2lmKG4uZGVwZW5kZW5jaWVzKXt2YXIgbT1kLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2tdO2lmKGEuaXNTdHJpbmcobi5kZXBlbmRlbmNpZXMpJiZuLmRlcGVuZGVuY2llcz09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfWVsc2V7aWYoYS5pc0FycmF5KG4uZGVwZW5kZW5jaWVzKSl7Yi5lYWNoKG4uZGVwZW5kZW5jaWVzLGZ1bmN0aW9uKG8scCl7aWYocD09ail7ZC5zaG93T3JIaWRlUHJvcGVydHlCYXNlZE9uRGVwZW5kZW5jaWVzKGspO20udHJpZ2dlclVwZGF0ZSgpfX0pfX19fX0pfX07aWYoYS5pc1N0cmluZyhjKSl7ZihnLGMpfWVsc2V7aWYoYS5pc0FycmF5KGMpKXtiLmVhY2goYyxmdW5jdGlvbihoLGkpe2YoZyxpKX0pfX19LGRldGVybWluZVNpbmdsZURlcGVuZGVuY3lWYWxpZDpmdW5jdGlvbihoLGope3ZhciBpPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07aWYoIWkpe3JldHVybiBmYWxzZX12YXIgZj1mYWxzZTt2YXIgZD10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2hdLm9wdGlvbnMuZGVwZW5kZW5jaWVzO2lmKCFkfHxkLmxlbmd0aD09PTApe2lmKGkuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtoXS5vcHRpb25zLmRlcGVuZGVuY2llcyYmIWkuZGF0YSl7Zj1mYWxzZX1lbHNle2Y9IWEuaXNWYWxFbXB0eShpLmRhdGEpfX1lbHNle3ZhciBlPXRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRbal07dmFyIGM9ZS5kYXRhO2lmKGUuZ2V0VHlwZSgpPT09ImJvb2xlYW4iJiYhYyl7Yz1mYWxzZX1pZighYS5pc0VtcHR5KGRbal0pJiZhLmlzRnVuY3Rpb24oZFtqXSkpe2Y9ZFtqXS5jYWxsKHRoaXMsYyl9ZWxzZXtmPXRydWU7aWYoYS5pc0FycmF5KGRbal0pKXtpZihkW2pdJiZiLmluQXJyYXkoYyxkW2pdKT09LTEpe2Y9ZmFsc2V9fWVsc2V7aWYoIWEuaXNFbXB0eShkW2pdKSYmZFtqXSE9Yyl7Zj1mYWxzZX19fX12YXIgZz10aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW2pdO2lmKGcmJmcuaXNIaWRkZW4oKSl7Zj1mYWxzZX1yZXR1cm4gZn0sd2l6YXJkOmZ1bmN0aW9uKCl7dmFyIGg9dGhpczt2YXIgZj10aGlzLm91dGVyRWw7dmFyIGQ9YigiLmFscGFjYS13aXphcmQtc3RlcCIsZik7dmFyIGc9ZC5zaXplKCk7dGhpcy50b3RhbFN0ZXBzPWc7dmFyIGU9W107aWYodGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXMpe2U9dGhpcy53aXphcmRDb25maWdzLnN0ZXBUaXRsZXN9ZWxzZXtkLmVhY2goZnVuY3Rpb24oayl7dmFyIGo9e3RpdGxlOiIiLGRlc2NyaXB0aW9uOiIifTtpZihiKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKSl7ai50aXRsZT1iKCIuYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIix0aGlzKS5odG1sKCk7YigiLmFscGFjYS13aXphcmQtc3RlcC10aXRsZSIsdGhpcykuaGlkZSgpfWlmKGIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpKXtqLmRlc2NyaXB0aW9uPWIoIi5hbHBhY2Etd2l6YXJkLXN0ZXAtZGVzY3JpcHRpb24iLHRoaXMpLmh0bWwoKTtiKCIuYWxwYWNhLXdpemFyZC1zdGVwLWRlc2NyaXB0aW9uIix0aGlzKS5oaWRlKCl9ZS5wdXNoKGopfSl9dmFyIGM9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKGUpO2lmKGMpe2IoZikuYmVmb3JlKGMpfWQuZWFjaChmdW5jdGlvbihvKXt2YXIgdD1iKHRoaXMpLmF0dHIoImlkIik7dmFyIG49InN0ZXAiK287dmFyIHI9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkU3RlcCIpO2lmKHIpe3ZhciBzPWgudmlldy50bXBsKHIse30pO3MuYXR0cigiaWQiLG4pO2IodGhpcykud3JhcChzKX12YXIgdj1uKyItbmF2LWJhciI7dmFyIHE9aC52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYocSl7dmFyIGo9aC52aWV3LnRtcGwocSx7fSk7ai5hdHRyKCJpZCIsdik7ai5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7Yih0aGlzKS5hcHBlbmQoail9dmFyIGw9e307dmFyIGs9aC52aWV3LmdldExheW91dCgpLmJpbmRpbmdzO2Zvcih2YXIgcCBpbiBrKXt2YXIgdT1rW3BdO2lmKHU9PXQpe2xbcF09dH19dmFyIG09ZnVuY3Rpb24odyxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10cnVlO2lmKGgud2l6YXJkQ29uZmlncyYmaC53aXphcmRDb25maWdzLnZhbGlkYXRpb24pe2lmKGkpe2IuZWFjaChpLGZ1bmN0aW9uKHoseSl7eD14JmguY2hpbGRyZW5CeVByb3BlcnR5SWRbel0udmFsaWRhdGUoKTtoLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3pdLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSl9fXJldHVybiB4fX0obyxsKTtpZihvPT09MCl7aC5fY3JlYXRlTmV4dEJ1dHRvbihvLHRydWUsbSk7aC5fc2VsZWN0U3RlcChvKX1lbHNle2lmKG89PWctMSl7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZURvbmVCdXR0b24obyx0cnVlLG0pfWVsc2V7YigiI3N0ZXAiK28pLmhpZGUoKTtoLl9jcmVhdGVQcmV2QnV0dG9uKG8sZmFsc2UpO2guX2NyZWF0ZU5leHRCdXR0b24obyx0cnVlLG0pfX19KX0sYXV0b1dpemFyZDpmdW5jdGlvbigpe3ZhciBsPXRoaXM7dmFyIGQ9dGhpcy53aXphcmRDb25maWdzLnN0ZXBzO2lmKCFkKXtkPTF9dGhpcy50b3RhbFN0ZXBzPWQ7dmFyIGU9dGhpcy53aXphcmRDb25maWdzLmJpbmRpbmdzO2lmKCFlKXtlPXt9fWZvcih2YXIgayBpbiB0aGlzLmNoaWxkcmVuQnlQcm9wZXJ0eUlkKXtpZighZS5oYXNPd25Qcm9wZXJ0eShrKSl7ZVtrXT0xfX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZj1qKzE7dmFyIHI9W107Zm9yKHZhciBrIGluIGUpe2lmKGVba109PWYpe2lmKHRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWQmJnRoaXMuY2hpbGRyZW5CeVByb3BlcnR5SWRba10pe3IucHVzaCgiIyIrdGhpcy5jaGlsZHJlbkJ5UHJvcGVydHlJZFtrXS5jb250YWluZXIuYXR0cigiaWQiKSl9fX12YXIgaD0ic3RlcCIrajt2YXIgbj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGVwIik7aWYobil7dmFyIG89bC52aWV3LnRtcGwobix7fSk7by5hdHRyKCJpZCIsaCk7YihyLmpvaW4oIiwiKSkud3JhcEFsbChvKX12YXIgcD1oKyItbmF2LWJhciI7dmFyIG09dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmF2QmFyIik7aWYobSl7dmFyIGM9bC52aWV3LnRtcGwobSx7fSk7Yy5hdHRyKCJpZCIscCk7Yy5hZGRDbGFzcygiYWxwYWNhLXdpemFyZC1uYXYtYmFyIik7YigiIyIraCx0aGlzLm91dGVyRWwpLmFwcGVuZChjKX19dmFyIHE9dGhpcy5fcmVuZGVyV2l6YXJkU3RhdHVzQmFyKHRoaXMud2l6YXJkQ29uZmlncy5zdGVwVGl0bGVzKTtpZihxKXtxLnByZXBlbmRUbyh0aGlzLmZpZWxkQ29udGFpbmVyKX1mb3IodmFyIGo9MDtqPGQ7aisrKXt2YXIgZz1mdW5jdGlvbihzLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRydWU7aWYobC52aWV3JiZsLndpemFyZENvbmZpZ3MmJmwud2l6YXJkQ29uZmlncy52YWxpZGF0aW9uKXtpZihpKXtiLmVhY2goaSxmdW5jdGlvbih2LHUpe2lmKHU9PXMrMSYmdCl7dD1sLmNoaWxkcmVuQnlQcm9wZXJ0eUlkW3ZdLnZhbGlkYXRlKCk7bC5jaGlsZHJlbkJ5UHJvcGVydHlJZFt2XS52YWxpZGF0ZSgpfX0pfX1yZXR1cm4gdH19KGosZSk7aWYoaj09PTApe2wuX2NyZWF0ZU5leHRCdXR0b24oaixmYWxzZSxnKTtsLl9zZWxlY3RTdGVwKGopfWVsc2V7aWYoaj09ZC0xKXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlRG9uZUJ1dHRvbihqLHRydWUsZyl9ZWxzZXtiKCIjc3RlcCIraikuaGlkZSgpO2wuX2NyZWF0ZVByZXZCdXR0b24oaixmYWxzZSk7bC5fY3JlYXRlTmV4dEJ1dHRvbihqLGZhbHNlLGcpfX19fSxfcmVuZGVyV2l6YXJkU3RhdHVzQmFyOmZ1bmN0aW9uKGUpe3ZhciBnPXRoaXM7dmFyIGY9dGhpcy53aXphcmRDb25maWdzLnN0YXR1c0JhcjtpZihmJiZlKXt2YXIgZD10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJ3aXphcmRTdGF0dXNCYXIiKTtpZihkKXt2YXIgYz1nLnZpZXcudG1wbChkLHtpZDp0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciIsdGl0bGVzOmV9KTtjLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIiKTt0aGlzLmdldFN0eWxlSW5qZWN0aW9uKCJ3aXphcmRTdGF0dXNCYXIiLGMpO3JldHVybiBjfX19LF9jcmVhdGVQcmV2QnV0dG9uOmZ1bmN0aW9uKGYsZCxlKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldil7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYudmFsaWRhdGVPbkNsaWNrKXtlPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGM9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkUHJlQnV0dG9uIik7aWYoYyl7dmFyIGc9aC52aWV3LnRtcGwoYyx7fSk7Zy5hdHRyKCJpZCIsaisiLWJ1dHRvbi1wcmUiKTtnLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1wcmUiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZyx0aGlzLndpemFyZFByZUljb24sdHJ1ZSl9Zy5jbGljayhmdW5jdGlvbihsLGssaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09dHJ1ZTtpZihpKXttPWkobCxrKX1pZihtKXtiKCIjIitsKS5oaWRlKCk7YigiI3N0ZXAiKyhmLTEpKS5zaG93KCk7aC5fc2VsZWN0U3RlcChmLTEpO2lmKGgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYmJmgud2l6YXJkQ29uZmlncy5idXR0b25zLnByZXYub25DbGljayl7aC53aXphcmRDb25maWdzLmJ1dHRvbnMucHJldi5vbkNsaWNrKCl9fXJldHVybiBmYWxzZX19KGosZixlKSk7YigiIyIraisiLW5hdi1iYXIiKS5hcHBlbmQoZyk7aWYoZCl7YigiIyIraisiLW5hdi1iYXIiKS5wYXJlbnQoKS5hcHBlbmQoIjxkaXYgc3R5bGU9J2NsZWFyOmJvdGgnPjwvZGl2PiIpfX19LF9jcmVhdGVOZXh0QnV0dG9uOmZ1bmN0aW9uKGYsYyxkKXtpZih0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucyYmdGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMubmV4dCl7aWYoIXRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQudmFsaWRhdGVPbkNsaWNrKXtkPW51bGx9fXZhciBqPSJzdGVwIitmO3ZhciBoPXRoaXM7dmFyIGc9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigid2l6YXJkTmV4dEJ1dHRvbiIpO2lmKGcpe3ZhciBlPWgudmlldy50bXBsKGcse30pO2UuYXR0cigiaWQiLGorIi1idXR0b24tbmV4dCIpO2UuYWRkQ2xhc3MoImFscGFjYS13aXphcmQtYnV0dG9uLW5leHQiKTtpZihoLmJ1dHRvbkJlYXV0aWZpZXIpe2guYnV0dG9uQmVhdXRpZmllci5jYWxsKGgsZSx0aGlzLndpemFyZE5leHRJY29uLHRydWUpfWUuY2xpY2soZnVuY3Rpb24obCxrLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBtPXRydWU7aWYoaSl7bT1pKGwsayl9aWYobSl7YigiIyIrbCkuaGlkZSgpO2IoIiNzdGVwIisoaysxKSkuc2hvdygpO2guX3NlbGVjdFN0ZXAoaysxKTtpZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0JiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5uZXh0Lm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLm5leHQub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfY3JlYXRlRG9uZUJ1dHRvbjpmdW5jdGlvbihmLGMsZCl7aWYodGhpcy53aXphcmRDb25maWdzLmJ1dHRvbnMmJnRoaXMud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUpe2lmKCF0aGlzLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLnZhbGlkYXRlT25DbGljayl7ZD1udWxsfX12YXIgaj0ic3RlcCIrZjt2YXIgaD10aGlzO3ZhciBnPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoIndpemFyZERvbmVCdXR0b24iKTtpZihnKXt2YXIgZT1oLnZpZXcudG1wbChnLHt9KTtlLmF0dHIoImlkIixqKyItYnV0dG9uLWRvbmUiKTtlLmFkZENsYXNzKCJhbHBhY2Etd2l6YXJkLWJ1dHRvbi1kb25lIik7aWYoaC5idXR0b25CZWF1dGlmaWVyKXtoLmJ1dHRvbkJlYXV0aWZpZXIuY2FsbChoLGUsdGhpcy53aXphcmREb25lSWNvbix0cnVlKX1lLmNsaWNrKGZ1bmN0aW9uKGwsayxpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT10cnVlO2lmKGkpe209aShsLGspfWlmKG0pe2IoIiMiK2wrIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2wrIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX1pZihoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lJiZoLndpemFyZENvbmZpZ3MuYnV0dG9ucy5kb25lLm9uQ2xpY2spe2gud2l6YXJkQ29uZmlncy5idXR0b25zLmRvbmUub25DbGljaygpfX1yZXR1cm4gZmFsc2V9fShqLGYsZCkpO2IoIiMiK2orIi1uYXYtYmFyIikuYXBwZW5kKGUpO2lmKGMpe2IoIiMiK2orIi1uYXYtYmFyIikucGFyZW50KCkuYXBwZW5kKCI8ZGl2IHN0eWxlPSdjbGVhcjpib3RoJz48L2Rpdj4iKX19fSxfc2VsZWN0U3RlcDpmdW5jdGlvbihkKXt2YXIgYz1iKCIjIit0aGlzLmdldElkKCkrIi13aXphcmQtc3RhdHVzLWJhciBsaSIpO2MucmVtb3ZlQ2xhc3MoImN1cnJlbnQgY3VycmVudC1oYXMtbmV4dCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZFVuQ3VycmVudFN0ZXAiLGMpO3ZhciBlPWIoIiNzdGVwRGVzYyIrZCk7ZS5hZGRDbGFzcygiY3VycmVudCIpO3RoaXMuZ2V0U3R5bGVJbmplY3Rpb24oIndpemFyZEN1cnJlbnRTdGVwIixlKTtpZihkPHRoaXMudG90YWxTdGVwcy0xKXtiKCIjc3RlcERlc2MiK2QpLmFkZENsYXNzKCJjdXJyZW50LWhhcy1uZXh0Iil9fSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBlPXtwcm9wZXJ0aWVzOntwcm9wZXJ0aWVzOnt0aXRsZToiUHJvcGVydGllcyIsZGVzY3JpcHRpb246Ikxpc3Qgb2YgY2hpbGQgcHJvcGVydGllcy4iLHR5cGU6Im9iamVjdCJ9fX07dmFyIGM9ZS5wcm9wZXJ0aWVzLnByb3BlcnRpZXM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ZdPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZTY2hlbWEoKTtjLnByb3BlcnRpZXNbZl0udGl0bGU9ZisiIDo6ICIrYy5wcm9wZXJ0aWVzW2ZdLnRpdGxlfX1yZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSxlKX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGY9YS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pO3ZhciBlPXtwcm9wZXJ0aWVzOntmaWVsZHM6e3RpdGxlOiJGaWVsZCBPcHRpb25zIixkZXNjcmlwdGlvbjoiTGlzdCBvZiBvcHRpb25zIGZvciBjaGlsZCBmaWVsZHMuIix0eXBlOiJvYmplY3QifX19O3ZhciBjPWUucHJvcGVydGllcy5maWVsZHM7Yy5wcm9wZXJ0aWVzPXt9O2lmKHRoaXMuY2hpbGRyZW4pe2Zvcih2YXIgZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgZz10aGlzLmNoaWxkcmVuW2RdLnByb3BlcnR5SWQ7Yy5wcm9wZXJ0aWVzW2ddPXRoaXMuY2hpbGRyZW5bZF0uZ2V0U2NoZW1hT2ZPcHRpb25zKCk7Yy5wcm9wZXJ0aWVzW2ddLnRpdGxlPWcrIiA6OiAiK2MucHJvcGVydGllc1tnXS50aXRsZX19cmV0dXJuIGEubWVyZ2UoZixlKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQ29tcG9zaXRlIGZpZWxkIGZvciBjb250YWluaW5nIG90aGVyIGZpZWxkcyJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoIm9iamVjdCIsYS5GaWVsZHMuT2JqZWN0RmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJvYmplY3QiLCJvYmplY3QiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFueUZpZWxkPWEuQ29udHJvbEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEFueSIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXtpZih0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcil7dGhpcy5maWVsZD10aGlzLnZpZXcudG1wbCh0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcix7aWQ6dGhpcy5nZXRJZCgpLG5hbWU6dGhpcy5uYW1lLG9wdGlvbnM6dGhpcy5vcHRpb25zfSk7dGhpcy5pbmplY3RGaWVsZCh0aGlzLmZpZWxkKX1pZihjKXtjKCl9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQudmFsKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGEuaXNFbXB0eShjKSl7dGhpcy5maWVsZC52YWwoIiIpfWVsc2V7dGhpcy5maWVsZC52YWwoYyl9dGhpcy5iYXNlKGMpfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5maWVsZC5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmZpZWxkLmRpc2FibGVkPWZhbHNlfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuZmllbGQuZm9jdXMoKX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7fX0pfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e319KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQW55IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iQW55IGZpZWxkLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFueSJ9fSk7YS5yZWdpc3RlclRlbXBsYXRlKCJjb250cm9sRmllbGRBbnkiLCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IiR7aWR9IiBzaXplPSI0MCIge3tpZiBvcHRpb25zLnJlYWRvbmx5fX1yZWFkb25seT0icmVhZG9ubHkie3svaWZ9fSB7e2lmIG5hbWV9fW5hbWU9IiR7bmFtZX0ie3svaWZ9fSB7e2VhY2goaSx2KSBvcHRpb25zLmRhdGF9fWRhdGEtJHtpfT0iJHt2fSJ7ey9lYWNofX0vPicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhbnkiLGEuRmllbGRzLkFueUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdFNjaGVtYUZpZWxkTWFwcGluZygiYW55IiwiYW55Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5IaWRkZW5GaWVsZD1hLkNvbnRyb2xGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNpemUpe3RoaXMub3B0aW9ucy5zaXplPTQwfXRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yPXRoaXMudmlldy5nZXRUZW1wbGF0ZURlc2NyaXB0b3IoImNvbnRyb2xGaWVsZEhpZGRlbiIpfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2lmKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yKXt0aGlzLmZpZWxkPWQudmlldy50bXBsKHRoaXMuY29udHJvbEZpZWxkVGVtcGxhdGVEZXNjcmlwdG9yLHtpZDp0aGlzLmdldElkKCksbmFtZTp0aGlzLm5hbWUsb3B0aW9uczp0aGlzLm9wdGlvbnN9KTt0aGlzLmluamVjdEZpZWxkKHRoaXMuZmllbGQpfWlmKGMpe2MoKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWhpZGRlbiIpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZC52YWwoKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYS5pc0VtcHR5KGMpKXt0aGlzLmZpZWxkLnZhbCgiIil9ZWxzZXt0aGlzLmZpZWxkLnZhbChjKX10aGlzLmJhc2UoYyl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkhpZGRlbiJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBhIGhpZGRlbiBIVE1MIGlucHV0In0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmcifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIn19KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEhpZGRlbiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSIke2lkfSIge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaGlkZGVuIixhLkZpZWxkcy5IaWRkZW5GaWVsZCl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLnJlZ2lzdGVyVmlldyh7aWQ6IlZJRVdfQkFTRSIsbWVzc2FnZXM6e3poX0NOOntyZXF1aXJlZDoiJiMyNzQ5MjsmIzIyNDk1OyYjMjQ1MTc7JiMzOTAzNTsiLGludmFsaWQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzE5OTgxOyYjMjE1MTI7JiMyNjY4NDsiLG1vbnRoczpbIiYjMTk5Njg7JiMyNjM3NjsiLCImIzIwMTA4OyYjMjYzNzY7IiwiJiMxOTk3NzsmIzI2Mzc2OyIsIiYjMjIyMzU7JiMyNjM3NjsiLCImIzIwMTE2OyYjMjYzNzY7IiwiJiMyMDg0NTsmIzI2Mzc2OyIsIiYjMTk5NzE7JiMyNjM3NjsiLCImIzIwODQzOyYjMjYzNzY7IiwiJiMyMDA2MTsmIzI2Mzc2OyIsIiYjMjEzMTM7JiMyNjM3NjsiLCImIzIxMzEzOyYjMTk5Njg7JiMyNjM3NjsiLCImIzIxMzEzOyYjMjAxMDg7JiMyNjM3NjsiXSx0aW1lVW5pdHM6e1NFQ09ORDoiJiMzMTE4NjsiLE1JTlVURToiJiMyMDk5ODsiLEhPVVI6IiYjMjYxMDI7IixEQVk6IiYjMjYwODU7IixNT05USDoiJiMyNjM3NjsiLFlFQVI6IiYjMjQxODA7In0sbm90T3B0aW9uYWw6IiYjMjc0OTI7JiMyMjQ5NTsmIzM4NzUwOyYjMjAyMTk7JiMzNjg3MzsiLGRpc2FsbG93VmFsdWU6IiYjMzg3NTA7JiMyNzg2MTsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixpbnZhbGlkVmFsdWVPZkVudW06IiYjMjA4MDE7JiMzNTc2ODsmIzM2NzU1OyYjMjA4Mzc7JiMyMTI1MzsmIzI1MzI0OyB7MH0uIixub3RFbm91Z2hJdGVtczoiJiMyNjM2ODsmIzIzNTY3OyYjMjAwMTA7JiMyNTk2ODsgezB9Iix0b29NYW55SXRlbXM6IiYjMjYzNjg7JiMyMjgyMzsmIzIwMDEwOyYjMjU5Njg7IHswfSIsdmFsdWVOb3RVbmlxdWU6IiYjMzY3NTU7JiMyMDgzNzsmIzIwNTQwOyYjMTk5ODE7JiMyOTQyMDsmIzI5MzA1OyIsbm90QW5BcnJheToiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMzMjQ1MjsiLGludmFsaWREYXRlOiImIzI2MDg1OyYjMjYzOTk7JiMyNjY4NDsmIzI0MzM1OyYjMjIyNDA7JiMzNTgxMzsmIzI2MTU5OyB7MH0iLGludmFsaWRFbWFpbDoiJiMyMDIzNDsmIzIyOTY5OyYjMjA3OTk7JiMyNjY4NDsmIzI0MzM1OyYjMTk5ODE7JiMyMzU0NTssIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiImIzE5OTgxOyYjMjYxNTk7JiMyNTk3MjsmIzI1OTY4Oy4iLGludmFsaWRJUHY0OiImIzE5OTgxOyYjMjYxNTk7JiMyMTUxMjsmIzI3ODYxO0lQJiMyMjMyMDsmIzIyMzM2OywgZXg6IDE5Mi4xNjguMC4xIixzdHJpbmdWYWx1ZVRvb1NtYWxsOiImIzI2MzY4OyYjMjM1Njc7JiMyMDU0MDsmIzI2MTU5OyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IiYjMjYzNjg7JiMyMjgyMzsmIzIwNTQwOyYjMjYxNTk7IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMyMjgyMzsmIzIwMTEwOyB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IiYjMjA1NDA7JiMyNDUxNzsmIzM5MDM1OyYjMjM1Njc7JiMyMDExMDsgezB9IixzdHJpbmdEaXZpc2libGVCeToiJiMyMDU0MDsmIzI0NTE3OyYjMzkwMzU7JiMzMzAyMTsmIzM0OTg3OyB7MH0gJiMyNTk3MjsmIzM4NTAwOyIsc3RyaW5nTm90QU51bWJlcjoiJiMxOTk4MTsmIzI2MTU5OyYjMjU5Njg7JiMyMzM4MzsuIixpbnZhbGlkUGFzc3dvcmQ6IiYjMzg3NTA7JiMyNzg2MTsmIzIzNDk0OyYjMzA3MjE7IixpbnZhbGlkUGhvbmU6IiYjMzg3NTA7JiMyNzg2MTsmIzMwMDA1OyYjMzU4MDU7JiMyMTQ5NTsmIzMwNzIxOywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiJiMyNzQ5MjsmIzIyNDk1OyYjMzkwMzU7JiMyNjM3NzsmIzI2Njg0OyYjMjQzMzU7IHswfSIsc3RyaW5nVG9vU2hvcnQ6IiYjMjc0OTI7JiMyMjQ5NTsmIzMzMjY3OyYjMjM1Njk7JiMzODI3MTsmIzI0MjMwOyB7MH0iLHN0cmluZ1Rvb0xvbmc6IiYjMjc0OTI7JiMyMjQ5NTsmIzI2MzY4OyYjMjI4MTA7JiMzODI3MTsmIzI0MjMwOyB7MH0ifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZXNfRVM6e3JlcXVpcmVkOiJFc3RlIGNhbXBvIGVzIG9ibGlnYXRvcmlvIixpbnZhbGlkOiJFc3RlIGNhbXBvIGVzIGludsOhbGlkbyIsbW9udGhzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJpbCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIsIk9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2VndW5kb3MiLE1JTlVURToibWludXRvcyIsSE9VUjoiaG9yYXMiLERBWToiZMOtYXMiLE1PTlRIOiJtZXNlcyIsWUVBUjoiYcOxb3MifSxub3RPcHRpb25hbDoiRXN0ZSBjYW1wbyBubyBlcyBvcGNpb25hbC4iLGRpc2FsbG93VmFsdWU6InswfSBzb24gbG9zIHZhbG9yZXMgcmVjaGF6YWRvcy4iLGludmFsaWRWYWx1ZU9mRW51bToiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHVubyBkZSBsb3MgdmFsb3JlcyBhZGVudHJvIHswfS4iLG5vdEVub3VnaEl0ZW1zOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgYXJ0w61jdWxvcyBlcyB7MH0iLHRvb01hbnlJdGVtczoiRWwgbsO6bWVybyBtw6F4aW1vIGRlIGFydMOtY3Vsb3MgZXMgezB9Iix2YWx1ZU5vdFVuaXF1ZToiTG9zIHZhbG9yZXMgbm8gc29uIMO6bmljb3MiLG5vdEFuQXJyYXk6IkVzdGUgdmFsb3Igbm8gZXMgdW4gYXJzZW5hbCIsaW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSBwYXJhIGVsIGZvcm1hdG8gezB9IixpbnZhbGlkRW1haWw6IkVtYWlsIGFkZHJlc3MgaW52w6FsaWRvLCBleDogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRXN0ZSB2YWxvciBubyBlcyB1biBuw7ptZXJvIGVudGVyby4iLGludmFsaWRJUHY0OiJEaXJlY2Npw7NuIGludsOhbGlkYSBJUHY0LCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkVsIHZhbG9yIG3DrW5pbW8gcGFyYSBlc3RlIGNhbXBvIGVzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRWwgdmFsb3IgbcOteGltbyBwYXJhIGVzdGUgY2FtcG8gZXMgezB9IixzdHJpbmdWYWx1ZVRvb1NtYWxsRXhjbHVzaXZlOiJFbCB2YWxvciBkZSBlc3RlIGNhbXBvIGRlYmUgc2VyIG1heW9yIHF1ZSB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2VFeGNsdXNpdmU6IkVsIHZhbG9yIGRlIGVzdGUgY2FtcG8gZGViZSBzZXIgbWVub3MgcXVlIHswfSIsc3RyaW5nRGl2aXNpYmxlQnk6IkVsIHZhbG9yIGRlYmUgc2VyIGRpdmlzaWJsZSBjZXJjYSB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkVzdGUgdmFsb3Igbm8gZXMgdW4gbsO6bWVyby4iLGludmFsaWRQYXNzd29yZDoiQ29udHJhc2XDsWEgaW52w6FsaWRhIixpbnZhbGlkUGhvbmU6Ik7Dum1lcm8gZGUgdGVsw6lmb25vIGludsOhbGlkbywgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiRXN0ZSBjYW1wbyBkZWJlIHRlbmVyIHBhdHLDs24gezB9IixzdHJpbmdUb29TaG9ydDoiRXN0ZSBjYW1wbyBkZWJlIGNvbnRlbmVyIHBvciBsbyBtZW5vcyB7MH0gbsO6bWVyb3MgbyBjYXJhY3RlcmVzIixzdHJpbmdUb29Mb25nOiJFc3RlIGNhbXBvIGRlYmUgY29udGVuZXIgYSBsbyBtw6FzIHswfSBuw7ptZXJvcyBvIGNhcmFjdGVyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZnJfRlI6e3JlcXVpcmVkOiJDZSBjaGFtcCBlc3QgcmVxdWlzIixpbnZhbGlkOiJDZSBjaGFtcCBlc3QgaW52YWxpZGUiLG1vbnRoczpbIkphbnZpZXIiLCJGw6l2cmllciIsIk1hcnMiLCJBdnJpbCIsIk1haSIsIkp1aW4iLCJKdWlsbGV0IiwiQW/Du3QiLCJTZXB0ZW1icmUiLCJPY3RvYnJlIiwiTm92ZW1icmUiLCJEw6ljZW1icmUiXSx0aW1lVW5pdHM6e1NFQ09ORDoic2Vjb25kZXMiLE1JTlVURToibWludXRlcyIsSE9VUjoiaGV1cmVzIixEQVk6ImpvdXJzIixNT05USDoibW9pcyIsWUVBUjoiYW5uw6llcyJ9LG5vdE9wdGlvbmFsOiJDZSBjaGFtcCBuJ2VzdCBwYXMgb3B0aW9ubmVsLiIsZGlzYWxsb3dWYWx1ZToiezB9IHNvbnQgZGVzIHZhbGV1cnMgaW50ZXJkaXRlcy4iLGludmFsaWRWYWx1ZU9mRW51bToiQ2UgY2hhbXAgZG9pdCBwcmVuZHJlIHVuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgOiB7MH0uIixub3RFbm91Z2hJdGVtczoiTGUgbm9tYnJlIG1pbmltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHRvb01hbnlJdGVtczoiTGUgbm9tYnJlIG1heGltdW0gZCfDqWzDqW1lbnRzIGVzdCB7MH0iLHZhbHVlTm90VW5pcXVlOiJMZXMgdmFsZXVycyBzb250IHVuaXF1ZXMiLG5vdEFuQXJyYXk6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW5lIGxpc3RlIixpbnZhbGlkRGF0ZToiQ2V0dGUgZGF0ZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBmb3JtYXQgezB9IixpbnZhbGlkRW1haWw6IkFkcmVzc2UgZGUgY291cnJpZWwgaW52YWxpZGUsIGV4OiBpbmZvQGNsb3VkY21zLmNvbSIsc3RyaW5nTm90QW5JbnRlZ2VyOiJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHVuIG5vbWJyZSBlbnRpZXIuIixpbnZhbGlkSVB2NDoiQWRyZXNzZSBJUHY0IGludmFsaWRlLCBleDogMTkyLjE2OC4wLjEiLHN0cmluZ1ZhbHVlVG9vU21hbGw6IkxhIHZhbGV1ciBtaW5pbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vTGFyZ2U6IkxhIHZhbGV1ciBtYXhpbWFsZSBwb3VyIGNlIGNoYW1wIGVzdCB7MH0iLHN0cmluZ1ZhbHVlVG9vU21hbGxFeGNsdXNpdmU6IkxhIHZhbGV1ciBkb2l0LcOqdHJlIHN1cMOpcmlldXJlIMOgIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgezB9IixzdHJpbmdEaXZpc2libGVCeToiTGEgdmFsZXVyIGRvaXQtw6p0cmUgZGl2aXNpYmxlIHBhciB7MH0iLHN0cmluZ05vdEFOdW1iZXI6IkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdW4gbm9tYnJlLiIsaW52YWxpZFBhc3N3b3JkOiJNb3QgZGUgcGFzc2UgaW52YWxpZGUiLGludmFsaWRQaG9uZToiTnVtw6lybyBkZSB0w6lsw6lwaG9uZSBpbnZhbGlkZSwgZXg6ICgxMjMpIDQ1Ni05OTk5IixpbnZhbGlkUGF0dGVybjoiQ2UgY2hhbXAgZG9pdCBjb3JyZXNwb25kcmUgYXUgbW90aWYgezB9IixzdHJpbmdUb29TaG9ydDoiQ2UgY2hhbXAgZG9pdCBjb250ZW5pciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMiLHN0cmluZ1Rvb0xvbmc6IkNlIGNoYW1wIGRvaXQgY29udGVuaXIgYXUgcGx1cyB7MH0gY2FyYWN0w6hyZXMifX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EucmVnaXN0ZXJWaWV3KHtpZDoiVklFV19CQVNFIixtZXNzYWdlczp7ZGVfQVQ6e3JlcXVpcmVkOiJFaW5nYWJlIGVyZm9yZGVybGljaCIsaW52YWxpZDoiRWluZ2FiZSBpbnZhbGlkIixtb250aHM6WyJKw6RubmVyIiwiRmVicnVhciIsIk3DpHJ6IiwiQXByaWwiLCJNYWkiLCJKdW5pIiwiSnVsaSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sdGltZVVuaXRzOntTRUNPTkQ6IlNla3VuZGVuIixNSU5VVEU6Ik1pbnV0ZW4iLEhPVVI6IlN0dW5kZW4iLERBWToiVGFnZSIsTU9OVEg6Ik1vbmF0ZSIsWUVBUjoiSmFocmUifSxub3RPcHRpb25hbDoiRGllc2VzIEZlbGQgaXN0IG5pY2h0IG9wdGlvbmFsIixkaXNhbGxvd1ZhbHVlOiJEaWVzZSBXZXJ0ZSBzaW5kIG5pY2h0IGVybGF1YnQ6IHswfSIsaW52YWxpZFZhbHVlT2ZFbnVtOiJEaWVzZSBGZWxkIHNvbGx0ZSBlaW5lbiBkZXIgZm9sZ2VuZGVuIFdlcnRlIGVudGhhbHRlbjogezB9Iixub3RFbm91Z2hJdGVtczoiRGllIE1pbmRlc3RhbnphaGwgdm9uIEVsZW1lbnRlbiBpc3QgezB9Iix0b29NYW55SXRlbXM6IkRpZSBNYXhpbWFsYW56YWhsIHZvbiBFbGVtZW50ZW4gaXN0IHswfSIsdmFsdWVOb3RVbmlxdWU6IkRpZXNlIFdlcnRlIHNpbmQgbmljaHQgZWluZGV1dGlnIixub3RBbkFycmF5OiJLZWluZSBMaXN0ZSB2b24gV2VydGVuIixpbnZhbGlkRGF0ZToiRmFsc2NoZXMgRGF0dW1zZm9ybWF0OiB7MH0iLGludmFsaWRFbWFpbDoiVW5nw7xsdGlnZSBlLU1haWwgQWRyZXNzZSwgei5CLjogaW5mb0BjbG91ZGNtcy5jb20iLHN0cmluZ05vdEFuSW50ZWdlcjoiRWluZ2FiZSBpc3Qga2VpbmUgR2FueiBaYWhsLiIsaW52YWxpZElQdjQ6IlVuZ8O8bHRpZ2UgSVB2NCBBZHJlc3NlLCB6LkIuOiAxOTIuMTY4LjAuMSIsc3RyaW5nVmFsdWVUb29TbWFsbDoiRGllIE1pbmRlc3RhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZToiRGllIE1heGltYWxhbnphaGwgdm9uIFplaWNoZW4gaXN0IHswfSIsc3RyaW5nVmFsdWVUb29TbWFsbEV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGdyw7bDn2VyIHNlaW4gYWxzIHswfSIsc3RyaW5nVmFsdWVUb29MYXJnZUV4Y2x1c2l2ZToiRGllIEFuemFobCBkZXIgWmVpY2hlbiBtdXNzIGtsZWluZXIgc2VpbiBhbHMgezB9IixzdHJpbmdEaXZpc2libGVCeToiRGVyIFdlcnQgbXVzcyBkdXJjaCB7MH0gZGl2aWRpZXJiYXIgc2VpbiIsc3RyaW5nTm90QU51bWJlcjoiRGllIEVpbmdhYmUgaXN0IGtlaW5lIFphaGwiLGludmFsaWRQYXNzd29yZDoiVW5nw7xsdGlnZXMgUGFzc3dvcnQuIixpbnZhbGlkUGhvbmU6IlVuZ8O8bHRpZ2UgVGVsZWZvbm51bW1lciwgei5CLjogKDEyMykgNDU2LTk5OTkiLGludmFsaWRQYXR0ZXJuOiJEaWVzZSBGZWxkIHN0aW1tdCBuaWNodCBtaXQgZm9sZ2VuZGVyIFZvcmdhYmUgw7xiZXJlaW4gezB9IixzdHJpbmdUb29TaG9ydDoiRGllc2VzIEZlbGQgc29sbHRlIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZW50aGFsdGVuIixzdHJpbmdUb29Mb25nOiJEaWVzZXMgRmVsZCBzb2xsdGUgaMO2Y2hzdGVucyB7MH0gWmVpY2hlbiBlbnRoYWx0ZW4ifX19KX0pKGpRdWVyeSk7Ci8qIQpBbHBhY2EgVmVyc2lvbiAxLjEuMQoKQ29weXJpZ2h0IDIwMTMgR2l0YW5hIFNvZnR3YXJlLCBJbmMuCgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCglodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIApkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIApTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgR2l0YW5hIFNvZnR3YXJlLCBJbmMuIGF0IHRoaXMKYWRkcmVzczoKCiAgaW5mb0BnaXRhbmFzb2Z0d2FyZS5jb20KKi8KKGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkFkZHJlc3NGaWVsZD1hLkZpZWxkcy5PYmplY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLnNjaGVtYT17dGl0bGU6IkhvbWUgQWRkcmVzcyIsdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntzdHJlZXQ6e3RpdGxlOiJTdHJlZXQiLHR5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIixtYXhMZW5ndGg6MzAsbWluSXRlbXM6MCxtYXhJdGVtczozfX0sY2l0eTp7dGl0bGU6IkNpdHkiLHR5cGU6InN0cmluZyJ9LHN0YXRlOnt0aXRsZToiU3RhdGUiLHR5cGU6InN0cmluZyIsImVudW0iOlsiQUwiLCJBSyIsIkFTIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTSIsIkZMIiwiR0EiLCJHVSIsIkhJIiwiSUQiLCJJTCIsIklOIiwiSUEiLCJLUyIsIktZIiwiTEEiLCJNRSIsIk1IIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiTVAiLCJPSCIsIk9LIiwiT1IiLCJQVyIsIlBBIiwiUFIiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZJIiwiVkEiLCJXQSIsIldWIiwiV0kiLCJXWSJdfSx6aXA6e3RpdGxlOiJaaXAgQ29kZSIsdHlwZToic3RyaW5nIixwYXR0ZXJuOi9eKFxkezV9KC1cZHs0fSk/KT8kL319fTthLm1lcmdlKHRoaXMub3B0aW9ucyx7ZmllbGRzOnt6aXA6e21hc2tTdHJpbmc6Ijk5OTk5IixzaXplOjV9LHN0YXRlOntvcHRpb25MYWJlbHM6WyJBTEFCQU1BIiwiQUxBU0tBIiwiQU1FUklDQU5TQU1PQSIsIkFSSVpPTkEiLCJBUktBTlNBUyIsIkNBTElGT1JOSUEiLCJDT0xPUkFETyIsIkNPTk5FQ1RJQ1VUIiwiREVMQVdBUkUiLCJESVNUUklDVE9GQ09MVU1CSUEiLCJGRURFUkFURURTVEFURVNPRk1JQ1JPTkVTSUEiLCJGTE9SSURBIiwiR0VPUkdJQSIsIkdVQU0iLCJIQVdBSUkiLCJJREFITyIsIklMTElOT0lTIiwiSU5ESUFOQSIsIklPV0EiLCJLQU5TQVMiLCJLRU5UVUNLWSIsIkxPVUlTSUFOQSIsIk1BSU5FIiwiTUFSU0hBTExJU0xBTkRTIiwiTUFSWUxBTkQiLCJNQVNTQUNIVVNFVFRTIiwiTUlDSElHQU4iLCJNSU5ORVNPVEEiLCJNSVNTSVNTSVBQSSIsIk1JU1NPVVJJIiwiTU9OVEFOQSIsIk5FQlJBU0tBIiwiTkVWQURBIiwiTkVXSEFNUFNISVJFIiwiTkVXSkVSU0VZIiwiTkVXTUVYSUNPIiwiTkVXWU9SSyIsIk5PUlRIQ0FST0xJTkEiLCJOT1JUSERBS09UQSIsIk5PUlRIRVJOTUFSSUFOQUlTTEFORFMiLCJPSElPIiwiT0tMQUhPTUEiLCJPUkVHT04iLCJQQUxBVSIsIlBFTk5TWUxWQU5JQSIsIlBVRVJUT1JJQ08iLCJSSE9ERUlTTEFORCIsIlNPVVRIQ0FST0xJTkEiLCJTT1VUSERBS09UQSIsIlRFTk5FU1NFRSIsIlRFWEFTIiwiVVRBSCIsIlZFUk1PTlQiLCJWSVJHSU5JU0xBTkRTIiwiVklSR0lOSUEiLCJXQVNISU5HVE9OIiwiV0VTVFZJUkdJTklBIiwiV0lTQ09OU0lOIiwiV1lPTUlORyJdfX19KTtpZihhLmlzRW1wdHkodGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uKSl7dGhpcy5vcHRpb25zLmFkZHJlc3NWYWxpZGF0aW9uPXRydWV9fSxnZXRBZGRyZXNzOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRWYWx1ZSgpO2lmKHRoaXMudmlldy50eXBlPT0idmlldyIpe2Q9dGhpcy5kYXRhfXZhciBjPSIiO2lmKGQpe2lmKGQuc3RyZWV0KXtiLmVhY2goZC5zdHJlZXQsZnVuY3Rpb24oZSxmKXtjKz1mKyIgIn0pfWlmKGQuY2l0eSl7Yys9ZC5jaXR5KyIgIn1pZihkLnN0YXRlKXtjKz1kLnN0YXRlKyIgIn1pZihkLnppcCl7Yys9ZC56aXB9fXJldHVybiBjfSxyZW5kZXJGaWVsZDpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTt2YXIgZT10aGlzO2IodGhpcy5maWVsZENvbnRhaW5lcikuYWRkQ2xhc3MoImFscGFjYS1hZGRyZXNzZmllbGQiKTtpZih0aGlzLm9wdGlvbnMuYWRkcmVzc1ZhbGlkYXRpb24mJiF0aGlzLmlzRGlzcGxheU9ubHkoKSl7YignPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO3ZhciBkPWIoJzxkaXYgY2xhc3M9ImFscGFjYS1mb3JtLWJ1dHRvbiI+R29vZ2xlIE1hcDwvZGl2PicpLmFwcGVuZFRvKHRoaXMuZmllbGRDb250YWluZXIpO2lmKGQuYnV0dG9uKXtkLmJ1dHRvbih7dGV4dDp0cnVlfSl9ZC5jbGljayhmdW5jdGlvbigpe2lmKGdvb2dsZSYmZ29vZ2xlLm1hcHMpe3ZhciBnPW5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO3ZhciBmPWUuZ2V0QWRkcmVzcygpO2lmKGcpe2cuZ2VvY29kZSh7YWRkcmVzczpmfSxmdW5jdGlvbihrLGkpe2lmKGk9PWdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKXt2YXIgaj1lLmdldElkKCkrIi1tYXAtY2FudmFzIjtpZihiKCIjIitqKS5sZW5ndGg9PT0wKXtiKCI8ZGl2IGlkPSciK2orIicgY2xhc3M9J2FscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMnPjwvZGl2PiIpLmFwcGVuZFRvKGUuZmllbGRDb250YWluZXIpfXZhciBsPW5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5nZXRJZCgpKyItbWFwLWNhbnZhcyIpLHt6b29tOjEwLGNlbnRlcjprWzBdLmdlb21ldHJ5LmxvY2F0aW9uLG1hcFR5cGVJZDpnb29nbGUubWFwcy5NYXBUeXBlSWQuUk9BRE1BUH0pO3ZhciBoPW5ldyBnb29nbGUubWFwcy5NYXJrZXIoe21hcDpsLHBvc2l0aW9uOmtbMF0uZ2VvbWV0cnkubG9jYXRpb259KX1lbHNle2UuZGlzcGxheU1lc3NhZ2UoIkdlb2NvZGluZyBmYWlsZWQ6ICIraSl9fSl9fWVsc2V7ZS5kaXNwbGF5TWVzc2FnZSgiR29vZ2xlIE1hcCBBUEkgaXMgbm90IGluc3RhbGxlZC4iKX19KS53cmFwKCI8c21hbGwvPiIpO2lmKHRoaXMub3B0aW9ucy5zaG93TWFwT25Mb2FkKXtkLmNsaWNrKCl9fWlmKGMpe2MoKX19LGlzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7dmFsaWRhdGVBZGRyZXNzOnt0aXRsZToiQWRkcmVzcyBWYWxpZGF0aW9uIixkZXNjcmlwdGlvbjoiRW5hYmxlIGFkZHJlc3MgdmFsaWRhdGlvbiBpZiB0cnVlIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZX0sc2hvd01hcE9uTG9hZDp7dGl0bGU6IldoZXRoZXIgdG8gc2hvdyB0aGUgbWFwIHdoZW4gZmlyc3QgbG9hZGVkIix0eXBlOiJib29sZWFuIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7dmFsaWRhdGVBZGRyZXNzOntoZWxwZXI6IkFkZHJlc3MgdmFsaWRhdGlvbiBpZiBjaGVja2VkIixyaWdodExhYmVsOiJFbmFibGUgR29vZ2xlIE1hcCBmb3IgYWRkcmVzcyB2YWxpZGF0aW9uPyIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iQWRkcmVzcyJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlN0YW5kYXJkIFVTIEFkZHJlc3Mgd2l0aCBTdHJlZXQsIENpdHksIFN0YXRlIGFuZCBaaXAuIEFsc28gY29tZXMgd2l0aCBzdXBwb3J0IGZvciBHb29nbGUgbWFwLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iYW55In0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImFkZHJlc3MifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJhZGRyZXNzIixhLkZpZWxkcy5BZGRyZXNzRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuRGF0ZUZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0PWEuZGVmYXVsdERhdGVGb3JtYXR9aWYoIXRoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXgpe3RoaXMub3B0aW9ucy5kYXRlRm9ybWF0UmVnZXg9YS5yZWdleHBzLmRhdGV9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZCYmYi5kYXRlcGlja2VyKXt2YXIgYz10aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcjtpZighYyl7Yz17Y2hhbmdlTW9udGg6dHJ1ZSxjaGFuZ2VZZWFyOnRydWV9fWlmKCFjLmRhdGVGb3JtYXQpe2MuZGF0ZUZvcm1hdD10aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdH10aGlzLmZpZWxkLmRhdGVwaWNrZXIoYyk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIil9fX0sb25DaGFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKCk7dGhpcy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVEYXRlRm9ybWF0KCk7ZC5pbnZhbGlkRGF0ZT17bWVzc2FnZTpjPyIiOmEuc3Vic3RpdHV0ZVRva2Vucyh0aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZERhdGUiKSxbdGhpcy5vcHRpb25zLmRhdGVGb3JtYXRdKSxzdGF0dXM6Y307cmV0dXJuIGUmJmQuaW52YWxpZERhdGVbInN0YXR1cyJdfSxfdmFsaWRhdGVEYXRlRm9ybWF0OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihiLmRhdGVwaWNrZXIpe3RyeXtiLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0LGMpO3JldHVybiB0cnVlfWNhdGNoKGQpe3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gYy5tYXRjaCh0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdFJlZ2V4KX19LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZGF0ZSIsImVudW0iOlsiZGF0ZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntkYXRlRm9ybWF0Ont0aXRsZToiRGF0ZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJEYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5kZWZhdWx0RGF0ZUZvcm1hdH0sZGF0ZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiBkYXRlIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YS5yZWdleHBzLmRhdGV9LGRhdGVwaWNrZXI6e3RpdGxlOiJEYXRlIFBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBiZSBwYXNzZWQgdG8galF1ZXJ5IFVJIERhdGVQaWNrZXIgY29udHJvbCIsdHlwZToiYW55In19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7ZGF0ZUZvcm1hdDp7dHlwZToidGV4dCJ9LGRhdGVGb3JtYXRSZWdleDp7dHlwZToidGV4dCJ9LGRhdGV0aW1lOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkRhdGUgRmllbGQuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImRhdGUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSBmb3IgZm9ybWF0IHswfSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZGF0ZSIsYS5GaWVsZHMuRGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiZGF0ZSIsImRhdGUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkRhdGV0aW1lRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkKXtpZih0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKXt0aGlzLmZpZWxkLmhvdmVyKGZ1bmN0aW9uKCl7aWYoIWIodGhpcykuaGFzQ2xhc3MoImhhc0RhdGVwaWNrZXIiKSl7dmFyIGQ9Yy5vcHRpb25zLnRpbWVwaWNrZXI7aWYoIWQpe2Q9Yy5vcHRpb25zLnRpbWVwaWNrZXJ9aWYoIWQpe2Q9e2NoYW5nZVllYXI6dHJ1ZSxjaGFuZ2VNb250aDp0cnVlfX1iKHRoaXMpLmRhdGV0aW1lcGlja2VyKGQpfX0pO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtZGF0ZXRpbWUiKX19fX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYyl7aWYoYS5pc051bWJlcigpKXtjPW5ldyBEYXRlKGMpfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKT09IltvYmplY3QgRGF0ZV0iKXt0aGlzLmJhc2UoKGMuZ2V0TW9udGgoKSsxKSsiLyIrYy5nZXREYXRlKCkrIi8iK2MuZ2V0RnVsbFllYXIoKSsiICIrYy5nZXRIb3VycygpKyI6IitjLmdldE1pbnV0ZXMoKSl9ZWxzZXt0aGlzLmJhc2UoYyl9fWVsc2V7dGhpcy5iYXNlKGMpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXNlKCl9LGdldERhdGV0aW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLmZpZWxkLmRhdGV0aW1lcGlja2VyKCJnZXREYXRlIil9Y2F0Y2goYyl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX19LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lcGlja2VyOnt0aXRsZToiVGltZXBpY2tlciBvcHRpb25zIixkZXNjcmlwdGlvbjoiT3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxhIGhyZWY9J2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tL2V4YW1wbGVzL3RpbWVwaWNrZXIvJz5qUXVlcnkgdGltZXBpY2tlciBhZGRvbjwvYT4uIix0eXBlOiJhbnkifX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt0aW1lcGlja2VyOnt0eXBlOiJhbnkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRGF0ZXRpbWUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJEYXRldGltZSBGaWVsZCBiYXNlZCBvbiBUcmVudCBSaWNoYXJkc29uJ3MgPGEgaHJlZj0naHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlci8nPmpRdWVyeSB0aW1lcGlja2VyIGFkZG9uPC9hPi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGF0ZXRpbWUifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJkYXRldGltZSIsYS5GaWVsZHMuRGF0ZXRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImRhdGV0aW1lIiwiZGF0ZXRpbWUiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVkaXRvckZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt0aGlzLmNvbnRyb2xGaWVsZFRlbXBsYXRlRGVzY3JpcHRvcj10aGlzLnZpZXcuZ2V0VGVtcGxhdGVEZXNjcmlwdG9yKCJjb250cm9sRmllbGRFZGl0b3IiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBkPXRoaXM7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IiKTtiKHRoaXMuZmllbGRDb250YWluZXIpLnBhcmVudCgpLmNzcygid2lkdGgiLCIxMDAlIik7dmFyIGU9dGhpcy5vcHRpb25zLmFjZUhlaWdodDtpZihlKXtiKHRoaXMuZmllbGRDb250YWluZXIpLmNzcygiaGVpZ2h0IixlKX12YXIgYz10aGlzLm9wdGlvbnMuYWNlV2lkdGg7aWYoIWMpe2M9IjEwMCUifWIodGhpcy5maWVsZENvbnRhaW5lcikuY3NzKCJ3aWR0aCIsYyl9dmFyIGc9Yih0aGlzLmZpZWxkQ29udGFpbmVyKS5maW5kKCIuY29udHJvbC1maWVsZC1lZGl0b3ItZWwiKVswXTtpZighYWNlJiZ3aW5kb3cuYWNlKXthY2U9d2luZG93LmFjZX10aGlzLmVkaXRvcj1hY2UuZWRpdChnKTt2YXIgZj10aGlzLm9wdGlvbnMuYWNlVGhlbWU7aWYoIWYpe2Y9ImFjZS90aGVtZS9jaHJvbWUifXRoaXMuZWRpdG9yLnNldFRoZW1lKGYpO3ZhciBpPXRoaXMub3B0aW9ucy5hY2VNb2RlO2lmKCFpKXtpPSJhY2UvbW9kZS9qc29uIn10aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShpKTt0aGlzLmVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShmYWxzZSk7dGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTt0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLmRhdGEpO3RoaXMuZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7aWYodGhpcy5vcHRpb25zLmFjZUZpdENvbnRlbnRIZWlnaHQpe3ZhciBoPWZ1bmN0aW9uKCl7dmFyIGo9ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFNjcmVlbkxlbmd0aCgpKmQuZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQrZC5lZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCk7YihkLmZpZWxkQ29udGFpbmVyKS5oZWlnaHQoai50b1N0cmluZygpKyJweCIpO2QuZWRpdG9yLnJlc2l6ZSgpfTtoKCk7ZC5lZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2UiLGgpfWlmKHRoaXMuc2NoZW1hLnJlYWRvbmx5KXt0aGlzLmVkaXRvci5zZXRSZWFkT25seSh0cnVlKX1iKGcpLmJpbmQoImRlc3Ryb3llZCIsZnVuY3Rpb24oKXtpZihkLmVkaXRvcil7ZC5lZGl0b3IuZGVzdHJveSgpO2QuZWRpdG9yPW51bGx9fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7dGhpcy5lZGl0b3IuZGVzdHJveSgpO3RoaXMuZWRpdG9yPW51bGx9dGhpcy5iYXNlKCl9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvcn0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJhc2UoKTt2YXIgZD10aGlzLnZhbGlkYXRpb247dmFyIGM9dGhpcy5fdmFsaWRhdGVXb3JkQ291bnQoKTtkLndvcmRMaW1pdEV4Y2VlZGVkPXttZXNzYWdlOmM/IiI6YS5zdWJzdGl0dXRlVG9rZW5zKHRoaXMudmlldy5nZXRNZXNzYWdlKCJ3b3JkTGltaXRFeGNlZWRlZCIpLFt0aGlzLm9wdGlvbnMud29yZGxpbWl0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLndvcmRMaW1pdEV4Y2VlZGVkWyJzdGF0dXMiXX0sX3ZhbGlkYXRlV29yZENvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLndvcmRsaW1pdCYmdGhpcy5vcHRpb25zLndvcmRsaW1pdD4tMSl7dmFyIGQ9dGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtpZihkKXt2YXIgYz1kLnNwbGl0KCIgIikubGVuZ3RoO2lmKGM+dGhpcy5vcHRpb25zLndvcmRsaW1pdCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9LG9uRGVwZW5kZW50UmV2ZWFsOmZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IucmVzaXplKCl9LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7aWYodGhpcy5lZGl0b3Ipe3RoaXMuZWRpdG9yLnNldFZhbHVlKGQpfXRoaXMuYmFzZShkKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO2lmKHRoaXMuZWRpdG9yKXtjPXRoaXMuZWRpdG9yLmdldFZhbHVlKCl9cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnthY2VUaGVtZTp7dGl0bGU6IkFDRSBFZGl0b3IgVGhlbWUiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgdGhlIHRoZW1lIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvdGhlbWUvdHdpbGlnaHQifSxhY2VNb2RlOnt0aXRsZToiQUNFIEVkaXRvciBNb2RlIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIHRoZSBtb2RlIHRvIHNldCBvbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiJhY2UvbW9kZS9qYXZhc2NyaXB0In0sYWNlV2lkdGg6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHdyYXBwaW5nIGRpdiBhcm91bmQgdGhlIGVkaXRvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6IjEwMCUifSxhY2VIZWlnaHQ6e3RpdGxlOiJBQ0UgRWRpdG9yIEhlaWdodCIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSB3cmFwcGluZyBkaXYgYXJvdW5kIHRoZSBlZGl0b3IiLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIzMDBweCJ9LGFjZUZpdENvbnRlbnRIZWlnaHQ6e3RpdGxlOiJBQ0UgRml0IENvbnRlbnQgSGVpZ2h0IixkZXNjcmlwdGlvbjoiQ29uZmlndXJlcyB0aGUgQUNFIEVkaXRvciB0byBhdXRvLWZpdCBpdHMgaGVpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2V9LHdvcmRsaW1pdDp7dGl0bGU6IldvcmQgTGltaXQiLGRlc2NyaXB0aW9uOiJMaW1pdHMgdGhlIG51bWJlciBvZiB3b3JkcyBhbGxvd2VkIGluIHRoZSB0ZXh0IGFyZWEuIix0eXBlOiJudW1iZXIiLCJkZWZhdWx0IjotMX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7YWNlVGhlbWU6e3R5cGU6InRleHQifSxhY2VNb2RlOnt0eXBlOiJ0ZXh0In0sd29yZGxpbWl0Ont0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkVkaXRvciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJlZGl0b3IifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7d29yZExpbWl0RXhjZWVkZWQ6IlRoZSBtYXhpbXVtIHdvcmQgbGltaXQgb2YgezB9IGhhcyBiZWVuIGV4Y2VlZGVkLiJ9KTthLnJlZ2lzdGVyVGVtcGxhdGUoImNvbnRyb2xGaWVsZEVkaXRvciIsJzxkaXYgaWQ9IiR7aWR9IiBjbGFzcz0iY29udHJvbC1maWVsZC1lZGl0b3ItZWwiPjwvZGl2PicpO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJlZGl0b3IiLGEuRmllbGRzLkVkaXRvckZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkVtYWlsRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5lbWFpbH19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYmFzZSgpO3ZhciBjPXRoaXMudmFsaWRhdGlvbjtpZighYy5pbnZhbGlkUGF0dGVyblsic3RhdHVzIl0pe2MuaW52YWxpZFBhdHRlcm5bIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgiaW52YWxpZEVtYWlsIil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5lbWFpbDtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6YywiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZW1haWwiLCJlbnVtIjpbImVtYWlsIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iRW1haWwgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFbWFpbCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZW1haWwifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZEVtYWlsOiJJbnZhbGlkIEVtYWlsIGFkZHJlc3MgZS5nLiBpbmZvQGNsb3VkY21zLmNvbSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiZW1haWwiLGEuRmllbGRzLkVtYWlsRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJlbWFpbCIsImVtYWlsIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JbnRlZ2VyRmllbGQ9YS5GaWVsZHMuTnVtYmVyRmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiAtMX1lbHNle3JldHVybiBwYXJzZUludChjLDEwKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO2lmKHRoaXMuc2xpZGVyKXt0aGlzLnNsaWRlci5zbGlkZXIoInZhbHVlIix0aGlzLmdldFZhbHVlKCkpfX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3ZhciBjPXRoaXM7aWYodGhpcy5vcHRpb25zLnNsaWRlcil7aWYoIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5tYXhpbXVtKSYmIWEuaXNFbXB0eSh0aGlzLnNjaGVtYS5taW5pbXVtKSl7aWYodGhpcy5maWVsZCl7dGhpcy5maWVsZC5hZnRlcignPGRpdiBpZD0ic2xpZGVyIj48L2Rpdj4nKTt0aGlzLnNsaWRlcj1iKCIjc2xpZGVyIix0aGlzLmZpZWxkLnBhcmVudCgpKS5zbGlkZXIoe3ZhbHVlOnRoaXMuZ2V0VmFsdWUoKSxtaW46dGhpcy5zY2hlbWEubWluaW11bSxtYXg6dGhpcy5zY2hlbWEubWF4aW11bSxzbGlkZTpmdW5jdGlvbihkLGUpe2Muc2V0VmFsdWUoZS52YWx1ZSk7Yy5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX19KX19fWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaW50ZWdlciIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuc3RyaW5nTm90QU51bWJlclsic3RhdHVzIl0pe2Muc3RyaW5nTm90QU51bWJlclsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBbkludGVnZXIiKX1yZXR1cm4gZH0sX3ZhbGlkYXRlTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5maWVsZC52YWwoKTtpZihhLmlzVmFsRW1wdHkoYykpe3JldHVybiB0cnVlfXZhciBkPXRoaXMuZ2V0VmFsdWUoKTtpZihpc05hTihkKSl7cmV0dXJuIGZhbHNlfWlmKCFjLm1hdGNoKGEucmVnZXhwcy5pbnRlZ2VyKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttaW5pbXVtOnt0aXRsZToiTWluaW11bSIsZGVzY3JpcHRpb246Ik1pbmltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e3RpdGxlOiJNYXhpbXVtIixkZXNjcmlwdGlvbjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e3RpdGxlOiJEaXZpc2libGUgQnkiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0T3B0aW9uc0ZvclNjaGVtYTpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e21pbmltdW06e2hlbHBlcjoiTWluaW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sbWF4aW11bTp7aGVscGVyOiJNYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWVsZC4iLHR5cGU6ImludGVnZXIifSxkaXZpc2libGVCeTp7aGVscGVyOiJQcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSB0aGlzIG51bWJlci4iLHR5cGU6ImludGVnZXIifX19KX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3NsaWRlcjp7dGl0bGU6IlNsaWRlciIsZGVzY3JpcHRpb246IkdlbmVyYXRlIGpRdWVyeSBVSSBzbGlkZXIgY29udHJvbCB3aXRoIHRoZSBmaWVsZCBpZiB0cnVlLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntzbGlkZXI6e3JpZ2h0TGFiZWw6IlNsaWRlciBjb250cm9sID8iLGhlbHBlcjoiR2VuZXJhdGUgc2xpZGVyIGNvbnRyb2wgaWYgc2VsZWN0ZWQuIix0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJJbnRlZ2VyIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIGludGVnZXJzLiJ9LGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpbnRlZ2VyIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe3N0cmluZ05vdEFuSW50ZWdlcjoiVGhpcyB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlci4ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImludGVnZXIiLGEuRmllbGRzLkludGVnZXJGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRTY2hlbWFGaWVsZE1hcHBpbmcoImludGVnZXIiLCJpbnRlZ2VyIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5JUHY0RmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKCF0aGlzLnNjaGVtYS5wYXR0ZXJuKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwcy5pcHY0fX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtaXB2NCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRJUHY0Iil9cmV0dXJuIGR9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7dmFyIGM9KHRoaXMuc2NoZW1hJiZ0aGlzLnNjaGVtYS5wYXR0ZXJuKT90aGlzLnNjaGVtYS5wYXR0ZXJuOmEucmVnZXhwcy5pcHY0O3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntwYXR0ZXJuOnt0aXRsZToiUGF0dGVybiIsZGVzY3JpcHRpb246IkZpZWxkIFBhdHRlcm4gaW4gUmVndWxhciBFeHByZXNzaW9uIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjpjLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJlbnVtIjpbImlwLWFkZHJlc3MiXSwiZGVmYXVsdCI6ImlwLWFkZHJlc3MiLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIklQIEFkZHJlc3MgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJJUCBBZGRyZXNzIEZpZWxkLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJpcHY0In19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRJUHY0OiJJbnZhbGlkIElQdjQgYWRkcmVzcywgZS5nLiAxOTIuMTY4LjAuMSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygiaXB2NCIsYS5GaWVsZHMuSVB2NEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygiaXAtYWRkcmVzcyIsImlwdjQiKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkpTT05GaWVsZD1hLkZpZWxkcy5UZXh0QXJlYUZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZixqLGgsaSxlLGQsZyl7dGhpcy5iYXNlKGYsaixoLGksZSxkLGcpfSxzZXRWYWx1ZTpmdW5jdGlvbihkKXtpZihhLmlzT2JqZWN0KGQpfHx0eXBlb2YoZCk9PSJvYmplY3QiKXtkPUpTT04uc3RyaW5naWZ5KGQsbnVsbCwzKX10aGlzLmJhc2UoZCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7aWYoZCYmYS5pc1N0cmluZyhkKSl7ZD1KU09OLnBhcnNlKGQpfXJldHVybiBkfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuYmFzZSgpO3ZhciBlPXRoaXMudmFsaWRhdGlvbjt2YXIgZD10aGlzLl92YWxpZGF0ZUpTT04oKTtlLnN0cmluZ05vdEFKU09OPXttZXNzYWdlOmQuc3RhdHVzPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJzdHJpbmdOb3RBSlNPTiIpKyIgIitkLm1lc3NhZ2Usc3RhdHVzOmQuc3RhdHVzfTtyZXR1cm4gZiYmZS5zdHJpbmdOb3RBSlNPTlsic3RhdHVzIl19LF92YWxpZGF0ZUpTT046ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmZpZWxkLnZhbCgpO2lmKGEuaXNWYWxFbXB0eShkKSl7cmV0dXJue3N0YXR1czp0cnVlfX10cnl7dmFyIGc9SlNPTi5wYXJzZShkKTt0aGlzLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGcsbnVsbCwzKSk7cmV0dXJue3N0YXR1czp0cnVlfX1jYXRjaChmKXtyZXR1cm57c3RhdHVzOmZhbHNlLG1lc3NhZ2U6Zi5tZXNzYWdlfX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYmluZCgia2V5cHJlc3MiLGZ1bmN0aW9uKGYpe2lmKGYud2hpY2g9PTM0KXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoJyInKX1pZihmLndoaWNoPT0xMjMpe2QuZmllbGQuaW5zZXJ0QXRDYXJldCgifSIpfWlmKGYud2hpY2g9PTkxKXtkLmZpZWxkLmluc2VydEF0Q2FyZXQoIl0iKX19KTt0aGlzLmZpZWxkLmJpbmQoImtleXByZXNzIiwiQ3RybCtsIixmdW5jdGlvbigpe2QuZ2V0RWwoKS5yZW1vdmVDbGFzcygiYWxwYWNhLWZpZWxkLWZvY3VzZWQiKTtkLnJlbmRlclZhbGlkYXRpb25TdGF0ZSgpfSk7dGhpcy5maWVsZC5hdHRyKCJ0aXRsZSIsIlR5cGUgQ3RybCtMIHRvIGZvcm1hdCBhbmQgdmFsaWRhdGUgdGhlIEpTT04gc3RyaW5nLiIpfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtanNvbiIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSlNPTiBFZGl0b3IifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJFZGl0b3IgZm9yIEpTT04gb2JqZWN0cyB3aXRoIGJhc2ljIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImpzb24ifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7c3RyaW5nTm90QUpTT046IlRoaXMgdmFsdWUgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJqc29uIixhLkZpZWxkcy5KU09ORmllbGQpO2IuZm4uaW5zZXJ0QXRDYXJldD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0aGlzLmZvY3VzKCk7c2VsPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3NlbC50ZXh0PWQ7dGhpcy5mb2N1cygpfWVsc2V7aWYodGhpcy5zZWxlY3Rpb25TdGFydHx8dGhpcy5zZWxlY3Rpb25TdGFydD09IjAiKXt2YXIgZj10aGlzLnNlbGVjdGlvblN0YXJ0O3ZhciBlPXRoaXMuc2VsZWN0aW9uRW5kO3ZhciBnPXRoaXMuc2Nyb2xsVG9wO3RoaXMudmFsdWU9dGhpcy52YWx1ZS5zdWJzdHJpbmcoMCxmKStkK3RoaXMudmFsdWUuc3Vic3RyaW5nKGUsdGhpcy52YWx1ZS5sZW5ndGgpO3RoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdGlvblN0YXJ0PWY7dGhpcy5zZWxlY3Rpb25FbmQ9Zjt0aGlzLnNjcm9sbFRvcD1nfWVsc2V7dGhpcy52YWx1ZSs9ZDt0aGlzLmZvY3VzKCl9fX0pfTtqUXVlcnkuaG90a2V5cz17dmVyc2lvbjoiMC44IixzcGVjaWFsS2V5czp7ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJyZXR1cm4iLDE2OiJzaGlmdCIsMTc6ImN0cmwiLDE4OiJhbHQiLDE5OiJwYXVzZSIsMjA6ImNhcHNsb2NrIiwyNzoiZXNjIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24iLDQ1OiJpbnNlcnQiLDQ2OiJkZWwiLDk2OiIwIiw5NzoiMSIsOTg6IjIiLDk5OiIzIiwxMDA6IjQiLDEwMToiNSIsMTAyOiI2IiwxMDM6IjciLDEwNDoiOCIsMTA1OiI5IiwxMDY6IioiLDEwNzoiKyIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTEyOiJmMSIsMTEzOiJmMiIsMTE0OiJmMyIsMTE1OiJmNCIsMTE2OiJmNSIsMTE3OiJmNiIsMTE4OiJmNyIsMTE5OiJmOCIsMTIwOiJmOSIsMTIxOiJmMTAiLDEyMjoiZjExIiwxMjM6ImYxMiIsMTQ0OiJudW1sb2NrIiwxNDU6InNjcm9sbCIsMTkxOiIvIiwyMjQ6Im1ldGEifSxzaGlmdE51bXM6eyJgIjoifiIsIjEiOiIhIiwiMiI6IkAiLCIzIjoiIyIsIjQiOiIkIiwiNSI6IiUiLCI2IjoiXiIsIjciOiImIiwiOCI6IioiLCI5IjoiKCIsIjAiOiIpIiwiLSI6Il8iLCI9IjoiKyIsIjsiOiI6ICIsIiciOiciJywiLCI6IjwiLCIuIjoiPiIsIi8iOiI/IiwiXFwiOiJ8In19O2Z1bmN0aW9uIGMoZSl7aWYodHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKXtyZXR1cm59dmFyIGQ9ZS5oYW5kbGVyLGY9ZS5kYXRhLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKTtlLmhhbmRsZXI9ZnVuY3Rpb24obyl7aWYodGhpcyE9PW8udGFyZ2V0JiYoL3RleHRhcmVhfHNlbGVjdC9pLnRlc3Qoby50YXJnZXQubm9kZU5hbWUpfHxvLnRhcmdldC50eXBlPT09InRleHQiKSl7cmV0dXJufXZhciBqPW8udHlwZSE9PSJrZXlwcmVzcyImJmpRdWVyeS5ob3RrZXlzLnNwZWNpYWxLZXlzW28ud2hpY2hdLHA9U3RyaW5nLmZyb21DaGFyQ29kZShvLndoaWNoKS50b0xvd2VyQ2FzZSgpLG0sbj0iIixoPXt9O2lmKG8uYWx0S2V5JiZqIT09ImFsdCIpe24rPSJhbHQrIn1pZihvLmN0cmxLZXkmJmohPT0iY3RybCIpe24rPSJjdHJsKyJ9aWYoby5tZXRhS2V5JiYhby5jdHJsS2V5JiZqIT09Im1ldGEiKXtuKz0ibWV0YSsifWlmKG8uc2hpZnRLZXkmJmohPT0ic2hpZnQiKXtuKz0ic2hpZnQrIn1pZihqKXtoW24ral09dHJ1ZX1lbHNle2hbbitwXT10cnVlO2hbbitqUXVlcnkuaG90a2V5cy5zaGlmdE51bXNbcF1dPXRydWU7aWYobj09PSJzaGlmdCsiKXtoW2pRdWVyeS5ob3RrZXlzLnNoaWZ0TnVtc1twXV09dHJ1ZX19Zm9yKHZhciBrPTAsZz1mLmxlbmd0aDtrPGc7aysrKXtpZihoW2Zba11dKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19alF1ZXJ5LmVhY2goWyJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyJdLGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdGhpc109e2FkZDpjfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuSW50ZWdlckZpZWxkPWEuRmllbGRzLk51bWJlckZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gLTF9ZWxzZXtyZXR1cm4gcGFyc2VJbnQoYywxMCl9fSxvbkNoYW5nZTpmdW5jdGlvbihjKXt0aGlzLmJhc2UoKTtpZih0aGlzLnNsaWRlcil7dGhpcy5zbGlkZXIuc2xpZGVyKCJ2YWx1ZSIsdGhpcy5nZXRWYWx1ZSgpKX19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgYz10aGlzO2lmKHRoaXMub3B0aW9ucy5zbGlkZXIpe2lmKCFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWF4aW11bSkmJiFhLmlzRW1wdHkodGhpcy5zY2hlbWEubWluaW11bSkpe2lmKHRoaXMuZmllbGQpe3RoaXMuZmllbGQuYWZ0ZXIoJzxkaXYgaWQ9InNsaWRlciI+PC9kaXY+Jyk7dGhpcy5zbGlkZXI9YigiI3NsaWRlciIsdGhpcy5maWVsZC5wYXJlbnQoKSkuc2xpZGVyKHt2YWx1ZTp0aGlzLmdldFZhbHVlKCksbWluOnRoaXMuc2NoZW1hLm1pbmltdW0sbWF4OnRoaXMuc2NoZW1hLm1heGltdW0sc2xpZGU6ZnVuY3Rpb24oZCxlKXtjLnNldFZhbHVlKGUudmFsdWUpO2MucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9fSl9fX1pZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLnN0cmluZ05vdEFOdW1iZXJbInN0YXR1cyJdKXtjLnN0cmluZ05vdEFOdW1iZXJbIm1lc3NhZ2UiXT10aGlzLnZpZXcuZ2V0TWVzc2FnZSgic3RyaW5nTm90QW5JbnRlZ2VyIil9cmV0dXJuIGR9LF92YWxpZGF0ZU51bWJlcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoYS5pc1ZhbEVtcHR5KGMpKXtyZXR1cm4gdHJ1ZX12YXIgZD10aGlzLmdldFZhbHVlKCk7aWYoaXNOYU4oZCkpe3JldHVybiBmYWxzZX1pZighYy5tYXRjaChhLnJlZ2V4cHMuaW50ZWdlcikpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7bWluaW11bTp7dGl0bGU6Ik1pbmltdW0iLGRlc2NyaXB0aW9uOiJNaW5pbXVtIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4iLHR5cGU6ImludGVnZXIifSxtYXhpbXVtOnt0aXRsZToiTWF4aW11bSIsZGVzY3JpcHRpb246Ik1heGltdW0gdmFsdWUgb2YgdGhlIHByb3BlcnR5LiIsdHlwZToiaW50ZWdlciJ9LGRpdmlzaWJsZUJ5Ont0aXRsZToiRGl2aXNpYmxlIEJ5IixkZXNjcmlwdGlvbjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnttaW5pbXVtOntoZWxwZXI6Ik1pbmltdW0gdmFsdWUgb2YgdGhlIGZpZWxkLiIsdHlwZToiaW50ZWdlciJ9LG1heGltdW06e2hlbHBlcjoiTWF4aW11bSB2YWx1ZSBvZiB0aGUgZmllbGQuIix0eXBlOiJpbnRlZ2VyIn0sZGl2aXNpYmxlQnk6e2hlbHBlcjoiUHJvcGVydHkgdmFsdWUgbXVzdCBiZSBkaXZpc2libGUgYnkgdGhpcyBudW1iZXIuIix0eXBlOiJpbnRlZ2VyIn19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntzbGlkZXI6e3RpdGxlOiJTbGlkZXIiLGRlc2NyaXB0aW9uOiJHZW5lcmF0ZSBqUXVlcnkgVUkgc2xpZGVyIGNvbnRyb2wgd2l0aCB0aGUgZmllbGQgaWYgdHJ1ZS4iLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZX19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2xpZGVyOntyaWdodExhYmVsOiJTbGlkZXIgY29udHJvbCA/IixoZWxwZXI6IkdlbmVyYXRlIHNsaWRlciBjb250cm9sIGlmIHNlbGVjdGVkLiIsdHlwZToiY2hlY2tib3gifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iSW50ZWdlciBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciBpbnRlZ2Vycy4ifSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImludGVnZXIifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iaW50ZWdlciJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtzdHJpbmdOb3RBbkludGVnZXI6IlRoaXMgdmFsdWUgaXMgbm90IGFuIGludGVnZXIuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJpbnRlZ2VyIixhLkZpZWxkcy5JbnRlZ2VyRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0U2NoZW1hRmllbGRNYXBwaW5nKCJpbnRlZ2VyIiwiaW50ZWdlciIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTG93ZXJDYXNlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1sb3dlcmNhc2UiKX19LHNldFZhbHVlOmZ1bmN0aW9uKGQpe3ZhciBjPWQudG9Mb3dlckNhc2UoKTtpZihjIT10aGlzLmdldFZhbHVlKCkpe3RoaXMuYmFzZShjKX19LG9uS2V5UHJlc3M6ZnVuY3Rpb24oYyl7dGhpcy5iYXNlKGMpO3ZhciBkPXRoaXM7YS5sYXRlcigyNSx0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXRWYWx1ZSgpO2Quc2V0VmFsdWUoZSl9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTG93ZXJjYXNlIFRleHQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IGZpZWxkIGZvciBsb3dlcmNhc2UgdGV4dC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibG93ZXJjYXNlIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibG93ZXJjYXNlIixhLkZpZWxkcy5Mb3dlckNhc2VGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImxvd2VyY2FzZSIsImxvd2VyY2FzZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuTWFwRmllbGQ9YS5GaWVsZHMuQXJyYXlGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTthLm1lcmdlT2JqZWN0KHRoaXMub3B0aW9ucyx7Zm9yY2VSZXZhbGlkYXRpb246dHJ1ZX0pO2lmKGEuaXNFbXB0eSh0aGlzLmRhdGEpKXtyZXR1cm59aWYoIWEuaXNBcnJheSh0aGlzLmRhdGEpKXtpZihhLmlzT2JqZWN0KHRoaXMuZGF0YSkpe3ZhciBjPVtdO2IuZWFjaCh0aGlzLmRhdGEsZnVuY3Rpb24oZCxlKXt2YXIgZj1hLmNvcHlPZihlKTtmLl9rZXk9ZDtjLnB1c2goZil9KTt0aGlzLmRhdGE9Y319fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXRoaXMuc2NoZW1hLnJlcXVpcmVkKXtyZXR1cm59dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZCl7ZGVsZXRlIGMuX2tleTtmW2RdPWN9fXJldHVybiBmfSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYmFzZSgpO3ZhciBkPXRoaXMudmFsaWRhdGlvbjt2YXIgZj10aGlzLl92YWxpZGF0ZU1hcEtleXNOb3RFbXB0eSgpO2Qua2V5TWlzc2luZz17bWVzc2FnZTpmPyIiOnRoaXMudmlldy5nZXRNZXNzYWdlKCJrZXlNaXNzaW5nIiksc3RhdHVzOmZ9O3ZhciBjPXRoaXMuX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZSgpO2Qua2V5Tm90VW5pcXVlPXttZXNzYWdlOmM/IiI6dGhpcy52aWV3LmdldE1lc3NhZ2UoImtleU5vdFVuaXF1ZSIpLHN0YXR1czpjfTtyZXR1cm4gZSYmZC5rZXlNaXNzaW5nWyJzdGF0dXMiXSYmZC5rZXlOb3RVbmlxdWVbInN0YXR1cyJdfSxfdmFsaWRhdGVNYXBLZXlzTm90RW1wdHk6ZnVuY3Rpb24oKXt2YXIgZj10cnVlO2Zvcih2YXIgZT0wO2U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZSsrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2VdLmdldFZhbHVlKCk7dmFyIGQ9Yy5fa2V5O2lmKCFkKXtmPWZhbHNlO2JyZWFrfX1yZXR1cm4gZn0sX3ZhbGlkYXRlTWFwS2V5c1VuaXF1ZTpmdW5jdGlvbigpe3ZhciBnPXRydWU7dmFyIGY9e307Zm9yKHZhciBlPTA7ZTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtlKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bZV0uZ2V0VmFsdWUoKTt2YXIgZD1jLl9rZXk7aWYoZltkXSl7Zz1mYWxzZX1mW2RdPWR9cmV0dXJuIGd9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLW1hcCIpfX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iTWFwIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iRmllbGQgZm9yIG9iamVjdHMgd2l0aCBrZXkvdmFsdWUgcGFpcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzY2hlbWEgZm9yIHZhbHVlcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4ibWFwIn19KTthLnJlZ2lzdGVyRmllbGRDbGFzcygibWFwIixhLkZpZWxkcy5NYXBGaWVsZCk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtrZXlOb3RVbmlxdWU6IktleXMgb2YgbWFwIGZpZWxkIGFyZSBub3QgdW5pcXVlLiIsa2V5TWlzc2luZzoiTWFwIGNvbnRhaW5zIGFuIGVtcHR5IGtleS4ifSl9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QYXNzd29yZEZpZWxkPWEuRmllbGRzLlRleHRGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5zY2hlbWEucGF0dGVybil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHMucGFzc3dvcmR9dGhpcy5jb250cm9sRmllbGRUZW1wbGF0ZURlc2NyaXB0b3I9dGhpcy52aWV3LmdldFRlbXBsYXRlRGVzY3JpcHRvcigiY29udHJvbEZpZWxkUGFzc3dvcmQiKX0scG9zdFJlbmRlcjpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO2lmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7Yy5pbnZhbGlkUGF0dGVyblsibWVzc2FnZSJdPXRoaXMudmlldy5nZXRNZXNzYWdlKCJpbnZhbGlkUGFzc3dvcmQiKX1yZXR1cm4gZH0sZ2V0U2NoZW1hT2ZTY2hlbWE6ZnVuY3Rpb24oKXt2YXIgYz0odGhpcy5zY2hlbWEmJnRoaXMuc2NoZW1hLnBhdHRlcm4pP3RoaXMuc2NoZW1hLnBhdHRlcm46L15bMC05YS16QS1aXHgyMC1ceDdFXSokLztyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7cGF0dGVybjp7dGl0bGU6IlBhdHRlcm4iLGRlc2NyaXB0aW9uOiJGaWVsZCBQYXR0ZXJuIGluIFJlZ3VsYXIgRXhwcmVzc2lvbiIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6dGhpcy5zY2hlbWEucGF0dGVybiwiZW51bSI6W2NdLHJlYWRvbmx5OnRydWV9LGZvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoicGFzc3dvcmQiLCJlbnVtIjpbInBhc3N3b3JkIl0scmVhZG9ubHk6dHJ1ZX19fSl9LGdldE9wdGlvbnNGb3JTY2hlbWE6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGFzc3dvcmQgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQYXNzd29yZCBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGFzc3dvcmQifX0pO2EucmVnaXN0ZXJUZW1wbGF0ZSgiY29udHJvbEZpZWxkUGFzc3dvcmQiLCc8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSIke2lkfSIge3tpZiBvcHRpb25zLnNpemV9fXNpemU9IiR7b3B0aW9ucy5zaXplfSJ7ey9pZn19IHt7aWYgb3B0aW9ucy5yZWFkb25seX19cmVhZG9ubHk9InJlYWRvbmx5Int7L2lmfX0ge3tpZiBuYW1lfX1uYW1lPSIke25hbWV9Int7L2lmfX0ge3tlYWNoKGksdikgb3B0aW9ucy5kYXRhfX1kYXRhLSR7aX09IiR7dn0ie3svZWFjaH19Lz4nKTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRQYXNzd29yZDoiSW52YWxpZCBQYXNzd29yZCJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGFzc3dvcmQiLGEuRmllbGRzLlBhc3N3b3JkRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwYXNzd29yZCIsInBhc3N3b3JkIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5QZXJzb25hbE5hbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXBlcnNvbmFsbmFtZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGU9IiI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGM9PT0wKXtlKz1kLmNoYXJBdChjKS50b1VwcGVyQ2FzZSgpfWVsc2V7aWYoZC5jaGFyQXQoYy0xKT09IiAifHxkLmNoYXJBdChjLTEpPT0iLSJ8fGQuY2hhckF0KGMtMSk9PSInIil7ZSs9ZC5jaGFyQXQoYykudG9VcHBlckNhc2UoKX1lbHNle2UrPWQuY2hhckF0KGMpfX19aWYoZSE9dGhpcy5nZXRWYWx1ZSgpKXt0aGlzLmJhc2UoZSl9fSxvbktleVByZXNzOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZShjKTt2YXIgZD10aGlzO2EubGF0ZXIoMjUsdGhpcyxmdW5jdGlvbigpe3ZhciBlPWQuZ2V0VmFsdWUoKTtkLnNldFZhbHVlKGUpfSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlBlcnNvbmFsIE5hbWUifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJUZXh0IEZpZWxkIGZvciBwZXJzb25hbCBuYW1lIHdpdGggY2FwdGljYWwgbGV0dGVyIGZvciBmaXJzdCBsZXR0ZXIgJiBhZnRlciBoeXBoZW4sIHNwYWNlIG9yIGFwb3N0cm9waGUuIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInBlcnNvbmFsbmFtZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInBlcnNvbmFsbmFtZSIsYS5GaWVsZHMuUGVyc29uYWxOYW1lRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuUGhvbmVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMuc2NoZW1hLnBhdHRlcm4pe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnBob25lfWlmKGEuaXNFbXB0eSh0aGlzLm9wdGlvbnMubWFza1N0cmluZykpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSIoOTk5KSA5OTktOTk5OSJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC1waG9uZSIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRQaG9uZSIpfXJldHVybiBkfSxnZXRTY2hlbWFPZlNjaGVtYTpmdW5jdGlvbigpe3ZhciBjPSh0aGlzLnNjaGVtYSYmdGhpcy5zY2hlbWEucGF0dGVybik/dGhpcy5zY2hlbWEucGF0dGVybjphLnJlZ2V4cHMucGhvbmU7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3BhdHRlcm46e3RpdGxlOiJQYXR0ZXJuIixkZXNjcmlwdGlvbjoiRmllbGQgUGF0dGVybiBpbiBSZWd1bGFyIEV4cHJlc3Npb24iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOmMsImVudW0iOltjXSxyZWFkb25seTp0cnVlfSxmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJQcm9wZXJ0eSBkYXRhIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6InBob25lIiwiZW51bSI6WyJwaG9uZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnttYXNrU3RyaW5nOnt0aXRsZToiRmllbGQgTWFzayBTdHJpbmciLGRlc2NyaXB0aW9uOiJFeHByZXNzaW9uIGZvciBmaWVsZCBtYXNrIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiKDk5OSkgOTk5LTk5OTkifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iUGhvbmUgRmllbGQifSxnZXREZXNjcmlwdGlvbjpmdW5jdGlvbigpe3JldHVybiJQaG9uZSBGaWVsZC4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4icGhvbmUifX0pO2EucmVnaXN0ZXJNZXNzYWdlcyh7aW52YWxpZFBob25lOiJJbnZhbGlkIFBob25lIE51bWJlciwgZS5nLiAoMTIzKSA0NTYtOTk5OSJ9KTthLnJlZ2lzdGVyRmllbGRDbGFzcygicGhvbmUiLGEuRmllbGRzLlBob25lRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJwaG9uZSIsInBob25lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5UYWdGaWVsZD1hLkZpZWxkcy5Mb3dlckNhc2VGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZighdGhpcy5vcHRpb25zLnNlcGFyYXRvcil7dGhpcy5vcHRpb25zLnNlcGFyYXRvcj0iLCJ9fSxwb3N0UmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYodGhpcy5maWVsZENvbnRhaW5lcil7dGhpcy5maWVsZENvbnRhaW5lci5hZGRDbGFzcygiYWxwYWNhLWNvbnRyb2xmaWVsZC10YWciKX19LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7aWYoYz09PSIiKXtyZXR1cm5bXX1yZXR1cm4gYy5zcGxpdCh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7aWYoYz09PSIiKXtyZXR1cm59dGhpcy5iYXNlKGMuam9pbih0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSl9LG9uQmx1cjpmdW5jdGlvbihmKXt0aGlzLmJhc2UoZik7dmFyIGM9dGhpcy5nZXRWYWx1ZSgpO3ZhciBkPVtdO2IuZWFjaChjLGZ1bmN0aW9uKGcsZSl7aWYoZS50cmltKCkhPT0iIil7ZC5wdXNoKGUudHJpbSgpKX19KTt0aGlzLnNldFZhbHVlKGQpfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7c2VwYXJhdG9yOnt0aXRsZToiU2VwYXJhdG9yIixkZXNjcmlwdGlvbjoiU2VwYXJhdG9yIHVzZWQgdG8gc3BsaXQgdGFncy4iLHR5cGU6InN0cmluZyIsImRlZmF1bHQiOiIsIn19fSl9LGdldE9wdGlvbnNGb3JPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7c2VwYXJhdG9yOnt0eXBlOiJ0ZXh0In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIlRhZyBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIGVudGVyaW5nIGxpc3Qgb2YgdGFncyBzZXBhcmF0ZWQgYnkgZGVsaW1pdGVyLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0YWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ0YWciLGEuRmllbGRzLlRhZ0ZpZWxkKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLlRpbWVGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5iYXNlKCk7aWYoIXRoaXMub3B0aW9ucy50aW1lRm9ybWF0KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdD0iaGg6bW06c3MifWlmKCF0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4KXt0aGlzLm9wdGlvbnMudGltZUZvcm1hdFJlZ2V4PS9eKChbMC0xXVswLTldKXwoWzJdWzAtM10pKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV0pJC99aWYoYS5pc0VtcHR5KHRoaXMub3B0aW9ucy5tYXNrU3RyaW5nKSl7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5Ojk5Ojk5In19LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXRpbWUiKX19LG9uQ2hhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuYmFzZSgpO3RoaXMucmVuZGVyVmFsaWRhdGlvblN0YXRlKCl9LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYXNlKCk7dmFyIGQ9dGhpcy52YWxpZGF0aW9uO3ZhciBjPXRoaXMuX3ZhbGlkYXRlVGltZUZvcm1hdCgpO2QuaW52YWxpZFRpbWU9e21lc3NhZ2U6Yz8iIjphLnN1YnN0aXR1dGVUb2tlbnModGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRUaW1lIiksW3RoaXMub3B0aW9ucy50aW1lRm9ybWF0XSksc3RhdHVzOmN9O3JldHVybiBlJiZkLmludmFsaWRUaW1lWyJzdGF0dXMiXX0sX3ZhbGlkYXRlVGltZUZvcm1hdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZmllbGQudmFsKCk7aWYoIXRoaXMuc2NoZW1hLnJlcXVpcmVkJiYoYS5pc1ZhbEVtcHR5KGMpfHxjPT0iX186X186X18iKSl7cmV0dXJuIHRydWV9cmV0dXJuIGMubWF0Y2godGhpcy5vcHRpb25zLnRpbWVGb3JtYXRSZWdleCl9LHNldFZhbHVlOmZ1bmN0aW9uKGMpe2lmKGM9PT0iIil7dGhpcy5iYXNlKGMpO3JldHVybn10aGlzLmJhc2UoYyl9LGdldFNjaGVtYU9mU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e2Zvcm1hdDp7dGl0bGU6IkZvcm1hdCIsZGVzY3JpcHRpb246IlByb3BlcnR5IGRhdGEgZm9ybWF0Iix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoidGltZSIsImVudW0iOlsidGltZSJdLHJlYWRvbmx5OnRydWV9fX0pfSxnZXRPcHRpb25zRm9yU2NoZW1hOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse2ZpZWxkczp7Zm9ybWF0Ont0eXBlOiJ0ZXh0In19fSl9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOnt0aW1lRm9ybWF0Ont0aXRsZToiVGltZSBGb3JtYXQiLGRlc2NyaXB0aW9uOiJUaW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6ImhoOm1tOnNzIn0sdGltZUZvcm1hdFJlZ2V4Ont0aXRsZToiRm9ybWF0IFJlZ3VsYXIgRXhwcmVzc2lvbiIsZGVzY3JpcHRpb246IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdmFsaWRhdGlvbiB0aW1lIGZvcm1hdCIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6L14oKFswLTFdWzAtOV0pfChbMl1bMC0zXSkpOihbMC01XVswLTldKTooWzAtNV1bMC05XSkkL30sbWFza1N0cmluZzp7ImRlZmF1bHQiOiI5OTo5OTo5OSJ9fX0pfSxnZXRPcHRpb25zRm9yT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtmaWVsZHM6e3RpbWVGb3JtYXQ6e3R5cGU6InRleHQifSx0aW1lRm9ybWF0UmVnZXg6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVGltZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIkZpZWxkIGZvciB0aW1lLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ0aW1lIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRUaW1lOiJJbnZhbGlkIHRpbWUgZm9yIGZvcm1hdCB7MH0ifSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInRpbWUiLGEuRmllbGRzLlRpbWVGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoInRpbWUiLCJ0aW1lIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5VcHBlckNhc2VGaWVsZD1hLkZpZWxkcy5UZXh0RmllbGQuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLGksZyxoLGQsYyxmKXt0aGlzLmJhc2UoZSxpLGcsaCxkLGMsZil9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVwcGVyY2FzZSIpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50b1VwcGVyQ2FzZSgpO2lmKGQhPXRoaXMuZ2V0VmFsdWUoKSl7dGhpcy5iYXNlKGQpfX0sb25LZXlQcmVzczpmdW5jdGlvbihjKXt0aGlzLmJhc2UoYyk7dmFyIGQ9dGhpczthLmxhdGVyKDI1LHRoaXMsZnVuY3Rpb24oKXt2YXIgZT1kLmdldFZhbHVlKCk7ZC5zZXRWYWx1ZShlKX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJVcHBlcmNhc2UgVGV4dCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlRleHQgZmllbGQgZm9yIHVwcGVyY2FzZSB0ZXh0LiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJ1cHBlcmNhc2UifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cHBlcmNhc2UiLGEuRmllbGRzLlVwcGVyQ2FzZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXBwZXJjYXNlIiwidXBwZXJjYXNlIil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5XeXNpd3lnRmllbGQ9YS5GaWVsZHMuVGV4dEFyZWFGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKTt0aGlzLmNvbnRyb2xzQ29uZmlnPXt9O3RoaXMuY29udHJvbHNDb25maWcuc2ltcGxlPXtodG1sOnt2aXNpYmxlOnRydWV9LGNyZWF0ZUxpbms6e3Zpc2libGU6ZmFsc2V9LHVuTGluazp7dmlzaWJsZTpmYWxzZX0saDE6e3Zpc2libGU6ZmFsc2V9LGgyOnt2aXNpYmxlOmZhbHNlfSxoMzp7dmlzaWJsZTpmYWxzZX0saW5kZW50Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRIb3Jpem9udGFsUnVsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0SW1hZ2U6e3Zpc2libGU6ZmFsc2V9LGluc2VydE9yZGVyZWRMaXN0Ont2aXNpYmxlOmZhbHNlfSxpbnNlcnRUYWJsZTp7dmlzaWJsZTpmYWxzZX0saW5zZXJ0VW5vcmRlcmVkTGlzdDp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUNlbnRlcjp7dmlzaWJsZTpmYWxzZX0sanVzdGlmeUZ1bGw6e3Zpc2libGU6ZmFsc2V9LGp1c3RpZnlMZWZ0Ont2aXNpYmxlOmZhbHNlfSxqdXN0aWZ5UmlnaHQ6e3Zpc2libGU6ZmFsc2V9LG91dGRlbnQ6e3Zpc2libGU6ZmFsc2V9LHJlZG86e3Zpc2libGU6ZmFsc2V9LHJlbW92ZUZvcm1hdDp7dmlzaWJsZTpmYWxzZX0sc3Vic2NyaXB0Ont2aXNpYmxlOmZhbHNlfSxzdXBlcnNjcmlwdDp7dmlzaWJsZTpmYWxzZX0sdW5kbzp7dmlzaWJsZTpmYWxzZX0sY29kZTp7dmlzaWJsZTpmYWxzZX0sc3RyaWtlVGhyb3VnaDp7dmlzaWJsZTpmYWxzZX19fSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuYmFzZSgpO3RoaXMucGx1Z2luPW51bGx9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTt2YXIgZD10aGlzO2lmKHRoaXMuZmllbGQmJmIud3lzaXd5Zyl7dmFyIGM9dGhpcy5vcHRpb25zLnd5c2l3eWc/dGhpcy5vcHRpb25zLnd5c2l3eWc6e307aWYoYy5jb250cm9scyl7aWYodHlwZW9mKGMuY29udHJvbHMpPT09InN0cmluZyIpe2MuY29udHJvbHM9dGhpcy5jb250cm9sc0NvbmZpZ1tjLmNvbnRyb2xzXTtpZighYy5jb250cm9scyl7Yy5jb250cm9scz17fX19fWlmKHRoaXMub3B0aW9ucy5vbkRlbWFuZCl7dGhpcy5vdXRlckVsLmZpbmQoInRleHRhcmVhIikubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWQucGx1Z2luKXtkLnBsdWdpbj1iKHRoaXMpLnd5c2l3eWcoYyk7ZC5vdXRlckVsLmZpbmQoIi53eXNpd3lnIikubW91c2VvdXQoZnVuY3Rpb24oKXtpZihkLnBsdWdpbil7ZC5wbHVnaW4ud3lzaXd5ZygiZGVzdHJveSIpfWQucGx1Z2luPW51bGx9KX19KX1lbHNle3RoaXMucGx1Z2luPXRoaXMuZmllbGQud3lzaXd5ZyhjKX10aGlzLm91dGVyRWwuZmluZCgiLnd5c2l3eWciKS5tb3VzZW91dChmdW5jdGlvbigpe2QuZGF0YT1kLmdldFZhbHVlKCk7ZC5yZW5kZXJWYWxpZGF0aW9uU3RhdGUoKX0pfWlmKHRoaXMuZmllbGRDb250YWluZXIpe3RoaXMuZmllbGRDb250YWluZXIuYWRkQ2xhc3MoImFscGFjYS1jb250cm9sZmllbGQtd3lzaXd5ZyIpfX0sZ2V0U2NoZW1hT2ZPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGEubWVyZ2UodGhpcy5iYXNlKCkse3Byb3BlcnRpZXM6e3d5c2l3eWc6e3RpdGxlOiJFZGl0b3Igb3B0aW9ucyIsZGVzY3JpcHRpb246Ik9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vYWt6aGFuL2p3eXNpd3lnJz5qUXVlcnkgV1lTSVdZRyBwbHVnaW48L2E+LiIsdHlwZToiYW55In0sb25EZW1hbmQ6e3RpdGxlOiJPbiBEZW1hbmQiLGRlc2NyaXB0aW9uOiJJZiB0cnVlLCBXWVNJV1lHIGVkaXRvciB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWVsZCBpcyBob3ZlcmVkLiIsdHlwZToiYm9vbGVhbiIsImRlZmF1bHQiOmZhbHNlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOnt3eXNpd3lnOnt0eXBlOiJhbnkifSxvbkRlbWFuZDp7dHlwZToiY2hlY2tib3giLHJpZ2h0TGFiZWw6Ik1ha2UgdGhlIGVkaXRvciBvbi1kZW1hbmQ/In19fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIld5c2l3eWcgRWRpdG9yIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iV3lzaXd5ZyBlZGl0b3IgZm9yIG11bHRpLWxpbmUgdGV4dCB3aGljaCBpcyBiYXNlZCBvbiBBa3poYW4gQWJkdWxpbidzIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9ha3poYW4vand5c2l3eWcnPmpRdWVyeSBXWVNJV1lHIHBsdWdpbjwvYT4uIn0sZ2V0RmllbGRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInd5c2l3eWcifX0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ3eXNpd3lnIixhLkZpZWxkcy5XeXNpd3lnRmllbGQpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuU3RhdGVGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVN0YXRlcykpe3RoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzPXRydWV9aWYoYS5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMuaW5jbHVkZVRlcnJpdG9yaWVzKSl7dGhpcy5vcHRpb25zLmluY2x1ZGVUZXJyaXRvcmllcz10cnVlfWlmKGEuaXNVbmRlZmluZWQodGhpcy5vcHRpb25zLmZvcm1hdCkpe3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifWlmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuYW1lInx8dGhpcy5vcHRpb25zLmZvcm1hdD09ImNvZGUiKXt9ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCBzdGF0ZSBmb3JtYXQ6ICIrdGhpcy5vcHRpb25zLmZvcm1hdCsiIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIFtuYW1lLCBjb2RlXSIpO3RoaXMub3B0aW9ucy5mb3JtYXQ9Im5hbWUifXZhciBjPWEucmV0cmlldmVVU0hvbGRpbmdzKHRoaXMub3B0aW9ucy5pbmNsdWRlU3RhdGVzLHRoaXMub3B0aW9ucy5pbmNsdWRlVGVycml0b3JpZXMsKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJjb2RlIiksdGhpcy5vcHRpb25zLmNhcGl0YWxpemUpO3RoaXMuc2NoZW1hWyJlbnVtIl09Yy5rZXlzO3RoaXMub3B0aW9ucy5vcHRpb25MYWJlbHM9Yy52YWx1ZXM7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXN0YXRlIil9fSxoYW5kbGVWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuYmFzZSgpO3JldHVybiBjfSxnZXRTY2hlbWFPZk9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7cHJvcGVydGllczp7Zm9ybWF0Ont0aXRsZToiRm9ybWF0IixkZXNjcmlwdGlvbjoiSG93IHRvIHJlcHJlc2VudCB0aGUgc3RhdGUgdmFsdWVzIGluIHRoZSBzZWxlY3RvciIsdHlwZToic3RyaW5nIiwiZGVmYXVsdCI6Im5hbWUiLCJlbnVtIjpbIm5hbWUiLCJjb2RlIl0scmVhZG9ubHk6dHJ1ZX0sY2FwaXRhbGl6ZTp7dGl0bGU6IkNhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6ZmFsc2UscmVhZG9ubHk6dHJ1ZX0saW5jbHVkZVN0YXRlczp7dGl0bGU6IkluY2x1ZGUgU3RhdGVzIixkZXNjcmlwdGlvbjoiV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdGF0ZXMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0Ijp0cnVlLHJlYWRvbmx5OnRydWV9LGluY2x1ZGVUZXJyaXRvcmllczp7dGl0bGU6IkluY2x1ZGUgVGVycml0b3JpZXMiLGRlc2NyaXB0aW9uOiJXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHRlcnJpdG9yaWVzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIix0eXBlOiJib29sZWFuIiwiZGVmYXVsdCI6dHJ1ZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifSxjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9LGluY2x1ZGVTdGF0ZXM6e3R5cGU6ImNoZWNrYm94In0saW5jbHVkZVRlcnJpdG9yaWVzOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJTdGF0ZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZHJvcGRvd24gc2VsZWN0b3Igb2Ygc3RhdGVzIGFuZC9vciB0ZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywga2V5ZWQgYnkgdGhlaXIgdHdvLWNoYXJhY3RlciBjb2RlLiJ9LGdldEZpZWxkVHlwZTpmdW5jdGlvbigpe3JldHVybiJzdGF0ZSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoInN0YXRlIixhLkZpZWxkcy5TdGF0ZUZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygic3RhdGUiLCJzdGF0ZSIpO2EucmV0cmlldmVVU0hvbGRpbmdzPWZ1bmN0aW9uKCl7dmFyIGM9W107Yy5wdXNoKHtuYW1lOiJBcmthbnNhcyIsY29kZToiQUsiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJBbGFiYW1hIixjb2RlOiJBTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkFtZXJpY2FuIFNhbW9hIixjb2RlOiJBUyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkFyaXpvbmEiLGNvZGU6IkFSIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiQ2FsaWZvcm5pYSIsY29kZToiQ0EiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb2xvcmFkbyIsY29kZToiQ08iLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJDb25uZWN0aWN1dCIsY29kZToiQ1QiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEZWxhd2FyZSIsY29kZToiREUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJEaXN0aWN0IG9mIENvbHVtYmlhIixjb2RlOiJEQyIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IkZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYSIsY29kZToiRk0iLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJGbG9yaWRhIixjb2RlOiJGTCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikdlb3JnaWEiLGNvZGU6IkdBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiR3VhbSIsY29kZToiR1UiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJHZW9yZ2lhIixjb2RlOiJHQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ikhhd2FpaSIsY29kZToiSEkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJZGFobyIsY29kZToiSUQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbGxpbm9pcyIsY29kZToiSUwiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJJbmRpYW5hIixjb2RlOiJJTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Iklvd2EiLGNvZGU6IklBIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiS2Fuc2FzIixjb2RlOiJLUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IktlbnR1Y2t5Iixjb2RlOiJLWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IkxvdWlzaWFuYSIsY29kZToiTEEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYWluZSIsY29kZToiTUUiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJNYXJzaGFsbCBJc2xhbmRzIixjb2RlOiJNSCIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6Ik1hcnlsYW5kIixjb2RlOiJNRCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1hc3NhY2h1c2V0dHMiLGNvZGU6Ik1BIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWljaGlnYW4iLGNvZGU6Ik1JIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTWlubmVzb3RhIixjb2RlOiJNTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3Npc3NpcHBpIixjb2RlOiJNUyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1pc3NvdXJpIixjb2RlOiJNTyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik1vbnRhbmEiLGNvZGU6Ik1UIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmVicmFza2EiLGNvZGU6Ik5FIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV2YWRhIixjb2RlOiJOViIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBIYW1wc2hpcmUiLGNvZGU6Ik5IIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiTmV3IEplcnNleSIsY29kZToiTkoiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOZXcgTWV4aWNvIixjb2RlOiJOTSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5ldyBZb3JrIixjb2RlOiJOWSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIENhcm9saW5hIixjb2RlOiJOQyIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ik5vcnRoIERha290YSIsY29kZToiTkQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGNvZGU6Ik1QIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiT2hpbyIsY29kZToiT0giLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPa2xhaG9tYSIsY29kZToiT0siLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJPcmVnb24iLGNvZGU6Ik9SIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiUGFsYXUiLGNvZGU6IlBXIixzdGF0ZTpmYWxzZSx0ZXJyaXRvcnk6dHJ1ZX0pO2MucHVzaCh7bmFtZToiUGVubnN5bHZhbmlhIixjb2RlOiJQQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlB1ZXJ0byBSaWNvIixjb2RlOiJQUiIsc3RhdGU6ZmFsc2UsdGVycml0b3J5OnRydWV9KTtjLnB1c2goe25hbWU6IlJob2RlIElzbGFuZCIsY29kZToiUkkiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBDYXJvbGluYSIsY29kZToiU0MiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJTb3V0aCBEYWtvdGEiLGNvZGU6IlNEIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVGVubmVzc2VlIixjb2RlOiJUTiIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlRleGFzIixjb2RlOiJUWCIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6IlV0YWgiLGNvZGU6IlVUIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiVmVybW9udCIsY29kZToiVlQiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW4gSXNsYW5kcyIsY29kZToiVkkiLHN0YXRlOmZhbHNlLHRlcnJpdG9yeTp0cnVlfSk7Yy5wdXNoKHtuYW1lOiJWaXJnaW5pYSIsY29kZToiVkEiLHN0YXRlOnRydWUsdGVycml0b3J5OmZhbHNlfSk7Yy5wdXNoKHtuYW1lOiJXYXNoaW5ndG9uIixjb2RlOiJXQSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ildlc3QgVmlyZ2luaWEiLGNvZGU6IldWIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO2MucHVzaCh7bmFtZToiV2lzY29uc2luIixjb2RlOiJXSSIsc3RhdGU6dHJ1ZSx0ZXJyaXRvcnk6ZmFsc2V9KTtjLnB1c2goe25hbWU6Ild5b21pbmciLGNvZGU6IldZIixzdGF0ZTp0cnVlLHRlcnJpdG9yeTpmYWxzZX0pO3JldHVybiBmdW5jdGlvbihsLGUsaCxnKXt2YXIgbT17a2V5czpbXSx2YWx1ZXM6W119O2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZD1mYWxzZTtpZihjW2ZdLnN0YXRlJiZsKXtkPXRydWV9ZWxzZXtpZihjW2ZdLnRlcnJpdG9yeSYmZSl7ZD10cnVlfX1pZihkKXt2YXIgaz1jW2ZdLmNvZGU7dmFyIGo9Y1tmXS5uYW1lO2lmKGgpe2o9Y1tmXS5jb2RlfWlmKGcpe2o9ai50b1VwcGVyQ2FzZSgpfW0ua2V5cy5wdXNoKGspO20udmFsdWVzLnB1c2goail9fXJldHVybiBtfX0oKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGIpe3ZhciBhPWIuYWxwYWNhO2EuRmllbGRzLkNvdW50cnlGaWVsZD1hLkZpZWxkcy5TZWxlY3RGaWVsZC5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsaSxnLGgsZCxjLGYpe3RoaXMuYmFzZShlLGksZyxoLGQsYyxmKX0sc2V0dXA6ZnVuY3Rpb24oKXtpZihhLmlzVW5kZWZpbmVkKHRoaXMub3B0aW9ucy5jYXBpdGFsaXplKSl7dGhpcy5vcHRpb25zLmNhcGl0YWxpemU9ZmFsc2V9dGhpcy5zY2hlbWFbImVudW0iXT1bXTt0aGlzLm9wdGlvbnMub3B0aW9uTGFiZWxzPVtdO3ZhciBlPXRoaXMudmlldy5nZXRNZXNzYWdlKCJjb3VudHJpZXMiKTtpZihlKXtmb3IodmFyIGQgaW4gZSl7dGhpcy5zY2hlbWFbImVudW0iXS5wdXNoKGQpO3ZhciBjPWVbZF07aWYodGhpcy5vcHRpb25zLmNhcGl0YWxpemUpe2M9Yy50b1VwcGVyQ2FzZSgpfXRoaXMub3B0aW9ucy5vcHRpb25MYWJlbHMucHVzaChjKX19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLWNvdW50cnkiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5iYXNlKCk7cmV0dXJuIGN9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntjYXBpdGFsaXplOnt0aXRsZToiQ2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246IldoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQiLHR5cGU6ImJvb2xlYW4iLCJkZWZhdWx0IjpmYWxzZSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntjYXBpdGFsaXplOnt0eXBlOiJjaGVja2JveCJ9fX0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiJDb3VudHJ5IEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSBkcm9wZG93biBzZWxlY3RvciBvZiBjb3VudHJpZXMga2V5ZWQgYnkgdGhlaXIgSVNPMyBjb2RlLiAgVGhlIG5hbWVzIG9mIHRoZSBjb3VudHJpZXMgYXJlIHJlYWQgZnJvbSB0aGUgSTE4TiBidW5kbGUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iY291bnRyeSJ9fSk7YS5yZWdpc3RlckZpZWxkQ2xhc3MoImNvdW50cnkiLGEuRmllbGRzLkNvdW50cnlGaWVsZCk7YS5yZWdpc3RlckRlZmF1bHRGb3JtYXRGaWVsZE1hcHBpbmcoImNvdW50cnkiLCJjb3VudHJ5Iil9KShqUXVlcnkpOyhmdW5jdGlvbihiKXt2YXIgYT1iLmFscGFjYTthLkZpZWxkcy5aaXBjb2RlRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5mb3JtYXQ9KHRoaXMub3B0aW9ucy5mb3JtYXQ/dGhpcy5vcHRpb25zLmZvcm1hdDoibmluZSIpO2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJuaW5lIil7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXt0aGlzLnNjaGVtYS5wYXR0ZXJuPWEucmVnZXhwc1siemlwY29kZS1maXZlIl19ZWxzZXthLmxvZ0Vycm9yKCJUaGUgY29uZmlndXJlZCB6aXBjb2RlIGZvcm1hdDogIit0aGlzLm9wdGlvbnMuZm9ybWF0KyIgaXMgbm90IGEgbGVnYWwgdmFsdWUgW2ZpdmUsIG5pbmVdIik7dGhpcy5vcHRpb25zLmZvcm1hdD0ibmluZSI7dGhpcy5zY2hlbWEucGF0dGVybj1hLnJlZ2V4cHNbInppcGNvZGUtbmluZSJdfX1pZih0aGlzLm9wdGlvbnMuZm9ybWF0PT0ibmluZSIpe3RoaXMub3B0aW9ucy5tYXNrU3RyaW5nPSI5OTk5OS05OTk5In1lbHNle2lmKHRoaXMub3B0aW9ucy5mb3JtYXQ9PSJmaXZlIil7dGhpcy5vcHRpb25zLm1hc2tTdHJpbmc9Ijk5OTk5In19dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXppcGNvZGUiKX19LGhhbmRsZVZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5iYXNlKCk7dmFyIGM9dGhpcy52YWxpZGF0aW9uO2lmKCFjLmludmFsaWRQYXR0ZXJuWyJzdGF0dXMiXSl7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09Im5pbmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0TmluZSIpfWVsc2V7aWYodGhpcy5vcHRpb25zLmZvcm1hdD09ImZpdmUiKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRaaXBjb2RlRm9ybWF0Rml2ZSIpfX19cmV0dXJuIGR9LGdldFNjaGVtYU9mT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiBhLm1lcmdlKHRoaXMuYmFzZSgpLHtwcm9wZXJ0aWVzOntmb3JtYXQ6e3RpdGxlOiJGb3JtYXQiLGRlc2NyaXB0aW9uOiJIb3cgdG8gcmVwcmVzZW50IHRoZSB6aXBjb2RlIGZpZWxkIix0eXBlOiJzdHJpbmciLCJkZWZhdWx0IjoiZml2ZSIsImVudW0iOlsiZml2ZSIsIm5pbmUiXSxyZWFkb25seTp0cnVlfX19KX0sZ2V0T3B0aW9uc0Zvck9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5tZXJnZSh0aGlzLmJhc2UoKSx7ZmllbGRzOntmb3JtYXQ6e3R5cGU6InRleHQifX19KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iWmlwY29kZSBGaWVsZCJ9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIlByb3ZpZGVzIGEgZml2ZSBvciBuaW5lLWRpZ2l0YWwgVVMgemlwY29kZSBjb250cm9sIHdpdGggdmFsaWRhdGlvbi4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iemlwY29kZSJ9fSk7YS5yZWdpc3Rlck1lc3NhZ2VzKHtpbnZhbGlkWmlwY29kZUZvcm1hdEZpdmU6IkludmFsaWQgRml2ZS1EaWdpdCBaaXBjb2RlICgjIyMjIykiLGludmFsaWRaaXBjb2RlRm9ybWF0TmluZToiSW52YWxpZCBOaW5lLURpZ2l0IFppcGNvZGUgKCMjIyMjLSMjIyMpIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ6aXBjb2RlIixhLkZpZWxkcy5aaXBjb2RlRmllbGQpO2EucmVnaXN0ZXJEZWZhdWx0Rm9ybWF0RmllbGRNYXBwaW5nKCJ6aXBjb2RlIiwiemlwY29kZSIpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oYil7dmFyIGE9Yi5hbHBhY2E7YS5GaWVsZHMuVVJMRmllbGQ9YS5GaWVsZHMuVGV4dEZpZWxkLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSxpLGcsaCxkLGMsZil7dGhpcy5iYXNlKGUsaSxnLGgsZCxjLGYpfSxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc2NoZW1hLnBhdHRlcm49YS5yZWdleHBzLnVybDt0aGlzLnNjaGVtYS5mb3JtYXQ9InVyaSI7dGhpcy5iYXNlKCl9LHBvc3RSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmJhc2UoKTtpZih0aGlzLmZpZWxkQ29udGFpbmVyKXt0aGlzLmZpZWxkQ29udGFpbmVyLmFkZENsYXNzKCJhbHBhY2EtY29udHJvbGZpZWxkLXVybCIpfX0saGFuZGxlVmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmJhc2UoKTt2YXIgYz10aGlzLnZhbGlkYXRpb247aWYoIWMuaW52YWxpZFBhdHRlcm5bInN0YXR1cyJdKXtjLmludmFsaWRQYXR0ZXJuWyJtZXNzYWdlIl09dGhpcy52aWV3LmdldE1lc3NhZ2UoImludmFsaWRVUkxGb3JtYXQiKX1yZXR1cm4gZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIEZpZWxkIn0sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4iUHJvdmlkZXMgYSB0ZXh0IGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uIGZvciBhbiBpbnRlcm5ldCB3ZWIgYWRkcmVzcy4ifSxnZXRGaWVsZFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn19KTthLnJlZ2lzdGVyTWVzc2FnZXMoe2ludmFsaWRVUkxGb3JtYXQ6IlRoZSBVUkwgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgd2ViIGFkZHJlc3MuIn0pO2EucmVnaXN0ZXJGaWVsZENsYXNzKCJ1cmwiLGEuRmllbGRzLlVSTEZpZWxkKTthLnJlZ2lzdGVyRGVmYXVsdEZvcm1hdEZpZWxkTWFwcGluZygidXJsIiwidXJsIil9KShqUXVlcnkpOw==</File>
  32 + <File Location="var/httpd/htdocs/js/NewTicketWizard.js" Permission="644" Encode="Base64">LyoqCiAqIFZhcmlhYmxlcwogKi8KCnZhciBmb3JtQWxwYWNhOwoKCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBvcHRpb25zIChsYXlvdXQpCiAqIEBwYXJhbSBmaWVsZHMKICogQHBhcmFtIHNlbmRUZXh0CiAqIEByZXR1cm5zIHtfX19hbm9ueW1vdXM1OF80MjF9CiAqLwpmdW5jdGlvbiBidWlsZE9wdGlvbnMoZmllbGRzLCBzZW5kVGV4dCwgYWN0aW9uKSB7CglyZXR1cm4geyAgICAJCiAgICAJInJlbmRlckZvcm0iOiB0cnVlLAogICAgICAgICJmaWVsZHMiOiBmaWVsZHMsICAgICAgICAKICAgICAgICAiZm9ybSI6IHsKICAgICAgICAJImF0dHJpYnV0ZXMiIDogewogICAgICAgIAkJImFjdGlvbiIgOiBhY3Rpb24sCiAgICAgICAgCQkibWV0aG9kIiA6ICJwb3N0IiwKICAgICAgICAJCSJlbmN0eXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiCiAgICAgICAgCX0sCiAgICAgICAgCSJidXR0b25zIjogewogICAgICAgIAkJInN1Ym1pdCI6IHsKICAgICAgICAJCQkidmFsdWUiIDogc2VuZFRleHQKICAgICAgICAJCX0KICAgICAgICAJfSwKICAgICAgICAgICAgICAgICJ0b2dnbGVTdWJtaXRWYWxpZFN0YXRlIjogZmFsc2UKICAgICAgICAJIAogICAgICAgIH0KICAgIH07Cn0KCi8qKgogKiBCdWlsZCB0aGUgZm9ybSBzY2hlbWEKICogCiAqIEBwYXJhbSBzY2hlbWEKICogQHJldHVybnMge19fX2Fub255bW91czUxMF81NzF9CiAqLwpmdW5jdGlvbiBidWlsZFNjaGVtYShzY2hlbWEpIHsKCXJldHVybiB7CiAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAicHJvcGVydGllcyI6IHNjaGVtYQogICAgfTsKfQoKdmFyIHBvc3RSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKGZvcm0pIHsKCWZvcm1PcHRpb25zID0gZm9ybS5vcHRpb25zLmZpZWxkczsKCWZvcm1BbHBhY2EgPSBmb3JtOwoJCglPYmplY3Qua2V5cyhmb3JtT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CQoJCXZhciB2YWx1ZSA9IGZvcm1PcHRpb25zW2tleV07CgoJCS8vIEV4dGVuc2lvbiB0byBzZXQgY29udHJvbCB3aWR0aAoJCWlmICh2YWx1ZVsiY29udHJvbF93aWR0aCJdKSB7CgkJCSQoIltuYW1lPSciICsga2V5ICsgIiddIikud2lkdGgodmFsdWVbImNvbnRyb2xfd2lkdGgiXSk7CgkJfQoJfSk7CgkKCWlmIChmb3JtKSB7CgkJZm9ybS5mb3JtLnJlZ2lzdGVyU3VibWl0SGFuZGxlcihmdW5jdGlvbihlLCBmb3JtKSB7CiAgICAgICAgCS8vIHZhbGlkYXRlIHRoZSBlbnRpcmUgZm9ybSAodG9wIGNvbnRyb2wgKyBhbGwgY2hpbGRyZW4pCiAgICAgICAgICAgIGZvcm0udmFsaWRhdGUodHJ1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IHRoZSB2YWxpZGF0aW9uIHN0YXRlICh0b3AgY29udHJvbCArIGFsbCBjaGlsZHJlbikKICAgICAgICAgICAgZm9ybS5yZW5kZXJWYWxpZGF0aW9uU3RhdGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIG5vdyBkaXNwbGF5IHNvbWV0aGluZwogICAgICAgICAgICBpZiAoZm9ybS5pc0Zvcm1WYWxpZCgpKSB7CiAgICAgICAgICAgIAlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAJfSk7Cgl9Cn07CiAgICAKZnVuY3Rpb24gY2FycmVnYUZvcm0oZGF0YUZvcm0sIHNlbmRUZXh0LCBhY3Rpb24pIHsKCXZhciB1cmwgPSAiL290cnMvY3VzdG9tZXIucGw/QWN0aW9uPU5ld1RpY2tldFdpemFyZDtTdWJhY3Rpb249R2V0Rm9ybUpTT04iOwoJCglpZiAoISh0eXBlb2YgZm9ybUFscGFjYSA9PT0gJ3VuZGVmaW5lZCcpKSB7CgkJZm9ybUFscGFjYS5kZXN0cm95KCk7Cgl9IGVsc2UgewoJCS8vJCgiI2Zvcm1UaWNrZXQiKS5maW5kKCJzZWxlY3QiKS52YWwoIiIpOwoJfQoJCgl1cmwgKz0gIjtTZXJ2aWNlSUQ9IiArICQoIiNTZXJ2aWNlSUQiKS52YWwoKTsKCQoJJC5nZXRKU09OKHVybCwgZnVuY3Rpb24oZGF0YSkgewkJCgkJLy8vL2Zvcm1PcHRpb25zID0gZGF0YVsxXTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuaHRtbChkYXRhWzJdKTsKCQkkKCIjc2VydmljZURlc2NyaXB0aW9uIikuc2hvdygpOwoJCQoJCSQoIiNmb3JtVGlja2V0IikuYWxwYWNhKHsKICAgICAgIAkJImRhdGEiOiBkYXRhRm9ybSwKICAgICAgICAJInNjaGVtYSI6IGJ1aWxkU2NoZW1hKGRhdGFbMF0pLAogICAgICAgIAkib3B0aW9ucyI6IGJ1aWxkT3B0aW9ucyhkYXRhWzFdLCBzZW5kVGV4dCwgYWN0aW9uKSwJCQkKICAgICAgICAJInBvc3RSZW5kZXIiOiBwb3N0UmVuZGVyQ2FsbGJhY2ssCgkJCSJ2aWV3IjogIlZJRVdfSlFVRVJZVUlfQ1JFQVRFIiwKCQkJInVpIjogImpxdWVyeS11aSIKICAgIAl9KTsgCiAgICAJCiAgICAJJCgiW25hbWU9J3NlcnZpY2UnXSIpLnZhbCgkKCIjU2VydmljZUlEIikudmFsKCkpOwogCQogICAgfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKICAgIGFsZXJ0KHRleHRTdGF0dXMpOwogIH0pOwp9Cg==</File>
  33 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAACWCAYAAADJ0zgXAAAJN0lEQVR4nO3ba0xUZwLG8Sbb/dpuNzbSYEya7Sabdrtt3G2TVhs3di2psdbFVTBFakVtFhVBLLWt2kq9oKPiKrQpKjCAF8pNhssAFUS5OiAochkGyp2BgYEB5iIzZ8757weVlt2soIduaj1P8mRy5rzJLzPnnHeSN+885uPjQ29v7/+9jymwAj/acFJOAdHqczQYWie9n5B7kcizmTML123zQVr8HCx8ljPa7wiNOE6P98vwt9/hXvwc/PVZkrQXCVJ9BYueRVr8HHXbpv4wU8Kjr8xF0MRDegxJBZdYFrKbxoRoxMw4XJlxkHGSpO+KWRryOVw4hTsrntFX5sqH+zw9sAT50vvEbDJ/9SRZv/4Npt960P3UbLqemo3xKQ8yH38SzeNP0vfE7bF9nh7y4YOnEhCBtqFROkdsdI856Bxz0D5ip23ETseona5RO50jNtqGxxCBg6cS5MOqyCgkoMtoxGgyYR4ZoVxXzeCwhUHLCOaREQaGhzGaBug29iEBqsgo+XCE6iiiJGHs62fQPMzq1at54fnnGXcKrPH3x9/fn9W+vpSVV9DXb0KUJCJUR+XD+yNUSJLEwOAgwxYLbe3trF37AQDz578OgCCKjI6NYR4aAmB/xGH5cPj+CACGhy2MjIzicgn4r1kDwLp161i50oe1a9diHhrCbrPjsDsI33dAPvx5+D4ARsfGGLNaEdxu/Pz8+HF8fX2puVZDr7GP9Asaks6elw/v+jwcAIfDjsNux+124+vrS3OzgcDAQEJCQli8+C1iTsVx8nQ8RcWXydHmy4c/2bkbAJfLhdPpRBCEiU9qMBioq6ujsKgYi8WC2TzEzcZG0i9o5MNhn+yagERRRJIkJEma9FXHnI7D2NfHtZpa+vpNnEtOkQ9//MlO7pWS0nKKLl3mxs162traAUg8c04+fPjoMUI//pTg0DC2/qh3jyP/FUVC0lniE5KIVScSp04kIemsfLisrAytVntfzc+fgZvrp6oCK/AvEFaiRImShy+P3lytwAr8aMHH8m6wQV1JQFw566bZgLhyNqgr2a+pfXB4g7oSERgHbk2z44AIbFBXPjgcEF+OTYKIS1102yU0nW40HW6yOidX0+FG0+mm2y4RcakLmwQB8eUy4LhyRt2Q0ykQrjVgEaDQKFJoFCm607vHFgHCtQZyOgVG3RAQJxM2C3C5XySj2cqBghZcQIVJpPxOK0wiLuBAQQsZzVYu94uYhRmAB1wSZSaRigGR2Kp+9ubqAai1iNRaRAD25uqJreqnYkCkzCQy4JLkw/0uCd2gSJVZRAJOlHQSUdA8sSIQUdDMiZJOJKDKLKIbFOmfEdgpcd0iYhchPKcJvU0iIr+ZVV8Vs+qrYiLym9HbJMJzmrCLcN0i0u+cAdgkSFgE2JvbxNelHeitEs1WCYPtdputEnqrxNelHezNbcIigEmYAXhIArWum7IeO+0OiVabRIt1clttEu0OibIeO2pdN0OSzJtro7oSOzAEDEowKMKACKb/6IB4+9ygdHusWYKNciaQ4LOVbLwzZd7tvabKu92oriT4rAw4Pz//vld8prvy8/P8dVJgBVbghwNWokSJkocvj95crcAK/OjBx85XsXJ3wX312PkqefCRxAqWh2WRVz98X10elsWRxIoHh70Ck8msGSTgdBMBp5vwOVjOOzu0LNmmwSswGa/AZJZs0/DODi0+B8snxmXWDOIVmPzg8BtrYnlXVT3RJduzyasfxvtT7cQY70+15NUPs2R79qSxb6yJfXD4syPZzFsexfwdV1i0PQ+vrRlsOdPK8rCsSd1yphWvrRks2p7H/B1XmLc8is+OZMu7ucL2pfPyshN8sP8iWbVmPoxvJqvWPKl33/Pbk89LS48Tti99Zh6niFNX+PhkFe9/08Du9O+p67IiSiBKUNdlZXf697z/TQNhMTqOxJfOzOPU1d3DovVnCFXXE5qkxylM3ucD4BQkQpP0hCXU84/Qqff5TAsuLL3Jyo8yWH38OtEFHf9zz090QQerj1/n3eBvKa/Wy4cPfnORDQcu8taXlfifqMU27v4v1Dbuxv9ELW99WcmHERdRxRTKh5dtjCMgspKFO0tZuLOUgOhaKg3D2G65sd1yU2kYJiC69ofzRyvwDlTLh//0diSvrf+Wl/3PTauvBSTzmvcMbI984c1DvLQ+Y9r984Z0/vJOpHz4Dwv388cPc6fdef/MYd7bKvlw6J5v+f2CL6fdlxYfZLdq6i3PP9/fYwVW4IcPVqJEiZKHL4/eXK3ACvyzgDfHl+AZnMqszSnM2pTCrM0peAansjm+5KeB00obmLUphVWn61FdsRNTKxBzXSCmVkB1xc6q0/XM2pRCWmnDzMFppQ3MCbnATq0Zzc0eTL3FYM5G9cVGJHM2/T3FZNZ185nWzJyQC9PGp4Sf3pxCWLaJCkMzWAtxW4q4ZS7CMViEbaAQu6kAtzmfkqYmPsoy8fTmGViK2KIuYWlULcnXusB+hXe9/Ug7/zWusQps5hLGBi4zZrqMbeASkqWQ81VdLI2qZYt66mt+T3hOSCpB6UYGTVVgu0p1ZSreq9Zy7Wo6bts1HJarWM0V2MwVOC1lDPTrCEo3MickVR48OyiV7RozuK4hWGsQHTeo0WXy9xVrqLmaidtxA8dINbbhKpyj1eCsZrvGzOygGYA3pZuIjd6D21GH01YHbj311/NYtnw1lWUZOG113Bq7gdtRR2z0Hjalm+TDHkGprD/XDegRHY247I0gtOD19gpqqnPBZcBlb8RpbUB0NAJ61p/rxkMuPCc4jRUn9ZhHWkAwIIwbcDtbQGwHdxvCeAtORzOuW80gGDCPtLDipJ45wWny4PciNby6rxRVvgHoAKEN0dmG6GpHdLbjHm/D7WwDoQ3oQJVv4NV9pbwXKfPvgzqdDo+gVN48WkNqdSvQC/TceTVOOk6tbuXNozV4BKWi0+nkTyCHE7PxDM5gwSEdX2TrGbIZgSE0KaeAIYZsRr7I1rPgkA7P4AwOJ957uXjasF6v53BiNs9sTePFXYW8fkDHgkM1E339gI4XdxXyzNY0Didmo9dPvY45LfgurtVq8YvUMDckDc/gHzo3JA2/SA1arXba6LThH1/zvLy8STvV8vLypnVNZcEzWQVW4F8e/G+TYB4OXjygtgAAAABJRU5ErkJggg==</File>
  34 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png" Permission="644" Encode="Base64">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</File>
  35 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAKQ2lDQ1BJQ0MgcHJvZmlsZQAAeNqdU3dYk/cWPt/3ZQ9WQtjwsZdsgQAiI6wIyBBZohCSAGGEEBJAxYWIClYUFRGcSFXEgtUKSJ2I4qAouGdBiohai1VcOO4f3Ke1fXrv7e371/u855zn/M55zw+AERImkeaiagA5UoU8Otgfj09IxMm9gAIVSOAEIBDmy8JnBcUAAPADeXh+dLA//AGvbwACAHDVLiQSx+H/g7pQJlcAIJEA4CIS5wsBkFIAyC5UyBQAyBgAsFOzZAoAlAAAbHl8QiIAqg0A7PRJPgUA2KmT3BcA2KIcqQgAjQEAmShHJAJAuwBgVYFSLALAwgCgrEAiLgTArgGAWbYyRwKAvQUAdo5YkA9AYACAmUIszAAgOAIAQx4TzQMgTAOgMNK/4KlfcIW4SAEAwMuVzZdL0jMUuJXQGnfy8ODiIeLCbLFCYRcpEGYJ5CKcl5sjE0jnA0zODAAAGvnRwf44P5Dn5uTh5mbnbO/0xaL+a/BvIj4h8d/+vIwCBAAQTs/v2l/l5dYDcMcBsHW/a6lbANpWAGjf+V0z2wmgWgrQevmLeTj8QB6eoVDIPB0cCgsL7SViob0w44s+/zPhb+CLfvb8QB7+23rwAHGaQJmtwKOD/XFhbnauUo7nywRCMW735yP+x4V//Y4p0eI0sVwsFYrxWIm4UCJNx3m5UpFEIcmV4hLpfzLxH5b9CZN3DQCshk/ATrYHtctswH7uAQKLDljSdgBAfvMtjBoLkQAQZzQyefcAAJO/+Y9AKwEAzZek4wAAvOgYXKiUF0zGCAAARKCBKrBBBwzBFKzADpzBHbzAFwJhBkRADCTAPBBCBuSAHAqhGJZBGVTAOtgEtbADGqARmuEQtMExOA3n4BJcgetwFwZgGJ7CGLyGCQRByAgTYSE6iBFijtgizggXmY4EImFINJKApCDpiBRRIsXIcqQCqUJqkV1II/ItchQ5jVxA+pDbyCAyivyKvEcxlIGyUQPUAnVAuagfGorGoHPRdDQPXYCWomvRGrQePYC2oqfRS+h1dAB9io5jgNExDmaM2WFcjIdFYIlYGibHFmPlWDVWjzVjHVg3dhUbwJ5h7wgkAouAE+wIXoQQwmyCkJBHWExYQ6gl7CO0EroIVwmDhDHCJyKTqE+0JXoS+cR4YjqxkFhGrCbuIR4hniVeJw4TX5NIJA7JkuROCiElkDJJC0lrSNtILaRTpD7SEGmcTCbrkG3J3uQIsoCsIJeRt5APkE+S+8nD5LcUOsWI4kwJoiRSpJQSSjVlP+UEpZ8yQpmgqlHNqZ7UCKqIOp9aSW2gdlAvU4epEzR1miXNmxZDy6Qto9XQmmlnafdoL+l0ugndgx5Fl9CX0mvoB+nn6YP0dwwNhg2Dx0hiKBlrGXsZpxi3GS+ZTKYF05eZyFQw1zIbmWeYD5hvVVgq9ip8FZHKEpU6lVaVfpXnqlRVc1U/1XmqC1SrVQ+rXlZ9pkZVs1DjqQnUFqvVqR1Vu6k2rs5Sd1KPUM9RX6O+X/2C+mMNsoaFRqCGSKNUY7fGGY0hFsYyZfFYQtZyVgPrLGuYTWJbsvnsTHYF+xt2L3tMU0NzqmasZpFmneZxzQEOxrHg8DnZnErOIc4NznstAy0/LbHWaq1mrX6tN9p62r7aYu1y7Rbt69rvdXCdQJ0snfU6bTr3dQm6NrpRuoW623XP6j7TY+t56Qn1yvUO6d3RR/Vt9KP1F+rv1u/RHzcwNAg2kBlsMThj8MyQY+hrmGm40fCE4agRy2i6kcRoo9FJoye4Ju6HZ+M1eBc+ZqxvHGKsNN5l3Gs8YWJpMtukxKTF5L4pzZRrmma60bTTdMzMyCzcrNisyeyOOdWca55hvtm82/yNhaVFnMVKizaLx5balnzLBZZNlvesmFY+VnlW9VbXrEnWXOss623WV2xQG1ebDJs6m8u2qK2brcR2m23fFOIUjynSKfVTbtox7PzsCuya7AbtOfZh9iX2bfbPHcwcEh3WO3Q7fHJ0dcx2bHC866ThNMOpxKnD6VdnG2ehc53zNRemS5DLEpd2lxdTbaeKp26fesuV5RruutK10/Wjm7ub3K3ZbdTdzD3Ffav7TS6bG8ldwz3vQfTw91jicczjnaebp8LzkOcvXnZeWV77vR5Ps5wmntYwbcjbxFvgvct7YDo+PWX6zukDPsY+Ap96n4e+pr4i3z2+I37Wfpl+B/ye+zv6y/2P+L/hefIW8U4FYAHBAeUBvYEagbMDawMfBJkEpQc1BY0FuwYvDD4VQgwJDVkfcpNvwBfyG/ljM9xnLJrRFcoInRVaG/owzCZMHtYRjobPCN8Qfm+m+UzpzLYIiOBHbIi4H2kZmRf5fRQpKjKqLupRtFN0cXT3LNas5Fn7Z72O8Y+pjLk722q2cnZnrGpsUmxj7Ju4gLiquIF4h/hF8ZcSdBMkCe2J5MTYxD2J43MC52yaM5zkmlSWdGOu5dyiuRfm6c7Lnnc8WTVZkHw4hZgSl7I/5YMgQlAvGE/lp25NHRPyhJuFT0W+oo2iUbG3uEo8kuadVpX2ON07fUP6aIZPRnXGMwlPUit5kRmSuSPzTVZE1t6sz9lx2S05lJyUnKNSDWmWtCvXMLcot09mKyuTDeR55m3KG5OHyvfkI/lz89sVbIVM0aO0Uq5QDhZML6greFsYW3i4SL1IWtQz32b+6vkjC4IWfL2QsFC4sLPYuHhZ8eAiv0W7FiOLUxd3LjFdUrpkeGnw0n3LaMuylv1Q4lhSVfJqedzyjlKD0qWlQyuCVzSVqZTJy26u9Fq5YxVhlWRV72qX1VtWfyoXlV+scKyorviwRrjm4ldOX9V89Xlt2treSrfK7etI66Trbqz3Wb+vSr1qQdXQhvANrRvxjeUbX21K3nShemr1js20zcrNAzVhNe1bzLas2/KhNqP2ep1/XctW/a2rt77ZJtrWv913e/MOgx0VO97vlOy8tSt4V2u9RX31btLugt2PGmIbur/mft24R3dPxZ6Pe6V7B/ZF7+tqdG9s3K+/v7IJbVI2jR5IOnDlm4Bv2pvtmne1cFoqDsJB5cEn36Z8e+NQ6KHOw9zDzd+Zf7f1COtIeSvSOr91rC2jbaA9ob3v6IyjnR1eHUe+t/9+7zHjY3XHNY9XnqCdKD3x+eSCk+OnZKeenU4/PdSZ3Hn3TPyZa11RXb1nQ8+ePxd07ky3X/fJ897nj13wvHD0Ivdi2yW3S609rj1HfnD94UivW2/rZffL7Vc8rnT0Tes70e/Tf/pqwNVz1/jXLl2feb3vxuwbt24m3Ry4Jbr1+Hb27Rd3Cu5M3F16j3iv/L7a/eoH+g/qf7T+sWXAbeD4YMBgz8NZD+8OCYee/pT/04fh0kfMR9UjRiONj50fHxsNGr3yZM6T4aeypxPPyn5W/3nrc6vn3/3i+0vPWPzY8Av5i8+/rnmp83Lvq6mvOscjxx+8znk98ab8rc7bfe+477rfx70fmSj8QP5Q89H6Y8en0E/3Pud8/vwv94Tz+4A5JREAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcDB8SCzJQIyNpAAAAInRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QIG9uIGEgTWFjh6h3QwAAAHJJREFUKM+VkdEJwCAMRJ+lOzpaZ3AH6Qrdo7bgAIL9SUElVnsQApeQyyVYaxd+wEjOs/3vdAeEQbNriQtIolZGkhoA5f4HEJXJUWqVBwZejKYA4IFb4T7R+qig/WCTHLTL9PY9e35WhcvAPvGXoaoBeACNCR26Tob0nwAAAABJRU5ErkJggg==</File>
  36 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png" Permission="644" Encode="Base64">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</File>
  37 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAGFJREFUKJGVkNENwCAIBc/u0NkYrEu4gxu1jtDE/mBC2iryEoIfd0GAQERkW2Uz0FbAAlTg9ISiQAVufX+EBBwKVAO1PyGbsbOib30Bu/ZQ+jWGE0aZLp0c0R7AFd5fjecB5g4xXCTsxbwAAAAASUVORK5CYII=</File>
  38 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png" Permission="644" Encode="Base64">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</File>
  39 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png" Permission="644" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBDAs2DFJh0kMAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAADFUlEQVRIx+3WX2iVZRzA8e/zPn/Ou8lrbnNa503tHFY6ipHmnEsv2oqgOkLUYpRCCHkzBxKGIigoFRsj5o13CefKdrMThKOtRIjoQpmjkaaMyJ3OSraTzu3s39n2/unCoO7S3lNdtB88dz+eD8+/3+8Rra2tYXd3N/92WPxHsQKvwP9YqAdJ7vgyR2Y4T9ELIQQE2Erw+tPrOPbixtLDl0YLvPPJCC9sq+Xd155hjaNBACFMzSwz+MMoT304yNm3NrMzsbo08KXRAu29N2lLNdGwYY6Gyq9ZF5vmozOfc7j9ZfLFh9hcUcvj8Sbae7/hTEvyvvC/POMDPSPse76RVM04ex4bpqrco8gqDh58g/mgHEcXeSU+xEuJW+xtbuRAz0j0y9V5IUfjlhq2x+fZ6eZ49e0ePvviR6QpJxCGAI2PTTGw2fVwlu2PzNO4pYbOC7locGY4TzK+nuZHf4awjBNHUpz79ApXb0xg2+UobSOkActmmTKaN4yRjK8nM5yPBi/5YJRhbUWIF2q21tVw/L09fNB1nu++v4WJ2UhlwNJg2VRX3Mtf8kvwjhc8n/THAwip8QLB1m1P8P6JVk529HLl25+Qytwb2pA+O8CC50c/YwEsLi6zv60FgUIIBaHk8LE0J4+/SUN9LUIoLKEQKPa3tbC4uIyI+py0Jbg7O8udaUPVKp/ABz8QDPR1QBjieQGhUAgFloI705K7s7NoS0RbcdMmyVj+NunLCpRBSY1AEviCwLcQSKTUaKVBGdKXFWP52zRtktHgQ7uryU6M039tgcyQBSqGZQyWNlgmhozFkMaAipEZsui/tkB2YpxDu6ujwa7rcnSH5nouy+mLBU71LTE5J4Eyzvf2A2VMzklO9S1x+mKB67ksR3doXNeNXjJT9UngJl2DOaZm1jBwdTWWVMCzdHZNEPgeM/MFfi1McaRe/Z5fglrtOA6p+iRPrh3l3I0ZvspN4YV/mkDAcxsle3dpEokEjuOUrjs5jkNdXR1VVb+wb3KSMPxDFkJQWVl5X9v7t/ux67oPDKx8fVbg/w/8G2YI/wPle15OAAAAAElFTkSuQmCC</File>
  40 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  41 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLw==</File>
  42 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwovKioKICogRml4IGZvciBqUXVlcnkgZGF0ZXBpY2tlciBpbml0aWFsIHN0YXRlIGlzc3VlLgogKi8KI3VpLWRhdGVwaWNrZXItZGl2CnsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgei1pbmRleDogOTk5OTk5OSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDIyZW0gIWltcG9ydGFudDsKfQoKLyogRml4IGZvciBDaHJvbWUgaXNzdWUgd2l0aCBCdXR0b24gdGV4dCAqLwoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudWktZGF0ZXBpY2tlcgp7CiAgICB6LWluZGV4OiAxMDA7Cn0KCg==</File>
  43 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLyN1aS1kYXRlcGlja2VyLWRpdntkaXNwbGF5Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTt6LWluZGV4Ojk5OTk5OTkhaW1wb3J0YW50O3dpZHRoOjIyZW0haW1wb3J0YW50fS51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0e3doaXRlLXNwYWNlOm5vd3JhcH0udWktZGF0ZXBpY2tlcnt6LWluZGV4OjEwMH0=</File>
  44 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLwouYWxwYWNhLWhvdmVyIHsKfQoKLmFscGFjYS1jbGVhciB7CiAgICBjbGVhcjogYm90aDsKfQoKLyoqIEFic3RyYWN0IEZpZWxkICoqLwouYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7Cn0KCi5hbHBhY2EtZmllbGQtcmVxdWlyZWQgewp9CgouYWxwYWNhLWZpZWxkLW9wdGlvbmFsIHsKfQoKLmFscGFjYS1maWVsZC12YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtaW52YWxpZCB7Cn0KCi5hbHBhY2EtZmllbGQtcmVhZG9ubHkgewp9CgovKioKICogIENvbnRyb2wgRmllbGQKICovCi5hbHBhY2EtY29udHJvbGZpZWxkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZzogMnB4OwogICAgbWFyZ2luOiAycHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZCAqIHsKICAgIC8qYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcGFkZGluZy10b3A6IDRweDsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsCnsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKCWZsb2F0OiBsZWZ0OwoJd2lkdGg6IDEwMHB4OwoJcGFkZGluZy10b3A6IDBweDsKCXBhZGRpbmctYm90dG9tOiAwcHg7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXIgewogICAgZm9udC1zaXplOiAwLjc1ZW07CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UgewogICAgZm9udC1zaXplOiAwLjg1ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5hbHBhY2EtZmllbGQtbWVzc2FnZS1jb250YWluZXIgewp9CgouYWxwYWNhLWZpZWxkLXJlcXVpcmVkIHNwYW4udWktaWNvbi1zdGFyIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaGVscGVyID4gc3Bhbi51aS1pY29uLCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlID4gc3Bhbi51aS1pY29uIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAuM2VtOwp9CgovKioKICogRm9ybSBDb250cm9scwogKi8KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QgewogICAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIC4yKTsKICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgLjIpOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIGJvcmRlcjogMHB4Owp9CgppbnB1dFt0eXBlPSJmaWxlIl0gewogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKc2VsZWN0IHsKICAgIG1pbi13aWR0aDogMTUwcHg7Cn0KCmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgIzA1OGNmNTsKfQoKLmFscGFjYS1maWVsZC1yZWFkb25seSBpbnB1dCwgLmFscGFjYS1maWVsZC1yZWFkb25seSB0ZXh0YXJlYSwgaW5wdXRbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLyogQkVHSU4gc3R5bGVzIGZvciBUZXh0IEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0IHsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUKewogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDFweCAjNzc3IHNvbGlkOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICBjb2xvcjogI2NjYzsKfQoKRElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnUgUAp7CiAgICBmb250LXNpemU6IDFlbTsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yCnsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICBjb2xvcjogIzMzMzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVGV4dCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBEYXRlIEZpZWxkLCBQaG9uZSBGaWVsZCwgUGFzc3dvcmQgRmllbGQgYW5kIEVtYWlsIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNXB4OyovCn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgaW5wdXQgewovKiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4vaW1hZ2VzL2FscGFjYS1pY29ucy5wbmciKSBuby1yZXBlYXQgcmlnaHQgLTg1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtZW1haWwgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtNDVweDsqLwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC10aW1lIHsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtdGltZSBpbnB1dCB7Ci8qICAgIGJhY2tncm91bmQ6IHVybCgiLi9pbWFnZXMvYWxwYWNhLWljb25zLnBuZyIpIG5vLXJlcGVhdCByaWdodCAtMTI1cHg7Ki8KfQoKLmFscGFjYS1jb250cm9sZmllbGQtcGFzc3dvcmQgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbCA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtZGF0ZSA+IHNwYW4udWktaWNvbiwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBzcGFuLnVpLWljb24gewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwgLmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZSAuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlLXRleHQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWVtYWlsID4gaW5wdXQsIC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGUgPiBpbnB1dCwgLmFscGFjYS1jb250cm9sZmllbGQtcGhvbmUgPiBpbnB1dCB7CiAgICBsaW5lLWhlaWdodDogMTZweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRGF0ZSBGaWVsZCwgUGhvbmUgRmllbGQsIFBhc3N3b3JkIEZpZWxkIGFuZCBFbWFpbCBGaWVsZCAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBBZGRyZXNzIE1hcCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXMgewogICAgaGVpZ2h0OiAzMDBweDsKICAgIHdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogMTBweDsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQWRkcmVzcyBNYXAgRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ2hlY2tib3ggRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94IHsKICAgIHBhZGRpbmctdG9wOiAwLjRlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiAxZW07Cn0KCi8qIElFIDwgOCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveCB7CiAgICAqcGFkZGluZy10b3A6IDA7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIENoZWNrYm94IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CiAgICBwYWRkaW5nLXRvcDogMC41ZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0IHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVsIHsKICAgIG1hcmdpbi1yaWdodDogMC4zZW07Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFJhZGlvIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFNlbGVjdCBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtc2VsZWN0IHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgU2VsZWN0IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIE51bWJlciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtbnVtYmVyIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgTnVtYmVyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEludGVnZXIgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWludGVnZXIgewp9CgovKiBFTkQgc3R5bGVzIGZvciBJbnRlZ2VyIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgouYWxwYWNhLWNvbnRyb2xmaWVsZC10ZXh0YXJlYSB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIFRleHRhcmVhIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdZU0lXWUcgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLXd5c2l3eWcgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXWVNJV1lHIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEJ1dHRvbiBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtYnV0dG9uIHsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQnV0dG9uIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZpbGUgRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUgewp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1pbnB1dCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDA7CiAgICBvcGFjaXR5OiAwOwogICAgLW1vei1vcGFjaXR5OiAwOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eSA9IDApOwogICAgei1pbmRleDogOTk5Owp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbSB7CiAgICB3aWR0aDogMzUwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMnB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAuNTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDVweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIHBhZGRpbmc6IC4zZW0gLjZlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVkIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciBGaWxlIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEVkaXRvciBGaWVsZCAqLwoKLmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9yCnsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMDBweDsKICAgIGJvcmRlcjogMXB4ICNjY2Mgc29saWQ7Cn0KCi5hbHBhY2EtY29udHJvbGZpZWxkLWVkaXRvciAuY29udHJvbC1maWVsZC1lZGl0b3ItZWwKewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0b3A6MDsKICAgIGJvdHRvbTowOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OjAKfQoKLyogRU5EIHN0eWxlcyBmb3IgRWRpdG9yIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEpTT04gRmllbGQgKi8KCi5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWEgewogICAgZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyI7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwp9CgovKiBFTkQgc3R5bGVzIGZvciBKU09OIEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEhpZGRlbiBGaWVsZCAqLwouYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKfQovKiBFTkQgc3R5bGVzIGZvciBIaWRkZW4gRmllbGQgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi5hbHBhY2EtZmllbGRzZXQgewogICAgcGFkZGluZzogNHB4OwogICAgbWFyZ2luOiA0cHg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZmllbGRzZXQuYWxwYWNhLWZpZWxkc2V0IHsKICAgIC8qbWFyZ2luOiAwLjVlbSAxZW0gMWVtIDBweDsqLwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKfQoKbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgewogICAgZm9udC1zaXplOiAxLjFlbTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3R0b206IC0xcHg7Cn0KCi5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKICAgIGZvbnQtc2l6ZTogMS4wZW07CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5hbHBhY2EtZmllbGRzZXQtaGVscGVyIHsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgLyoqcGFkZGluZy1ib3R0b206IDVweDsqKi8KICAgIGNsZWFyOiBib3RoOwp9CgouYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5rIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiAwLjNlbTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgQ29udGFpbmVyIEZpZWxkIChGaWVsZHNldCkgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgQXJyYXkgRmllbGQgKi8KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbjogMHB4IDJweCAwcHggMnB4OwogICAgZm9udC1zaXplOiAwLjc1ZW07Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktdG9vbGJhciB7CiAgICBwYWRkaW5nOiAxMHB4IDRweDsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZGlzYWJsZWQgewogICAgb3BhY2l0eTogLjU7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWFkZCB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXJlbW92ZSB7Cn0KCi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLXVwIHsKfQoKLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItZG93biB7Cn0KCi8qIEVORCBzdHlsZXMgZm9yIEFycmF5IEZpZWxkICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIEZvcm0gKi8KCi5hbHBhY2EtZm9ybSB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgbWFyZ2luLWxlZnQ6IDE1cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciB7CiAgICBjbGVhcjogYm90aDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiA1cHggMCA1cHggMDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbiB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tcHJpbnQgewp9CgouYWxwYWNhLWZvcm0tYnV0dG9uLXJlbG9hZCB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tc2F2ZSB7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmbG9hdDogbGVmdDsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgcGFkZGluZzogOHB4IDNweCAzcHg7CiAgICB6SW5kZXg6IDk5OTk5OTsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIHsKICAgIGxpc3RTdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIHsKICAgIHBhZGRpbmc6IDJweDsKICAgIG1hcmdpbjogMXB4OwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbGVmdDsKfQoKLmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXIgaW5wdXQgewogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogI0ZGRkZDQzsKfQoKLyogRU5EIHN0eWxlcyBmb3IgRm9ybSAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgpkaXYuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm9yZGVyOiBub25lOwogICAgbWFyZ2luOiAxLjVlbSAxZW0gMWVtIDBweDsKfQoKZGl2LmFscGFjYS1maWVsZHNldC1sZWdlbmQgewp9CgouYWxwYWNhLWRhdGEtY29udGFpbmVyIHsKICAgIG1hcmdpbjogNXB4IDVweCA1cHggNXB4OwogICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5hbHBhY2EtZGF0YSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouYWxwYWNhLWRhdGEtbGFiZWwgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgY2xlYXI6IGJvdGg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBESVNQTEFZICovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFdpemFyZCAqLwoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1hcmdpbjogMTBweCAwcHggMTBweCAwcHg7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBjb3VudGVyLXJlc2V0OiBzdGVwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgewogICAgZmxvYXQ6IGxlZnQ7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogMS4yZW07Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogMnB4IDI1cHggMnB4IDMwcHg7Cn0KCi5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgZGl2OmJlZm9yZSB7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogLThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwOwogICAgY29udGVudDogY291bnRlcihzdGVwKTsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50IHsKfQoKLmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaS5jdXJyZW50LWhhcy1uZXh0IHsKfQoKLmFscGFjYS13aXphcmQtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJlbTsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogMTBweCAwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmFscGFjYS13aXphcmQtZGVzYyB7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiA1cHggMHB4Owp9CgouYWxwYWNhLXdpemFyZC1zdGVwLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMWVtOwogICAgbWFyZ2luOiAwcHg7CiAgICBwYWRkaW5nOiAxMHB4IDBweDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5hbHBhY2Etd2l6YXJkLW5hdi1iYXIgewogICAgY2xlYXI6IGJvdGg7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbiB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbjpob3ZlciB7Cn0KCi5hbHBhY2Etd2l6YXJkLWJ1dHRvbi1iYWNrIHsKfQoKLmFscGFjYS13aXphcmQtYnV0dG9uLW5leHQgewp9CgovKiBFTkQgc3R5bGVzIGZvciBXaXphcmQgKi8KCi8qKiBCRUdJTiB2aWV3LXdlYi1saXN0ICoqLwoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgcGFkZGluZy1yaWdodDogM2VtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItbGlzdC5maWVsZHNldC1jb2xsYXBzZWQKewogICAgYm9yZGVyOiBzb2xpZCAxcHg7Cn0KCi5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDAuNWVtOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwgewogICAgd2lkdGg6IDEzMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZCB7CiAgICAvKiB0byBtYWtlIGNocm9tZSBub3Qgd3JhcHBpbmcgdGV4dCAqLwogICAgZm9udC1zaXplOiAxLjAxZW0KfQoKLmFscGFjYS1jb250cm9sZmllbGQuYWxwYWNhLXZpZXctd2ViLWxpc3QKewogICAgZGlzcGxheTppbmxpbmUtYmxvY2s7Cn0KClNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbAp7CiAgICBmb250LXNpemU6IDEuMGVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyCnsKICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrOwp9CgouYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjVlbTsKfQoKLmFscGFjYS1maWVsZHNldC1tZXNzYWdlLWxpc3QtdmlldyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogLjNlbTsKfQoKLmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXcgewogICAgd2lkdGg6IDEwMHB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHBhZGRpbmctdG9wOiAwLjI1ZW07Cn0KCm9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9wIHsKICAgIHBhZGRpbmctbGVmdCA6MDsKfQoKbGkuYWxwYWNhLWZpZWxkc2V0LWl0ZW1jb250YWluZXItbGlzdC12aWV3LXRvcCB7CiAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCi5hbHBhY2EtaXRlbS1jb250YWluZXItZmlyc3QKewoKfQoKLmFscGFjYS1pdGVtLWNvbnRhaW5lci1sYXN0CnsKCn0KCi5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5CnsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgovKiogRU5EIHZpZXctd2ViLWxpc3QgKiovCgovKiBCRUdJTiBzdHlsZXMgZm9yIFZJRVc6IFRXTyBDT0xVTU4gKi8KCi5hbHBhY2EtbGF5b3V0LXR3by1jb2x1bW4tbWFzayB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiA2MDBweDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1sZWZ0IHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IDVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCgpmaWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5kIHsKICAgIGJvcmRlcjogbm9uZTsKfQoKLyogRU5EIHN0eWxlcyBmb3IgVklFVzogVFdPIENPTFVNTiAqLwoKLyogQkVHSU4gc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0IHsKICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICBwYWRkaW5nLXRvcDogNHB4OwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLypoaWRlIHRoZSBhcnJvdyBpY29uIGJlZm9yZSB0aGUgZmllbGRzZXQgbmFtZSovCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBtYWtlIHRoZSBmb250cyB0aGUgcmlnaHQgc2l6ZSAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWZvbnQtc2l6ZTogMWVtOwp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sLmZpZWxkc2V0LWNvbGxhcHNlZCB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBtYXJnaW46IDFweCAxcHggMXB4IDFweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXIgewogICAgY29udGVudDogdXJsKCIuL2ltYWdlcy9kb3duLnBuZyIpOwogICAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtY29sbGFwc2VkOmFmdGVyIHsKICAgIGNvbnRlbnQ6IHVybCgiLi9pbWFnZXMvbGVmdC5wbmciKTsKICAgIHBhZGRpbmctbGVmdDogNXB4Owp9CgovKnNvcnQgb3V0IHRoZSB0ZXh0IGJveGVzIHNvIHRoYXQgdGhleSBkaXNhcHBlYXIgd2hlbiBub3QgZm9jdXNlZCAqLwpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCB7CiAgICBmb250LWZhbWlseTogY291cmllcjsKICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgIHBhZGRpbmctdG9wOiAwcHg7Cn0KCmZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggewoJbWFyZ2luLXRvcDogNHB4OwoJbWFyZ2luLWJvdHRvbTogNHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLXNlbGVjdCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyB7CglwYWRkaW5nLXRvcDogM3B4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCA+IGlucHV0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gc2VsZWN0LApmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sID4gbGFiZWwKewogICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7Cn0KCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbCB7CiAgICB3aWR0aDogMTc1cHg7CiAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4Owp9CgpzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyID4gaW5wdXQsCnNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1jb250YWluZXIgPiBzZWxlY3QKewogICAgcGFkZGluZzogMXB4IDFweCAxcHggMXB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxkIHsKCXBhZGRpbmctdG9wOiAwcHg7CglwYWRkaW5nLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMHB4OwoJbWFyZ2luLWJvdHRvbTogMHB4Owp9CgpmaWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIG9sLmFscGFjYS1maWVsZHNldC1pdGVtcy1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgcGFkZGluZy10b3A6IDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Cn0KCgovKiBtYWtlIHRoZSBhcnJheSBpdGVtIHRvb2xiYXIgZmxvYXQsIHdpdGhvdXQgZGlzcGxhY2luZyBhbnkgb3RoZXIgZWxlbWVudHMgKi8KZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIHJpZ2h0OiAxNXB4Owp9CgoKZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQgewoJcGFkZGluZzogMnB4Owp9CgovKiBFTkQgc3R5bGVzIGZvciB0aGUgdmlldyBWSUVXX1dFQl9FRElUX1lBTUwgKi8KCi8qIEJFR0lOIHN0eWxlcyBmb3IgdGhlIHZpZXcgVklFV19XRUJfRURJVF9JTkxJTkUgKi8KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgouYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWlubGluZSAuYWxwYWNhLWZpZWxkc2V0LCAuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAgLmFscGFjYS1maWVsZHNldC5hbHBhY2EtaW5saW5lIHsKCW1hcmdpbjogMCAxLjVlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIHsKCXdpZHRoOiA2MHB4OwoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luLXRvcDogMC43ZW07Cn0KCi5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyIHsKCW1hcmdpbjogMGVtIDFlbTsKCXBhZGRpbmc6IDA7Cn0KCi5hbHBhY2EtaW5saW5lIHNlbGVjdCB7CgltaW4td2lkdGg6IDBweDsKfQoKI21vZHVsZS1zZXR0aW5ncyBpbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMgewoJYm9yZGVyLXdpZHRoOiAxcHg7Cn0KCgpmaWVsZHNldCBESVYgewoJcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgoKLyogVG8gUmVtb3ZlIHVwL2Rvd24gYnV0dG9ucyBvbiBpdGVtcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXIgLmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXItdXAsCi5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFyLWRvd24gewp7CglkaXNwbGF5OiBub25lOwp9CiovCgovKiBUbyBoaWRlIGxhYmVscyBvZiBpbmxpbmVkIGZpZWxkcwoKLmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1jb250cm9sZmllbGQtbGFiZWwsIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kIHsKCWRpc3BsYXk6IG5vbmU7Cn0KCiovCgovKiBFTkQgc3R5bGVzIGZvciBWSUVXOiBWSUVXX1dFQl9FRElUX0lOTElORSAqLwo=</File>
  45 + <File Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css" Permission="644" Encode="Base64">LyohCkFscGFjYSBWZXJzaW9uIDEuMS4xCgpDb3B5cmlnaHQgMjAxMyBHaXRhbmEgU29mdHdhcmUsIEluYy4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKCWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBHaXRhbmEgU29mdHdhcmUsIEluYy4gYXQgdGhpcwphZGRyZXNzOgoKICBpbmZvQGdpdGFuYXNvZnR3YXJlLmNvbQoqLy5hbHBhY2EtY2xlYXJ7Y2xlYXI6Ym90aH0uYWxwYWNhLWNvbnRyb2xmaWVsZHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4O21hcmdpbjoycHh9LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZy10b3A6NHB4O3BhZGRpbmctYm90dG9tOjRweH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWxlZnQ6MXB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlcntmb250LXNpemU6Ljc1ZW07bWFyZ2luLXRvcDoycHh9LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZXtmb250LXNpemU6Ljg1ZW19LmFscGFjYS1jb250cm9sZmllbGQtbWVzc2FnZS1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGQtcmVxdWlyZWQgc3Bhbi51aS1pY29uLXN0YXJ7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6LjNlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXI+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2U+c3Bhbi51aS1pY29ue2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjJweDtmb250LXNpemU6MWVtO2JvcmRlci1yYWRpdXM6MnB4Oy1raHRtbC1ib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLC4yKTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjIpfWlucHV0W3R5cGU9ImNoZWNrYm94Il0saW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MH1pbnB1dFt0eXBlPSJmaWxlIl17Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfXNlbGVjdHttaW4td2lkdGg6MTUwcHh9aW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JvcmRlcjoxcHggc29saWQgIzA1OGNmNX0uYWxwYWNhLWZpZWxkLXJlYWRvbmx5IGlucHV0LC5hbHBhY2EtZmllbGQtcmVhZG9ubHkgdGV4dGFyZWEsaW5wdXRbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGM7Y3Vyc29yOmRlZmF1bHR9RElWLmFscGFjYS1jb250cm9sZmllbGQtdGV4dCAudHdpdHRlci10eXBlYWhlYWQgLnR0LWRyb3Bkb3duLW1lbnV7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtib3JkZXI6MXB4ICM3Nzcgc29saWQ7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MTBweDtjb2xvcjojY2NjfURJVi5hbHBhY2EtY29udHJvbGZpZWxkLXRleHQgLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1kcm9wZG93bi1tZW51IFB7Zm9udC1zaXplOjFlbX0udHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzN9LmFscGFjYS1jb250cm9sZmllbGQtZW1haWw+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLWRhdGU+c3Bhbi51aS1pY29uLC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPnNwYW4udWktaWNvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWhlbHBlciAuYWxwYWNhLWNvbnRyb2xmaWVsZC1oZWxwZXItdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1tZXNzYWdlIC5hbHBhY2EtY29udHJvbGZpZWxkLW1lc3NhZ2UtdGV4dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1lbWFpbD5pbnB1dCwuYWxwYWNhLWNvbnRyb2xmaWVsZC1kYXRlPmlucHV0LC5hbHBhY2EtY29udHJvbGZpZWxkLXBob25lPmlucHV0e2xpbmUtaGVpZ2h0OjE2cHh9LmFscGFjYS1jb250cm9sZmllbGQtYWRkcmVzcy1tYXBjYW52YXN7aGVpZ2h0OjMwMHB4O3dpZHRoOjMwMHB4O21hcmdpbjoxMHB4fS5hbHBhY2EtY29udHJvbGZpZWxkLWNoZWNrYm94e3BhZGRpbmctdG9wOi40ZW19LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3ggaW5wdXR7bWFyZ2luLXJpZ2h0OjFlbX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1jaGVja2JveHsqcGFkZGluZy10b3A6MH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDouNWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvIGlucHV0e21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLXJhZGlvLWxhYmVse21hcmdpbi1yaWdodDouM2VtfS5hbHBhY2EtY29udHJvbGZpZWxkLWZpbGUtY3VzdG9tLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO29wYWNpdHk6MDstbW96LW9wYWNpdHk6MDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTt6LWluZGV4Ojk5OX0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbXt3aWR0aDozNTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoycHg7cG9zaXRpb246cmVsYXRpdmV9LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZGlzYWJsZWR7b3BhY2l0eTouNTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHkgPSAwKTtjdXJzb3I6ZGVmYXVsdH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1maWxlLWN1c3RvbS1mZWVkYmFja3tkaXNwbGF5OmJsb2NrO21hcmdpbjoxcHggMXB4IDFweCA1cHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzouM2VtIC42ZW19LmFscGFjYS1jb250cm9sZmllbGQtZmlsZS1jdXN0b20tZmVlZGJhY2stcG9wdWxhdGVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZy1sZWZ0OjIwcHh9LmFscGFjYS1jb250cm9sZmllbGQtZWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4O2JvcmRlcjoxcHggI2NjYyBzb2xpZH0uYWxwYWNhLWNvbnRyb2xmaWVsZC1lZGl0b3IgLmNvbnRyb2wtZmllbGQtZWRpdG9yLWVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5hbHBhY2EtY29udHJvbGZpZWxkIC5hbHBhY2EtY29udHJvbGZpZWxkLWpzb24gdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijtmb250LXNpemU6LjllbTtmb250LXN0eWxlOml0YWxpY30uYWxwYWNhLWNvbnRyb2xmaWVsZC1oaWRkZW57ZGlzcGxheTpub25lfS5hbHBhY2EtZmllbGRzZXR7cGFkZGluZzo0cHg7bWFyZ2luOjRweDtvdmVyZmxvdzphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfWZpZWxkc2V0LmFscGFjYS1maWVsZHNldHttYXJnaW4tdG9wOi41ZW07bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi41ZW19bGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmR7Zm9udC1zaXplOjEuMWVtO3RleHQtYWxpZ246bGVmdDtib3R0b206LTFweH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmxlZnR9LmFscGFjYS1maWVsZHNldC1oZWxwZXJ7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7Y2xlYXI6Ym90aH0uYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC1saW5re2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1maWVsZHNldC1hcnJheS1pdGVtLXRvb2xiYXJ7cGFkZGluZzoxcHg7bWFyZ2luOjAgMnB4IDAgMnB4O2ZvbnQtc2l6ZTouNzVlbX0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDRweH0uYWxwYWNhLWZpZWxkc2V0LWFycmF5LWl0ZW0tdG9vbGJhci1kaXNhYmxlZHtvcGFjaXR5Oi41fS5hbHBhY2EtZm9ybXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6MTVweH0uYWxwYWNhLWZvcm0tYnV0dG9ucy1jb250YWluZXJ7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMCA1cHggMH0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXJ7cG9zaXRpb246YWJzb2x1dGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDNweCAzcHg7ekluZGV4Ojk5OTk5OX0uYWxwYWNhLWZvcm0tYnV0dG9uLXZpZXctc3dpdGNoZXIgdWx7bGlzdFN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmF1dG99LmFscGFjYS1mb3JtLWJ1dHRvbi12aWV3LXN3aXRjaGVyIHVsIGxpe3BhZGRpbmc6MnB4O21hcmdpbjoxcHg7Y2xlYXI6bGVmdDtmbG9hdDpsZWZ0fS5hbHBhY2EtZm9ybS1idXR0b24tdmlldy1zd2l0Y2hlciB1bCBsaSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dHttYXJnaW4tcmlnaHQ6NHB4fS5hbHBhY2EtZm9ybS1idXR0b25zLWNvbnRhaW5lciBpbnB1dC5hbHBhY2EtZm9ybS1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZjfWRpdi5hbHBhY2EtZmllbGRzZXR7ZGlzcGxheTpibG9jaztib3JkZXI6MDttYXJnaW46MS41ZW0gMWVtIDFlbSAwfS5hbHBhY2EtZGF0YS1jb250YWluZXJ7bWFyZ2luOjVweCA1cHggNXB4IDVweDtwYWRkaW5nOjVweCA1cHggNXB4IDVweDtkaXNwbGF5OmJsb2NrfS5hbHBhY2EtZGF0YXt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjEwcHh9LmFscGFjYS1kYXRhLWxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjEwMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmJsb2NrfS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXJ7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjttYXJnaW46MTBweCAwIDEwcHggMDtwYWRkaW5nOjA7Y291bnRlci1yZXNldDpzdGVwO2Zsb2F0OmxlZnR9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaXtmbG9hdDpsZWZ0fS5hbHBhY2Etd2l6YXJkLXN0YXR1cy1iYXIgbGkgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjJlbX0uYWxwYWNhLXdpemFyZC1zdGF0dXMtYmFyIGxpIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MnB4IDI1cHggMnB4IDMwcHh9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXY6YmVmb3Jle2ZvbnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjVweDttYXJnaW4tdG9wOi04cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtwYWRkaW5nOjJweCA2cHg7Y291bnRlci1pbmNyZW1lbnQ6c3RlcDtjb250ZW50OmNvdW50ZXIoc3RlcCl9LmFscGFjYS13aXphcmQtc3RhdHVzLWJhciBsaSBkaXYgc3Ryb25ne2ZvbnQtd2VpZ2h0Om5vcm1hbH0uYWxwYWNhLXdpemFyZC10aXRsZXtmb250LXNpemU6MS4yZW07bWFyZ2luOjA7cGFkZGluZzoxMHB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1kZXNje2ZvbnQtc2l6ZTouOWVtO21hcmdpbjowO3BhZGRpbmc6NXB4IDB9LmFscGFjYS13aXphcmQtc3RlcC10aXRsZXtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MTBweCAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZH0uYWxwYWNhLXdpemFyZC1uYXYtYmFye2NsZWFyOmJvdGg7ZmxvYXQ6cmlnaHR9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3R7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjA7cGFkZGluZy1yaWdodDozZW19ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWxpc3QuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjpzb2xpZCAxcHh9LmFscGFjYS12aWV3LXdlYi1saXN0IC5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDouNWVtfS5hbHBhY2Etdmlldy13ZWItbGlzdCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxMzBweH1maWVsZHNldC5hbHBhY2Etdmlldy1saXN0IGxlZ2VuZHtmb250LXNpemU6MS4wMWVtfS5hbHBhY2EtY29udHJvbGZpZWxkLmFscGFjYS12aWV3LXdlYi1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfVNQQU4uYWxwYWNhLXZpZXctd2ViLWxpc3QgbGFiZWwuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHtmb250LXNpemU6MS4wZW07Zm9udC13ZWlnaHQ6Ym9sZCFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcH0uYWxwYWNhLXZpZXctd2ViLWxpc3QgRElWLmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hbHBhY2EtY29udHJvbGZpZWxkLWxhYmVsLWxpc3Qtdmlld3t3aWR0aDoxMDBweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6LjVlbX0uYWxwYWNhLWZpZWxkc2V0LW1lc3NhZ2UtbGlzdC12aWV3e2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0Oi4zZW19LmFscGFjYS1jb250cm9sZmllbGQtaXRlbS1sYWJlbC1saXN0LXZpZXd7d2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmctdG9wOi4yNWVtfW9sLmFscGFjYS1maWVsZHNldC1pdGVtc2NvbnRhaW5lci1saXN0LXZpZXctdG9we3BhZGRpbmctbGVmdDowfWxpLmFscGFjYS1maWVsZHNldC1pdGVtY29udGFpbmVyLWxpc3Qtdmlldy10b3B7bGlzdC1zdHlsZTpub25lfS5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVyLWVtcHR5e3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0uYWxwYWNhLWxheW91dC10d28tY29sdW1uLW1hc2t7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDo2MDBweDtkaXNwbGF5OmlubGluZS1ibG9ja30uYWxwYWNhLWxheW91dC10d28tY29sdW1uLWxlZnR7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmFscGFjYS1sYXlvdXQtdHdvLWNvbHVtbi1yaWdodHtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH1maWVsZHNldC5hbHBhY2EtZmllbGRzZXQtbm8tbGVnZW5ke2JvcmRlcjowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuYWxwYWNhLWZpZWxkc2V0e2JvcmRlcjpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luOjFweCAwIDAgMDtwYWRkaW5nLXRvcDo0cHg7cGFkZGluZy1ib3R0b206MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgbGVnZW5kLmFscGFjYS1maWVsZHNldC1sZWdlbmQgc3BhbntkaXNwbGF5Om5vbmV9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZHtmb250LXNpemU6MWVtfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwuZmllbGRzZXQtY29sbGFwc2Vke2JvcmRlcjowO21hcmdpbjoxcHggMXB4IDFweCAxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBsZWdlbmQuYWxwYWNhLWZpZWxkc2V0LWxlZ2VuZC5sZWdlbmQtZXhwYW5kZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2Rvd24ucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGxlZ2VuZC5hbHBhY2EtZmllbGRzZXQtbGVnZW5kLmxlZ2VuZC1jb2xsYXBzZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoIi4vaW1hZ2VzL2xlZnQucG5nIik7cGFkZGluZy1sZWZ0OjVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW46bm90KC5hbHBhY2EtZmllbGQtZm9jdXNlZCkgZGl2LmFscGFjYS1jb250cm9sZmllbGQtdGV4dCBpbnB1dHtiYWNrZ3JvdW5kOjA7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lO21hcmdpbi10b3A6MnB4O21hcmdpbi1sZWZ0OjJweDttYXJnaW4tYm90dG9tOjJweDttYXJnaW4tcmlnaHQ6MnB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWx7Zm9udC1mYW1pbHk6Y291cmllcjtwYWRkaW5nLXJpZ2h0OjFlbTtwYWRkaW5nLXRvcDowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY2hlY2tib3h7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1zZWxlY3R7bWFyZ2luLWJvdHRvbToxcHh9ZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpbyBkaXYuYWxwYWNhLWNvbnRyb2xmaWVsZC1yYWRpb3twYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206NHB4fWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWw+aW5wdXQsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5zZWxlY3QsZmllbGRzZXQuYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbD5sYWJlbHtmb250LWZhbWlseTpjb3VyaWVyfXNwYW4uYWxwYWNhLXZpZXctd2ViLWVkaXQteWFtbCAuYWxwYWNhLWNvbnRyb2xmaWVsZC1sYWJlbHt3aWR0aDoxNzVweDtwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1sZWZ0OjNweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9c3Bhbi5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtY29udHJvbGZpZWxkLWNvbnRhaW5lcj5pbnB1dCxzcGFuLmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgZGl2LmFscGFjYS1jb250cm9sZmllbGQtY29udGFpbmVyPnNlbGVjdHtwYWRkaW5nOjFweCAxcHggMXB4IDFweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIHNwYW4uYWxwYWNhLWZpZWxke3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWZpZWxkc2V0LmFscGFjYS12aWV3LXdlYi1lZGl0LXlhbWwgb2wuYWxwYWNhLWZpZWxkc2V0LWl0ZW1zLWNvbnRhaW5lcnttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIGRpdi5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5OTk7cmlnaHQ6MTVweH1maWVsZHNldC5hbHBhY2Etdmlldy13ZWItZWRpdC15YW1sIC51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MnB4fS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVye2Zsb2F0OmxlZnR9LmFscGFjYS1pbmxpbmUtaXRlbS1jb250YWluZXIgLmFscGFjYS1pbmxpbmUgLmFscGFjYS1maWVsZHNldCwuYWxwYWNhLWlubGluZS1pdGVtLWNvbnRhaW5lciAuYWxwYWNhLWZpZWxkc2V0LmFscGFjYS1pbmxpbmV7bWFyZ2luOjAgMS41ZW07cGFkZGluZzowfS5hbHBhY2EtaW5saW5lLWl0ZW0tY29udGFpbmVyIC5hbHBhY2EtZmllbGRzZXQtYXJyYXktaXRlbS10b29sYmFye3dpZHRoOjYwcHg7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDouN2VtfS5hbHBhY2EtaW5saW5lIC5hbHBhY2EtZmllbGRzZXQtaXRlbXMtY29udGFpbmVye21hcmdpbjowIDFlbTtwYWRkaW5nOjB9LmFscGFjYS1pbmxpbmUgc2VsZWN0e21pbi13aWR0aDowfSNtb2R1bGUtc2V0dGluZ3MgaW5wdXQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLXdpZHRoOjFweH0=</File>
  46 + </Filelist>
  47 + <DatabaseInstall>
  48 + <TableCreate Type="post" Name="service_form">
  49 + <Column Name="service_id" PrimaryKey="true" Required="true" Type="int"></Column>
  50 + <Column Name="introduction" Required="true" Type="text"></Column>
  51 + <Column Name="form" Required="true" Type="text"></Column>
  52 + <Column Name="form_schema" Required="true" Type="text"></Column>
  53 + <ForeignKey ForeignTable="service">
  54 + <Reference Foreign="id" Local="service_id">
  55 + </Reference>
  56 + </ForeignKey>
  57 + </TableCreate>
  58 + </DatabaseInstall>
  59 +</otrs_package>
0 60 \ No newline at end of file
... ...
NewTicketWizard.sopm 0 → 100755
  1 +++ a/NewTicketWizard.sopm
... ... @@ -0,0 +1,64 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.0">
  3 + <Name>NewTicketWizard</Name>
  4 + <Version>1.0.5</Version>
  5 + <Framework>3.x.x</Framework>
  6 + <Vendor>SeTIC</Vendor>
  7 + <URL>http://www.setic.ufsc.br</URL>
  8 + <License>Free</License>
  9 + <Description Lang="pt-br">Assistente de chamados
  10 +
  11 + Versão 1.0.0 - Inicial
  12 + Versão 1.0.1 - Ajusta listagem de servicos do Service forms, correcao no formulario de edicao de servico
  13 + Versão 1.0.2 - Ajuste na hierarquia de servicos
  14 + </Description>
  15 + <IntroInstall Type="post" Lang="pt-br" Title="Obrigado">Módulo instalado com sucesso!</IntroInstall>
  16 + <Description Lang="en">New Ticket Wizard</Description>
  17 + <IntroInstall Type="post" Lang="en" Title="Thank you">New Ticket Wizard module installed successfully!</IntroInstall>
  18 + <BuildDate>?</BuildDate>
  19 + <BuildHost>?</BuildHost>
  20 + <Filelist>
  21 + <File Permission="644" Location="Kernel/Config/Files/NewTicketWizard.xml"></File>
  22 + <File Permission="644" Location="Kernel/Language/pt_BR_NewTicketWizard.pm"></File>
  23 + <File Permission="644" Location="Kernel/Modules/NewTicketWizard.pm"></File>
  24 + <File Permission="644" Location="Kernel/Modules/NewTicketWizardServiceForm.pm"></File>
  25 +
  26 + <File Permission="644" Location="Kernel/Output/HTML/Standard/NewTicketWizard.dtl"></File>
  27 + <File Permission="644" Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceForm.dtl"></File>
  28 + <File Permission="644" Location="Kernel/Output/HTML/Standard/NewTicketWizardServiceFormEdit.dtl"></File>
  29 + <File Permission="644" Location="Kernel/Output/HTML/Standard/NewTicketWizardTicketCreated.dtl"></File>
  30 +
  31 + <File Permission="644" Location="Kernel/System/ServiceForm.pm"></File>
  32 + <File Permission="644" Location="Kernel/System/TicketWizard.pm"></File>
  33 +
  34 + <File Permission="644" Location="var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js"></File>
  35 + <File Permission="644" Location="var/httpd/htdocs/js/NewTicketWizard.js"></File>
  36 +
  37 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png"></File>
  38 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png"></File>
  39 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png"></File>
  40 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png"></File>
  41 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png"></File>
  42 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png"></File>
  43 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png"></File>
  44 +
  45 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css"></File>
  46 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css"></File>
  47 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css"></File>
  48 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css"></File>
  49 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css"></File>
  50 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css"></File>
  51 +
  52 + </Filelist>
  53 + <DatabaseInstall>
  54 + <TableCreate Name="service_form">
  55 + <Column Name="service_id" Required="true" PrimaryKey="true" Type="int"/>
  56 + <Column Name="introduction" Required="true" Type="text"/>
  57 + <Column Name="form" Required="true" Type="text"/>
  58 + <Column Name="form_schema" Required="true" Type="text"/>
  59 + <ForeignKey ForeignTable="service">
  60 + <Reference Local="service_id" Foreign="id"/>
  61 + </ForeignKey>
  62 + </TableCreate>
  63 + </DatabaseInstall>
  64 +</otrs_package>
0 65 \ No newline at end of file
... ...
db_schema.sql 0 → 100644
  1 +++ a/db_schema.sql
... ... @@ -0,0 +1 @@
  1 +CREATE TABLE service_form(service_id int primary key, introduction text, form text, form_schema text);
0 2 \ No newline at end of file
... ...
var/httpd/htdocs/js/NewTicketWizard.js 0 → 100644
  1 +++ a/var/httpd/htdocs/js/NewTicketWizard.js
... ... @@ -0,0 +1,111 @@
  1 +/**
  2 + * Variables
  3 + */
  4 +
  5 +var formAlpaca;
  6 +
  7 +
  8 +/**
  9 + * Build the form options (layout)
  10 + * @param fields
  11 + * @param sendText
  12 + * @returns {___anonymous58_421}
  13 + */
  14 +function buildOptions(fields, sendText, action) {
  15 + return {
  16 + "renderForm": true,
  17 + "fields": fields,
  18 + "form": {
  19 + "attributes" : {
  20 + "action" : action,
  21 + "method" : "post",
  22 + "enctype": "multipart/form-data"
  23 + },
  24 + "buttons": {
  25 + "submit": {
  26 + "value" : sendText
  27 + }
  28 + },
  29 + "toggleSubmitValidState": false
  30 +
  31 + }
  32 + };
  33 +}
  34 +
  35 +/**
  36 + * Build the form schema
  37 + *
  38 + * @param schema
  39 + * @returns {___anonymous510_571}
  40 + */
  41 +function buildSchema(schema) {
  42 + return {
  43 + "type": "object",
  44 + "properties": schema
  45 + };
  46 +}
  47 +
  48 +var postRenderCallback = function(form) {
  49 + formOptions = form.options.fields;
  50 + formAlpaca = form;
  51 +
  52 + Object.keys(formOptions).forEach(function (key) {
  53 + var value = formOptions[key];
  54 +
  55 + // Extension to set control width
  56 + if (value["control_width"]) {
  57 + $("[name='" + key + "']").width(value["control_width"]);
  58 + }
  59 + });
  60 +
  61 + if (form) {
  62 + form.form.registerSubmitHandler(function(e, form) {
  63 + // validate the entire form (top control + all children)
  64 + form.validate(true);
  65 +
  66 + // draw the validation state (top control + all children)
  67 + form.renderValidationState(true);
  68 +
  69 + // now display something
  70 + if (form.isFormValid()) {
  71 + return true;
  72 + } else {
  73 + return false;
  74 + }
  75 + e.stopPropagation();
  76 + return false;
  77 + });
  78 + }
  79 +};
  80 +
  81 +function carregaForm(dataForm, sendText, action) {
  82 + var url = "/otrs/customer.pl?Action=NewTicketWizard;Subaction=GetFormJSON";
  83 +
  84 + if (!(typeof formAlpaca === 'undefined')) {
  85 + formAlpaca.destroy();
  86 + } else {
  87 + //$("#formTicket").find("select").val("");
  88 + }
  89 +
  90 + url += ";ServiceID=" + $("#ServiceID").val();
  91 +
  92 + $.getJSON(url, function(data) {
  93 + ////formOptions = data[1];
  94 + $("#serviceDescription").html(data[2]);
  95 + $("#serviceDescription").show();
  96 +
  97 + $("#formTicket").alpaca({
  98 + "data": dataForm,
  99 + "schema": buildSchema(data[0]),
  100 + "options": buildOptions(data[1], sendText, action),
  101 + "postRender": postRenderCallback,
  102 + "view": "VIEW_JQUERYUI_CREATE",
  103 + "ui": "jquery-ui"
  104 + });
  105 +
  106 + $("[name='service']").val($("#ServiceID").val());
  107 +
  108 + }).fail(function(jqXHR, textStatus, errorThrown) {
  109 + alert(textStatus);
  110 + });
  111 +}
... ...
var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js 0 → 100644
  1 +++ a/var/httpd/htdocs/js/thirdparty/alpaca/alpaca-full.min.js
... ... @@ -0,0 +1,72 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/
  23 +(function(a,c,b){c[a]=b()})("Base",this,function(){var a=function(){};a.extend=function(c,f){var g=a.prototype.extend;a._prototyping=true;var e=new this();g.call(e,c);e.base=function(){};delete a._prototyping;var d=e.constructor;var b=e.constructor=function(){if(!a._prototyping){if(this._constructing||this.constructor===b){this._constructing=true;d.apply(this,arguments);delete this._constructing}else{if(arguments[0]!==null){return(arguments[0].extend||g).call(arguments[0],e)}}}};b.ancestor=this;b.extend=this.extend;b.forEach=this.forEach;b.implement=this.implement;b.prototype=e;b.toString=this.toString;b.valueOf=function(h){return(h==="object")?b:d.valueOf()};g.call(b,f);if(typeof b.init==="function"){b.init()}return b};a.prototype={extend:function(c,l){if(arguments.length>1){var g=this[c];if(g&&(typeof l==="function")&&(!g.valueOf||g.valueOf()!==l.valueOf())&&/\bbase\b/.test(l)){var b=l.valueOf();l=function(){var i=this.base||a.prototype.base;this.base=g;var h=b.apply(this,arguments);this.base=i;return h};l.valueOf=function(h){return(h==="object")?l:b};l.toString=a.toString}this[c]=l}else{if(c){var k=a.prototype.extend;if(!a._prototyping&&typeof this!=="function"){k=this.extend||k}var f={toSource:null};var j=["constructor","toString","valueOf"];for(var d=a._prototyping?0:1;d<j.length;d++){var e=j[d];if(c[e]!==f[e]){k.call(this,e,c[e])}}for(var m in c){if(!f[m]){k.call(this,m,c[m])}}}}return this}};a=a.extend({constructor:function(){this.extend(arguments[0])}},{ancestor:Object,version:"1.1",forEach:function(b,e,d){for(var c in b){if(this.prototype[c]===undefined){e.call(d,b[c],c,b)}}},implement:function(){for(var b=0;b<arguments.length;b++){if(typeof arguments[b]==="function"){arguments[b](this.prototype)}else{this.prototype.extend(arguments[b])}}return this},toString:function(){return String(this.valueOf())}});return a});if(typeof JSON!=="object"){JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]==="string"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
  24 +/*!
  25 + * JSONSchema Validator - Validates JavaScript objects using JSON Schemas
  26 + * (http://www.json.com/json-schema-proposal/)
  27 + *
  28 + * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com)
  29 + * Licensed under the MIT (MIT-LICENSE.txt) license.
  30 + To use the validator call the validate function with an instance object and an optional schema object.
  31 + If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
  32 + that schema will be used to validate and the schema parameter is not necessary (if both exist,
  33 + both validations will occur).
  34 + The validate method will return an array of validation errors. If there are no errors, then an
  35 + empty list will be returned. A validation error will have two properties:
  36 + "property" which indicates which property had the error
  37 + "message" which indicates what the error was
  38 + */
  39 +(function(a){Validator={validate:function(b,c){return Validator._validate(b,c,{changing:false})},checkPropertyChange:function(d,b,c){return Validator._validate(d,b,{changing:c||"property"})},_validate:function(c,g,d){if(!d){d={}}var b=d.changing;var h=[];function f(r,n,v,p){var m;v+=v?typeof p=="number"?"["+p+"]":typeof p=="undefined"?"":"."+p:p;function w(i){h.push({property:v,message:i})}if((typeof n!="object"||n instanceof Array)&&(v||typeof n!="function")&&!(n&&n.type)){if(typeof n=="function"){if(!(r instanceof n)){w("is not an instance of the class/constructor "+n.name)}}else{if(n){w("Invalid schema/property definition "+n)}}return null}if(b&&n.readonly){w("is a readonly field, it can not be changed")}if(n["extends"]){f(r,n["extends"],v,p)}function k(z,A){if(z){if(typeof z=="string"&&z!="any"&&(z=="null"?A!==null:typeof A!=z)&&!(A instanceof Array&&z=="array")&&!(A instanceof Date&&z=="date")&&!(z=="integer"&&A%1===0)){return[{property:v,message:(typeof A)+" value found, but a "+z+" is required"}]}if(z instanceof Array){var y=[];for(var x=0;x<z.length;x++){if(!(y=k(z[x],A)).length){break}}if(y.length){return y}}else{if(typeof z=="object"){var i=h;h=[];f(A,z,v);var l=h;h=i;return l}}}return[]}if(r===undefined){if(n.required){w("is missing and it is required")}}else{h=h.concat(k(n.type,r));if(n.disallow&&!k(n.disallow,r).length){w(" disallowed value was matched")}if(r!==null){if(r instanceof Array){if(n.items){var s=n.items instanceof Array;var u=n.items;for(p=0,m=r.length;p<m;p+=1){if(s){u=n.items[p]}if(d.coerce){r[p]=d.coerce(r[p],u)}h.concat(f(r[p],u,v,p))}}if(n.minItems&&r.length<n.minItems){w("There must be a minimum of "+n.minItems+" in the array")}if(n.maxItems&&r.length>n.maxItems){w("There must be a maximum of "+n.maxItems+" in the array")}}else{if(n.properties||n.additionalProperties){h.concat(e(r,n.properties,v,n.additionalProperties))}}if(n.pattern&&typeof r=="string"&&!r.match(n.pattern)){w("does not match the regex pattern "+n.pattern)}if(n.maxLength&&typeof r=="string"&&r.length>n.maxLength){w("may only be "+n.maxLength+" characters long")}if(n.minLength&&typeof r=="string"&&r.length<n.minLength){w("must be at least "+n.minLength+" characters long")}if(typeof n.minimum!==undefined&&typeof r==typeof n.minimum&&n.minimum>r){w("must have a minimum value of "+n.minimum)}if(typeof n.maximum!==undefined&&typeof r==typeof n.maximum&&n.maximum<r){w("must have a maximum value of "+n.maximum)}if(n["enum"]){var q=n["enum"];m=q.length;var t;for(var o=0;o<m;o++){if(q[o]===r){t=1;break}}if(!t){w("does not have a value in the enumeration "+q.join(", "))}}if(typeof n.maxDecimal=="number"&&(r.toString().match(new RegExp("\\.[0-9]{"+(n.maxDecimal+1)+",}")))){w("may only have "+n.maxDecimal+" digits of decimal places")}}}return null}function e(j,k,p,o){if(typeof k=="object"){if(typeof j!="object"||j instanceof Array){h.push({property:p,message:"an object is required"})}for(var l in k){if(k.hasOwnProperty(l)){var n=j[l];if(n===undefined&&d.existingOnly){continue}var q=k[l];if(n===undefined&&q["default"]){n=j[l]=q["default"]}if(d.coerce&&l in j){n=j[l]=d.coerce(n,q)}f(n,q,p,l)}}}for(l in j){if(j.hasOwnProperty(l)&&!(l.charAt(0)=="_"&&l.charAt(1)=="_")&&k&&!k[l]&&o===false){if(d.filter){delete j[l];continue}else{h.push({property:p,message:(typeof n)+"The property "+l+" is not defined in the schema and the schema does not allow additional properties"})}}var m=k&&k[l]&&k[l].requires;if(m&&!(m in j)){h.push({property:p,message:"the presence of the property "+l+" requires that "+m+" also be present"})}n=j[l];if(o&&(!(k&&typeof k=="object")||!(l in k))){if(d.coerce){n=j[l]=d.coerce(n,o)}f(n,o,p,l)}if(!b&&n&&n.$schema){h=h.concat(f(n,n.$schema,p,l))}}return h}if(g){f(c,g,"",b||"")}if(!b&&c&&c.$schema){f(c,c.$schema,"","")}return{valid:!h.length,errors:h}},mustBeValid:function(b){if(!b.valid){throw new TypeError(b.errors.map(function(c){return"for property "+c.property+": "+c.message}).join(", \n"))}}};String.type="string";Boolean.type="boolean";Number.type="number";Integer={type:"integer"};Object.type="object";Array.type="array";Date.type="date";a.validator=window.Validator=Validator})(jQuery);
  40 +/*!
  41 + * jQuery Templates Plugin 1.0.0pre
  42 + * http://github.com/jquery/jquery-tmpl
  43 + * Requires jQuery 1.4.2
  44 + *
  45 + * Copyright 2011, Software Freedom Conservancy, Inc.
  46 + * Dual licensed under the MIT or GPL Version 2 licenses.
  47 + * http://jquery.org/license
  48 + */
  49 +(function(i,f){var t=i.fn.domManip,h="_tmplitem",u=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,p={},e={},y,x={key:0,data:{}},w=0,q=0,g=[];function k(B,A,D,E){var C={data:E||(E===0||E===false)?E:(A?A.data:{}),_wrap:A?A._wrap:null,tmpl:null,parent:A||null,nodes:[],calls:c,nest:b,wrap:n,html:r,update:z};if(B){i.extend(C,B,{nodes:[],parent:A})}if(D){C.tmpl=D;C._ctnt=C._ctnt||C.tmpl(i,C);C.key=++w;(g.length?e:p)[w]=C}return C}i.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(A,B){i.fn[A]=function(C){var F=[],I=i(C),E,G,D,J,H=this.length===1&&this[0].parentNode;y=p||{};if(H&&H.nodeType===11&&H.childNodes.length===1&&I.length===1){I[B](this[0]);F=this}else{for(G=0,D=I.length;G<D;G++){q=G;E=(G>0?this.clone(true):this).get();i(I[G])[B](E);F=F.concat(E)}q=0;F=this.pushStack(F,A,I.selector)}J=y;y=null;i.tmpl.complete(J);return F}});i.fn.extend({tmpl:function(C,B,A){return i.tmpl(this[0],C,B,A)},tmplItem:function(){return i.tmplItem(this[0])},template:function(A){return i.template(A,this[0])},domManip:function(E,H,G,I){if(E[0]&&i.isArray(E[0])){var B=i.makeArray(arguments),A=E[0],F=A.length,C=0,D;while(C<F&&!(D=i.data(A[C++],"tmplItem"))){}if(D&&q){B[2]=function(J){i.tmpl.afterManip(this,J,G)}}t.apply(this,B)}else{t.apply(this,arguments)}q=0;if(!y){i.tmpl.complete(p)}return this}});i.extend({tmpl:function(C,F,E,B){var D,A=!B;if(A){B=x;C=i.template[C]||i.template(null,C);e={}}else{if(!C){C=B.tmpl;p[B.key]=B;B.nodes=[];if(B.wrapped){s(B,B.wrapped)}return i(m(B,null,B.tmpl(i,B)))}}if(!C){return[]}if(typeof F==="function"){F=F.call(B||{})}if(E&&E.wrapped){s(E,E.wrapped)}D=i.isArray(F)?i.map(F,function(G){return G?k(E,B,C,G):null}):[k(E,B,C,F)];return A?i(m(B,null,D)):D},tmplItem:function(B){var A;if(B instanceof i){B=B[0]}while(B&&B.nodeType===1&&!(A=i.data(B,"tmplItem"))&&(B=B.parentNode)){}return A||x},template:function(B,A){if(A){if(typeof A==="string"){A=l(A)}else{if(A instanceof i){A=A[0]||{}}}if(A.nodeType){A=i.data(A,"tmpl")||i.data(A,"tmpl",l(A.innerHTML))}return typeof B==="string"?(i.template[B]=A):A}return B?(typeof B!=="string"?i.template(null,B):(i.template[B]||i.template(null,u.test(B)?B:i(B)))):null},encode:function(A){return(""+A).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});i.extend(i.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(A){p={}},afterManip:function v(C,A,D){var B=A.nodeType===11?i.makeArray(A.childNodes):A.nodeType===1?[A]:[];D.call(C,A);o(B);q++}});function m(A,E,C){var D,B=C?i.map(C,function(F){return(typeof F==="string")?(A.key?F.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+h+'="'+A.key+'" $2'):F):m(F,A,F._ctnt)}):A;if(E){return B}B=B.join("");B.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(G,H,F,I){D=i(F).get();o(D);if(H){D=a(H).concat(D)}if(I){D=D.concat(a(I))}});return D?D:a(B)}function a(B){var A=document.createElement("div");A.innerHTML=B;return i.makeArray(A.childNodes)}function l(A){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+i.trim(A).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(I,C,G,D,E,J,F){var L=i.tmpl.tag[G],B,H,K;if(!L){throw"Unknown template tag: "+G}B=L._default||[];if(J&&!/\w$/.test(E)){E+=J;J=""}if(E){E=j(E);F=F?(","+j(F)+")"):(J?")":"");H=J?(E.indexOf(".")>-1?E+j(J):("("+E+").call($item"+F)):E;K=J?H:"(typeof("+E+")==='function'?("+E+").call($item):("+E+"))"}else{K=H=B.$1||"null"}D=j(D);return"');"+L[C?"close":"open"].split("$notnull_1").join(E?"typeof("+E+")!=='undefined' && ("+E+")!=null":"true").split("$1a").join(K).split("$1").join(H).split("$2").join(D||B.$2||"")+"__.push('"})+"');}return __;")}function s(B,A){B._wrap=m(B,true,i.isArray(A)?A:[u.test(A)?A:i(A).html()]).join("")}function j(A){return A?A.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function d(A){var B=document.createElement("div");B.appendChild(A.cloneNode(true));return B.innerHTML}function o(G){var I="_"+q,B,A,E={},F,D,C;for(F=0,D=G.length;F<D;F++){if((B=G[F]).nodeType!==1){continue}A=B.getElementsByTagName("*");for(C=A.length-1;C>=0;C--){H(A[C])}H(B)}function H(O){var L,N=O,M,J,K;if((K=O.getAttribute(h))){while(N.parentNode&&(N=N.parentNode).nodeType===1&&!(L=N.getAttribute(h))){}if(L!==K){N=N.parentNode?(N.nodeType===11?0:(N.getAttribute(h)||0)):0;if(!(J=p[K])){J=e[K];J=k(J,p[N]||e[N]);J.key=++w;p[w]=J}if(q){P(K)}}O.removeAttribute(h)}else{if(q&&(J=i.data(O,"tmplItem"))){P(J.key);p[J.key]=J;N=i.data(O.parentNode,"tmplItem");N=N?N.key:0}}if(J){M=J;while(M&&M.key!=N){M.nodes.push(O);M=M.parent}delete J._ctnt;delete J._wrap;i.data(O,"tmplItem",J)}function P(Q){Q=Q+I;J=E[Q]=(E[Q]||k(J,p[J.parent.key+I]||J.parent))}}}function c(C,A,D,B){if(!C){return g.pop()}g.push({_:C,tmpl:A,item:this,data:D,options:B})}function b(A,C,B){return i.tmpl(i.template(A),C,B,this)}function n(C,A){var B=C.options||{};B.wrapped=A;return i.tmpl(i.template(C.tmpl),C.data,B,C.item)}function r(B,C){var A=this._wrap;return i.map(i(i.isArray(A)?A.join(""):A).filter(B||"*"),function(D){return C?D.innerText||D.textContent:D.outerHTML||d(D)})}function z(){var A=this.nodes;i.tmpl(null,null,null,this).insertBefore(A[0]);i(A).remove()}})(jQuery);function hoozit(a){if(a.constructor===String){return"string"}else{if(a.constructor===Boolean){return"boolean"}else{if(a.constructor===Number){if(isNaN(a)){return"nan"}else{return"number"}}else{if(typeof a==="undefined"){return"undefined"}else{if(a===null){return"null"}else{if(a instanceof Array){return"array"}else{if(a instanceof Date){return"date"}else{if(a instanceof RegExp){return"regexp"}else{if(typeof a==="object"){return"object"}else{if(a instanceof Function){return"function"}else{return undefined}}}}}}}}}}}function bindCallbacks(c,b,a){var d=hoozit(c);if(d){if(hoozit(b[d])==="function"){return b[d].apply(b,a)}else{return b[d]}}}var equiv=function(){var b;var c=[];var a=function(){function d(e,f){if(e instanceof f.constructor||f instanceof e.constructor){return f==e}else{return f===e}}return{string:d,"boolean":d,number:d,"null":d,"undefined":d,nan:function(e){return isNaN(e)},date:function(e,f){return hoozit(e)==="date"&&f.valueOf()===e.valueOf()},regexp:function(e,f){return hoozit(e)==="regexp"&&f.source===e.source&&f.global===e.global&&f.ignoreCase===e.ignoreCase&&f.multiline===e.multiline},"function":function(){var e=c[c.length-1];return e!==Object&&typeof e!=="undefined"},array:function(f,g){var h;var e;if(!(hoozit(f)==="array")){return false}e=g.length;if(e!==f.length){return false}for(h=0;h<e;h++){if(!b(g[h],f[h])){return false}}return true},object:function(f,g){var j;var e=true;var h=[],k=[];if(g.constructor!==f.constructor){return false}c.push(g.constructor);for(j in g){h.push(j);if(!b(g[j],f[j])){e=false}}c.pop();for(j in f){k.push(j)}return e&&b(h.sort(),k.sort())}}}();b=function(){var d=Array.prototype.slice.apply(arguments);if(d.length<2){return true}return(function(f,e){if(f===e){return true}else{if(f===null||e===null||typeof f==="undefined"||typeof e==="undefined"||hoozit(f)!==hoozit(e)){return false}else{return bindCallbacks(f,a,[e,f])}}})(d[0],d[1])&&arguments.callee.apply(this,d.splice(1,d.length-1))};return b}();(function(e){function g(){var i=document.createElement("input"),h="onpaste";i.setAttribute(h,"");return(typeof i[h]==="function")?"paste":"input"}var b=g()+".mask",d=navigator.userAgent,c=/iphone/i.test(d),a=/android/i.test(d),f;e.mask={definitions:{"9":"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},dataName:"rawMaskFn",placeholder:"_"};e.fn.extend({caret:function(j,h){var i;if(this.length===0||this.is(":hidden")){return}if(typeof j=="number"){h=(typeof h==="number")?h:j;return this.each(function(){if(this.setSelectionRange){this.setSelectionRange(j,h)}else{if(this.createTextRange){i=this.createTextRange();i.collapse(true);i.moveEnd("character",h);i.moveStart("character",j);i.select()}}})}else{if(this[0].setSelectionRange){j=this[0].selectionStart;h=this[0].selectionEnd}else{if(document.selection&&document.selection.createRange){i=document.selection.createRange();j=0-i.duplicate().moveStart("character",-100000);h=j+i.text.length}}return{begin:j,end:h}}},unmask:function(){return this.trigger("unmask")},mask:function(j,n){var k,i,m,o,l,h;if(!j&&this.length>0){k=e(this[0]);return k.data(e.mask.dataName)()}n=e.extend({placeholder:e.mask.placeholder,completed:null},n);i=e.mask.definitions;m=[];o=h=j.length;l=null;e.each(j.split(""),function(p,q){if(q=="?"){h--;o=p}else{if(i[q]){m.push(new RegExp(i[q]));if(l===null){l=m.length-1}}else{m.push(null)}}});return this.trigger("unmask").each(function(){var y=e(this),t=e.map(j.split(""),function(C,B){if(C!="?"){return i[C]?n.placeholder:C}}),A=y.val();function x(B){while(++B<h&&!m[B]){}return B}function u(B){while(--B>=0&&!m[B]){}return B}function s(E,B){var D,C;if(E<0){return}for(D=E,C=x(B);D<h;D++){if(m[D]){if(C<h&&m[D].test(t[C])){t[D]=t[C];t[C]=n.placeholder}else{break}C=x(C)}}w();y.caret(Math.max(l,E))}function p(F){var D,E,B,C;for(D=F,E=n.placeholder;D<h;D++){if(m[D]){B=x(D);C=t[D];t[D]=E;if(B<h&&m[B].test(C)){E=C}else{break}}}}function v(E){var C=E.which,F,D,B;if(C===8||C===46||(c&&C===127)){F=y.caret();D=F.begin;B=F.end;if(B-D===0){D=C!==46?u(D):(B=x(D-1));B=C===46?x(B):B}q(D,B);s(D,B-1);E.preventDefault()}else{if(C==27){y.val(A);y.caret(0,r());E.preventDefault()}}}function z(E){var B=E.which,G=y.caret(),D,F,C;if(E.ctrlKey||E.altKey||E.metaKey||B<32){return}else{if(B){if(G.end-G.begin!==0){q(G.begin,G.end);s(G.begin,G.end-1)}D=x(G.begin-1);if(D<h){F=String.fromCharCode(B);if(m[D].test(F)){p(D);t[D]=F;w();C=x(D);if(a){setTimeout(e.proxy(e.fn.caret,y,C),0)}else{y.caret(C)}if(n.completed&&C>=h){n.completed.call(y)}}}E.preventDefault()}}}function q(D,B){var C;for(C=D;C<B&&C<h;C++){if(m[C]){t[C]=n.placeholder}}}function w(){y.val(t.join(""))}function r(C){var F=y.val(),E=-1,B,D;for(B=0,pos=0;B<h;B++){if(m[B]){t[B]=n.placeholder;while(pos++<F.length){D=F.charAt(pos-1);if(m[B].test(D)){t[B]=D;E=B;break}}if(pos>F.length){break}}else{if(t[B]===F.charAt(pos)&&B!==o){pos++;E=B}}}if(C){w()}else{if(E+1<o){y.val("");q(0,h)}else{w();y.val(y.val().substring(0,E+1))}}return(o?B:l)}y.data(e.mask.dataName,function(){return e.map(t,function(C,B){return m[B]&&C!=n.placeholder?C:null}).join("")});if(!y.attr("readonly")){y.one("unmask",function(){y.unbind(".mask").removeData(e.mask.dataName)}).bind("focus.mask",function(){clearTimeout(f);var C,B;A=y.val();if(A===""){q(0,h);w();C=0}else{C=r()}f=setTimeout(function(){w();if(C==j.length){y.caret(0,C)}else{y.caret(C)}},10)}).bind("blur.mask",function(){r();if(y.val()!=A){y.change()}}).bind("keydown.mask",v).bind("keypress.mask",z).bind(b,function(){setTimeout(function(){var B=r(true);y.caret(B);if(n.completed&&B==y.val().length){n.completed.call(y)}},0)})}r()})}})})(jQuery);(function(b){var a;a=function(){var g=a.makeArray(arguments);if(g.length===0){return a.throwDefaultError("You must supply at least one argument which is the element against which to apply the Alpaca generated form")}var e=g[0];var E=null;var s=null;var l=null;var o=null;var m=null;var h=null;var n=null;var c=null;var k=false;var D=false;var p={};var z=null;var v=null;var q=null;var f=null;if(g.length==1){var t=b(e).find(":first");var d=null;for(var x=0;x<t.length;x++){var B=t[x];var w=b(B).attr("alpaca-field-id");if(w){var u=a.fieldInstances[w];if(u){d=u}}}if(d!==null){return d}else{var j=b(e).html();b(e).html("");E=j}}if(g.length>=2){if(a.isObject(g[1])){E=g[1].data;s=g[1].schema;l=g[1].options;o=g[1].view;m=g[1].render;h=g[1].postRender;n=g[1].error;c=g[1].connector;z=g[1].dataSource;v=g[1].schemaSource;q=g[1].optionsSource;f=g[1].viewSource;if(g[1].ui){p.ui=g[1].ui}if(g[1].type){p.type=g[1].type}if(!a.isEmpty(g[1].notTopLevel)){k=g[1].notTopLevel}if(!a.isEmpty(g[1].isDynamicCreation)){D=g[1].isDynamicCreation}}else{E=g[1];if(a.isFunction(E)){E=E()}}}if(a.isEmpty(n)){n=a.defaultErrorCallback}if(a.isEmpty(c)){var y=a.getConnectorClass("default");c=new y("default")}if(e){if(a.isString(e)){e=b("#"+e)}}var A=c;if(k){var C=a.getConnectorClass("default");A=new C("default")}if(!l){l={}}if(a.isUndefined(l.focus)){l.focus=false}var r=function(i){if(l&&l.focus){if(l.focus===true){if(i.children&&i.children.length>0){if(i.children[0].field&&i.children[0].field[0]){b(i.children[0]).focus()}}}else{var F=i.getControlByPath(l.focus);if(F&&F.field){b(F).focus()}}}if(h){h(i)}};A.loadAll({data:E,schema:s,options:l,view:o,dataSource:z,schemaSource:v,optionsSource:q,viewSource:f},function(i,F,G,H){i=i?i:E;G=G?G:s;F=F?F:l;H=H?H:o;if(a.isEmpty(i)){if(a.isEmpty(G)&&(a.isEmpty(F)||a.isEmpty(F.type))){i="";if(a.isEmpty(F)){F="text"}else{if(l&&a.isObject(l)){F.type="text"}}}}return a.init(e,i,F,G,H,p,m,r,c,n,D)},function(i){n(i);return null});return b(e)};a.Fields={};a.Connectors={};b.extend(a,{VERSION:"0.1.0",makeArray:function(c){return Array.prototype.slice.call(c)},isFunction:function(c){return Object.prototype.toString.call(c)==="[object Function]"},isString:function(c){return(typeof c=="string")},isObject:function(c){if(c===true||c===false||a.isUndefined(c)||c===null){return false}return(typeof(c)==="object")&&(typeof(c.length)==="undefined")},isPlainObject:function(c){return b.isPlainObject(c)},isNumber:function(c){return(typeof c=="number")},isArray:function(c){if(c===true||c===false||a.isUndefined(c)||c===null){return false}return c.push&&c.slice},isBoolean:function(c){return(typeof c=="boolean")},isUndefined:function(c){return(typeof c=="undefined")},trim:function(d){var c=d;if(c&&a.isString(c)){c=c.replace(/^\s+|\s+$/g,"")}return c},safeDomParse:function(c){if(c&&a.isString(c)){c=a.trim(c);c=b(c)}return c},isEmpty:function(c){return a.isUndefined(c)||c===null},copyOf:function(d){var f=d;if(a.isArray(d)){f=[];for(var e=0;e<d.length;e++){f.push(a.copyOf(d[e]))}}else{if(a.isObject(d)){if(d instanceof Date){return new Date(d.getTime())}else{if(d instanceof RegExp){return new RegExp(d)}else{if(d.nodeType&&"cloneNode" in d){f=d.cloneNode(true)}else{if(b.isPlainObject(d)){f={};for(var c in d){if(d.hasOwnProperty(c)){f[c]=a.copyOf(d[c])}}}else{}}}}}}return f},cloneObject:function(c){return a.copyOf(c)},spliceIn:function(c,d,e){return c.substring(0,d)+e+c.substring(d,c.length)},compactArray:function(c){var f=[],d=c.length,e;for(e=0;e<d;e++){if(!lang.isNull(c[e])&&!lang.isUndefined(c[e])){f.push(c[e])}}return f},removeAccents:function(c){return c.replace(/[àáâãäå]/g,"a").replace(/[èéêë]/g,"e").replace(/[ìíîï]/g,"i").replace(/[òóôõö]/g,"o").replace(/[ùúûü]/g,"u").replace(/[ýÿ]/g,"y").replace(/[ñ]/g,"n").replace(/[ç]/g,"c").replace(/[œ]/g,"oe").replace(/[æ]/g,"ae")},indexOf:function(g,c,f){var d=c.length,e;if(!a.isFunction(f)){f=function(h,i){return h===i}}for(e=0;e<d;e++){if(f.call({},g,c[e])){return e}}return -1},log:function(c){if(typeof(console)!=="undefined"){console.log(c)}},uniqueIdCounter:0,defaultLocale:"en_US",setDefaultLocale:function(c){this.defaultLocale=c},defaultSchemaFieldMapping:{},registerDefaultSchemaFieldMapping:function(d,c){if(d&&c){this.defaultSchemaFieldMapping[d]=c}},defaultFormatFieldMapping:{},registerDefaultFormatFieldMapping:function(d,c){if(d&&c){this.defaultFormatFieldMapping[d]=c}},getSchemaType:function(c){if(a.isEmpty(c)){return"string"}if(a.isObject(c)){return"object"}if(a.isString(c)){return"string"}if(a.isNumber(c)){return"number"}if(a.isArray(c)){return"array"}if(a.isBoolean(c)){return"boolean"}if(typeof c=="object"){return"object"}},views:{},viewIdPrefix:"VIEW_",isValidViewId:function(c){return a.startsWith(c,this.viewIdPrefix)},generateViewId:function(){return this.viewIdPrefix+this.generateId()},registerView:function(d){var e=d.id;if(!e){return a.throwDefaultError("Cannot register view with missing view id: "+e)}var c=this.views[e];if(c){a.mergeObject(c,d)}else{this.views[e]=d}},defaultView:"VIEW_WEB_EDIT",setDefaultView:function(c){if(c&&this.views.hasOwnProperty(c)){this.defaultView=c}},getNormalizedView:function(c){return this.normalizedViews[c]},lookupNormalizedView:function(g,f){var d=null;for(var c in this.normalizedViews){var e=this.normalizedViews[c];if(e.ui==g&&e.type==f){d=c;break}}return d},registerTemplate:function(d,e,c){if(!c){c="VIEW_BASE"}if(!this.views[c]){this.views[c]={};this.views[c].id=c}if(!this.views[c].templates){this.views[c].templates={}}this.views[c].templates[d]=e},registerTemplates:function(e,c){for(var d in e){this.registerTemplate(d,e[d],c)}},registerMessage:function(d,e,c){if(!c){c="VIEW_BASE"}if(!this.views[c]){this.views[c]={};this.views[c].id=c}if(!this.views[c].messages){this.views[c].messages={}}this.views[c].messages[d]=e},registerMessages:function(e,c){for(var d in e){if(e.hasOwnProperty(d)){this.registerMessage(d,e[d],c)}}},fieldTemplatePostfix:{controlFieldMessageContainer:"-controlfield-message-container",controlFieldLabel:"-controlfield-label",controlFieldContainer:"-controlfield-container",controlFieldHelper:"-controlfield-helper",fieldSetLegend:"-fieldset-legend",fieldSetItemsContainer:"-fieldset-items-container",fieldSetHelper:"-fieldset-helper",fieldSetOuterEl:"-fieldset",formButtonsContainer:"-form-buttons-container",formFieldsContainer:"-form-fields-container"},fieldTemplate:function(e,c,d){var h=this;var k=e.data;var i=e.data.view;var g="";if(!c){c="controlFieldLabel"}var f=this.getTemplateDescriptor(i,c,k);if(d){var l=f.template.value;if(b(".alpaca"+this.fieldTemplatePostfix[c],a.safeDomParse(l)).length===0){if(this.fieldTemplatePostfix[c]){l=a.safeDomParse(l).addClass("alpaca"+this.fieldTemplatePostfix[c])}}g=a.safeDomParse(l).outerHTML(true)}else{var j=i.tmpl(f,e.data);if(j){if(this.fieldTemplatePostfix[c]){if(b(".alpaca"+this.fieldTemplatePostfix[c],j).length===0){j.addClass("alpaca"+this.fieldTemplatePostfix[c])}if(!j.attr("id")){j.attr("id",e.data.id+this.fieldTemplatePostfix[c])}}g=j.outerHTML(true)}else{g=""}}return g},defaultDateFormat:"mm/dd/yy",regexps:{email:/^[a-z0-9!\#\$%&'\*\-\/=\?\+\-\^_`\{\|\}~]+(?:\.[a-z0-9!\#\$%&'\*\-\/=\?\+\-\^_`\{\|\}~]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,6}$/i,url:/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(\:[0-9]{1,5})?(([0-9]{1,5})?\/.*)?$/i,password:/^[0-9a-zA-Z\x20-\x7E]*$/,date:/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]\d\d$/,integer:/^([\+\-]?([1-9]\d*)|0)$/,number:/^([\+\-]?((([0-9]+(\.)?)|([0-9]*\.[0-9]+))([eE][+-]?[0-9]+)?))$/,phone:/^(\D?(\d{3})\D?\D?(\d{3})\D?(\d{4}))?$/,ipv4:/^(?:1\d?\d?|2(?:[0-4]\d?|[6789]|5[0-5]?)?|[3-9]\d?|0)(?:\.(?:1\d?\d?|2(?:[0-4]\d?|[6789]|5[0-5]?)?|[3-9]\d?|0)){3}$/,"zipcode-five":/^(\d{5})?$/,"zipcode-nine":/^(\d{5}(-\d{4})?)?$/},fieldInstances:{},fieldClassRegistry:{},registerFieldClass:function(c,d){this.fieldClassRegistry[c]=d},getFieldClass:function(c){return this.fieldClassRegistry[c]},getFieldClassType:function(d){for(var c in this.fieldClassRegistry){if(this.fieldClassRegistry.hasOwnProperty(c)){if(this.fieldClassRegistry[c]==d){return c}}}return null},connectorClassRegistry:{},registerConnectorClass:function(d,c){this.connectorClassRegistry[d]=c},getConnectorClass:function(c){return this.connectorClassRegistry[c]},replaceAll:function(e,c,d){return e.replace(new RegExp(c,"g"),d)},element:function(c,e,d,h){var g=b("<"+c+"/>");if(e){g.attr(e)}if(d){g.css(d)}if(h){for(var f in h){g.addClass(f)}}},elementFromTemplate:function(e,f){var d=e;if(f){for(var c in f){d=a.replaceAll(d,"${"+c+"}",f[c])}}return b(d)},generateId:function(){a.uniqueIdCounter++;return"alpaca"+a.uniqueIdCounter},later:function(l,e,n,h,i){l=l||0;e=e||{};var g=n,k=b.makeArray(h),j,c;if(typeof n==="string"){g=e[n]}if(!g){throw {name:"TypeError",message:"The function is undefined."}}j=function(){g.apply(e,k)};c=(i)?setInterval(j,l):setTimeout(j,l);return{id:c,interval:i,cancel:function(){if(this.interval){clearInterval(c)}else{clearTimeout(c)}}}},endsWith:function(d,c){return d.indexOf(c,d.length-c.length)!==-1},startsWith:function(d,c){return d.substr(0,c.length)===c},isUri:function(c){return a.isString(c)&&(a.startsWith(c,"http://")||a.startsWith(c,"https://")||a.startsWith(c,"/")||a.startsWith(c,"./")||a.startsWith(c,"../"))},traverseObject:function(c,g,f){if(a.isString(g)){g=g.split(".")}var e=null;var h=c;var d=null;do{d=g.shift();if(f&&d==f){d=g.shift()}if(!a.isEmpty(h[d])){h=h[d];if(g.length===0){e=h}}else{g=[]}}while(g.length>0);return e},each:function(f,e){if(a.isArray(f)){for(var d=0;d<f.length;d++){e.apply(f[d])}}else{if(a.isObject(f)){for(var c in f){e.apply(f[c])}}}},merge:function(g,f,d){if(!g){g={}}for(var c in f){var e=true;if(d){e=d(c)}if(e){if(a.isEmpty(f[c])){g[c]=f[c]}else{if(a.isObject(f[c])){if(!g[c]){g[c]={}}g[c]=a.merge(g[c],f[c])}else{g[c]=f[c]}}}}return g},mergeObject:function(d,c){if(!d){d={}}if(!c){c={}}this.mergeObject2(c,d);return d},mergeObject2:function(h,i){var d=a.isArray;var c=a.isObject;var f=a.isUndefined;var e=a.copyOf;var g=function(j,k){if(d(j)){if(d(k)){b.each(j,function(l){k.push(e(j[l]))})}else{}}else{if(c(j)){if(c(k)){b.each(j,function(l){if(f(k[l])){k[l]=e(j[l])}else{k[l]=g(j[l],k[l])}})}else{}}else{k=e(j)}}return k};g(h,i);return i},substituteTokens:function(h,d){if(!a.isEmpty(h)){for(var g=0;g<d.length;g++){var f="{"+g+"}";var c=h.indexOf(f);if(c>-1){var e=h.substring(0,c)+d[g]+h.substring(c+3);h=e}}}return h},compareObject:function(d,c){return equiv(d,c)},compareArrayContent:function(d,c){var e=d&&c&&(d.length==c.length);if(e){b.each(d,function(g,f){if(!e){return false}if(b.inArray(f,c)==-1){e=false}else{e=true}})}return e},isValEmpty:function(d){var c=false;if(a.isEmpty(d)){c=true}else{if(a.isString(d)&&d===""){c=true}if(a.isObject(d)&&b.isEmptyObject(d)){c=true}if(a.isArray(d)&&d.length===0){c=true}if(a.isNumber(d)&&isNaN(d)){c=true}}return c},init:function(c,g,p,f,l,d,n,j,e,i,k){var o=this;if(a.isObject(l)){var m=l.id;if(!m){l.id=this.generateViewId()}var h=l.parent;if(!h){l.parent="VIEW_WEB_EDIT"}this.registerView(l);l=l.id}this.compile(function(r){if(r.errors&&r.errors.length>0){for(var t=0;t<r.errors.length;t++){var q=r.errors[t].viewId;var s=r.errors[t].templateId;var u=r.errors[t].err;a.logError("The template: "+s+" for view: "+q+" failed to compile");a.logError(JSON.stringify(u))}return a.throwErrorWithCallback("View compilation failed, cannot initialize Alpaca. Please check the error logs.",i)}o._init(c,g,p,f,l,d,n,j,e,i,k)},i)},_init:function(e,t,g,q,m,n,i,f,c,j,s){var l=null;var p=null;var r=null;if(b.mobile){l="mobile";if(t){p="edit";r="VIEW_MOBILE_EDIT"}else{p="create";r="VIEW_MOBILE_CREATE"}}var k=(typeof b().modal=="function");if(k){l="bootstrap";if(t){p="edit";r="VIEW_BOOTSTRAP_EDIT"}else{p="create";r="VIEW_BOOTSTRAP_CREATE"}}if(!m){var o=n.ui;var h=n.type;if(!o){if(!l){l=a.defaultUI}if(l){o=l}}if(o){if(!h){h=p?p:"edit"}a.logDebug("No view provided but found request for UI: "+o+" and type: "+h);m=this.lookupNormalizedView(o,h);if(m){a.logDebug("Found view: "+m)}else{a.logDebug("No view found for UI: "+o+" and type: "+h)}}}if(!m){a.logDebug("A view was not specified.");if(r){a.logDebug("Falling back to detected view: "+r);m=r}else{a.logDebug("Falling back to default view: "+this.defaultView);m=this.defaultView}}if(a.isString(m)){if(!this.normalizedViews[m]){return a.throwErrorWithCallback("The desired view: "+m+" could not be loaded. Please make sure it is loaded and not misspelled.",j)}}var d=a.createFieldInstance(e,t,g,q,m,c,j);if(d){d.isDynamicCreation=s;a.fieldInstances[d.getId()]=d;d.allFieldInstances=function(){return a.fieldInstances};if(a.isEmpty(i)){i=d.view.render}if(a.isEmpty(f)){f=d.view.postRender}if(!a.isEmpty(i)){i(d,f)}else{d.render(f)}d.callback=i;d.renderedCallback=f}return d},createFieldInstance:function(c,f,k,e,j,d,g){if(a.isValEmpty(k)){k={}}if(a.isValEmpty(e)){e={}}if(k&&a.isString(k)){var h=k;k={};k.type=h}if(!k.type){if(!e.type){e.type=a.getSchemaType(f)}if(e&&e["enum"]){if(e["enum"].length>3){k.type="select"}else{k.type="radio"}}else{k.type=a.defaultSchemaFieldMapping[e.type]}if(e.format&&a.defaultFormatFieldMapping[e.format]){k.type=a.defaultFormatFieldMapping[e.format]}}var i=a.getFieldClass(k.type);if(!i){g({message:"Unable to find field class for type: "+k.type,reason:"FIELD_INSTANTIATION_ERROR"});return null}return new i(c,f,k,e,j,d,g)},parseJSON:function(c){if(!c){return null}return b.parseJSON(c)},compile:function(d,g){var k=this;var f={errors:[],count:0,successCount:0};var i=function(l){if(f.errors.length===0){for(var m in l){k.normalizedViews[m]=l[m]}}d(f)};var h=function(n,p,m,o,q,r){var l=m.id;f.count++;if(p){f.errors.push({view:l,template:o,err:p})}else{f.successCount++;m.compiledTemplates[o]=q}if(f.count==r){i(n)}};var c=function(v,r,t,u,m){var s=r.id;var p=null;if(a.isObject(u)){p=u.type;u=u.template}if(!p){p="text/x-jquery-tmpl"}var q=a.TemplateEngineRegistry.find(p);if(!q){a.logError("Cannot find template engine for type: "+p);var l=new Error("Cannot find template engine for type: "+p);h(v,l,r,t,n,m)}var n=s+"_"+t;if(q.isCached(n)){h(v,null,r,t,n,m)}else{var o=r.compiledTemplates["view-"+u];if(o){u=a.TemplateCache[o]}q.compile(n,u,function(w,x){h(v,w,r,t,n,m)})}};var j=function(s){var m=[];for(var q in s){var p=s[q];p.compiledTemplates={};if(p.templates){for(var l in p.templates){var r=p.templates[l];m.push(function(v,u,x,w){return function(y){c(v,u,x,w,y)}}(s,p,"view-"+l,r))}}if(p.fields){for(var t in p.fields){if(p.fields[t].templates){for(var l in p.fields[t].templates){var r=p.fields[t].templates[l];m.push(function(v,u,x,w){return function(y){c(v,u,x,w,y)}}(s,p,"field-"+t+"-"+l,r))}}}}if(p.layout&&p.layout.template){var r=p.layout.template;m.push(function(v,u,x,w){return function(y){c(v,u,x,w,y)}}(s,p,"layoutTemplate",r))}if(p.globalTemplate){var r=p.globalTemplate;m.push(function(v,u,x,w){return function(y){c(v,u,x,w,y)}}(s,p,"globalTemplate",r))}}var n=m.length;for(var o=0;o<m.length;o++){m[o](n)}};var e=function(){var m={};var o=0;if(!a.normalizedViews){a.normalizedViews={}}k.normalizedViews=a.normalizedViews;for(var l in k.views){if(!a.normalizedViews[l]){var n=new a.NormalizedView(l);if(n.normalize()){m[l]=n;o++}else{return a.throwErrorWithCallback("View normalization failed, cannot initialize Alpaca. Please check the error logs.",g)}}}if(o>0){j(m)}else{i(m)}};e()},getTemplateDescriptor:function(i,d,j){var c={};var m;var e;if(i.templates&&i.templates[d]){m=i.templates[d];e="view"}if(j&&j.path){var n=j.path;if(i&&i.fields&&i.fields[n]&&i.fields[n].templates&&i.fields[n].templates[d]){m=i.fields[n].templates[d];e="field"}}if(d=="globalTemplate"){m="globalTemplate";e="global"}if(d=="layoutTemplate"){m="layoutTemplate";e="layout"}c.template={};c.template.id=d;c.template.type=e;c.template.value=m;var g=null;var l=m;if(a.isObject(l)){g=l.type;l=l.template}if(!g){g="text/x-jquery-tmpl"}var h=a.TemplateEngineRegistry.find(g);if(!h){return a.throwDefaultError("Cannot find template engine for type: "+g)}c.engine={};c.engine.type=g;c.engine.id=h.id;var k=null;if(e=="view"){k="view-"+d}else{if(e=="field"){k="field-"+j.path+"-"+d}else{if(e=="layout"){k="layoutTemplate"}else{if(e=="global"){k="globalTemplate"}}}}c.compiledTemplateId=k;var f=i.compiledTemplates[k];if(!f||!h.isCached(f)){return null}c.cache={};c.cache.key=f;return c},tmpl:function(d,c,e){if(a.isString(d)){d=this.normalizedViews[d]}var i=c.engine.type;var h=c.compiledTemplateId;var g=a.TemplateEngineRegistry.find(i);if(!g){return a.throwDefaultError("Cannot find template engine for type: "+i)}var j=c.cache.key;var f=g.execute(j,e,function(k){return a.throwDefaultError("The compiled template: "+h+" for view: "+d.id+" failed to execute: "+JSON.stringify(k))});return a.safeDomParse(f)}});a.DEBUG=0;a.INFO=1;a.WARN=2;a.ERROR=3;a.logLevel=a.WARN;a.logDebug=function(c){a.log(a.DEBUG,c)};a.logInfo=function(c){a.log(a.INFO,c)};a.logWarn=function(c){a.log(a.WARN,c)};a.logError=function(c){a.log(a.ERROR,c)};a.log=function(f,c){var e={0:"debug",1:"info",2:"warn",3:"error"};if(a.logLevel<=f){var d=e[f];if(typeof console!=="undefined"&&console[d]){if("debug"==d){console.debug(c)}else{if("info"==d){console.info(c)}else{if("warn"==d){console.warn(c)}else{if("error"==d){console.error(c)}else{console.log(c)}}}}}}};a.checked=function(c,d){return a.attrProp(c,"checked",d)};a.attrProp=function(d,c,e){if(!(typeof(e)==="undefined")){if(b(d).prop){b(d).prop(c,e)}else{if(e){b(d).attr(c,e)}else{b(d).removeAttr(c)}}}if(b(d).prop){return b(d).prop(c)}return b(d).attr(c)};a.loadRefSchemaOptions=function(h,g,i){if(g.indexOf("#/definitions/")>-1){var d=g.substring(14);var c=null;if(h.schema.definitions){c=h.schema.definitions[d]}var f=null;if(h.options.definitions){f=h.options.definitions[d]}i(c,f)}else{var e=a.resolveReference(h.schema,h.options,g);if(e){i(e.schema,e.options)}else{i()}}};a.DEFAULT_ERROR_CALLBACK=function(c){if(c&&c.message){a.logError(c.message);throw new Error("Alpaca caught an error with the default error handler: "+c.message)}};a.defaultErrorCallback=a.DEFAULT_ERROR_CALLBACK;a.throwDefaultError=function(d){if(d&&a.isObject(d)){d=JSON.stringify(d)}var c={message:d};a.defaultErrorCallback(c)};a.throwErrorWithCallback=function(e,c){if(e&&a.isObject(e)){e=JSON.stringify(e)}var d={message:e};if(c){c(d)}else{a.defaultErrorCallback(d)}};a.resolveReference=function(g,e,h){if(g.id==h){var d={};if(g){d.schema=g}if(e){d.options=e}return d}else{if(g&&g.properties){for(var i in g.properties){var f=g.properties[i];var j=null;if(e&&e.fields&&e.fields[i]){j=e.fields[i]}var c=a.resolveReference(f,j,h);if(c){return c}}}}return null};b.alpaca=window.Alpaca=a;b.fn.alpaca=function(){var d=a.makeArray(arguments);var c=[].concat(this,d);return a.apply(this,c)};b.fn.outerHTML=function(c){if(c){return b("<div></div>").append(this).html()}else{return b("<div></div>").append(this.clone()).html()}};b.fn.swapWith=function(c){return this.each(function(){var d=b(c).clone();var e=b(this).clone();b(c).replaceWith(e);b(this).replaceWith(d)})};b.fn.attrProp=function(c,d){return a.attrProp(b(this),c,d)};b.event.special.destroyed={remove:function(c){if(c.handler){c.handler()}}}})(jQuery);(function(){Alpaca.TemplateEngineRegistry=function(){var a={};return{register:function(c,b){a[c]=b},find:function(d){var e=null;if(a[d]){e=a[d]}else{for(var f in a){var c=a[f].supportedMimetypes();for(var b=0;b<c.length;b++){if(d.toLowerCase()==c[b].toLowerCase()){e=a[f];break}}}}return e},ids:function(){var b=[];for(var c in a){b.push(c)}return b}}}()})();(function(a){if(typeof(Alpaca.TemplateCache)=="undefined"){Alpaca.TemplateCache={}}Alpaca.AbstractTemplateEngine=Base.extend({constructor:function(b){this.base();this.id=b;this.cleanMarkup=function(c){var d=Alpaca.safeDomParse(c);if(a(d).length==1){if(a(d)[0].nodeName.toLowerCase()=="script"){c=a(d).html()}}return c}},compile:function(h,f,i){var b=this;var e="html";if(Alpaca.isString(f)){if(f.indexOf("./")===0||f.indexOf("/")===0||f.indexOf("../")===0){e="uri"}else{if(f.indexOf("#")===0||f.indexOf(".")===0||f.indexOf("[")===0){e="selector"}}}else{}if(e=="selector"){b._compile(h,f,i)}else{if(e=="uri"){var g=b.fileExtension();var c=f;if(c.indexOf("."+g)===-1){c+="."+g}a.ajax({url:c,dataType:"html",success:function(j){j=b.cleanMarkup(j);b._compile(h,j,i)},failure:function(j){i(j,null)}})}else{if(e=="html"){var d=f;if(d instanceof jQuery){d=Alpaca.safeDomParse(f).outerHTML()}b._compile(h,d,i)}else{i(new Error("Template engine cannot determine how to handle type: "+e))}}}},_compile:function(c,b,d){if(Alpaca.isEmpty(b)){b=""}b=Alpaca.trim(b);if(b.toLowerCase().indexOf("<script")===0){}else{b="<script type='"+this.supportedMimetypes()[0]+"'>"+b+"<\/script>"}Alpaca.logDebug("Compiling template: "+this.id+", cacheKey: "+c+", template: "+b);this.doCompile(c,b,d)},doCompile:function(c,b,d){},execute:function(e,b,f){Alpaca.logDebug("Executing template for cache key: "+e);var c=this.doExecute(e,b,f);var d=function(g){var h=Alpaca.safeDomParse(g);if(a(h).length==1){if(a(h)[0].nodeName.toLowerCase()=="script"){return a(h).html()}}return g};c=d(c);return c},doExecute:function(c,b,d){},fileExtension:function(){return"html"},supportedMimetypes:function(){return[]},isCached:function(b){}})})(jQuery);(function(a){Alpaca.JQueryTemplateEngine=Alpaca.AbstractTemplateEngine.extend({fileExtension:function(){return"html"},supportedMimetypes:function(){return["text/x-jquery-template","text/x-jquery-tmpl"]},doCompile:function(d,b,f){try{a.template(d,b)}catch(c){f(c);return}Alpaca.TemplateCache[d]=b;f()},doExecute:function(k,g,l){var m=this;var f=null;try{var b=a.tmpl(k,g);b=b.outerHTML();var d=-1;do{d=b.indexOf("_tmplitem=");if(d>-1){var c=b.indexOf(" ",d);if(c==-1){c=b.indexOf(">",d)}if(c==-1){l({message:"Should have found closing whitespace or '>' for _tmplitem attribute"});return}b=b.substring(0,d)+b.substring(c)}}while(d>-1);f=Alpaca.safeDomParse(b)}catch(h){l({message:h.message});return null}return f},isCached:function(b){return(Alpaca.TemplateCache[b]?true:false)}});Alpaca.TemplateEngineRegistry.register("tmpl",new Alpaca.JQueryTemplateEngine("tmpl"))})(jQuery);(function(a){Alpaca.EJSTemplateEngine=Alpaca.AbstractTemplateEngine.extend({fileExtension:function(){return"ejs"},supportedMimetypes:function(){return["text/x-ejs-template","text/x-ejs-tmpl"]},doCompile:function(f,c,g){var b=null;try{b=new EJS({name:f,text:c})}catch(d){g(d);return}Alpaca.TemplateCache[f]=b;g()},doExecute:function(g,c,h){var b=Alpaca.TemplateCache[g];var d=null;try{d=b.render(c)}catch(f){h(f);return null}return d},isCached:function(b){return(Alpaca.TemplateCache[b]?true:false)}});Alpaca.TemplateEngineRegistry.register("ejs",new Alpaca.EJSTemplateEngine("ejs"))})(jQuery);(function(a){Alpaca.HandlebarsTemplateEngine=Alpaca.AbstractTemplateEngine.extend({fileExtension:function(){return"html"},supportedMimetypes:function(){return["text/x-handlebars-template","text/x-handlebars-tmpl"]},doCompile:function(f,b,g){var c=null;try{c=Handlebars.compile(b)}catch(d){g(d);return}Alpaca.TemplateCache[f]=c;g()},doExecute:function(g,b,h){var d=Alpaca.TemplateCache[g];var c=null;try{c=d(b)}catch(f){h(f);return null}return c},isCached:function(b){return(Alpaca.TemplateCache[b]?true:false)}});Alpaca.TemplateEngineRegistry.register("handlebars",new Alpaca.HandlebarsTemplateEngine("handlebars"))})(jQuery);(function(b){var a=b.alpaca;a.styleInjections={};a.registerView({id:"VIEW_BASE",title:"Abstract base view",description:"Foundation view which provides an abstract view from which all other views extend.",messages:{countries:{afg:"Afghanistan",ala:"Aland Islands",alb:"Albania",dza:"Algeria",asm:"American Samoa",and:"Andorra",ago:"Angola",aia:"Anguilla",ata:"Antarctica",atg:"Antigua and Barbuda",arg:"Argentina",arm:"Armenia",abw:"Aruba",aus:"Australia",aut:"Austria",aze:"Azerbaijan",bhs:"Bahamas",bhr:"Bahrain",bgd:"Bangladesh",brb:"Barbados",blr:"Belarus",bel:"Belgium",blz:"Belize",ben:"Benin",bmu:"Bermuda",btn:"Bhutan",bol:"Bolivia",bih:"Bosnia and Herzegovina",bwa:"Botswana",bvt:"Bouvet Island",bra:"Brazil",iot:"British Indian Ocean Territory",brn:"Brunei Darussalam",bgr:"Bulgaria",bfa:"Burkina Faso",bdi:"Burundi",khm:"Cambodia",cmr:"Cameroon",can:"Canada",cpv:"Cape Verde",cym:"Cayman Islands",caf:"Central African Republic",tcd:"Chad",chl:"Chile",chn:"China",cxr:"Christmas Island",cck:"Cocos (Keeling), Islands",col:"Colombia",com:"Comoros",cog:"Congo",cod:"Congo, the Democratic Republic of the",cok:"Cook Islands",cri:"Costa Rica",hrv:"Croatia",cub:"Cuba",cyp:"Cyprus",cze:"Czech Republic",civ:"Cote d'Ivoire",dnk:"Denmark",dji:"Djibouti",dma:"Dominica",dom:"Dominican Republic",ecu:"Ecuador",egy:"Egypt",slv:"El Salvador",gnq:"Equatorial Guinea",eri:"Eritrea",est:"Estonia",eth:"Ethiopia",flk:"Falkland Islands (Malvinas),",fro:"Faroe Islands",fji:"Fiji",fin:"Finland",fra:"France",guf:"French Guiana",pyf:"French Polynesia",atf:"French Southern Territories",gab:"Gabon",gmb:"Gambia",geo:"Georgia",deu:"Germany",gha:"Ghana",gib:"Gibraltar",grc:"Greece",grl:"Greenland",grd:"Grenada",glp:"Guadeloupe",gum:"Guam",gtm:"Guatemala",ggy:"Guernsey",gin:"Guinea",gnb:"Guinea-Bissau",guy:"Guyana",hti:"Haiti",hmd:"Heard Island and McDonald Islands",vat:"Holy See (Vatican City State),",hnd:"Honduras",hkg:"Hong Kong",hun:"Hungary",isl:"Iceland",ind:"India",idn:"Indonesia",irn:"Iran, Islamic Republic of",irq:"Iraq",irl:"Ireland",imn:"Isle of Man",isr:"Israel",ita:"Italy",jam:"Jamaica",jpn:"Japan",jey:"Jersey",jor:"Jordan",kaz:"Kazakhstan",ken:"Kenya",kir:"Kiribati",prk:"Korea, Democratic People's Republic of",kor:"Korea, Republic of",kwt:"Kuwait",kgz:"Kyrgyzstan",lao:"Lao People's Democratic Republic",lva:"Latvia",lbn:"Lebanon",lso:"Lesotho",lbr:"Liberia",lby:"Libyan Arab Jamahiriya",lie:"Liechtenstein",ltu:"Lithuania",lux:"Luxembourg",mac:"Macao",mkd:"Macedonia, the former Yugoslav Republic of",mdg:"Madagascar",mwi:"Malawi",mys:"Malaysia",mdv:"Maldives",mli:"Mali",mlt:"Malta",mhl:"Marshall Islands",mtq:"Martinique",mrt:"Mauritania",mus:"Mauritius",myt:"Mayotte",mex:"Mexico",fsm:"Micronesia, Federated States of",mda:"Moldova, Republic of",mco:"Monaco",mng:"Mongolia",mne:"Montenegro",msr:"Montserrat",mar:"Morocco",moz:"Mozambique",mmr:"Myanmar",nam:"Namibia",nru:"Nauru",npl:"Nepal",nld:"Netherlands",ant:"Netherlands Antilles",ncl:"New Caledonia",nzl:"New Zealand",nic:"Nicaragua",ner:"Niger",nga:"Nigeria",niu:"Niue",nfk:"Norfolk Island",mnp:"Northern Mariana Islands",nor:"Norway",omn:"Oman",pak:"Pakistan",plw:"Palau",pse:"Palestinian Territory, Occupied",pan:"Panama",png:"Papua New Guinea",pry:"Paraguay",per:"Peru",phl:"Philippines",pcn:"Pitcairn",pol:"Poland",prt:"Portugal",pri:"Puerto Rico",qat:"Qatar",rou:"Romania",rus:"Russian Federation",rwa:"Rwanda",reu:"Reunion",blm:"Saint Barthelemy",shn:"Saint Helena",kna:"Saint Kitts and Nevis",lca:"Saint Lucia",maf:"Saint Martin (French part)",spm:"Saint Pierre and Miquelon",vct:"Saint Vincent and the Grenadines",wsm:"Samoa",smr:"San Marino",stp:"Sao Tome and Principe",sau:"Saudi Arabia",sen:"Senegal",srb:"Serbia",syc:"Seychelles",sle:"Sierra Leone",sgp:"Singapore",svk:"Slovakia",svn:"Slovenia",slb:"Solomon Islands",som:"Somalia",zaf:"South Africa",sgs:"South Georgia and the South Sandwich Islands",esp:"Spain",lka:"Sri Lanka",sdn:"Sudan",sur:"Suriname",sjm:"Svalbard and Jan Mayen",swz:"Swaziland",swe:"Sweden",che:"Switzerland",syr:"Syrian Arab Republic",twn:"Taiwan, Province of China",tjk:"Tajikistan",tza:"Tanzania, United Republic of",tha:"Thailand",tls:"Timor-Leste",tgo:"Togo",tkl:"Tokelau",ton:"Tonga",tto:"Trinidad and Tobago",tun:"Tunisia",tur:"Turkey",tkm:"Turkmenistan",tca:"Turks and Caicos Islands",tuv:"Tuvalu",uga:"Uganda",ukr:"Ukraine",are:"United Arab Emirates",gbr:"United Kingdom",usa:"United States",umi:"United States Minor Outlying Islands",ury:"Uruguay",uzb:"Uzbekistan",vut:"Vanuatu",ven:"Venezuela",vnm:"Viet Nam",vgb:"Virgin Islands, British",vir:"Virgin Islands, U.S.",wlf:"Wallis and Futuna",esh:"Western Sahara",yem:"Yemen",zmb:"Zambia",zwe:"Zimbabwe"},empty:"",required:"This field is required",valid:"",invalid:"This field is invalid",months:["January","February","March","April","May","June","July","August","September","October","November","December"],timeUnits:{SECOND:"seconds",MINUTE:"minutes",HOUR:"hours",DAY:"days",MONTH:"months",YEAR:"years"}}})})(jQuery);(function(b){var a=b.alpaca;a.styleInjections={};a.registerView({id:"VIEW_WEB_DISPLAY",parent:"VIEW_BASE",title:"Default Web Display View",description:"Default web edit view which goes though field hierarchy.",type:"view",platform:"web",displayReadonly:true,templates:{controlField:'<div class="alpaca-data-container">{{if options.label}}<div class="alpaca-data-label">${options.label}</div>{{/if}}<div class="alpaca-data">&nbsp;${data}</div></div>',fieldSetOuterEl:'<div class="ui-widget ui-widget-content">{{html this.html}}</div>',fieldSetLegend:'{{if options.label}}<div class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</div>{{/if}}',fieldSetItemsContainer:"<div>{{html this.html}}</div>",fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',controlFieldContainer:"<div>{{html this.html}}</div>",arrayToolbar:"",arrayItemToolbar:""}});a.registerView({id:"VIEW_WEB_EDIT",parent:"VIEW_BASE",title:"Default Web Edit View",description:"Default web edit view which goes though field hierarchy.",type:"edit",platform:"web",displayReadonly:true,templates:{controlFieldOuterEl:"<span>{{html this.html}}</span>",controlFieldMessage:'<div><span class="ui-icon ui-icon-alert"></span><span class="alpaca-controlfield-message-text">${message}</span></div>',controlFieldLabel:'{{if options.label}}<div class="{{if options.labelClass}}${options.labelClass}{{/if}}"><div>${options.label}</div></div>{{/if}}',controlFieldHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}"><span class="ui-icon ui-icon-info"></span><span class="alpaca-controlfield-helper-text">${options.helper}</span></div>{{/if}}',controlFieldContainer:"<div>{{html this.html}}</div>",controlField:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldLabel")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldContainer",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldHelper")}}{{/wrap}}{{/wrap}}',fieldSetOuterEl:"<fieldset>{{html this.html}}</fieldset>",fieldSetMessage:'<div><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span><span>${message}</span></div>',fieldSetLegend:'{{if options.label}}<legend class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</div>{{/if}}',fieldSetItemsContainer:"<div>{{html this.html}}</div>",fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:"<div></div>",formFieldsContainer:"<div>{{html this.html}}</div>",formButtonsContainer:'<div>{{if options.buttons}}{{each(k,v) options.buttons}}<button data-key="${k}" class="alpaca-form-button alpaca-form-button-${k}" {{each(k1,v1) v}}${k1}="${v1}"{{/each}}>${v.value}</button>{{/each}}{{/if}}</div>',form:'<form>{{html Alpaca.fieldTemplate(this,"formFieldsContainer")}}{{html Alpaca.fieldTemplate(this,"formButtonsContainer")}}</form>',wizardStep:'<div class="alpaca-clear"></div>',wizardNavBar:"<div></div>",wizardPreButton:"<button>Back</button>",wizardNextButton:"<button>Next</button>",wizardDoneButton:"<button>Done</button>",wizardStatusBar:'<ol id="${id}">{{each(i,v) titles}}<li id="stepDesc${i}"><div><strong><span>${v.title}</span>${v.description}</strong></div></li>{{/each}}</ol>'}});a.registerView({id:"VIEW_WEB_CREATE",parent:"VIEW_WEB_EDIT",title:"Default Web Create View",description:"Default web create view which doesn't bind initial data.",type:"create",displayReadonly:false})})(jQuery);(function(c){var b=c.alpaca;var a={controlFieldOuterEl:'<span class="alpaca-view-web-list">{{html this.html}}</span>',controlFieldMessage:'<div><span class="ui-icon ui-icon-alert"></span><span class="alpaca-controlfield-message-text">${message}</span></div>',controlFieldLabel:'{{if options.label}}<label for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</label>{{/if}}',controlFieldHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}"><span class="ui-icon ui-icon-info"></span><span class="alpaca-controlfield-helper-text">${options.helper}</span></div>{{/if}}',controlFieldContainer:"<div>{{html this.html}}</div>",controlField:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldLabel")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldContainer",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldHelper")}}{{/wrap}}{{/wrap}}',fieldSetOuterEl:'<fieldset class="alpaca-view-web-list">{{html this.html}}</fieldset>',fieldSetMessage:'<div><span class="ui-icon ui-icon-alert alpaca-fieldset-message-list-view"></span><span>${message}</span></div>',fieldSetLegend:'{{if options.label}}<legend class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</div>{{/if}}',fieldSetItemsContainer:"<ol>{{html this.html}}</ol>",fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:'<li style="list-style:none;"></li>',itemLabel:'{{if options.itemLabel}}<label for="${id}" class="alpaca-controlfield-label alpaca-controlfield-label-list-view"><span class="alpaca-controlfield-item-label-list-view">${options.itemLabel}{{if index}} <span class="alpaca-item-label-counter">${index}</span></span>{{/if}}</label>{{/if}}'};b.registerView({id:"VIEW_WEB_DISPLAY_LIST",parent:"VIEW_WEB_DISPLAY",title:"Web Display View List Style",description:"Web display view based on list styles.",legendStyle:"link",templates:a,styles:{},fields:{"/":{templates:{fieldSetItemsContainer:'<ol class="alpaca-fieldset-itemscontainer-list-view-top">{{html this.html}}</ol>',fieldSetItemContainer:'<li class="alpaca-fieldset-itemcontainer-list-view-top"></li>'}}}});b.registerView({id:"VIEW_WEB_EDIT_LIST",parent:"VIEW_WEB_EDIT",title:"Web Edit View List Style",description:"Web edit view based on list styles.",legendStyle:"link",templates:a,styles:{},fields:{"/":{templates:{fieldSetItemsContainer:'<ol class="alpaca-fieldset-itemscontainer-list-view-top">{{html this.html}}</ol>',fieldSetItemContainer:'<li class="alpaca-fieldset-itemcontainer-list-view-top"></li>'}}}});b.registerView({id:"VIEW_WEB_CREATE_LIST",parent:"VIEW_WEB_CREATE",title:"Web Create View List Style",description:"Web create view based on list styles.",legendStyle:"link",templates:a,styles:{},fields:{"/":{templates:{fieldSetItemsContainer:'<ol class="alpaca-fieldset-itemscontainer-list-view-top">{{html this.html}}</ol>',fieldSetItemContainer:'<li class="alpaca-fieldset-itemcontainer-list-view-top"></li>'}}}})})(jQuery);(function(b){var a=b.alpaca;a.styleInjections["jquery-ui"]={field:function(c){c.addClass("ui-widget")},required:function(c){b('<span class="ui-icon ui-icon-star"></span>').prependTo(c)},error:function(c){c.addClass("ui-state-error")},errorMessage:function(c){c.addClass("ui-state-error-text")},removeError:function(c){c.removeClass("ui-state-error")},container:function(c){c.addClass("ui-widget-content")},wizardStatusBar:function(c){c.addClass("ui-widget-header ui-corner-all")},wizardCurrentStep:function(c){c.addClass("ui-state-highlight ui-corner-all")},wizardUnCurrentStep:function(c){c.removeClass("ui-state-highlight ui-corner-all")},containerExpandedIcon:"ui-icon-circle-arrow-s",containerCollapsedIcon:"ui-icon-circle-arrow-e",commonIcon:"ui-icon",addIcon:"ui-icon-circle-plus",removeIcon:"ui-icon-circle-minus",upIcon:"ui-icon-circle-arrow-n",downIcon:"ui-icon-circle-arrow-s",wizardPreIcon:"ui-icon-triangle-1-w",wizardNextIcon:"ui-icon-triangle-1-e",wizardDoneIcon:"ui-icon-triangle-1-e",buttonBeautifier:function(d,c,f){d.addClass("ui-button ui-widget ui-state-default ui-corner-all");if(f){d.addClass("ui-button-text-icon-primary")}else{d.addClass("ui-button-icon-only")}var e=d.html();d.attr("title",e);d.empty().append('<span class="ui-button-icon-primary ui-icon alpaca-fieldset-legend-button '+c+'"></span><span class="ui-button-text">'+e+"</span>");d.hover(function(){if(!d.hasClass("alpaca-fieldset-array-item-toolbar-disabled")){b(this).addClass("ui-state-hover")}},function(){if(!d.hasClass("alpaca-fieldset-array-item-toolbar-disabled")){b(this).removeClass("ui-state-hover")}})}};a.registerView({id:"VIEW_JQUERYUI_DISPLAY",parent:"VIEW_WEB_DISPLAY",title:"Web Display View for jQuery UI",description:"Web Display View for jQuery UI",style:"jquery-ui",ui:"jquery-ui"});a.registerView({id:"VIEW_JQUERYUI_EDIT",parent:"VIEW_WEB_EDIT",title:"Web Edit View for jQuery UI",description:"Web Edit View for jQuery UI",style:"jquery-ui",ui:"jquery-ui"});a.registerView({id:"VIEW_JQUERYUI_CREATE",parent:"VIEW_WEB_CREATE",title:"Web Create View for jQuery UI",description:"Web Create View for jQuery UI",style:"jquery-ui",ui:"jquery-ui"});a.registerView({id:"VIEW_JQUERYUI_EDIT_LIST",parent:"VIEW_WEB_EDIT_LIST",title:"JQuery UI Edit View List Style",description:"JQuery UI edit view based on list styles.",style:"jquery-ui",ui:"jquery-ui"});a.registerView({id:"VIEW_JQUERYUI_CREATE_LIST",parent:"VIEW_WEB_CREATE_LIST",title:"JQuery UI Create View List Style",description:"JQuery UI create view based on list styles.",style:"jquery-ui",ui:"jquery-ui"})})(jQuery);(function(c){var b=c.alpaca;b.styleInjections["jquery-mobile"]={array:function(d){if(d){if(d.find('[data-role="fieldcontain"]').fieldcontain){d.find('[data-role="fieldcontain"]').fieldcontain();d.find('[data-role="fieldcontain"]').find("[type='radio'], [type='checkbox']").checkboxradio();d.find('[data-role="fieldcontain"]').find("button, [data-role='button'], [type='button'], [type='submit'], [type='reset'], [type='image']").not(".ui-nojs").button();d.find('[data-role="fieldcontain"]').find("input, textarea").not("[type='radio'], [type='checkbox'], button, [type='button'], [type='submit'], [type='reset'], [type='image']").textinput();d.find('[data-role="fieldcontain"]').find("input, select").filter("[data-role='slider'], [data-type='range']").slider();d.find('[data-role="fieldcontain"]').find("select:not([data-role='slider'])").selectmenu();d.find('[data-role="button"]').buttonMarkup();d.find('[data-role="controlgroup"]').controlgroup()}}}};b.registerView({id:"VIEW_MOBILE_DISPLAY",parent:"VIEW_WEB_DISPLAY",title:"Mobile DISPLAY View",description:"Mobile display view using JQuery Mobile Library",type:"view",platform:"mobile",style:"jquery-mobile",ui:"mobile",legendStyle:"link",toolbarStyle:"link",buttonType:"link",templates:{controlField:'<ul data-role="listview"><li>{{if options.label}}<h4>${options.label}</h4>{{/if}}<p><strong>${data}</strong></p></li></ul>',fieldSetOuterEl:'<fieldset data-role="collapsible" id="${id}" data-collapsed="{{if options.collapsed}}true{{else}}false{{/if}}">{{html this.html}}</fieldset>',fieldSetMessage:"<div>* ${message}</div>",fieldSetLegend:'{{if options.label}}<legend for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<h3 class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</h3>{{/if}}',fieldSetItemsContainer:'<div data-role="controlgroup">{{html this.html}}</div>',fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:"<div></div>"},messages:{required:"Required Field",invalid:"Invalid Field"},render:function(e,f){var d=this;e.render(e.view,function(g){a(g.getEl());if(f){f.call(d,g)}})}});b.registerView({id:"VIEW_MOBILE_EDIT",parent:"VIEW_WEB_EDIT",title:"Mobile Edit View",description:"Mobile edit view using JQuery Mobile Library",type:"edit",platform:"mobile",style:"jquery-mobile",ui:"mobile",legendStyle:"link",toolbarStyle:"link",buttonType:"link",toolbarSticky:true,templates:{controlFieldOuterEl:'<div data-role="fieldcontain">{{html this.html}}</div>',controlFieldMessage:"<div>* ${message}</div>",controlFieldLabel:'{{if options.label}}<label for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</label>{{/if}}',controlFieldHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</div>{{/if}}',controlFieldContainer:'<div data-replace="true">{{html this.html}}</div>',controlField:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldLabel")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldContainer",true)}}{{/wrap}}{{html Alpaca.fieldTemplate(this,"controlFieldHelper")}}{{/wrap}}',fieldSetOuterEl:'<fieldset id="${id}" data-collapsed="{{if options.collapsed}}true{{else}}false{{/if}}">{{html this.html}}</fieldset>',fieldSetMessage:"<div>* ${message}</div>",fieldSetLegend:'{{if options.label}}<legend for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<h3 class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</h3>{{/if}}',fieldSetItemsContainer:'<div data-role="controlgroup">{{html this.html}}</div>',fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:"<div></div>",formFieldsContainer:'<div data-role="content">{{html this.html}}</div>',form:'<form>{{html Alpaca.fieldTemplate(this,"formFieldsContainer")}}{{html Alpaca.fieldTemplate(this,"formButtonsContainer")}}</form>',controlFieldRadio:'<fieldset data-role="controlgroup" class="alpaca-radio-fieldset" id="${id}">{{each selectOptions}}<input type="radio" {{if options.readonly}}readonly="readonly"{{/if}} name="${name}" id="${id}-${$index}" value="${value}" {{if value == data}}checked="checked"{{/if}}/><label for="${id}-${$index}">${text}</label>{{/each}}</fieldset>',controlFieldCheckbox:'<fieldset data-role="controlgroup" class="alpaca-radio-fieldset" id="${id}-0"><input type="checkbox" id="${id}-1" name="${id}-1" {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each options.data}}data-${fieldId}="${value}"{{/each}}/>{{if options.rightLabel}}<label for="${id}-1">${options.rightLabel}</label>{{else}}{{if options.label}}<label for="${id}-1">${options.label}?</label>{{/if}}{{/if}}</fieldset>',arrayItemToolbar:'<div class="alpaca-fieldset-array-item-toolbar" data-role="controlgroup" data-type="horizontal" data-mini="true"><span class="alpaca-fieldset-array-item-toolbar-add" data-role="button" data-icon="add" data-iconpos="notext">Add</span><span class="alpaca-fieldset-array-item-toolbar-remove" data-role="button" data-icon="delete" data-iconpos="notext">Delete</span><span class="alpaca-fieldset-array-item-toolbar-up" data-role="button" data-icon="arrow-u" data-iconpos="notext">Up</span><span class="alpaca-fieldset-array-item-toolbar-down" data-role="button" data-icon="arrow-d" data-iconpos="notext">Down</span></div>',arrayToolbar:'<div class="alpaca-fieldset-array-toolbar" data-role="controlgroup" data-mini="true"><span class="alpaca-fieldset-array-toolbar-icon alpaca-fieldset-array-toolbar-add" data-role="button" data-icon="add" data-inline="true" title="Add">Add</span></div>'},messages:{required:"Required Field",invalid:"Invalid Field"},render:function(e,f){var d=this;e.render(function(g){a(g.getEl());if(f){f.call(d,g)}})}});var a=function(e){var d=e;while(!b.isEmpty(d)&&d.attr("data-role")!=="page"){d=d.parent()}if(!b.isEmpty(d)){c(d).trigger("pagecreate")}};b.registerView({id:"VIEW_MOBILE_CREATE",parent:"VIEW_MOBILE_EDIT",title:"Default Mobile Create View",description:"Default mobile create view which doesn't bind initial data.",type:"create",displayReadonly:false})})(jQuery);(function(b){var a=b.alpaca;a.styleInjections.bootstrap={error:function(e){e.addClass("control-group error")},errorMessage:function(e){e.addClass("")},removeError:function(e){e.removeClass("error")},tooltipErrorMessage:function(f,e){if(b.fn.tooltip){f.tooltip({html:e}).click()}},field:function(e){e.addClass("control-group")},required:function(e){b('<span class="icon-star"></span>&nbsp;').prependTo(e)},container:function(e){e.addClass("")},wizardStatusBar:function(e){e.addClass("ui-widget-header ui-corner-all")},wizardCurrentStep:function(e){e.addClass("ui-state-highlight ui-corner-all")},wizardUnCurrentStep:function(e){e.removeClass("ui-state-highlight ui-corner-all")},commonIcon:"",addIcon:"icon-plus-sign",removeIcon:"icon-minus-sign",upIcon:"icon-chevron-up",downIcon:"icon-chevron-down",wizardPreIcon:"ui-icon-triangle-1-w",wizardNextIcon:"ui-icon-triangle-1-e",wizardDoneIcon:"ui-icon-triangle-1-e",containerExpandedIcon:"icon-circle-arrow-down",containerCollapsedIcon:"icon-circle-arrow-right",buttonBeautifier:function(g,e,i){var h=g.html();g.attr("title",h);var f=i?h:"";g.empty().append('<b class="alpaca-fieldset-legend-button '+e+'"></b><span>'+f+"</span>")}};var d={controlFieldLabel:'{{if options.label}}<label class="control-label {{if options.labelClass}}${options.labelClass}{{/if}}" for="${id}">${options.label}</label>{{/if}}',controlFieldHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}"><i class="icon-info-sign"></i> <span class="alpaca-controlfield-helper-text">${options.helper}</span></div>{{/if}}',controlFieldMessage:'<div><span class="icon-exclamation-sign"></span><span class="alpaca-controlfield-message-text help-inline">${message}</span></div>',arrayToolbar:'<span class="alpaca-fieldset-array-toolbar"><button class="btn alpaca-fieldset-array-toolbar-icon alpaca-fieldset-array-toolbar-add">${addItemLabel}</button></span>',arrayItemToolbar:'<div class="btn-toolbar alpaca-fieldset-array-item-toolbar"><div class="btn-group">{{each(k,v) buttons}}<button class="btn btn-small alpaca-fieldset-array-item-toolbar-icon alpaca-fieldset-array-item-toolbar-${v.feature}">${v.label}</button>{{/each}}</div></div>',controlFieldCheckbox:'<span>{{if options.rightLabel}}<label for="${id}" class="checkbox">{{/if}}<input type="checkbox" id="${id}" {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>{{if options.rightLabel}}${options.rightLabel}</label>{{/if}}</span>',controlFieldRadio:'<div id="${id}" class="alpaca-controlfield-radio">{{if !required}}<label class="alpaca-controlfield-radio-label radio inline"><input type="radio" {{if options.readonly}}readonly="readonly"{{/if}} name="${name}" value=""/>None</label>{{/if}}{{each selectOptions}}<label class="alpaca-controlfield-radio-label radio inline"><input type="radio" {{if options.readonly}}readonly="readonly"{{/if}} name="${name}" value="${value}" {{if value == data}}checked="checked"{{/if}}/>${text}</label>{{/each}}</div>',fieldSetHelper:'{{if options.helper}}<p class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</p>{{/if}}'};var c=function(f,g){var e=this;f.render(function(h){b("select,input,textarea",h.outerEl).addClass("input-xlarge");b("button:submit, button:reset, .alpaca-form-button").addClass("btn");if(g){g.call(e,h)}})};a.registerView({id:"VIEW_BOOTSTRAP_DISPLAY",parent:"VIEW_WEB_DISPLAY",title:"Display View for Bootstrap",description:"Display View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c});a.registerView({id:"VIEW_BOOTSTRAP_EDIT",parent:"VIEW_WEB_EDIT",title:"Edit View for Bootstrap",description:"Edit View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c});a.registerView({id:"VIEW_BOOTSTRAP_CREATE",parent:"VIEW_WEB_CREATE",title:"Create View for Bootstrap",description:"Create View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c});a.registerView({id:"VIEW_BOOTSTRAP_DISPLAY_LIST",parent:"VIEW_WEB_DISPLAY_LIST",title:"Display List View for Bootstrap",description:"Display List View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c});a.registerView({id:"VIEW_BOOTSTRAP_EDIT_LIST",parent:"VIEW_WEB_EDIT_LIST",title:"Edit List View for Bootstrap",description:"Edit List View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c});a.registerView({id:"VIEW_BOOTSTRAP_CREATE_LIST",parent:"VIEW_WEB_CREATE_LIST",title:"Create List View for Bootstrap",description:"Create List View for Bootstrap",style:"bootstrap",ui:"bootstrap",templates:d,render:c})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_WEB_EDIT_TABLE",parent:"VIEW_WEB_EDIT",title:"Web Edit View Table Style",description:"Web edit view based on table styles.",type:"edit",displayReadonly:true,collapsible:false,legendStyle:"link",templates:{controlFieldOuterEl:null,controlFieldLabel:'<td>{{if options.label}}<label for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</label>{{/if}}</td>',controlFieldContainer:'<td data-control="append">{{html this.html}}</td>',controlFieldMessage:'<div><span class="ui-icon ui-icon-alert"></span><span class="alpaca-controlfield-message-text">${message}</span></div>',controlFieldHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}"><span class="ui-icon ui-icon-info"></span><span class="alpaca-controlfield-helper-text">${options.helper}</span></div>{{/if}}',controlField:'{{html Alpaca.fieldTemplate(this,"controlFieldLabel")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldContainer",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldHelper")}}{{/wrap}}',fieldSetOuterEl:'<fieldset class="alpaca-view-web-edit-table">{{html this.html}}</fieldset>',fieldSetMessage:'<div><span class="ui-icon ui-icon-alert alpaca-fieldset-message-table-view"></span><span>${message}</span></div>',fieldSetLegend:'{{if options.label}}<legend class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</div>{{/if}}',fieldSetItemsContainer:"<table><tbody>{{html this.html}}</tbody></table>",fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:"<tr></tr>",itemLabel:'{{if options.itemLabel}}<label for="${id}" class="alpaca-controlfield-label alpaca-controlfield-label-list-view"><span class="alpaca-controlfield-item-label-list-view">${options.itemLabel}{{if index}} <span class="alpaca-item-label-counter">${index}</span></span>{{/if}}</label>{{/if}}'},styles:{},fields:{"/":{templates:{fieldSetItemsContainer:'<table class="alpaca-fieldset-itemscontainer-list-view-top">{{html this.html}}</table>',fieldSetItemContainer:'<tr class="alpaca-fieldset-itemscontainer-list-view-top"></tr>'}}}});a.registerView({id:"VIEW_WEB_CREATE_TABLE",parent:"VIEW_WEB_EDIT_TABLE",title:"Default Web Create View Table Stle",description:"Default web create view (Table Style) which doesn't bind initial data.",type:"create",displayReadonly:false})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_WEB_EDIT_YAML",parent:"VIEW_WEB_EDIT",title:"Web Edit View List Style",description:"Web edit list styled to look like a YAML editor.",type:"edit",displayReadonly:true,collapsible:true,legendStyle:"link",templates:{controlFieldOuterEl:'<span class="alpaca-view-web-edit-yaml" title="${options.helper}">{{html this.html}}</span>',controlFieldMessage:'<div><span class="ui-icon ui-icon-alert"></span><span class="alpaca-controlfield-message-text">${message}</span></div>',controlFieldLabel:'{{if options.label}}<label for="${id}" class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}:</label>{{/if}}',controlFieldHelper:'<span style="display:none" />',controlFieldContainer:"<div>{{html this.html}}</div>",controlField:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldLabel")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"controlFieldContainer",true)}}{{html Alpaca.fieldTemplate(this,"controlFieldHelper")}}{{/wrap}}{{/wrap}}',fieldSetOuterEl:'<fieldset class="alpaca-view-web-edit-yaml">{{html this.html}}</fieldset>',fieldSetMessage:'<div><span class="ui-icon ui-icon-alert alpaca-fieldset-message-list-view"></span><span>${message}</span></div>',fieldSetLegend:'{{if options.label}}<legend class="{{if options.labelClass}}${options.labelClass}{{/if}}">${options.label}</legend>{{/if}}',fieldSetHelper:'{{if options.helper}}<div class="{{if options.helperClass}}${options.helperClass}{{/if}}">${options.helper}</div>{{/if}}',fieldSetItemsContainer:"<ol>{{html this.html}}</ol>",fieldSet:'{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetOuterEl",true)}}{{html Alpaca.fieldTemplate(this,"fieldSetLegend")}}{{html Alpaca.fieldTemplate(this,"fieldSetHelper")}}{{wrap(null, {}) Alpaca.fieldTemplate(this,"fieldSetItemsContainer",true)}}{{/wrap}}{{/wrap}}',fieldSetItemContainer:'<li style="list-style:none;"></li>',itemLabel:'{{if options.itemLabel}}<label for="${id}" class="alpaca-controlfield-label alpaca-controlfield-label-list-view"><span class="alpaca-controlfield-item-label-list-view">${options.itemLabel}{{if index}} <span class="alpaca-item-label-counter">${index}</span></span>{{/if}}</label>{{/if}}'},styles:{},fields:{"/":{templates:{fieldSetItemsContainer:'<ol class="alpaca-fieldset-itemscontainer-list-view-top">{{html this.html}}</ol>',fieldSetItemContainer:'<li class="alpaca-fieldset-itemcontainer-list-view-top"></li>'}}}})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_WEB_EDIT_INLINE",parent:"VIEW_WEB_EDIT",title:"Default Web Edit with fields inlining capabilities",description:"Edit template with form fields inlining capabilities, via options.inline level to display some forms parts inline. Useful to display for example an ArrayField containing ObjectField items in a compact manner.",type:"edit",platform:"web",style:"jquery-ui",displayReadonly:true,templates:{fieldSetOuterEl:'<fieldset class="{{if options.inline}}alpaca-inline{{/if}}">{{html this.html}}</fieldset>',fieldSetItemContainer:'<div class="alpaca-inline-item-container"></div>',arrayItemToolbar:'<div class="alpaca-fieldset-array-item-toolbar" data-role="controlgroup" data-type="horizontal" data-mini="true"><span class="alpaca-fieldset-array-item-toolbar-add" data-role="button" data-icon="add" data-iconpos="notext">Add</span><span class="alpaca-fieldset-array-item-toolbar-remove" data-role="button" data-icon="delete" data-iconpos="notext">Delete</span><span class="alpaca-fieldset-array-item-toolbar-up" data-role="button" data-icon="arrow-u" data-iconpos="notext">Up</span><span class="alpaca-fieldset-array-item-toolbar-down" data-role="button" data-icon="arrow-d" data-iconpos="notext">Down</span></div>'}})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_WEB_EDIT",templates:{twoColumnLayout:'<div class="alpaca-layout-two-column-mask">{{if options.label}}<h3>${options.label}</h3>{{/if}}{{if options.helper}}<h4>${options.helper}</h4>{{/if}}<div class="alpaca-layout-two-column-left alpaca-layout-region" id="leftcolumn"></div><div class="alpaca-layout-two-column-right alpaca-layout-region" id="rightcolumn"></div></div>'}});a.registerView({id:"VIEW_WEB_EDIT_LAYOUT_TWO_COLUMN",parent:"VIEW_WEB_EDIT",title:"Web Edit View with Two-Column Layout",description:"Web edit default view with two-column layout.",layout:{template:"twoColumnLayout"}});a.registerView({id:"VIEW_WEB_EDIT_LIST_LAYOUT_TWO_COLUMN",parent:"VIEW_WEB_EDIT_LIST",title:"Web List Edit View with Two-Column Layout",description:"Web edit list view with two-column layout.",layout:{template:"twoColumnLayout"}})})(jQuery);(function(b){var a=b.alpaca;a.NormalizedView=Base.extend({constructor:function(c){this.id=c},normalize:function(){var l=a.views[this.id];if(!l){a.logError("View compilation failed - view not found: "+this.id);return false}var c=[];var g=l;while(g){c.push(g);var f=g.parent;if(f){var j=a.views[g.parent];if(!j){a.logError("View compilation failed - cannot find parent view: "+f+" for view: "+g.id);return false}g=j}else{g=null}}c=c.reverse();var k=function(p,o,q){var n=o[q];var i=p[q];if(!a.isUndefined(i)&&!a.isUndefined(n)){a.logDebug("View property: "+q+" already has value: "+i+" and overwriting to: "+n)}if(!a.isUndefined(n)){p[q]=n}};var h=function(p,o,q){var n=o[q];var i=p[q];if(!a.isUndefined(i)&&!a.isUndefined(n)){a.logDebug("View property: "+q+" already has function, overwriting")}if(!a.isUndefined(n)){p[q]=n}};var m=function(n,i,p){var o=i[p];if(o){if(!n[p]){n[p]={}}a.mergeObject2(o,n[p])}};for(var e=0;e<c.length;e++){var d=c[e];k(this,d,"type");k(this,d,"displayReadonly");k(this,d,"platform");k(this,d,"device");k(this,d,"style");k(this,d,"ui");k(this,d,"collapsible");k(this,d,"legendStyle");k(this,d,"toolbarStyle");k(this,d,"buttonStyle");k(this,d,"toolbarSticky");k(this,d,"globalTemplate");h(this,d,"render");h(this,d,"postRender");m(this,d,"styles");m(this,d,"templates");m(this,d,"messages");m(this,d,"wizard");m(this,d,"fields");m(this,d,"layout");m(this,d,"compiledTemplates")}a.logDebug("View compilation complete for view: "+this.id);a.logDebug("Final view: ");a.logDebug(JSON.stringify(this,null," "));return true}})})(jQuery);(function(b){var a=b.alpaca;a.RuntimeView=Base.extend({constructor:function(c,d){this.field=d;this.setView(c)},setView:function(c){if(!c){this.id="VIEW_WEB_EDIT";return}var e=a.getNormalizedView(c);if(!e){throw new Error("Runtime view for view id: "+c+" could not find a normalized view")}for(var d in e){if(e.hasOwnProperty(d)){this[d]=e[d]}}},getWizard:function(){return this.getViewParam("wizard")},getGlobalTemplateDescriptor:function(){return this.getTemplateDescriptor("globalTemplate")},getLayout:function(){var c=this.getTemplateDescriptor("layoutTemplate");return{templateDescriptor:c,bindings:this.getViewParam(["layout","bindings"],true)}},getStyles:function(){return this.styles},getTemplateDescriptor:function(c){return a.getTemplateDescriptor(this,c)},getMessage:function(c){var d=this.getViewParam(["messages",a.defaultLocale,c]);return a.isEmpty(d)?this.getViewParam(["messages",c]):d},getViewParam:function(f,d){var c=this.field.path;if(this.fields&&this.fields[c]){var e=this._getConfigVal(this.fields[c],f);if(!a.isEmpty(e)){return e}}if(c&&c.indexOf("[")!=-1&&c.indexOf("]")!=-1){c=c.replace(/\[\d+\]/g,"[*]");if(this.fields&&this.fields[c]){var e=this._getConfigVal(this.fields[c],f);if(!a.isEmpty(e)){return e}}}if(!a.isEmpty(d)&&d&&this.field.path!="/"){return null}return this._getConfigVal(this,f)},_getConfigVal:function(d,e){if(a.isArray(e)){for(var c=0;c<e.length&&!a.isEmpty(d);c++){d=d[e[c]]}}else{if(!a.isEmpty(d)){d=d[e]}}return d},getInjectedStyle:function(f){var e=null;var c={};if(this.style){var d=a.styleInjections[this.style];if(d){a.mergeObject(d,c)}}return e[f]},tmpl:function(c,d){return a.tmpl(this,c,d)}})})(jQuery);(function(b){var a=b.alpaca;a.Field=Base.extend({constructor:function(d,h,l,g,j,f,i){var k=this;this.initializing=true;this.container=d;this.parent=null;this.data=h;this.options=l;this.schema=g;this.connector=f;this.errorCallback=function(m){if(i){i(m)}else{a.defaultErrorCallback.call(k,m)}};this.singleLevelRendering=false;this.view=new a.RuntimeView(j,this);var e=false;if(!this.options){this.options={};e=true}this.id=this.options.id;this.type=this.options.type;if(!this.id){this.id=a.generateId()}var c=false;if(!this.schema){this.schema={};c=true}if(!this.options.label&&this.schema.title!==null){this.options.label=this.schema.title}if(!this.options.helper&&this.schema.description!==null){this.options.helper=this.schema.description}if(a.isEmpty(this.options.readonly)&&!a.isEmpty(this.schema.readonly)){this.options.readonly=this.schema.readonly}if(a.isValEmpty(this.data)&&!a.isEmpty(this.schema["default"])){this.data=this.schema["default"];this.showingDefaultData=true}this.path="/";this.validation={};this._events={};this.isDisplayOnly=function(){return(k.view.type=="view")}},getDefaultFieldTemplateId:function(){return"controlField"},setDefaultTemplateDescriptor:function(){var c=this.view.getTemplateDescriptor(this.getDefaultFieldTemplateId());var d=this.view.getGlobalTemplateDescriptor();var e=this.view.getLayout();var f=false;if(!this.parent){if(d){this.setTemplateDescriptor(d);this.singleLevelRendering=true;f=true}else{if(e&&e.templateDescriptor){this.setTemplateDescriptor(e.templateDescriptor);f=true}}}if(!f&&c){this.setTemplateDescriptor(c)}},setup:function(){if(!this.initializing){this.data=this.getValue()}this.setDefaultTemplateDescriptor();if(a.isUndefined(this.schema.required)){this.schema.required=false}if(a.isUndefined(this.options.validate)){this.options.validate=true}if(a.isUndefined(this.options.disabled)){this.options.disabled=false}if(a.isUndefined(this.options.showMessages)){this.options.showMessages=true}},on:function(c,d){a.logDebug("Adding listener for event: "+c);this._events[c]=d;return this},triggerWithPropagation:function(c,d){this.trigger.call(this,c,d);if(this.parent){this.parent.triggerWithPropagation.call(this.parent,c,d)}},trigger:function(d,g){a.logDebug("Firing event: "+d);var f=this._events[d];var c=null;if(typeof(f)=="function"){a.logDebug("Found event handler, calling: "+d);try{c=f.call(this,g)}catch(h){a.logDebug("The event handler caught an exception: "+d)}}else{a.logDebug("Could not find an event handler for: "+d)}return c},bindData:function(){if(!a.isEmpty(this.data)){this.setValue(this.data)}},render:function(d,e){if(d&&(a.isString(d)||a.isObject(d))){this.view.setView(d)}else{if(a.isEmpty(e)&&a.isFunction(d)){e=d}}if(this.options.label===null&&this.propertyId){this.options.label=this.propertyId}if(this.options.name){this.name=this.options.name}if(!this.name){if(this.parent&&this.parent.name&&this.path){var c=this.path.substring(this.path.lastIndexOf("/")+1);if(c.indexOf("[")!=-1&&c.indexOf("]")!=-1){c=c.substring(c.indexOf("[")+1,c.indexOf("]"))}if(c){this.name=this.parent.name+"_"+c;this.nameCalculated=true}}else{if(this.path){this.name=this.path.replace(/\//g,"").replace(/\[/g,"_").replace(/\]/g,"");this.nameCalculated=true}}}this.setup();this._render(e)},_render:function(e){var d=this;if(this.getEl()){this.getEl().remove()}if(this.options.renderForm){this.options.form.viewType=this.view.type;var c=this.form;if(!c){c=new a.Form(this.container,this.options.form,this.view.id,this.connector,this.errorCallback)}c.render(function(f){d._processRender(f.formFieldsContainer,function(){d.getEl().appendTo(f.formFieldsContainer);f.topControl=d;if(d.view.type&&d.view.type!="view"){f.initEvents()}d.form=f;d.postRender();if(e&&a.isFunction(e)){e(d)}})})}else{this._processRender(this.container,function(){d.getEl().appendTo(d.container);d.postRender();if(e&&a.isFunction(e)){e(d)}})}},_processRender:function(e,h){var i=this;var d=this.getTemplateDescriptor();var c=this.data;if(this.isDisplayOnly()&&typeof(c)=="object"){c=JSON.stringify(c)}var f=i.view.tmpl(d,{id:this.getId(),options:this.options,schema:this.schema,data:c,view:this.view,path:this.path},{});f.appendTo(e);var g=f;if(f.size()>1){f.each(function(l,j){if(b(this).attr("data-control")=="append"){g=b(this)}})}this.setEl(g);if(!this.singleLevelRendering){if(!this.isDisplayOnly()||(!this.isControlField)){this.renderField(function(){if(h){h(this)}})}else{if(h){h(this)}}}else{if(h){h(this)}}},renderField:function(c){},getStyleInjection:function(e,f,d,c){if(this.view.style&&a.styleInjections[this.view.style]&&a.styleInjections[this.view.style][e]){a.styleInjections[this.view.style][e].call(this,f,d,c)}},postRender:function(){if(this.view.type!="view"){this.getStyleInjection("field",this.getEl());this.getEl().addClass("alpaca-field");if(this.getEl().attr("id")===null){this.getEl().attr("id",this.getId()+"-field-outer")}if(a.isEmpty(this.getEl().attr("alpaca-field-id"))){this.getEl().attr("alpaca-field-id",this.getId())}if(this.schema.required){this.getEl().addClass("alpaca-field-required")}else{this.getEl().addClass("alpaca-field-optional")}if(this.options.readonly){this.getEl().addClass("alpaca-field-readonly");b(":input",this.getEl()).attr("readonly","readonly");b("select",this.getEl()).attr("disabled","disabled");b(":radio",this.getEl()).attr("disabled","disabled");b(":checkbox",this.getEl()).attr("disabled","disabled")}var d=function(j,g){if(g){var h=0;var k=null;if(a.isArray(g)){for(h=0;h<g.length;h++){j.addClass(g[h])}}else{if(g.indexOf(",")>-1){k=g.split(",");for(h=0;h<k.length;h++){j.addClass(k[h])}}else{if(g.indexOf(" ")>-1){k=g.split(" ");for(h=0;h<k.length;h++){j.addClass(k[h])}}else{j.addClass(g)}}}}};d(this.getEl(),this.options.fieldClass);var e=this.view.getStyles();if(e){for(var c in e){b(c,this.container).css(e[c])}}if(this.labelDiv&&this.schema.required){this.getStyleInjection("required",this.labelDiv)}if(this.options.disabled){this.disable()}if(this.view.type&&this.view.type=="edit"){this.bindData()}else{if(this.showingDefaultData){this.bindData()}}if(this.view.type=="create"){a.logDebug("Skipping data binding for field: "+this.id+" since view mode is 'create'")}if(this.view.type&&this.view.type!="view"){this.initEvents()}}if(this.options.hidden){this.getEl().hide()}this.initializing=false;var f=(this.view.type=="create");this.hideInitValidationError=a.isValEmpty(this.options.hideInitValidationError)?f:this.options.hideInitValidationError;if(this.view.type!="view"){this.renderValidationState()}this.hideInitValidationError=false;if(!this.view.displayReadonly){b(".alpaca-field-readonly",this.getEl()).hide()}if(this.options.postRender){this.options.postRender(this)}},getEl:function(){return this.outerEl},setEl:function(c){this.outerEl=c},getId:function(){return this.id},getParent:function(){return this.parent},isTopLevel:function(){return a.isEmpty(this.parent)},getValue:function(){return this.data},setValue:function(c){this.data=c;this.triggerUpdate()},setDefault:function(){},getTemplateDescriptor:function(){return this.templateDescriptor},setTemplateDescriptor:function(c){this.templateDescriptor=c},displayMessage:function(d,c){var e=this;b("[id^='"+e.getId()+"-field-message']",e.getEl()).remove();if(d&&d.length>0){b.each(d,function(f,h){if(h.length>0){var g=e.view.getTemplateDescriptor("controlFieldMessage");if(g){e.messageElement=e.view.tmpl(g,{message:h});e.getStyleInjection("errorMessage",e.messageElement);if(e.hideInitValidationError){e.messageElement.addClass("alpaca-controlfield-message-hidden")}else{e.messageElement.addClass("alpaca-controlfield-message")}e.messageElement.attr("id",e.getId()+"-field-message-"+f);if(b(".alpaca-controlfield-message-container",e.getEl()).length){e.messageElement.appendTo(b(".alpaca-controlfield-message-container",e.getEl()))}else{e.messageElement.appendTo(e.getEl())}}e.getStyleInjection("tooltipErrorMessage",e.getEl(),h)}})}},renderValidationState:function(d){var c=function(g,n){if(this.options.validate){if(g&&this.children){for(var k=0;k<this.children.length;k++){c.call(this.children[k],g,true)}}var f=this.isValid();this.getStyleInjection("removeError",this.getEl());this.getEl().removeClass("alpaca-field-invalid alpaca-field-invalid-hidden alpaca-field-valid");if(this.validate()){this.triggerWithPropagation("validated");this.getEl().addClass("alpaca-field-valid")}else{this.triggerWithPropagation("invalidated");if(!this.options.readonly){if(!this.hideInitValidationError){this.getStyleInjection("error",this.getEl());this.getEl().addClass("alpaca-field-invalid")}else{this.getEl().addClass("alpaca-field-invalid-hidden")}}else{a.logWarn("The field (id="+this.getId()+", title="+this.getTitle()+", label="+this.options.label+") is invalid and also read-only")}}var e=this.isValid();if(this.options.showMessages){if(!this.initializing){if(!this.options.readonly){var j=[];for(var l in this.validation){if(!this.validation[l]["status"]){j.push(this.validation[l]["message"])}}this.displayMessage(j,f)}}}if(!n){var h=false;var m=this.parent;while(m){if(m.options&&(m.options.forceRevalidation||m.options.validator)){h=true}m=m.parent}if((f!=e&&this.parent&&this.parent.renderValidationState)||h){this.parent.renderValidationState()}}this._validateCustomValidator()}};c.call(this,d,false)},showHiddenMessages:function(){var c=b(".alpaca-field-invalid-hidden",this.outerEl);c.removeClass("alpaca-field-invalid-hidden");this.getStyleInjection("error",c);c.addClass("alpaca-field-invalid");b(".alpaca-controlfield-message-hidden",this.outerEl).removeClass("alpaca-controlfield-message-hidden").addClass("alpaca-controlfield-message")},updateValidationState:function(g,d){if(this.options.validate){var c=this.isValid();this.validation[g]=d;if(!this.hideInitValidationError){if(!this.options.readonly){if(d&&!d.status){this.getEl().removeClass("alpaca-field-valid");this.getStyleInjection("error",this.getEl());this.getEl().addClass("alpaca-field-invalid")}}}this.validation[g]=d;if(this.options.showMessages){if(!this.initializing){if(!this.hideInitValidationError){if(!this.options.readonly){var f=[];for(var e in this.validation){if(!this.validation[e]["status"]){f.push(this.validation[e]["message"])}}this.displayMessage(f,c)}}}}if(this.isValid()&&this.parent&&this.parent.renderValidationState){this.parent.renderValidationState()}}},validate:function(e){if(this.children&&e){for(var d=0;d<this.children.length;d++){var f=this.children[d];f.validate(e)}}var c=true;if(!this.initializing&&this.options.validate){c=this.handleValidate()}return c},handleValidate:function(){var d=this.validation;var c=this._validateOptional();d.notOptional={message:c?"":this.view.getMessage("notOptional"),status:c};c=this._validateDisallow();d.disallowValue={message:c?"":a.substituteTokens(this.view.getMessage("disallowValue"),[this.schema.disallow.join(",")]),status:c};return d.notOptional["status"]&&d.disallowValue["status"]},_validateCustomValidator:function(){var c=this;if(this.options.validator&&a.isFunction(this.options.validator)){this.options.validator(this,function(d){c.updateValidationState("customValidator",d)})}},_validateOptional:function(){if(this.schema.required&&this.isEmpty()){return false}return true},_validateDisallow:function(){if(!a.isValEmpty(this.schema.disallow)){var e=this.getValue();var d=this.schema.disallow;if(a.isArray(d)){var c=true;b.each(d,function(f,g){if((a.isObject(e)||a.isArray(e))&&a.isString(g)){g=a.parseJSON(g)}if(a.compareObject(e,g)){c=false}});return c}else{if((a.isObject(e)||a.isArray(e))&&a.isString(d)){d=a.parseJSON(d)}return !a.compareObject(e,d)}}return true},triggerUpdate:function(){this.getEl().trigger("fieldupdate")},disable:function(){},enable:function(){},focus:function(){},destroy:function(){if(a&&a.fieldInstances){if(a.fieldInstances[this.getId()]){delete a.fieldInstances[this.getId()]}}this.getEl().remove()},show:function(){if(this.options&&this.options.hidden){return}else{this.getEl().css({display:""});this.onShow()}},onShow:function(){},hide:function(){this.getEl().css({display:"none"});this.onHide()},onHide:function(){},isVisible:function(){return !this.isHidden()},isHidden:function(){return"none"==this.getEl().css("display")},print:function(){if(this.container.printArea){this.container.printArea()}},onDependentReveal:function(){},onDependentConceal:function(){},reload:function(){this.initializing=true;if(!a.isEmpty(this.callback)){this.callback(this,this.renderedCallback)}else{this.render(this.renderedCallback)}},clear:function(){var c=null;if(this.data){c=this.data}this.setValue(c)},isEmpty:function(){return a.isValEmpty(this.getValue())},isValid:function(c){if(c&&this.children){for(var e=0;e<this.children.length;e++){var f=this.children[e];if(!f.isValid(c)){return false}}}if(b.isEmptyObject(this.validation)){return true}else{for(var d in this.validation){if(!this.validation[d].status){return false}}return true}},initEvents:function(){var c=this;if(this.field){this.field.change(function(d){c.onChange.call(c,d);c.trigger("change",d)});this.field.focus(function(d){c.onFocus.call(c,d);c.trigger("focus",d)});this.field.blur(function(d){c.onBlur.call(c,d);c.trigger("blur",d)});this.field.mouseover(function(d){c.onMouseOver.call(c,d);c.trigger("mouseover",d)});this.field.mouseout(function(d){c.onMouseOut.call(c,d);c.trigger("mouseout",d)});b.each(this.options,function(d,f){if(a.startsWith(d,"onField")&&a.isFunction(f)){var e=d.substring(7).toLowerCase();c.field.on(e,function(g){f.call(c,g)})}})}},onFocus:function(c){this.getEl().removeClass("alpaca-field-empty");this.getEl().addClass("alpaca-field-focused")},onBlur:function(c){this.getEl().removeClass("alpaca-field-focused");this.renderValidationState()},onChange:function(c){this.data=this.getValue();this.triggerUpdate()},onMouseOver:function(c){},onMouseOut:function(c){},getControlByPath:function(f){var d=this;if(f){var e=f.split("/");for(var c=0;c<e.length;c++){if(!a.isValEmpty(e[c])){if(d&&d.childrenByPropertyId){if(d.childrenByPropertyId[e[c]]){d=d.childrenByPropertyId[e[c]]}else{return null}}else{return null}}else{return null}}return d}},getFieldType:function(){},getType:function(){},isContainer:function(){return false},getTitle:function(){},getDescription:function(){},getSchemaOfSchema:function(){var c={title:this.getTitle(),description:this.getDescription(),type:"object",properties:{title:{title:"Title",description:"Short description of the property.",type:"string"},description:{title:"Description",description:"Detailed description of the property.",type:"string"},readonly:{title:"Readonly",description:"Property will be readonly if true.",type:"boolean","default":false},required:{title:"Required",description:"Property value must be set if true.",type:"boolean","default":false},"default":{title:"Default",description:"Default value of the property.",type:"any"},type:{title:"Type",description:"Data type of the property.",type:"string",readonly:true},format:{title:"Format",description:"Data format of the property.",type:"string"},disallow:{title:"Disallowed Values",description:"List of disallowed values for the property.",type:"array"},dependencies:{title:"Dependencies",description:"List of property dependencies.",type:"array"}}};if(this.getType&&!a.isValEmpty(this.getType())){c.properties.type["default"]=this.getType();c.properties.type["enum"]=[this.getType()]}return c},getOptionsForSchema:function(){return{fields:{title:{helper:"Field short description",type:"text"},description:{helper:"Field detailed description",type:"textarea"},readonly:{helper:"Field will be read only if checked",rightLabel:"This field is read-only",type:"checkbox"},required:{helper:"Field value must be set if checked",rightLabel:"This field is required",type:"checkbox"},"default":{helper:"Field default value",type:"textarea"},type:{helper:"Field data type",type:"text"},format:{type:"select",dataSource:function(d,e){for(var c in a.defaultFormatFieldMapping){d.selectOptions.push({value:c,text:c})}if(e){e()}}},disallow:{helper:"Disallowed values for the field",itemLabel:"Value",type:"array"},dependencies:{helper:"Field Dependencies",multiple:true,size:3,type:"select",dataSource:function(d,e){if(d.parent&&d.parent.schemaParent&&d.parent.schemaParent.parent){for(var c in d.parent.schemaParent.parent.childrenByPropertyId){if(c!=d.parent.schemaParent.propertyId){d.selectOptions.push({value:c,text:c})}}}if(e){e()}}}}}},getSchemaOfOptions:function(){var c={title:"Options for "+this.getTitle(),description:this.getDescription()+" (Options)",type:"object",properties:{renderForm:{},form:{},id:{title:"Field Id",description:"Unique field id. Auto-generated if not provided.",type:"string"},type:{title:"Field Type",description:"Field type.",type:"string","default":this.getFieldType(),readonly:true},validate:{title:"Validation",description:"Field validation is required if true.",type:"boolean","default":true},showMessages:{title:"Show Messages",description:"Display validation messages if true.",type:"boolean","default":true},disabled:{title:"Disabled",description:"Field will be disabled if true.",type:"boolean","default":false},readonly:{title:"Readonly",description:"Field will be readonly if true.",type:"boolean","default":false},hidden:{title:"Hidden",description:"Field will be hidden if true.",type:"boolean","default":false},label:{title:"Label",description:"Field label.",type:"string"},helper:{title:"Helper",description:"Field help message.",type:"string"},fieldClass:{title:"CSS class",description:"Specifies one or more CSS classes that should be applied to the dom element for this field once it is rendered. Supports a single value, comma-delimited values, space-delimited values or values passed in as an array.",type:"string"},hideInitValidationError:{title:"Hide Initial Validation Errors",description:"Hide initial validation errors if true.",type:"boolean","default":false},focus:{title:"Focus",description:"If true, the initial focus for the form will be set to the first child element (usually the first field in the form). If a field name or path is provided, then the specified child field will receive focus. For example, you might set focus to 'name' (selecting the 'name' field) or you might set it to 'client/name' which picks the 'name' field on the 'client' object.",type:"checkbox","default":true},optionLabels:{title:"Enumerated Value Labels",description:"An array of string labels for items in the enum array",type:"array"}}};if(this.isTopLevel()){c.properties.renderForm={title:"Render Form",description:"Render a FORM tag as the container for the rest of fields if true.",type:"boolean","default":false};c.properties.form={title:"Form",description:"Options for rendering the FORM tag.",type:"object",dependencies:"renderForm",properties:{attributes:{title:"Form Attributes",description:"List of attributes for the FORM tag.",type:"object",properties:{id:{title:"Id",description:"Unique form id. Auto-generated if not provided.",type:"string"},action:{title:"Action",description:"Form submission endpoint",type:"string"},method:{title:"Method",description:"Form submission method","enum":["post","get"],type:"string"},name:{title:"Name",description:"Form name",type:"string"},focus:{title:"Focus",description:"Focus Setting",type:"any"}}},buttons:{title:"Form Buttons",description:"Configuration for form-bound buttons",type:"object",properties:{submit:{type:"object",title:"Submit Button",required:false},reset:{type:"object",title:"Reset button",required:false}}},toggleSubmitValidState:{title:"Toggle Submit Valid State",description:"Toggle the validity state of the Submit button",type:"boolean","default":true}}}}else{delete c.properties.renderForm;delete c.properties.form}return c},getOptionsForOptions:function(){var c={type:"object",fields:{id:{type:"text",readonly:true},type:{type:"text"},validate:{rightLabel:"Enforce validation",type:"checkbox"},showMessages:{rightLabel:"Show validation messages",type:"checkbox"},disabled:{rightLabel:"Disable this field",type:"checkbox"},hidden:{type:"checkbox",rightLabel:"Hide this field"},label:{type:"text"},helper:{type:"textarea"},fieldClass:{type:"text"},hideInitValidationError:{rightLabel:"Hide initial validation errors",type:"checkbox"},focus:{type:"checkbox",rightLabel:"Auto-focus first child field"},optionLabels:{type:"array",items:{type:"string"}}}};if(this.isTopLevel()){c.fields.renderForm={type:"checkbox",rightLabel:"Yes"};c.fields.form={type:"object",dependencies:{renderForm:true},fields:{attributes:{type:"object",fields:{id:{type:"text",readonly:true},action:{type:"text"},method:{type:"select"},name:{type:"text"}}}}}}return c}});a.registerMessages({disallowValue:"{0} are disallowed values.",notOptional:"This field is not optional."})})(jQuery);(function(b){var a=b.alpaca;a.ControlField=a.Field.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f);this.isControlField=true},setDefault:function(){var c=a.isEmpty(this.schema["default"])?"":this.schema["default"];this.setValue(c)},renderField:function(c){},injectField:function(e){var d=b(".alpaca-controlfield-container",this.outerEl);if(d.length){this.fieldContainer=d}else{this.fieldContainer=this.outerEl}var c=b(".alpaca-field-container-field",this.fieldContainer);if(c.length>0){if(c.attr("data-replace")=="true"){c.replaceWith(e)}else{e.appendTo(c)}}else{if(this.fieldContainer.attr("data-replace")=="true"){this.fieldContainer.replaceWith(e)}else{e.prependTo(this.fieldContainer)}}},postRender:function(){var d=b(".alpaca-controlfield-label",this.outerEl);if(d.length){this.labelDiv=d}var c=b(".alpaca-controlfield-helper",this.outerEl);if(c.length){this.helperDiv=c}this.base();this.outerEl.addClass("alpaca-controlfield")},_validateEnum:function(){if(this.schema["enum"]){var c=this.data;if(!this.schema.required&&a.isValEmpty(c)){return true}if(b.inArray(c,this.schema["enum"])>-1){return true}else{return false}}else{return true}},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateEnum();d.invalidValueOfEnum={message:c?"":a.substituteTokens(this.view.getMessage("invalidValueOfEnum"),[this.schema["enum"].join(",")]),status:c};return e&&d.invalidValueOfEnum["status"]},initEvents:function(){this.base();var c=this;if(this.field){this.field.keypress(function(d){c.onKeyPress.call(c,d);c.trigger("keypress",d)});this.field.keyup(function(d){c.onKeyUp.call(c,d);c.trigger("keyup",d)});this.field.keydown(function(d){c.onKeyDown.call(c,d);c.trigger("keydown",d)});this.field.click(function(d){c.onClick.call(c,d);c.trigger("click",d)})}},onKeyPress:function(f){var c=this;var d=this.isValid();if(!d){window.setTimeout(function(){c.renderValidationState()},50)}},onKeyDown:function(c){},onKeyUp:function(c){},onClick:function(c){},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{"enum":{title:"Enumerated Values",description:"List of specific values for this property",type:"array"}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{"enum":{itemLabel:"Value",type:"array"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{name:{title:"Field Name",description:"Field Name.",type:"string"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{name:{type:"text"}}})}});a.registerMessages({invalidValueOfEnum:"This field should have one of the values in {0}."})})(jQuery);(function(b){var a=b.alpaca;a.ContainerField=a.Field.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();var c=true;if(!a.isEmpty(this.view.collapsible)){c=this.view.collapsible}if(!a.isEmpty(this.options.collapsible)){c=this.options.collapsible}this.options.collapsible=c;var d="button";if(!a.isEmpty(this.view.legendStyle)){d=this.view.legendStyle}if(!a.isEmpty(this.options.legendStyle)){d=this.options.legendStyle}this.options.legendStyle=d;this.lazyLoading=false;if(!a.isEmpty(this.options.lazyLoading)){this.lazyLoading=this.options.lazyLoading;if(this.lazyLoading){this.options.collapsed=true}}this.children=[];this.childrenById=[];this.childrenByPropertyId=[];this.expandedIcon="";this.collapsedIcon="";this.commonIcon="";this.addIcon="";this.removeIcon="";this.upIcon="";this.downIcon="";if(this.view.style&&a.styleInjections[this.view.style]){if(a.styleInjections[this.view.style]["commonIcon"]){this.commonIcon=a.styleInjections[this.view.style]["commonIcon"]}if(a.styleInjections[this.view.style]["containerExpandedIcon"]){this.expandedIcon=a.styleInjections[this.view.style]["containerExpandedIcon"]}if(a.styleInjections[this.view.style]["containerCollapsedIcon"]){this.collapsedIcon=a.styleInjections[this.view.style]["containerCollapsedIcon"]}if(a.styleInjections[this.view.style]["buttonBeautifier"]){this.buttonBeautifier=a.styleInjections[this.view.style]["buttonBeautifier"]}if(a.styleInjections[this.view.style]["addIcon"]){this.addIcon=a.styleInjections[this.view.style]["addIcon"]}if(a.styleInjections[this.view.style]["removeIcon"]){this.removeIcon=a.styleInjections[this.view.style]["removeIcon"]}if(a.styleInjections[this.view.style]["upIcon"]){this.upIcon=a.styleInjections[this.view.style]["upIcon"]}if(a.styleInjections[this.view.style]["downIcon"]){this.downIcon=a.styleInjections[this.view.style]["downIcon"]}}},getDefaultFieldTemplateId:function(){return"fieldSet"},setDefaultTemplateDescriptor:function(){this.base()},addChild:function(d,c){if(!a.isEmpty(c)){this.children.splice(c,0,d)}else{this.children.push(d)}this.childrenById[d.getId()]=d;if(d.propertyId){this.childrenByPropertyId[d.propertyId]=d}d.parent=this},initEvents:function(){var d=this;if(this.labelDiv){if(this.options.collapsible){this.labelDiv.addClass("legend-expanded");this.fieldSetDiv.addClass("fieldset-expanded");var c=this.expandedIcon;if(!a.isEmpty(this.options.collapsed)&&this.options.collapsed){c=this.collapsedIcon;this.labelDiv.nextAll(".alpaca-fieldset-helper").slideToggle(500);this.labelDiv.nextAll(".alpaca-fieldset-items-container").slideToggle(500);this.labelDiv.nextAll(".alpaca-fieldset-array-toolbar").slideToggle(500);this.fieldSetDiv.toggleClass("fieldset-expanded");this.fieldSetDiv.toggleClass("fieldset-collapsed");this.labelDiv.toggleClass("legend-expanded");this.labelDiv.toggleClass("legend-collapsed")}if(this.options.legendStyle=="link"){b('<span class="'+this.commonIcon+" "+c+' alpaca-fieldset-legend-link"></span>').prependTo(this.labelDiv);this.labelDiv.click(function(){d.fieldSetDiv.toggleClass("fieldset-collapsed");d.fieldSetDiv.toggleClass("fieldset-expanded");b(this).toggleClass("legend-collapsed");b(this).toggleClass("legend-expanded");b(".alpaca-fieldset-legend-link",this).toggleClass(d.collapsedIcon).toggleClass(d.expandedIcon);b(this).nextAll(".alpaca-fieldset-helper").slideToggle(500);b(this).nextAll(".alpaca-fieldset-items-container").slideToggle(500);b(this).nextAll(".alpaca-fieldset-array-toolbar").slideToggle(500)})}if(this.options.legendStyle=="button"){if(this.buttonBeautifier){this.buttonBeautifier.call(this,this.labelDiv,c,true)}this.labelDiv.click(function(){d.fieldSetDiv.toggleClass("fieldset-collapsed");d.fieldSetDiv.toggleClass("fieldset-expanded");b(this).toggleClass("legend-collapsed");b(this).toggleClass("legend-expanded");b(".alpaca-fieldset-legend-button",this).toggleClass(d.collapsedIcon).toggleClass(d.expandedIcon);b(this).nextAll(".alpaca-fieldset-helper").slideToggle(500);b(this).nextAll(".alpaca-fieldset-items-container").slideToggle(500);b(this).nextAll(".alpaca-fieldset-array-toolbar").slideToggle(500)})}}}},clear:function(c){a.each(this.children,function(){this.clear(false)});if(!c){this.triggerUpdate()}},setDefault:function(){if(a.isEmpty(this.schema["default"])){a.each(this.children,function(){this.setDefault()})}else{this.setValue(this.schema["default"])}},destroy:function(){if(this.form){this.form.destroy(true);delete this.form}a.each(this.children,function(){this.destroy()});this.base()},renderItemContainer:function(k,j,f){var h=this;var g=this.view.getTemplateDescriptor("fieldSetItemContainer");if(g){var d=h.view.tmpl(g,{});if(d.attr("data-replace")=="true"){return this.fieldContainer}else{if(k){b("#"+k+"-item-container",this.outerEl).after(d)}else{var e=this.fieldContainer;var c=this.view.getLayout().bindings;if(c){var i=c[f];if(i&&b("#"+i,e).length>0){e=b("#"+i,e)}}d.appendTo(e)}}return d}else{return this.fieldContainer}},renderField:function(f){var g=this;this.getStyleInjection("container",this.outerEl);var d=b(".alpaca-fieldset-legend",this.outerEl);if(d.length){this.labelDiv=d}else{this.outerEl.addClass("alpaca-fieldset-no-legend")}var c=b(".alpaca-fieldset",this.outerEl);if(c.length){this.fieldSetDiv=c}else{this.fieldSetDiv=this.outerEl}var e=b(".alpaca-fieldset-items-container",this.outerEl);if(e.length){this.fieldContainer=e}else{this.fieldContainer=this.outerEl}if(!this.singleLevelRendering&&!this.lazyLoading){this.renderItems()}if(this.lazyLoading){if(this.labelDiv){b(this.labelDiv).click(function(){if(g.lazyLoading){g.renderItems();g.lazyLoading=false}})}}if(f){f()}},onDependentReveal:function(){for(var c=0;c<this.children.length;c++){this.children[c].onDependentReveal()}},onDependentConceal:function(){for(var c=0;c<this.children.length;c++){this.children[c].onDependentConceal()}},renderItems:function(c){},isContainer:function(){return true},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{lazyLoading:{title:"Lazy Loading",description:"Child fields will only be rendered when the fieldset is expanded if this option is set true.",type:"boolean","default":false},collapsible:{title:"Collapsible",description:"Field set is collapsible if true.",type:"boolean","default":true},collapsed:{title:"Collapsed",description:"Field set is initially collapsed if true.",type:"boolean","default":false},legendStyle:{title:"Legend Style",description:"Field set legend style.",type:"string","enum":["button","link"],"default":"button"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{lazyLoading:{rightLabel:"Lazy loading child fields ?",helper:"Lazy loading will be enabled if checked.",type:"checkbox"},collapsible:{rightLabel:"Field set collapsible ?",helper:"Field set is collapsible if checked.",type:"checkbox"},collapsed:{rightLabel:"Field set initially collapsed ?",description:"Field set is initially collapsed if checked.",type:"checkbox"},legendStyle:{type:"select"}}})}})})(jQuery);(function(b){var a=b.alpaca;a.Connector=Base.extend({constructor:function(c){this.id=c},connect:function(d,c){if(d&&a.isFunction(d)){d()}},loadTemplate:function(d,e,c){if(!a.isEmpty(d)){if(a.isUri(d)){this.loadUri(d,false,function(f){if(e&&a.isFunction(e)){e(f)}},function(f){if(c&&a.isFunction(c)){c(f)}})}else{e(d)}}else{c({message:"Empty data source.",reason:"TEMPLATE_LOADING_ERROR"})}},loadData:function(f,c,d){var e=function(){return !a.isEmpty(f)&&a.isUri(f)};if(e()){this.loadJson(f,function(g){c(g)},d)}else{c(f)}},loadSchema:function(f,c,d){var e=function(){return !a.isEmpty(f)&&a.isUri(f)};if(e()){this.loadJson(f,function(g){c(g)},d)}else{c(f)}},loadOptions:function(f,c,d){var e=function(){return !a.isEmpty(f)&&a.isUri(f)};if(e()){this.loadJson(f,function(g){c(g)},d)}else{c(f)}},loadView:function(f,c,d){var e=function(){return !a.isEmpty(f)&&a.isUri(f)};if(e()){this.loadJson(f,function(g){c(g)},d)}else{c(f)}},loadAll:function(d,k,i){var c=d.dataSource;var l=d.schemaSource;var n=d.optionsSource;var j=d.viewSource;if(!l){l=d.schema}if(!n){n=d.options}if(!j){j=d.view}var g={};var e=0;var m=0;var f=function(){if(e===m){if(k&&a.isFunction(k)){k(g.data,g.options,g.schema,g.view)}}};var h=function(o){if(i&&a.isFunction(i)){i(o)}};if(c){m++}if(l){m++}if(n){m++}if(j){m++}if(m===0){f();return}if(c){this.loadData(c,function(o){g.data=o;e++;f()},h)}if(l){this.loadSchema(l,function(o){g.schema=o;e++;f()},h)}if(n){this.loadOptions(n,function(o){g.options=o;e++;f()},h)}if(j){this.loadView(j,function(o){g.view=o;e++;f()},h)}},loadJson:function(d,e,c){this.loadUri(d,true,e,c)},loadUri:function(e,c,g,d){var f={url:e,type:"get",success:function(h){if(g&&a.isFunction(g)){g(h)}},error:function(h,j,i){if(d&&a.isFunction(d)){d({message:"Unable to load data from uri : "+e,stage:"DATA_LOADING_ERROR",details:{jqXHR:h,textStatus:j,errorThrown:i}})}}};if(c){f.dataType="json"}else{f.dataType="text"}b.ajax(f)}});a.registerConnectorClass("default",a.Connector)})(jQuery);(function(b){var a=b.alpaca;a.Form=Base.extend({constructor:function(e,g,c,d,f){var h=this;this.container=e;this.parent=null;this.connector=d;this.errorCallback=f;this.options=g;if(this.options.attributes){this.attributes=this.options.attributes}else{this.attributes={}}if(this.options.buttons){if(this.options.buttons.submit){if(!this.options.buttons.submit.type){this.options.buttons.submit.type="submit"}if(!this.options.buttons.submit.name){this.options.buttons.submit.name="submit"}if(!this.options.buttons.submit.value){this.options.buttons.submit.value="Submit"}}if(this.options.buttons.reset){if(!this.options.buttons.reset.type){this.options.buttons.reset.type="reset"}if(!this.options.buttons.reset.name){this.options.buttons.reset.name="reset"}if(!this.options.buttons.reset.value){this.options.buttons.reset.value="Reset"}}}if(this.attributes.id){this.id=this.attributes.id}else{this.id=a.generateId();this.attributes.id=this.id}if(this.options.buttons&&this.options.buttons.submit&&a.isUndefined(this.options.toggleSubmitValidState)){this.options.toggleSubmitValidState=true}this.viewType=g.viewType;this.view=new a.RuntimeView(c,this)},render:function(c){var d=this;this.templateDescriptor=this.view.getTemplateDescriptor("form");if(this.outerEl){this.outerEl.remove()}this.processRender(this.container,function(){d.outerEl.appendTo(d.container);d.outerEl.addClass("alpaca-form");if(c){c(d)}})},isFormValid:function(){this.topControl.validate(true);var c=this.topControl.isValid(true);this.renderValidationState();return c},validate:function(c){return this.topControl.validate(c)},enableSubmitButton:function(){b(".alpaca-form-button-submit").attrProp("disabled",false);if(b.mobile){try{b(".alpaca-form-button-submit").button("refresh")}catch(c){}}},disableSubmitButton:function(){b(".alpaca-form-button-submit").attrProp("disabled",true);if(b.mobile){try{b(".alpaca-form-button-submit").button("refresh")}catch(c){}}},adjustSubmitButtonState:function(){this.disableSubmitButton();var c=this.isFormValid();console.log("isFormValid: "+c);if(this.isFormValid()){this.enableSubmitButton()}},processRender:function(e,g){var h=this;var c=this.getTemplateDescriptor();var d={id:this.getId(),options:this.options,view:this.view};var f=h.view.tmpl(c,d,{});f.appendTo(e);this.outerEl=f;if(a.isEmpty(this.outerEl.attr("id"))){this.outerEl.attr("id",this.getId()+"-form-outer")}if(a.isEmpty(this.outerEl.attr("alpaca-field-id"))){this.outerEl.attr("alpaca-field-id",this.getId())}if(b(".alpaca-form-fields-container",this.outerEl)){this.formFieldsContainer=b(".alpaca-form-fields-container",this.outerEl)}else{this.formFieldsContainer=this.outerEl}this.field=b("form",this.container);if(this.field){this.field.attr(this.attributes)}this.buttons={};b.each(b(".alpaca-form-button",this.container),function(j,i){b(i).mousedown(function(){var k=b(this);k.attr("button-pushed","true");setTimeout(function(){if(k.attr("button-pushed")&&k.attr("button-pushed")=="true"){k.click()}},150)});b(i).click(function(){b(this).removeAttr("button-pushed")});h.buttons[b(i).attr("data-key")]=b(i)});g()},getEl:function(){return this.outerEl},getId:function(){return this.id},getType:function(){return this.type},getParent:function(){return this.parent},getValue:function(){return this.topControl.getValue()},setValue:function(c){this.topControl.setValue(c)},initEvents:function(){var d=this;if(this.field){var c=this.getValue();b(this.field).submit(c,function(f){return d.onSubmit(f,d)})}if(this.options.toggleSubmitValidState){b(d.topControl.getEl()).bind("fieldupdate",function(){d.adjustSubmitButtonState()});this.adjustSubmitButtonState()}},onSubmit:function(f,d){if(this.submitHandler){f.stopPropagation();var c=this.submitHandler(f,d);if(a.isUndefined(c)){c=false}return c}},registerSubmitHandler:function(c){if(a.isFunction(c)){this.submitHandler=c}},renderValidationState:function(c){this.topControl.renderValidationState(c)},disable:function(){this.topControl.disable()},enable:function(){this.topControl.enable()},focus:function(){this.topControl.focus()},destroy:function(c){this.getEl().remove();if(!c){this.parent.destroy()}},show:function(){this.getEl().css({display:""})},hide:function(){this.getEl().css({display:"none"})},clear:function(c){this.topControl.clear(c)},isEmpty:function(){return this.topControl.isEmpty()},getTemplateDescriptor:function(){return this.templateDescriptor},setTemplateDescriptor:function(c){this.templateDescriptor=c}})})(jQuery);(function(b){var a=b.alpaca;a.Fields.TextField=a.ControlField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.size){this.options.size=40}this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldText")},destroy:function(){this.base();if(this.field&&this.field.typeahead&&this.options.typeahead){b(this.field).typeahead("destroy")}},renderField:function(c){var d=this;if(this.controlFieldTemplateDescriptor){this.field=d.view.tmpl(this.controlFieldTemplateDescriptor,{id:this.getId(),name:this.name,options:this.options});this.injectField(this.field)}if(c){c()}},postRender:function(){var e=this;this.base();if(this.field){if(this.field&&this.field.mask&&this.options.maskString){this.field.mask(this.options.maskString)}if(this.field&&this.field.typeahead&&this.options.typeahead){var c={};for(var d in this.options.typeahead){c[d]=this.options.typeahead[d]}if(!c.name){c.name=this.getId()}b(this.field).typeahead(c);b(this.field).on("typeahead:autocompleted",function(g,f){e.setValue(f.value)});b(this.field).on("typeahead:selected",function(g,f){e.setValue(f.value)});if(c.events){if(c.events.autocompleted){b(this.field).on("typeahead:autocompleted",function(g,f){c.events.autocompleted(g,f)})}if(c.events.selected){b(this.field).on("typeahead:selected",function(g,f){c.events.selected(g,f)})}}}if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-text")}}},getValue:function(){var c=null;if(this.field){c=this.field.val()}else{c=this.base()}return c},setValue:function(c){if(this.field){if(a.isEmpty(c)){this.field.val("")}else{this.field.val(c)}}this.base(c)},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validatePattern();d.invalidPattern={message:c?"":a.substituteTokens(this.view.getMessage("invalidPattern"),[this.schema.pattern]),status:c};c=this._validateMaxLength();d.stringTooLong={message:c?"":a.substituteTokens(this.view.getMessage("stringTooLong"),[this.schema.maxLength]),status:c};c=this._validateMinLength();d.stringTooShort={message:c?"":a.substituteTokens(this.view.getMessage("stringTooShort"),[this.schema.minLength]),status:c};return e&&d.invalidPattern["status"]&&d.stringTooLong["status"]&&d.stringTooShort["status"]},_validatePattern:function(){if(this.schema.pattern){var c=this.getValue();if(c===""&&this.options.allowOptionalEmpty&&!this.schema.required){return true}if(a.isEmpty(c)){c=""}if(!c.match(this.schema.pattern)){return false}}return true},_validateMinLength:function(){if(!a.isEmpty(this.schema.minLength)){var c=this.getValue();if(c===""&&this.options.allowOptionalEmpty&&!this.schema.required){return true}if(a.isEmpty(c)){c=""}if(c.length<this.schema.minLength){return false}}return true},_validateMaxLength:function(){if(!a.isEmpty(this.schema.maxLength)){var c=this.getValue();if(c===""&&this.options.allowOptionalEmpty&&!this.schema.required){return true}if(a.isEmpty(c)){c=""}if(c.length>this.schema.maxLength){return false}}return true},disable:function(){if(this.field){this.field.disabled=true}},enable:function(){if(this.field){this.field.disabled=false}},focus:function(){if(this.field){this.field.focus()}},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{minLength:{title:"Minimal Length",description:"Minimal length of the property value.",type:"number"},maxLength:{title:"Maximum Length",description:"Maximum length of the property value.",type:"number"},pattern:{title:"Pattern",description:"Regular expression for the property value.",type:"string"}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{"default":{helper:"Field default value",type:"text"},minLength:{type:"integer"},maxLength:{type:"integer"},pattern:{type:"text"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{size:{title:"Field Size",description:"Field size.",type:"number","default":40},maskString:{title:"Mask Expression",description:"Expression for the field mask. Field masking will be enabled if not empty.",type:"string"},placeholder:{title:"Field Placeholder",description:"Field placeholder.",type:"string"},typeahead:{title:"Type Ahead",description:"Provides configuration for the $.typeahead plugin if it is available. For full configuration options, see: https://github.com/twitter/typeahead.js"},allowOptionalEmpty:{title:"Allow Optional Empty",description:"Allows this non-required field to validate when the value is empty"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{size:{type:"integer"},maskString:{helper:"a - an alpha character;9 - a numeric character;* - an alphanumeric character",type:"text"},typeahead:{type:"object"},allowOptionalEmpty:{type:"checkbox"}}})},getTitle:function(){return"Single-Line Text"},getDescription:function(){return"Text field for single-line text."},getType:function(){return"string"},getFieldType:function(){return"text"}});a.registerTemplate("controlFieldText",'<input type="text" id="${id}" {{if options.placeholder}}placeholder="${options.placeholder}"{{/if}} {{if options.size}}size="${options.size}"{{/if}} {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>');a.registerMessages({invalidPattern:"This field should have pattern {0}",stringTooShort:"This field should contain at least {0} numbers or characters",stringTooLong:"This field should contain at most {0} numbers or characters"});a.registerFieldClass("text",a.Fields.TextField);a.registerDefaultSchemaFieldMapping("string","text")})(jQuery);(function(b){var a=b.alpaca;a.Fields.TextAreaField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.rows){this.options.rows=5}if(!this.options.cols){this.options.cols=40}this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldTextarea")},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-textarea")}},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateWordCount();d.wordLimitExceeded={message:c?"":a.substituteTokens(this.view.getMessage("wordLimitExceeded"),[this.options.wordlimit]),status:c};return e&&d.wordLimitExceeded["status"]},_validateWordCount:function(){if(this.options.wordlimit&&this.options.wordlimit>-1){var d=this.data;if(d){var c=d.split(" ").length;if(c>this.options.wordlimit){return false}}}return true},setValue:function(c){b(this.field).val(c);this.base(c)},getValue:function(){return b(this.field).val()},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{rows:{title:"Rows",description:"Number of rows",type:"number","default":5},cols:{title:"Columns",description:"Number of columns",type:"number","default":40},wordlimit:{title:"Word Limit",description:"Limits the number of words allowed in the text area.",type:"number","default":-1}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{rows:{type:"integer"},cols:{type:"integer"},wordlimit:{type:"integer"}}})},getTitle:function(){return"Multi-Line Text"},getDescription:function(){return"Textarea field for multiple line text."},getFieldType:function(){return"textarea"}});a.registerMessages({wordLimitExceeded:"The maximum word limit of {0} has been exceeded."});a.registerTemplate("controlFieldTextarea",'<textarea id="${id}" {{if options.rows}}rows="${options.rows}"{{/if}} {{if options.cols}}cols="${options.cols}"{{/if}} {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each options.data}}data-${fieldId}="${value}"{{/each}}/>');a.registerFieldClass("textarea",a.Fields.TextAreaField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.CheckBoxField=a.ControlField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.rightLabel){this.options.rightLabel=""}},onClick:function(c){this.renderValidationState()},renderField:function(d){var e=this;var c=this.view.getTemplateDescriptor("controlFieldCheckbox");if(c){this.field=e.view.tmpl(c,{id:this.getId(),name:this.name,options:this.options});this.injectField(this.field);this.field=b('input[id="'+this.getId()+'"]',this.field);if(this.data){this.setValue(true)}}if(d){d()}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-checkbox")}},getValue:function(){return a.checked(this.field)},setValue:function(c){if(a.isString(c)){c=(c==="true")}a.checked(this.field,c);this.base(c)},disable:function(){this.field.disabled=true},enable:function(){this.field.disabled=false},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{rightLabel:{title:"Option Label",description:"Optional right-hand side label for checkbox field.",type:"string"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{rightLabel:{type:"text"}}})},getTitle:function(){return"Checkbox Field"},getDescription:function(){return"Checkbox Field for boolean data."},getType:function(){return"boolean"},getFieldType:function(){return"checkbox"}});a.registerTemplate("controlFieldCheckbox",'<span><input type="checkbox" id="${id}" {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>{{if options.rightLabel}}<label for="${id}">${options.rightLabel}</label>{{/if}}</span>');a.registerFieldClass("checkbox",a.Fields.CheckBoxField);a.registerDefaultSchemaFieldMapping("boolean","checkbox")})(jQuery);(function(b){var a=b.alpaca;a.Fields.FileField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldFile")},setValue:function(d){var c=this.field;this.field=b(".alpaca-filefield-control",this.fieldContainer);this.base(d);this.field=c},onChange:function(c){this.base(c);if(this.options.selectionHandler){this.processSelectionHandler(c.target.files)}},processSelectionHandler:function(g){if(g&&g.length>0){if(typeof(FileReader)!=="undefined"){var e=[];var f=0;var c=new FileReader();c.onload=(function(){var h=this;return function(j){var i=j.target.result;e.push(i);f++;if(f===g.length){h.options.selectionHandler.call(h,g,e)}}}).call(this);for(var d=0;d<g.length;d++){c.readAsDataURL(g[d])}}}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-file")}},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{selectionHandler:{title:"Selection Handler",description:"Function that should be called when files are selected. Requires HTML5.",type:"boolean","default":false}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{selectionHandler:{type:"checkbox"}}})},getTitle:function(){return"File Field"},getDescription:function(){return"Field for uploading files."},getFieldType:function(){return"file"}});a.registerTemplate("controlFieldFile",'<input type="file" id="${id}" {{if options.size}}size="${options.size}"{{/if}} {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>');a.registerFieldClass("file",a.Fields.FileField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.ListField=a.ControlField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){var c=this;c.base();c.selectOptions=[];if(c.getEnum()){b.each(c.getEnum(),function(d,e){var f=e;if(c.options.optionLabels){if(!a.isEmpty(c.options.optionLabels[d])){f=c.options.optionLabels[d]}else{if(!a.isEmpty(c.options.optionLabels[e])){f=c.options.optionLabels[e]}}}c.selectOptions.push({value:e,text:f})})}},getEnum:function(){if(this.schema&&this.schema["enum"]){return this.schema["enum"]}},getValue:function(c){var d=this;if(a.isArray(c)){b.each(c,function(e,f){b.each(d.selectOptions,function(h,g){if(g.value==f){c[e]=g.value}})})}else{b.each(this.selectOptions,function(f,e){if(e.value==c){c=e.value}})}return c},renderField:function(e){var f=this;if(this.options.dataSource){if(a.isFunction(this.options.dataSource)){this.options.dataSource(this,function(){f._renderField(e)})}else{if(a.isUri(this.options.dataSource)){b.ajax({url:this.options.dataSource,type:"get",dataType:"json",success:function(h){var g=h;if(f.options.dsTransformer&&a.isFunction(f.options.dsTransformer)){g=f.options.dsTransformer(g)}if(g){if(a.isArray(g)){b.each(g,function(i,j){f.selectOptions.push({value:j,text:j})})}if(a.isObject(g)){b.each(g,function(i,j){f.selectOptions.push({value:i,text:j})})}}f._renderField(e)},error:function(g,i,h){f.errorCallback({message:"Unable to load data from uri : "+f.options.dataSource,stage:"DATASOURCE_LOADING_ERROR",details:{jqXHR:g,textStatus:i,errorThrown:h}})}})}else{var d=this.options.dataSource;if(f.options.dsTransformer&&a.isFunction(f.options.dsTransformer)){d=f.options.dsTransformer(d)}if(d){if(a.isArray(d)){b.each(d,function(g,h){f.selectOptions.push({value:h,text:h})})}if(a.isObject(d)){for(var c in d){f.selectOptions.push({value:c,text:d[c]})}}f._renderField(e)}}}}else{this._renderField(e)}},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{"enum":{title:"Enumeration",description:"List of field value options",type:"array",required:true}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{optionLabels:{title:"Option Labels",description:"Labels for options. It can either be a map object or an array field that maps labels to items defined by enum schema property one by one.",type:"array"},dataSource:{title:"Option Datasource",description:"Datasource for generating list of options.",type:"string"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{optionLabels:{itemLabel:"Label",type:"array"},dataSource:{type:"text"}}})}})})(jQuery);(function(b){var a=b.alpaca;a.Fields.RadioField=a.Fields.ListField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(this.options.name){this.name=this.options.name}else{if(!this.name){this.name=this.getId()+"-name"}}if(a.isUndefined(this.options.emptySelectFirst)){this.options.emptySelectFirst=false}},getValue:function(){var c=this.base(b("input:radio[name="+this.name+"]:checked",this.field).val());b.each(this.selectOptions,function(){if(String(this["value"])==c){c=this["value"]}});return c},setValue:function(c){if(c!=this.getValue()){b.each(b("input:radio[name="+this.name+"]",this.field),function(){if(b(this).val()==c){b(this).attr("checked","checked")}else{b(this).removeAttr("checked")}});if(this.options.emptySelectFirst){if(b("input:radio:checked",this.field).length===0){b("input:radio:first",this.field).attr("checked","checked")}}this.base(c)}},_renderField:function(d){var e=this;var c=this.view.getTemplateDescriptor("controlFieldRadio");if(c){this.field=e.view.tmpl(c,{id:this.getId(),options:this.options,selectOptions:this.selectOptions,required:this.schema.required,name:this.name,data:this.data});if(this.options.emptySelectFirst&&this.selectOptions&&this.selectOptions.length>0){this.data=this.selectOptions[0].value;if(b("input:radio:checked",this.field).length===0){b("input:radio:first",this.field).attr("checked","checked")}}if(this.options.vertical){b(".alpaca-controlfield-radio-item",this.field).css("display","block")}this.injectField(this.field)}if(d){d()}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-radio")}},onClick:function(c){this.base(c);var d=this;a.later(25,this,function(){var e=d.getValue();d.setValue(e);d.renderValidationState()})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{name:{title:"Field name",description:"Field name.",type:"string"},emptySelectFirst:{title:"Empty Select First",description:"If the data is empty, then automatically select the first item in the list.",type:"boolean","default":false},vertical:{title:"Position the radio selector items vertically",description:"When true, the radio selector items will be stacked vertically and not horizontally",type:"boolean","default":false}}})},getTitle:function(){return"Radio Group Field"},getDescription:function(){return"Radio Group Field with list of options."},getFieldType:function(){return"radio"}});a.registerTemplate("controlFieldRadio",'<div id="${id}" class="alpaca-controlfield-radio">{{if !required}}<span class="alpaca-controlfield-radio-item"><input type="radio" {{if options.readonly}}readonly="readonly"{{/if}} name="${name}" value=""/><span class="alpaca-controlfield-radio-label">None</span></span>{{/if}}{{each selectOptions}}<span class="alpaca-controlfield-radio-item"><input type="radio" {{if options.readonly}}readonly="readonly"{{/if}} name="${name}" value="${value}" {{if value == data}}checked="checked"{{/if}}/><span class="alpaca-controlfield-radio-label">${text}</span></span>{{/each}}</div>');a.registerFieldClass("radio",a.Fields.RadioField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.SelectField=a.Fields.ListField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(a.isUndefined(this.options.emptySelectFirst)){this.options.emptySelectFirst=false}},getValue:function(){if(this.field){return this.base(this.field.val())}},setValue:function(c){if(a.isArray(c)){if(!a.compareArrayContent(c,this.getValue())){if(!a.isEmpty(c)&&this.field){this.field.val(c)}this.base(c)}}else{if(c!=this.getValue()){if(!a.isEmpty(c)&&this.field){this.field.val(c)}this.base(c)}}},getEnum:function(){if(this.schema){if(this.schema["enum"]){return this.schema["enum"]}else{if(this.schema.type&&this.schema.type=="array"&&this.schema.items&&this.schema.items["enum"]){return this.schema.items["enum"]}}}},_renderField:function(d){var e=this;if(this.schema.type&&this.schema.type=="array"){this.options.multiple=true}var c;if(this.options.multiple&&a.isArray(this.data)){c=this.view.getTemplateDescriptor("controlFieldSelectMultiple")}else{c=this.view.getTemplateDescriptor("controlFieldSelect")}if(c){this.field=e.view.tmpl(c,{id:this.getId(),options:this.options,required:this.schema.required,selectOptions:this.selectOptions,name:this.name,data:this.data});if(a.isUndefined(this.data)&&this.options.emptySelectFirst&&this.selectOptions&&this.selectOptions.length>0){this.data=this.selectOptions[0].value}this.injectField(this.field);if(this.data){this.setValue(this.data)}}if(d){d()}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-select")}},_validateEnum:function(){if(this.schema["enum"]){var d=this.data;if(!this.schema.required&&a.isValEmpty(d)){return true}if(this.options.multiple){var c=true;var e=this;b.each(d,function(g,f){if(b.inArray(f,e.schema["enum"])<=-1){c=false;return false}});return c}else{return(b.inArray(d,this.schema["enum"])>-1)}}else{return true}},onChange:function(c){this.base(c);var d=this;a.later(25,this,function(){var e=d.getValue();d.setValue(e);d.renderValidationState()})},_validateMinItems:function(){if(this.schema.items&&this.schema.items.minItems){if(b(":selected",this.field).length<this.schema.items.minItems){return false}}return true},_validateMaxItems:function(){if(this.schema.items&&this.schema.items.maxItems){if(b(":selected",this.field).length>this.schema.items.maxItems){return false}}return true},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateMaxItems();d.tooManyItems={message:c?"":a.substituteTokens(this.view.getMessage("tooManyItems"),[this.schema.items.maxItems]),status:c};c=this._validateMinItems();d.notEnoughItems={message:c?"":a.substituteTokens(this.view.getMessage("notEnoughItems"),[this.schema.items.minItems]),status:c};return e&&d.tooManyItems["status"]&&d.notEnoughItems["status"]},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{multiple:{title:"Mulitple Selection",description:"Allow multiple selection if true.",type:"boolean","default":false},size:{title:"Displayed Options",description:"Number of options to be shown.",type:"number"},emptySelectFirst:{title:"Empty Select First",description:"If the data is empty, then automatically select the first item in the list.",type:"boolean","default":false}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{multiple:{rightLabel:"Allow mulitple selection ?",helper:"Allow multiple selection if checked",type:"checkbox"},size:{type:"integer"}}})},getTitle:function(){return"Dropdown Select"},getDescription:function(){return"Dropdown select field."},getFieldType:function(){return"select"}});a.registerTemplate("controlFieldSelect",'<select id="${id}" {{if options.readonly}}readonly="readonly"{{/if}} {{if options.multiple}}multiple{{/if}} {{if options.size}}size="${options.size}"{{/if}} {{if name}}name="${name}"{{/if}}><option value="">-</option>{{each(i,value) selectOptions}}<option value="${value}" {{if value == data}}selected="selected"{{/if}}>${text}</option>{{/each}}</select>');a.registerTemplate("controlFieldSelectMultiple",'<select id="${id}" {{if options.readonly}}readonly="readonly"{{/if}} {{if options.multiple}}multiple="multiple"{{/if}} {{if options.size}}size="${options.size}"{{/if}} {{if name}}name="${name}"{{/if}}>{{if !required}}<option value="">None</option>{{/if}}{{each(i,value) selectOptions}}<option value="${value}" {{each(j,val) data}}{{if value == val}}selected="selected"{{/if}}{{/each}}>${text}</option>{{/each}}</select>');a.registerFieldClass("select",a.Fields.SelectField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.NumberField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},getValue:function(){var c=this.field.val();if(a.isValEmpty(c)){return -1}else{return parseFloat(c)}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-number")}},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateNumber();d.stringNotANumber={message:c?"":this.view.getMessage("stringNotANumber"),status:c};c=this._validateDivisibleBy();d.stringDivisibleBy={message:c?"":a.substituteTokens(this.view.getMessage("stringDivisibleBy"),[this.schema.divisibleBy]),status:c};c=this._validateMaximum();d.stringValueTooLarge={message:"",status:c};if(!c){if(this.schema.exclusiveMaximum){d.stringValueTooLarge["message"]=a.substituteTokens(this.view.getMessage("stringValueTooLargeExclusive"),[this.schema.maximum])}else{d.stringValueTooLarge["message"]=a.substituteTokens(this.view.getMessage("stringValueTooLarge"),[this.schema.maximum])}}c=this._validateMinimum();d.stringValueTooSmall={message:"",status:c};if(!c){if(this.schema.exclusiveMinimum){d.stringValueTooSmall["message"]=a.substituteTokens(this.view.getMessage("stringValueTooSmallExclusive"),[this.schema.minimum])}else{d.stringValueTooSmall["message"]=a.substituteTokens(this.view.getMessage("stringValueTooSmall"),[this.schema.minimum])}}return e&&d.stringNotANumber["status"]&&d.stringDivisibleBy["status"]&&d.stringValueTooLarge["status"]&&d.stringValueTooSmall["status"]},_validateNumber:function(){var c=this.field.val();if(a.isValEmpty(c)){return true}var d=this.getValue();if(isNaN(d)){return false}if(!c.match(a.regexps.number)){return false}return true},_validateDivisibleBy:function(){var c=this.getValue();if(!a.isEmpty(this.schema.divisibleBy)){if(c%this.schema.divisibleBy!==0){return false}}return true},_validateMaximum:function(){var c=this.getValue();if(!a.isEmpty(this.schema.maximum)){if(c>this.schema.maximum){return false}if(!a.isEmpty(this.schema.exclusiveMaximum)){if(c==this.schema.maximum&&this.schema.exclusiveMaximum){return false}}}return true},_validateMinimum:function(){var c=this.getValue();if(!a.isEmpty(this.schema.minimum)){if(c<this.schema.minimum){return false}if(!a.isEmpty(this.schema.exclusiveMinimum)){if(c==this.schema.minimum&&this.schema.exclusiveMinimum){return false}}}return true},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{minimum:{title:"Minimum",description:"Minimum value of the property.",type:"number"},maximum:{title:"Maximum",description:"Maximum value of the property.",type:"number"},exclusiveMinimum:{title:"Exclusive Minimum",description:"Property value can not equal the number defined by the minimum schema property.",type:"boolean","default":false},exclusiveMaximum:{title:"Exclusive Maximum",description:"Property value can not equal the number defined by the maximum schema property.",type:"boolean","default":false}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{minimum:{title:"Minimum",description:"Minimum value of the property",type:"number"},maximum:{title:"Maximum",description:"Maximum value of the property",type:"number"},exclusiveMinimum:{rightLabel:"Exclusive minimum ?",helper:"Field value must be greater than but not equal to this number if checked",type:"checkbox"},exclusiveMaximum:{rightLabel:"Exclusive Maximum ?",helper:"Field value must be less than but not equal to this number if checked",type:"checkbox"}}})},getTitle:function(){return"Number Field"},getDescription:function(){return"Field for float numbers."},getType:function(){return"number"},getFieldType:function(){return"number"}});a.registerMessages({stringValueTooSmall:"The minimum value for this field is {0}",stringValueTooLarge:"The maximum value for this field is {0}",stringValueTooSmallExclusive:"Value of this field must be greater than {0}",stringValueTooLargeExclusive:"Value of this field must be less than {0}",stringDivisibleBy:"The value must be divisible by {0}",stringNotANumber:"This value is not a number."});a.registerFieldClass("number",a.Fields.NumberField);a.registerDefaultSchemaFieldMapping("number","number")})(jQuery);(function(b){var a=b.alpaca;a.Fields.ArrayField=a.ContainerField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.options.toolbarStyle=a.isEmpty(this.view.toolbarStyle)?"button":this.view.toolbarStyle;if(!this.options.items){this.options.items={}}var c=false;if(!a.isEmpty(this.view.toolbarSticky)){c=this.view.toolbarSticky}if(!a.isEmpty(this.options.toolbarSticky)){c=this.options.toolbarSticky}if(a.isEmpty(this.options.items.showMoveUpItemButton)){this.options.items.showMoveUpItemButton=true}if(a.isEmpty(this.options.items.showMoveDownItemButton)){this.options.items.showMoveDownItemButton=true}this.options.toolbarSticky=c;if(this.schema.items&&this.schema.uniqueItems){a.mergeObject(this.options,{forceRevalidation:true})}if(a.isEmpty(this.data)){return}if(!a.isArray(this.data)){if(!a.isString(this.data)){return}else{try{this.data=a.parseJSON(this.data);if(!a.isArray(this.data)){a.logWarn("ArrayField parsed data but it was not an array: "+JSON.stringify(this.data));return}}catch(d){this.data=[this.data]}}}},setValue:function(e){var f=this;if(!e||!a.isArray(e)){return}for(var d=0;d<this.children.length;d++){var c=this.children[d];if(e.length>d){c.setValue(e[d])}else{this.removeItem(c.id)}}f.resolveItemSchemaOptions(function(h,g){while(d<e.length){f.addItem(d,h,g,e[d]);d++}})},getValue:function(){if(this.children.length===0&&!this.schema.required){return}var e=[];for(var d=0;d<this.children.length;d++){var c=this.children[d].getValue();if(typeof(c)!=="undefined"){e.push(c)}}return e},getSize:function(){return this.children.length},updateChildrenPathAndName:function(c){var d=this;if(c.children){b.each(c.children,function(f,e){if(c.prePath&&a.startsWith(e.path,c.prePath)){e.prePath=e.path;e.path=e.path.replace(c.prePath,c.path)}if(c.preName&&a.startsWith(e.name,c.preName)){e.preName=e.name;e.name=e.name.replace(c.preName,c.name);if(e.field){b(e.field).attr("name",e.name)}}d.updateChildrenPathAndName(e)})}},updatePathAndName:function(){var c=this;if(this.children){b.each(this.children,function(g,f){var d=f.path.lastIndexOf("/");var e=f.path.substring(d+1);if(e.indexOf("[")!=-1&&e.indexOf("]")!=-1){e=e.substring(e.indexOf("[")+1,e.indexOf("]"))}if(e!=g){f.prePath=f.path;f.path=f.path.substring(0,d)+"/["+g+"]"}if(f.nameCalculated){f.preName=f.name;if(f.parent&&f.parent.name&&f.path){f.name=f.parent.name+"_"+g}else{if(f.path){f.name=f.path.replace(/\//g,"").replace(/\[/g,"_").replace(/\]/g,"")}}b(f.field).attr("name",f.name)}if(!f.prePath){f.prePath=f.path}c.updateChildrenPathAndName(f)})}},moveItem:function(c,d){var e=this;if(this.childrenById[c]){b.each(this.children,function(g,l){if(l.getId()==c){var j;if(d===true){j=g-1;if(j<0){j=e.children.length-1}}else{j=g+1;if(j>=e.children.length){j=0}}if(e.children[j]){var f=e.children[j].getId();var k=b("#"+c+"-item-container");var i=b("#"+f+"-item-container");e.reRenderItem(e.children[g],i);e.reRenderItem(e.children[j],k);var h=e.children[g];e.children[g]=e.children[j];e.children[j]=h;e.updatePathAndName();return false}}})}},removeItem:function(c){if(this._validateEqualMinItems()){this.children=b.grep(this.children,function(e,d){return(e.getId()!=c)});delete this.childrenById[c];b("#"+c+"-item-container",this.outerEl).remove();this.renderValidationState();this.updateToolbarItemsStatus();this.updatePathAndName();this.triggerUpdate()}},updateToolbarItemsStatus:function(){var c=this;if(c._validateEqualMaxItems()){b(".alpaca-fieldset-array-item-toolbar-add",this.outerEl).each(function(d){b(this).removeClass("alpaca-fieldset-array-item-toolbar-disabled")})}else{b(".alpaca-fieldset-array-item-toolbar-add",this.outerEl).each(function(d){b(this).addClass("alpaca-fieldset-array-item-toolbar-disabled")})}if(c._validateEqualMinItems()){b(".alpaca-fieldset-array-item-toolbar-remove",this.outerEl).each(function(d){b(this).removeClass("alpaca-fieldset-array-item-toolbar-disabled")})}else{b(".alpaca-fieldset-array-item-toolbar-remove",this.outerEl).each(function(d){b(this).addClass("alpaca-fieldset-array-item-toolbar-disabled")})}if(this.getSize()===0){this.renderArrayToolbar(this.outerEl)}else{if(this.arrayToolbar){this.arrayToolbar.remove()}}b(".alpaca-item-label-counter",this.outerEl).each(function(d){b(this).html(d+1)})},renderToolbar:function(c){var k=this;if(!this.options.readonly){var j=c.attr("alpaca-id");var f=this.childrenById[j];var h=this.view.getTemplateDescriptor("arrayItemToolbar");if(h){var g=[{feature:"add",icon:k.addIcon,label:(k.options.items&&k.options.items.addItemLabel)?k.options.items.addItemLabel:"Add Item",clickCallback:function(l,i){k.resolveItemSchemaOptions(function(n,m){var o=i.addItem(c.index()+1,n,m,null,l,true);i.enrichElements(o)});return false}},{feature:"remove",icon:k.removeIcon,label:(k.options.items&&k.options.items.removeItemLabel)?k.options.items.removeItemLabel:"Remove Item",clickCallback:function(l,i){i.removeItem(l)}}];if((k.options.items&&k.options.items.showMoveUpItemButton)){g.push({feature:"up",icon:k.upIcon,label:(k.options.items&&k.options.items.moveUpItemLabel)?k.options.items.moveUpItemLabel:"Move Up",clickCallback:function(l,i){i.moveItem(l,true)}})}if((k.options.items&&k.options.items.showMoveDownItemButton)){g.push({feature:"down",icon:k.downIcon,label:(k.options.items&&k.options.items.moveDownItemLabel)?k.options.items.moveDownItemLabel:"Move Down",clickCallback:function(l,i){i.moveItem(l,false)}})}if(k.options.items&&k.options.items.extraToolbarButtons){g=b.merge(g,k.options.items.extraToolbarButtons)}var e=k.view.tmpl(h,{id:j,buttons:g});if(e.attr("id")===null){e.attr("id",j+"-item-toolbar")}for(var d in g){(function(l){var i=e.find(".alpaca-fieldset-array-item-toolbar-"+l.feature);i.click(function(m){return l.clickCallback(j,k,m)});if(k.buttonBeautifier){k.buttonBeautifier.call(k,i,l.icon)}})(g[d])}if(this.options.toolbarSticky){e.prependTo(c)}else{e.hide().prependTo(c);c.hover(function(){b(".alpaca-fieldset-array-item-toolbar",this).show()},function(){b(".alpaca-fieldset-array-item-toolbar",this).hide()})}}}},renderArrayToolbar:function(c){var h=this;var g=c.attr("alpaca-id");var f=this.view.getTemplateDescriptor("arrayToolbar");if(f){var e=h.view.tmpl(f,{id:g,addItemLabel:(h.options.items&&h.options.items.addItemLabel)?h.options.items.addItemLabel:"Add Item"});if(e.attr("id")===null){e.attr("id",g+"-array-toolbar")}if(this.options.toolbarStyle=="link"){b(".alpaca-fieldset-array-toolbar-add",e).click(function(){h.resolveItemSchemaOptions(function(j,i){var k=h.addItem(0,j,i,"",g,true);h.enrichElements(k)})})}else{var d=b(".alpaca-fieldset-array-toolbar-add",e);if(h.buttonBeautifier){h.buttonBeautifier.call(h,d,h.addIcon,true)}d.click(function(){h.resolveItemSchemaOptions(function(j,i){h.addItem(0,j,i,"",g,true)});return false}).wrap("<small></small>")}e.appendTo(c);this.arrayToolbar=e}},reRenderItem:function(d,c){d.container=c;d.render();c.attr("id",d.getId()+"-item-container");c.attr("alpaca-id",d.getId());c.addClass("alpaca-item-container");b(".alpaca-fieldset-array-item-toolbar",c).remove();this.renderToolbar(c);this.enrichElements(c)},addItem:function(d,f,e,c,g,h){return this._addItem(d,f,e,c,g,h)},_addItem:function(e,g,f,d,h,i){var j=this;if(j._validateEqualMaxItems()){if(f===null&&j.options&&j.options.fields&&j.options.fields.item){f=j.options.fields.item}var c=j.renderItemContainer(h);c.alpaca({data:d,options:f,schema:g,view:this.view.id?this.view.id:this.view,connector:this.connector,error:function(k){j.destroy();j.errorCallback.call(j,k)},notTopLevel:true,isDynamicCreation:(i||this.isDynamicCreation),render:function(m){m.parent=j;m.path=j.path+"["+e+"]";m.nameCalculated=true;m.render();c.attr("id",m.getId()+"-item-container");c.attr("alpaca-id",m.getId());c.addClass("alpaca-item-container");if(j.options&&j.options.itemLabel){var k=j.view.getTemplateDescriptor("itemLabel");var l=j.view.tmpl(k,{options:j.options,index:e?e+1:1,id:j.id});l.prependTo(c)}j.addChild(m,e);j.renderToolbar(c);j.renderValidationState();j.updatePathAndName();j.triggerUpdate();if(b(c).siblings().addBack().length>0){b(c).parent().removeClass("alpaca-fieldset-items-container-empty");b(c).siblings().addBack().removeClass("alpaca-item-container-first");b(c).siblings().addBack().removeClass("alpaca-item-container-last");b(c).siblings().addBack().first().addClass("alpaca-item-container-first");b(c).siblings().addBack().last().addClass("alpaca-item-container-last")}b(c).attr("data-alpaca-item-container-item-key",e)}});this.updateToolbarItemsStatus(this.outerEl);return c}},enrichElements:function(c){this.getStyleInjection("array",c)},resolveItemSchemaOptions:function(i){var h=this;var e;if(h.options&&h.options.fields&&h.options.fields.item){e=h.options.fields.item}var d;if(h.schema&&h.schema.items){d=h.schema.items}if(d&&d["$ref"]){var f=d["$ref"];var g=this;var c=[g];while(g.parent){g=g.parent;c.push(g)}a.loadRefSchemaOptions(g,f,function(n,m){var j=0;for(var k=0;k<c.length;k++){if(c[k].schema&&c[k].schema.id===f){j++}}var l=(j>1);if(n){n=a.copyOf(n);delete n.id}if(m){m=a.copyOf(m)}i(n,m,l)})}else{i(d,e)}},renderItems:function(){var c=this;b(this.fieldContainer).addClass("alpaca-fieldset-items-container-empty");if(this.data){c.resolveItemSchemaOptions(function(e,d){b.each(c.data,function(f,g){c.addItem(f,e,d,g,false)});c.updateToolbarItemsStatus()})}else{this.updateToolbarItemsStatus()}},_validateEqualMaxItems:function(){if(this.schema.items&&this.schema.items.maxItems){if(this.getSize()>=this.schema.items.maxItems){return false}}return true},_validateEqualMinItems:function(){if(this.schema.items&&this.schema.items.minItems){if(this.getSize()<=this.schema.items.minItems){return false}}return true},_validateMinItems:function(){if(this.schema.items&&this.schema.items.minItems){if(this.getSize()<this.schema.items.minItems){return false}}return true},_validateMaxItems:function(){if(this.schema.items&&this.schema.items.maxItems){if(this.getSize()>this.schema.items.maxItems){return false}}return true},_validateUniqueItems:function(){if(this.schema.items&&this.schema.uniqueItems){var e={};for(var d=0,c=this.children.length;d<c;++d){if(!e.hasOwnProperty(this.children[d])){e[this.children[d]]=true}else{return false}}}return true},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateUniqueItems();d.valueNotUnique={message:c?"":this.view.getMessage("valueNotUnique"),status:c};c=this._validateMaxItems();d.tooManyItems={message:c?"":a.substituteTokens(this.view.getMessage("tooManyItems"),[this.schema.items.maxItems]),status:c};c=this._validateMinItems();d.notEnoughItems={message:c?"":a.substituteTokens(this.view.getMessage("notEnoughItems"),[this.schema.items.minItems]),status:c};return e&&d.valueNotUnique["status"]&&d.tooManyItems["status"]&&d.notEnoughItems["status"]},getSchemaOfSchema:function(){var c={properties:{items:{title:"Array Items",description:"Schema for array items.",type:"object",properties:{minItems:{title:"Minimum Items",description:"Minimum number of items.",type:"number"},maxItems:{title:"Maximum Items",description:"Maximum number of items.",type:"number"},uniqueItems:{title:"Items Unique",description:"Item values should be unique if true.",type:"boolean","default":false}}}}};if(this.children&&this.children[0]){a.merge(c.properties.items.properties,this.children[0].getSchemaOfSchema())}return a.merge(this.base(),c)},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{items:{type:"object",fields:{minItems:{type:"integer"},maxItems:{type:"integer"},uniqueItems:{type:"checkbox"}}}}})},getSchemaOfOptions:function(){var c={properties:{toolbarSticky:{title:"Sticky Toolbar",description:"Array item toolbar will be aways on if true.",type:"boolean","default":false},items:{title:"Array Items",description:"Options for array items.",type:"object",properties:{extraToolbarButtons:{title:"Extra Toolbar buttons",description:"Buttons to be added next to add/remove/up/down, see examples",type:"array","default":undefined},moveUpItemLabel:{title:"Move Up Item Label",description:"The label to use for the toolbar's 'move up' button.",type:"string","default":"Move Up"},moveDownItemLabel:{title:"Move Down Item Label",description:"The label to use for the toolbar's 'move down' button.",type:"string","default":"Move Down"},removeItemLabel:{title:"Remove Item Label",description:"The label to use for the toolbar's 'remove item' button.",type:"string","default":"Remove Item"},addItemLabel:{title:"Add Item Label",description:"The label to use for the toolbar's 'add item' button.",type:"string","default":"Add Item"},showMoveDownItemButton:{title:"Show Move Down Item Button",description:"Whether to show to the 'Move Down' button on the toolbar.",type:"boolean","default":true},showMoveUpItemButton:{title:"Show Move Up Item Button",description:"Whether to show the 'Move Up' button on the toolbar.",type:"boolean","default":true}}}}};if(this.children&&this.children[0]){a.merge(c.properties.items.properties,this.children[0].getSchemaOfSchema())}return a.merge(this.base(),c)},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{toolbarSticky:{type:"checkbox"},items:{type:"object",fields:{}}}})},getTitle:function(){return"Array Field"},getDescription:function(){return"Field for list of items with same data type or structure."},getType:function(){return"array"},getFieldType:function(){return"array"}});a.registerTemplate("itemLabel",'{{if options.itemLabel}}<div class="alpaca-controlfield-label"><div>${options.itemLabel}{{if index}} <span class="alpaca-item-label-counter">${index}</span>{{/if}}</div></div>{{/if}}');a.registerTemplate("arrayToolbar",'<span class="ui-widget ui-corner-all alpaca-fieldset-array-toolbar"><button class="alpaca-fieldset-array-toolbar-icon alpaca-fieldset-array-toolbar-add">${addItemLabel}</button></span>');a.registerTemplate("arrayItemToolbar",'<div class="ui-widget-header ui-corner-all alpaca-fieldset-array-item-toolbar">{{each(k,v) buttons}}<button class="alpaca-fieldset-array-item-toolbar-icon alpaca-fieldset-array-item-toolbar-${v.feature}">${v.label}</button>{{/each}}</div>');a.registerMessages({notEnoughItems:"The minimum number of items is {0}",tooManyItems:"The maximum number of items is {0}",valueNotUnique:"Values are not unique",notAnArray:"This value is not an Array"});a.registerFieldClass("array",a.Fields.ArrayField);a.registerDefaultSchemaFieldMapping("array","array")})(jQuery);(function(b){var a=b.alpaca;a.Fields.ObjectField=a.ContainerField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.wizardPreIcon="";this.wizardNextIcon="";this.wizardDoneIcon="";if(this.view.style&&a.styleInjections[this.view.style]){if(a.styleInjections[this.view.style]["wizardPreIcon"]){this.wizardPreIcon=a.styleInjections[this.view.style]["wizardPreIcon"]}if(a.styleInjections[this.view.style]["wizardNextIcon"]){this.wizardNextIcon=a.styleInjections[this.view.style]["wizardNextIcon"]}if(a.styleInjections[this.view.style]["wizardDoneIcon"]){this.wizardDoneIcon=a.styleInjections[this.view.style]["wizardDoneIcon"]}}if(a.isEmpty(this.data)){return}if(!a.isObject(this.data)){if(!a.isString(this.data)){return}else{try{this.data=a.parseJSON(this.data);if(!a.isObject(this.data)){a.logWarn("ObjectField parsed data but it was not an object: "+JSON.stringify(this.data));return}}catch(c){return}}}},setValue:function(f){if(!f||!a.isObject(f)){return}for(var c in this.childrenById){var g=this.childrenById[c].propertyId;var e=a.traverseObject(f,g);if(!a.isEmpty(e)){var d=this.childrenById[c];d.setValue(e)}}},getValue:function(){if(this.children.length===0&&!this.schema.required){return}var f={};for(var c=0;c<this.children.length;c++){var e=this.children[c].propertyId;var d=this.children[c].getValue();if(typeof(d)!=="undefined"){if(this.determineAllDependenciesValid(e)){f[e]=d}}}return f},postRender:function(){this.base();if(this.isTopLevel()){if(this.view){this.wizardConfigs=this.view.getWizard();if(this.wizardConfigs){if(a.isUndefined(this.wizardConfigs.validation)){this.wizardConfigs.validation=true}if(!this.wizardConfigs.buttons){this.wizardConfigs.buttons={}}if(!this.wizardConfigs.buttons.done){this.wizardConfigs.buttons.done={}}if(a.isUndefined(this.wizardConfigs.buttons.done.validateOnClick)){this.wizardConfigs.buttons.done.validateOnClick=true}if(!this.wizardConfigs.buttons.prev){this.wizardConfigs.buttons.prev={}}if(a.isUndefined(this.wizardConfigs.buttons.prev.validateOnClick)){this.wizardConfigs.buttons.prev.validateOnClick=true}if(!this.wizardConfigs.buttons.next){this.wizardConfigs.buttons.next={}}if(a.isUndefined(this.wizardConfigs.buttons.next.validateOnClick)){this.wizardConfigs.buttons.next.validateOnClick=true}}var c=this.view.getLayout().templateDescriptor;if(this.wizardConfigs&&this.wizardConfigs.renderWizard){if(c){this.wizard()}else{this.autoWizard()}}}}},getIndex:function(e){if(a.isEmpty(e)){return -1}for(var d=0;d<this.children.length;d++){var c=this.children[d].propertyId;if(c==e){return d}}return -1},resolvePropertySchemaOptions:function(h,j){var i=this;var e=null;if(i.schema&&i.schema.properties&&i.schema.properties[h]){e=i.schema.properties[h]}var c={};if(i.options&&i.options.fields&&i.options.fields[h]){c=i.options.fields[h]}if(e&&e["$ref"]){var f=e["$ref"];var g=this;var d=[g];while(g.parent){g=g.parent;d.push(g)}a.loadRefSchemaOptions(g,f,function(n,l){var k=0;for(var m=0;m<d.length;m++){if(d[m].schema&&d[m].schema.id===f){k++}}var o=(k>1);if(n){n=a.copyOf(n);delete n.id}if(l){l=a.copyOf(l)}j(n,l,o)})}else{j(e,c)}},removeItem:function(d){this.children=b.grep(this.children,function(f,e){return(f.getId()!=d)});var c=this.childrenById[d];delete this.childrenById[d];if(c.propertyId){delete this.childrenByPropertyId[c.propertyId]}c.destroy();this.renderValidationState();this.triggerUpdate()},addItem:function(i,f,e,d,g,h){var j=this;var c=j.renderItemContainer(g,this,i);c.alpaca({data:d,options:e,schema:f,view:this.view.id?this.view.id:this.view,connector:this.connector,error:function(k){j.destroy();j.errorCallback.call(j,k)},notTopLevel:true,isDynamicCreation:(h||this.isDynamicCreation),render:function(l){l.parent=j;l.propertyId=i;if(j.path!="/"){l.path=j.path+"/"+i}else{l.path=j.path+i}l.render();c.attr("id",l.getId()+"-item-container");c.attr("alpaca-id",l.getId());c.addClass("alpaca-fieldset-item-container");if(a.isEmpty(g)){j.addChild(l)}else{var k=j.getIndex(g);if(k!=-1){j.addChild(l,k+1)}else{j.addChild(l)}}if(g){j.renderValidationState()}if(b(c).siblings().addBack().length>0){b(c).parent().removeClass("alpaca-fieldset-items-container-empty");b(c).siblings().addBack().removeClass("alpaca-item-container-first");b(c).siblings().addBack().removeClass("alpaca-item-container-last");b(c).siblings().addBack().first().addClass("alpaca-item-container-first");b(c).siblings().addBack().last().addClass("alpaca-item-container-last")}b(c).attr("data-alpaca-item-container-item-key",i);j.triggerUpdate()}})},renderItems:function(){var i=this;var f={};for(var g in i.data){f[g]=g}var j=i.data;if(i.schema&&i.schema.properties){j=i.schema.properties}var c=function(m){var n=[];for(var l in f){n.push(l)}if(n.length>0){a.logDebug("There were "+n.length+" extra data keys that were not part of the schema "+JSON.stringify(n))}for(var o in j){i.showOrHidePropertyBasedOnDependencies(o)}for(var o in j){i.bindDependencyFieldUpdateEvent(o)}i.renderValidationState()};var k=0;for(var h in j){k++}var d=0;for(var h in j){var e=null;if(i.data){e=i.data[h]}i.resolvePropertySchemaOptions(h,function(n,l,m){if(m){return a.throwErrorWithCallback("Circular reference detected for schema: "+n,i.errorCallback)}if(!n){a.logError("Unable to resolve schema for property: "+h)}i.addItem(h,n,l,e);delete f[h];d++;if(d===k){c()}})}},showOrHidePropertyBasedOnDependencies:function(f){var c=this;var e=this.childrenByPropertyId[f];if(!e){return a.throwErrorWithCallback("Missing property: "+f,c.errorCallback)}var d=this.determineAllDependenciesValid(f);if(d){e.show();e.onDependentReveal()}else{e.hide();e.onDependentConceal()}},determineAllDependenciesValid:function(g){var d=this;var f=this.childrenByPropertyId[g];if(!f){return a.throwErrorWithCallback("Missing property: "+g,d.errorCallback)}var c=f.schema.dependencies;if(!c){return true}var e=true;if(a.isString(c)){e=d.determineSingleDependencyValid(g,c)}else{if(a.isArray(c)){b.each(c,function(h,i){e=e&&d.determineSingleDependencyValid(g,i)})}}return e},bindDependencyFieldUpdateEvent:function(g){var d=this;var e=this.childrenByPropertyId[g];if(!e){return a.throwErrorWithCallback("Missing property: "+g,d.errorCallback)}var c=e.schema.dependencies;if(!c){return true}var f=function(j,i){var h=d.childrenByPropertyId[i];if(h){h.getEl().bind("fieldupdate",function(l){d.showOrHidePropertyBasedOnDependencies(j);for(var k in d.schema.properties){var n=d.schema.properties[k];if(n.dependencies){var m=d.childrenByPropertyId[k];if(a.isString(n.dependencies)&&n.dependencies==j){d.showOrHidePropertyBasedOnDependencies(k);m.triggerUpdate()}else{if(a.isArray(n.dependencies)){b.each(n.dependencies,function(o,p){if(p==j){d.showOrHidePropertyBasedOnDependencies(k);m.triggerUpdate()}})}}}}})}};if(a.isString(c)){f(g,c)}else{if(a.isArray(c)){b.each(c,function(h,i){f(g,i)})}}},determineSingleDependencyValid:function(h,j){var i=this.childrenByPropertyId[j];if(!i){return false}var f=false;var d=this.childrenByPropertyId[h].options.dependencies;if(!d||d.length===0){if(i.getType()==="boolean"&&!this.childrenByPropertyId[h].options.dependencies&&!i.data){f=false}else{f=!a.isValEmpty(i.data)}}else{var e=this.childrenByPropertyId[j];var c=e.data;if(e.getType()==="boolean"&&!c){c=false}if(!a.isEmpty(d[j])&&a.isFunction(d[j])){f=d[j].call(this,c)}else{f=true;if(a.isArray(d[j])){if(d[j]&&b.inArray(c,d[j])==-1){f=false}}else{if(!a.isEmpty(d[j])&&d[j]!=c){f=false}}}}var g=this.childrenByPropertyId[j];if(g&&g.isHidden()){f=false}return f},wizard:function(){var h=this;var f=this.outerEl;var d=b(".alpaca-wizard-step",f);var g=d.size();this.totalSteps=g;var e=[];if(this.wizardConfigs.stepTitles){e=this.wizardConfigs.stepTitles}else{d.each(function(k){var j={title:"",description:""};if(b(".alpaca-wizard-step-title",this)){j.title=b(".alpaca-wizard-step-title",this).html();b(".alpaca-wizard-step-title",this).hide()}if(b(".alpaca-wizard-step-description",this)){j.description=b(".alpaca-wizard-step-description",this).html();b(".alpaca-wizard-step-description",this).hide()}e.push(j)})}var c=this._renderWizardStatusBar(e);if(c){b(f).before(c)}d.each(function(o){var t=b(this).attr("id");var n="step"+o;var r=h.view.getTemplateDescriptor("wizardStep");if(r){var s=h.view.tmpl(r,{});s.attr("id",n);b(this).wrap(s)}var v=n+"-nav-bar";var q=h.view.getTemplateDescriptor("wizardNavBar");if(q){var j=h.view.tmpl(q,{});j.attr("id",v);j.addClass("alpaca-wizard-nav-bar");b(this).append(j)}var l={};var k=h.view.getLayout().bindings;for(var p in k){var u=k[p];if(u==t){l[p]=t}}var m=function(w,i){return function(){var x=true;if(h.wizardConfigs&&h.wizardConfigs.validation){if(i){b.each(i,function(z,y){x=x&h.childrenByPropertyId[z].validate();h.childrenByPropertyId[z].renderValidationState()})}}return x}}(o,l);if(o===0){h._createNextButton(o,true,m);h._selectStep(o)}else{if(o==g-1){b("#step"+o).hide();h._createPrevButton(o,false);h._createDoneButton(o,true,m)}else{b("#step"+o).hide();h._createPrevButton(o,false);h._createNextButton(o,true,m)}}})},autoWizard:function(){var l=this;var d=this.wizardConfigs.steps;if(!d){d=1}this.totalSteps=d;var e=this.wizardConfigs.bindings;if(!e){e={}}for(var k in this.childrenByPropertyId){if(!e.hasOwnProperty(k)){e[k]=1}}for(var j=0;j<d;j++){var f=j+1;var r=[];for(var k in e){if(e[k]==f){if(this.childrenByPropertyId&&this.childrenByPropertyId[k]){r.push("#"+this.childrenByPropertyId[k].container.attr("id"))}}}var h="step"+j;var n=this.view.getTemplateDescriptor("wizardStep");if(n){var o=l.view.tmpl(n,{});o.attr("id",h);b(r.join(",")).wrapAll(o)}var p=h+"-nav-bar";var m=this.view.getTemplateDescriptor("wizardNavBar");if(m){var c=l.view.tmpl(m,{});c.attr("id",p);c.addClass("alpaca-wizard-nav-bar");b("#"+h,this.outerEl).append(c)}}var q=this._renderWizardStatusBar(this.wizardConfigs.stepTitles);if(q){q.prependTo(this.fieldContainer)}for(var j=0;j<d;j++){var g=function(s,i){return function(){var t=true;if(l.view&&l.wizardConfigs&&l.wizardConfigs.validation){if(i){b.each(i,function(v,u){if(u==s+1&&t){t=l.childrenByPropertyId[v].validate();l.childrenByPropertyId[v].validate()}})}}return t}}(j,e);if(j===0){l._createNextButton(j,false,g);l._selectStep(j)}else{if(j==d-1){b("#step"+j).hide();l._createPrevButton(j,false);l._createDoneButton(j,true,g)}else{b("#step"+j).hide();l._createPrevButton(j,false);l._createNextButton(j,false,g)}}}},_renderWizardStatusBar:function(e){var g=this;var f=this.wizardConfigs.statusBar;if(f&&e){var d=this.view.getTemplateDescriptor("wizardStatusBar");if(d){var c=g.view.tmpl(d,{id:this.getId()+"-wizard-status-bar",titles:e});c.addClass("alpaca-wizard-status-bar");this.getStyleInjection("wizardStatusBar",c);return c}}},_createPrevButton:function(f,d,e){if(this.wizardConfigs.buttons&&this.wizardConfigs.buttons.prev){if(!this.wizardConfigs.buttons.prev.validateOnClick){e=null}}var j="step"+f;var h=this;var c=this.view.getTemplateDescriptor("wizardPreButton");if(c){var g=h.view.tmpl(c,{});g.attr("id",j+"-button-pre");g.addClass("alpaca-wizard-button-pre");if(h.buttonBeautifier){h.buttonBeautifier.call(h,g,this.wizardPreIcon,true)}g.click(function(l,k,i){return function(){var m=true;if(i){m=i(l,k)}if(m){b("#"+l).hide();b("#step"+(f-1)).show();h._selectStep(f-1);if(h.wizardConfigs.buttons.prev&&h.wizardConfigs.buttons.prev.onClick){h.wizardConfigs.buttons.prev.onClick()}}return false}}(j,f,e));b("#"+j+"-nav-bar").append(g);if(d){b("#"+j+"-nav-bar").parent().append("<div style='clear:both'></div>")}}},_createNextButton:function(f,c,d){if(this.wizardConfigs.buttons&&this.wizardConfigs.buttons.next){if(!this.wizardConfigs.buttons.next.validateOnClick){d=null}}var j="step"+f;var h=this;var g=this.view.getTemplateDescriptor("wizardNextButton");if(g){var e=h.view.tmpl(g,{});e.attr("id",j+"-button-next");e.addClass("alpaca-wizard-button-next");if(h.buttonBeautifier){h.buttonBeautifier.call(h,e,this.wizardNextIcon,true)}e.click(function(l,k,i){return function(){var m=true;if(i){m=i(l,k)}if(m){b("#"+l).hide();b("#step"+(k+1)).show();h._selectStep(k+1);if(h.wizardConfigs.buttons.next&&h.wizardConfigs.buttons.next.onClick){h.wizardConfigs.buttons.next.onClick()}}return false}}(j,f,d));b("#"+j+"-nav-bar").append(e);if(c){b("#"+j+"-nav-bar").parent().append("<div style='clear:both'></div>")}}},_createDoneButton:function(f,c,d){if(this.wizardConfigs.buttons&&this.wizardConfigs.buttons.done){if(!this.wizardConfigs.buttons.done.validateOnClick){d=null}}var j="step"+f;var h=this;var g=this.view.getTemplateDescriptor("wizardDoneButton");if(g){var e=h.view.tmpl(g,{});e.attr("id",j+"-button-done");e.addClass("alpaca-wizard-button-done");if(h.buttonBeautifier){h.buttonBeautifier.call(h,e,this.wizardDoneIcon,true)}e.click(function(l,k,i){return function(){var m=true;if(i){m=i(l,k)}if(m){b("#"+l+"-nav-bar").append(e);if(c){b("#"+l+"-nav-bar").parent().append("<div style='clear:both'></div>")}if(h.wizardConfigs.buttons.done&&h.wizardConfigs.buttons.done.onClick){h.wizardConfigs.buttons.done.onClick()}}return false}}(j,f,d));b("#"+j+"-nav-bar").append(e);if(c){b("#"+j+"-nav-bar").parent().append("<div style='clear:both'></div>")}}},_selectStep:function(d){var c=b("#"+this.getId()+"-wizard-status-bar li");c.removeClass("current current-has-next");this.getStyleInjection("wizardUnCurrentStep",c);var e=b("#stepDesc"+d);e.addClass("current");this.getStyleInjection("wizardCurrentStep",e);if(d<this.totalSteps-1){b("#stepDesc"+d).addClass("current-has-next")}},getSchemaOfSchema:function(){var e={properties:{properties:{title:"Properties",description:"List of child properties.",type:"object"}}};var c=e.properties.properties;c.properties={};if(this.children){for(var d=0;d<this.children.length;d++){var f=this.children[d].propertyId;c.properties[f]=this.children[d].getSchemaOfSchema();c.properties[f].title=f+" :: "+c.properties[f].title}}return a.merge(this.base(),e)},getSchemaOfOptions:function(){var f=a.merge(this.base(),{properties:{}});var e={properties:{fields:{title:"Field Options",description:"List of options for child fields.",type:"object"}}};var c=e.properties.fields;c.properties={};if(this.children){for(var d=0;d<this.children.length;d++){var g=this.children[d].propertyId;c.properties[g]=this.children[d].getSchemaOfOptions();c.properties[g].title=g+" :: "+c.properties[g].title}}return a.merge(f,e)},getTitle:function(){return"Composite Field"},getDescription:function(){return"Composite field for containing other fields"},getType:function(){return"object"},getFieldType:function(){return"object"}});a.registerFieldClass("object",a.Fields.ObjectField);a.registerDefaultSchemaFieldMapping("object","object")})(jQuery);(function(b){var a=b.alpaca;a.Fields.AnyField=a.ControlField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldAny")},renderField:function(c){if(this.controlFieldTemplateDescriptor){this.field=this.view.tmpl(this.controlFieldTemplateDescriptor,{id:this.getId(),name:this.name,options:this.options});this.injectField(this.field)}if(c){c()}},postRender:function(){this.base()},getValue:function(){return this.field.val()},setValue:function(c){if(a.isEmpty(c)){this.field.val("")}else{this.field.val(c)}this.base(c)},handleValidate:function(){var c=this.base();return c},disable:function(){this.field.disabled=true},enable:function(){this.field.disabled=false},focus:function(){this.field.focus()},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{}})},getTitle:function(){return"Any Field"},getDescription:function(){return"Any field."},getType:function(){return"any"},getFieldType:function(){return"any"}});a.registerTemplate("controlFieldAny",'<input type="text" id="${id}" size="40" {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>');a.registerFieldClass("any",a.Fields.AnyField);a.registerDefaultSchemaFieldMapping("any","any")})(jQuery);(function(b){var a=b.alpaca;a.Fields.HiddenField=a.ControlField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.size){this.options.size=40}this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldHidden")},renderField:function(c){var d=this;if(this.controlFieldTemplateDescriptor){this.field=d.view.tmpl(this.controlFieldTemplateDescriptor,{id:this.getId(),name:this.name,options:this.options});this.injectField(this.field)}if(c){c()}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-hidden")}},getValue:function(){return this.field.val()},setValue:function(c){if(a.isEmpty(c)){this.field.val("")}else{this.field.val(c)}this.base(c)},getTitle:function(){return"Hidden"},getDescription:function(){return"Field for a hidden HTML input"},getType:function(){return"string"},getFieldType:function(){return"hidden"}});a.registerTemplate("controlFieldHidden",'<input type="hidden" id="${id}" {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>');a.registerFieldClass("hidden",a.Fields.HiddenField)})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_BASE",messages:{zh_CN:{required:"&#27492;&#22495;&#24517;&#39035;",invalid:"&#27492;&#22495;&#19981;&#21512;&#26684;",months:["&#19968;&#26376;","&#20108;&#26376;","&#19977;&#26376;","&#22235;&#26376;","&#20116;&#26376;","&#20845;&#26376;","&#19971;&#26376;","&#20843;&#26376;","&#20061;&#26376;","&#21313;&#26376;","&#21313;&#19968;&#26376;","&#21313;&#20108;&#26376;"],timeUnits:{SECOND:"&#31186;",MINUTE:"&#20998;",HOUR:"&#26102;",DAY:"&#26085;",MONTH:"&#26376;",YEAR:"&#24180;"},notOptional:"&#27492;&#22495;&#38750;&#20219;&#36873;",disallowValue:"&#38750;&#27861;&#36755;&#20837;&#21253;&#25324; {0}.",invalidValueOfEnum:"&#20801;&#35768;&#36755;&#20837;&#21253;&#25324; {0}.",notEnoughItems:"&#26368;&#23567;&#20010;&#25968; {0}",tooManyItems:"&#26368;&#22823;&#20010;&#25968; {0}",valueNotUnique:"&#36755;&#20837;&#20540;&#19981;&#29420;&#29305;",notAnArray:"&#19981;&#26159;&#25968;&#32452;",invalidDate:"&#26085;&#26399;&#26684;&#24335;&#22240;&#35813;&#26159; {0}",invalidEmail:"&#20234;&#22969;&#20799;&#26684;&#24335;&#19981;&#23545;, ex: info@cloudcms.com",stringNotAnInteger:"&#19981;&#26159;&#25972;&#25968;.",invalidIPv4:"&#19981;&#26159;&#21512;&#27861;IP&#22320;&#22336;, ex: 192.168.0.1",stringValueTooSmall:"&#26368;&#23567;&#20540;&#26159; {0}",stringValueTooLarge:"&#26368;&#22823;&#20540;&#26159; {0}",stringValueTooSmallExclusive:"&#20540;&#24517;&#39035;&#22823;&#20110; {0}",stringValueTooLargeExclusive:"&#20540;&#24517;&#39035;&#23567;&#20110; {0}",stringDivisibleBy:"&#20540;&#24517;&#39035;&#33021;&#34987; {0} &#25972;&#38500;",stringNotANumber:"&#19981;&#26159;&#25968;&#23383;.",invalidPassword:"&#38750;&#27861;&#23494;&#30721;",invalidPhone:"&#38750;&#27861;&#30005;&#35805;&#21495;&#30721;, ex: (123) 456-9999",invalidPattern:"&#27492;&#22495;&#39035;&#26377;&#26684;&#24335; {0}",stringTooShort:"&#27492;&#22495;&#33267;&#23569;&#38271;&#24230; {0}",stringTooLong:"&#27492;&#22495;&#26368;&#22810;&#38271;&#24230; {0}"}}})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_BASE",messages:{es_ES:{required:"Este campo es obligatorio",invalid:"Este campo es inválido",months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],timeUnits:{SECOND:"segundos",MINUTE:"minutos",HOUR:"horas",DAY:"días",MONTH:"meses",YEAR:"años"},notOptional:"Este campo no es opcional.",disallowValue:"{0} son los valores rechazados.",invalidValueOfEnum:"Este campo debe tener uno de los valores adentro {0}.",notEnoughItems:"El número mínimo de artículos es {0}",tooManyItems:"El número máximo de artículos es {0}",valueNotUnique:"Los valores no son únicos",notAnArray:"Este valor no es un arsenal",invalidDate:"Fecha inválida para el formato {0}",invalidEmail:"Email address inválido, ex: info@cloudcms.com",stringNotAnInteger:"Este valor no es un número entero.",invalidIPv4:"Dirección inválida IPv4, ex: 192.168.0.1",stringValueTooSmall:"El valor mínimo para este campo es {0}",stringValueTooLarge:"El valor míximo para este campo es {0}",stringValueTooSmallExclusive:"El valor de este campo debe ser mayor que {0}",stringValueTooLargeExclusive:"El valor de este campo debe ser menos que {0}",stringDivisibleBy:"El valor debe ser divisible cerca {0}",stringNotANumber:"Este valor no es un número.",invalidPassword:"Contraseña inválida",invalidPhone:"Número de teléfono inválido, ex: (123) 456-9999",invalidPattern:"Este campo debe tener patrón {0}",stringTooShort:"Este campo debe contener por lo menos {0} números o caracteres",stringTooLong:"Este campo debe contener a lo más {0} números o caracteres"}}})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_BASE",messages:{fr_FR:{required:"Ce champ est requis",invalid:"Ce champ est invalide",months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],timeUnits:{SECOND:"secondes",MINUTE:"minutes",HOUR:"heures",DAY:"jours",MONTH:"mois",YEAR:"années"},notOptional:"Ce champ n'est pas optionnel.",disallowValue:"{0} sont des valeurs interdites.",invalidValueOfEnum:"Ce champ doit prendre une des valeurs suivantes : {0}.",notEnoughItems:"Le nombre minimum d'éléments est {0}",tooManyItems:"Le nombre maximum d'éléments est {0}",valueNotUnique:"Les valeurs sont uniques",notAnArray:"Cette valeur n'est pas une liste",invalidDate:"Cette date ne correspond pas au format {0}",invalidEmail:"Adresse de courriel invalide, ex: info@cloudcms.com",stringNotAnInteger:"Cette valeur n'est pas un nombre entier.",invalidIPv4:"Adresse IPv4 invalide, ex: 192.168.0.1",stringValueTooSmall:"La valeur minimale pour ce champ est {0}",stringValueTooLarge:"La valeur maximale pour ce champ est {0}",stringValueTooSmallExclusive:"La valeur doit-être supérieure à {0}",stringValueTooLargeExclusive:"La valeur doit-être inférieure à {0}",stringDivisibleBy:"La valeur doit-être divisible par {0}",stringNotANumber:"Cette valeur n'est pas un nombre.",invalidPassword:"Mot de passe invalide",invalidPhone:"Numéro de téléphone invalide, ex: (123) 456-9999",invalidPattern:"Ce champ doit correspondre au motif {0}",stringTooShort:"Ce champ doit contenir au moins {0} caractères",stringTooLong:"Ce champ doit contenir au plus {0} caractères"}}})})(jQuery);(function(b){var a=b.alpaca;a.registerView({id:"VIEW_BASE",messages:{de_AT:{required:"Eingabe erforderlich",invalid:"Eingabe invalid",months:["Jänner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],timeUnits:{SECOND:"Sekunden",MINUTE:"Minuten",HOUR:"Stunden",DAY:"Tage",MONTH:"Monate",YEAR:"Jahre"},notOptional:"Dieses Feld ist nicht optional",disallowValue:"Diese Werte sind nicht erlaubt: {0}",invalidValueOfEnum:"Diese Feld sollte einen der folgenden Werte enthalten: {0}",notEnoughItems:"Die Mindestanzahl von Elementen ist {0}",tooManyItems:"Die Maximalanzahl von Elementen ist {0}",valueNotUnique:"Diese Werte sind nicht eindeutig",notAnArray:"Keine Liste von Werten",invalidDate:"Falsches Datumsformat: {0}",invalidEmail:"Ungültige e-Mail Adresse, z.B.: info@cloudcms.com",stringNotAnInteger:"Eingabe ist keine Ganz Zahl.",invalidIPv4:"Ungültige IPv4 Adresse, z.B.: 192.168.0.1",stringValueTooSmall:"Die Mindestanzahl von Zeichen ist {0}",stringValueTooLarge:"Die Maximalanzahl von Zeichen ist {0}",stringValueTooSmallExclusive:"Die Anzahl der Zeichen muss größer sein als {0}",stringValueTooLargeExclusive:"Die Anzahl der Zeichen muss kleiner sein als {0}",stringDivisibleBy:"Der Wert muss durch {0} dividierbar sein",stringNotANumber:"Die Eingabe ist keine Zahl",invalidPassword:"Ungültiges Passwort.",invalidPhone:"Ungültige Telefonnummer, z.B.: (123) 456-9999",invalidPattern:"Diese Feld stimmt nicht mit folgender Vorgabe überein {0}",stringTooShort:"Dieses Feld sollte mindestens {0} Zeichen enthalten",stringTooLong:"Dieses Feld sollte höchstens {0} Zeichen enthalten"}}})})(jQuery);
  50 +/*!
  51 +Alpaca Version 1.1.1
  52 +
  53 +Copyright 2013 Gitana Software, Inc.
  54 +
  55 +Licensed under the Apache License, Version 2.0 (the "License");
  56 +you may not use this file except in compliance with the License.
  57 +
  58 +You may obtain a copy of the License at
  59 + http://www.apache.org/licenses/LICENSE-2.0
  60 +
  61 +Unless required by applicable law or agreed to in writing, software
  62 +distributed under the License is distributed on an "AS IS" BASIS,
  63 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  64 +See the License for the specific language governing permissions and
  65 +limitations under the License.
  66 +
  67 +For more information, please contact Gitana Software, Inc. at this
  68 +address:
  69 +
  70 + info@gitanasoftware.com
  71 +*/
  72 +(function(b){var a=b.alpaca;a.Fields.AddressField=a.Fields.ObjectField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.schema={title:"Home Address",type:"object",properties:{street:{title:"Street",type:"array",items:{type:"string",maxLength:30,minItems:0,maxItems:3}},city:{title:"City",type:"string"},state:{title:"State",type:"string","enum":["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY"]},zip:{title:"Zip Code",type:"string",pattern:/^(\d{5}(-\d{4})?)?$/}}};a.merge(this.options,{fields:{zip:{maskString:"99999",size:5},state:{optionLabels:["ALABAMA","ALASKA","AMERICANSAMOA","ARIZONA","ARKANSAS","CALIFORNIA","COLORADO","CONNECTICUT","DELAWARE","DISTRICTOFCOLUMBIA","FEDERATEDSTATESOFMICRONESIA","FLORIDA","GEORGIA","GUAM","HAWAII","IDAHO","ILLINOIS","INDIANA","IOWA","KANSAS","KENTUCKY","LOUISIANA","MAINE","MARSHALLISLANDS","MARYLAND","MASSACHUSETTS","MICHIGAN","MINNESOTA","MISSISSIPPI","MISSOURI","MONTANA","NEBRASKA","NEVADA","NEWHAMPSHIRE","NEWJERSEY","NEWMEXICO","NEWYORK","NORTHCAROLINA","NORTHDAKOTA","NORTHERNMARIANAISLANDS","OHIO","OKLAHOMA","OREGON","PALAU","PENNSYLVANIA","PUERTORICO","RHODEISLAND","SOUTHCAROLINA","SOUTHDAKOTA","TENNESSEE","TEXAS","UTAH","VERMONT","VIRGINISLANDS","VIRGINIA","WASHINGTON","WESTVIRGINIA","WISCONSIN","WYOMING"]}}});if(a.isEmpty(this.options.addressValidation)){this.options.addressValidation=true}},getAddress:function(){var d=this.getValue();if(this.view.type=="view"){d=this.data}var c="";if(d){if(d.street){b.each(d.street,function(e,f){c+=f+" "})}if(d.city){c+=d.city+" "}if(d.state){c+=d.state+" "}if(d.zip){c+=d.zip}}return c},renderField:function(c){this.base();var e=this;b(this.fieldContainer).addClass("alpaca-addressfield");if(this.options.addressValidation&&!this.isDisplayOnly()){b('<div style="clear:both;"></div>').appendTo(this.fieldContainer);var d=b('<div class="alpaca-form-button">Google Map</div>').appendTo(this.fieldContainer);if(d.button){d.button({text:true})}d.click(function(){if(google&&google.maps){var g=new google.maps.Geocoder();var f=e.getAddress();if(g){g.geocode({address:f},function(k,i){if(i==google.maps.GeocoderStatus.OK){var j=e.getId()+"-map-canvas";if(b("#"+j).length===0){b("<div id='"+j+"' class='alpaca-controlfield-address-mapcanvas'></div>").appendTo(e.fieldContainer)}var l=new google.maps.Map(document.getElementById(e.getId()+"-map-canvas"),{zoom:10,center:k[0].geometry.location,mapTypeId:google.maps.MapTypeId.ROADMAP});var h=new google.maps.Marker({map:l,position:k[0].geometry.location})}else{e.displayMessage("Geocoding failed: "+i)}})}}else{e.displayMessage("Google Map API is not installed.")}}).wrap("<small/>");if(this.options.showMapOnLoad){d.click()}}if(c){c()}},isContainer:function(){return false},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{validateAddress:{title:"Address Validation",description:"Enable address validation if true",type:"boolean","default":true},showMapOnLoad:{title:"Whether to show the map when first loaded",type:"boolean"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{validateAddress:{helper:"Address validation if checked",rightLabel:"Enable Google Map for address validation?",type:"checkbox"}}})},getTitle:function(){return"Address"},getDescription:function(){return"Standard US Address with Street, City, State and Zip. Also comes with support for Google map."},getType:function(){return"any"},getFieldType:function(){return"address"}});a.registerFieldClass("address",a.Fields.AddressField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.DateField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.dateFormat){this.options.dateFormat=a.defaultDateFormat}if(!this.options.dateFormatRegex){this.options.dateFormatRegex=a.regexps.date}},postRender:function(){this.base();if(this.field&&b.datepicker){var c=this.options.datepicker;if(!c){c={changeMonth:true,changeYear:true}}if(!c.dateFormat){c.dateFormat=this.options.dateFormat}this.field.datepicker(c);if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-date")}}},onChange:function(c){this.base();this.renderValidationState()},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateDateFormat();d.invalidDate={message:c?"":a.substituteTokens(this.view.getMessage("invalidDate"),[this.options.dateFormat]),status:c};return e&&d.invalidDate["status"]},_validateDateFormat:function(){var c=this.field.val();if(b.datepicker){try{b.datepicker.parseDate(this.options.dateFormat,c);return true}catch(d){return false}}else{return c.match(this.options.dateFormatRegex)}},setValue:function(c){if(c===""){this.base(c);return}this.base(c)},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{format:{title:"Format",description:"Property data format",type:"string","default":"date","enum":["date"],readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{dateFormat:{title:"Date Format",description:"Date format",type:"string","default":a.defaultDateFormat},dateFormatRegex:{title:"Format Regular Expression",description:"Regular expression for validation date format",type:"string","default":a.regexps.date},datepicker:{title:"Date Picker options",description:"Optional configuration to be passed to jQuery UI DatePicker control",type:"any"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{dateFormat:{type:"text"},dateFormatRegex:{type:"text"},datetime:{type:"any"}}})},getTitle:function(){return"Date Field"},getDescription:function(){return"Date Field."},getFieldType:function(){return"date"}});a.registerMessages({invalidDate:"Invalid date for format {0}"});a.registerFieldClass("date",a.Fields.DateField);a.registerDefaultFormatFieldMapping("date","date")})(jQuery);(function(b){var a=b.alpaca;a.Fields.DatetimeField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base()},postRender:function(){var c=this;this.base();if(this.field){if(this.field.datetimepicker){this.field.hover(function(){if(!b(this).hasClass("hasDatepicker")){var d=c.options.timepicker;if(!d){d=c.options.timepicker}if(!d){d={changeYear:true,changeMonth:true}}b(this).datetimepicker(d)}});if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-datetime")}}}},setValue:function(c){if(c){if(a.isNumber()){c=new Date(c)}if(Object.prototype.toString.call(c)=="[object Date]"){this.base((c.getMonth()+1)+"/"+c.getDate()+"/"+c.getFullYear()+" "+c.getHours()+":"+c.getMinutes())}else{this.base(c)}}else{this.base(c)}},getValue:function(){return this.base()},getDatetime:function(){try{return this.field.datetimepicker("getDate")}catch(c){return this.getValue()}},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{timepicker:{title:"Timepicker options",description:"Options that are supported by the <a href='http://trentrichardson.com/examples/timepicker/'>jQuery timepicker addon</a>.",type:"any"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{timepicker:{type:"any"}}})},getTitle:function(){return"Datetime Field"},getDescription:function(){return"Datetime Field based on Trent Richardson's <a href='http://trentrichardson.com/examples/timepicker/'>jQuery timepicker addon</a>."},getFieldType:function(){return"datetime"}});a.registerFieldClass("datetime",a.Fields.DatetimeField);a.registerDefaultFormatFieldMapping("datetime","datetime")})(jQuery);(function(b){var a=b.alpaca;a.Fields.EditorField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldEditor")},postRender:function(){this.base();var d=this;if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-editor");b(this.fieldContainer).parent().css("width","100%");var e=this.options.aceHeight;if(e){b(this.fieldContainer).css("height",e)}var c=this.options.aceWidth;if(!c){c="100%"}b(this.fieldContainer).css("width",c)}var g=b(this.fieldContainer).find(".control-field-editor-el")[0];if(!ace&&window.ace){ace=window.ace}this.editor=ace.edit(g);var f=this.options.aceTheme;if(!f){f="ace/theme/chrome"}this.editor.setTheme(f);var i=this.options.aceMode;if(!i){i="ace/mode/json"}this.editor.getSession().setMode(i);this.editor.renderer.setHScrollBarAlwaysVisible(false);this.editor.setShowPrintMargin(false);this.editor.setValue(this.data);this.editor.clearSelection();if(this.options.aceFitContentHeight){var h=function(){var j=d.editor.getSession().getScreenLength()*d.editor.renderer.lineHeight+d.editor.renderer.scrollBar.getWidth();b(d.fieldContainer).height(j.toString()+"px");d.editor.resize()};h();d.editor.getSession().on("change",h)}if(this.schema.readonly){this.editor.setReadOnly(true)}b(g).bind("destroyed",function(){if(d.editor){d.editor.destroy();d.editor=null}})},destroy:function(){if(this.editor){this.editor.destroy();this.editor=null}this.base()},getEditor:function(){return this.editor},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateWordCount();d.wordLimitExceeded={message:c?"":a.substituteTokens(this.view.getMessage("wordLimitExceeded"),[this.options.wordlimit]),status:c};return e&&d.wordLimitExceeded["status"]},_validateWordCount:function(){if(this.options.wordlimit&&this.options.wordlimit>-1){var d=this.editor.getValue();if(d){var c=d.split(" ").length;if(c>this.options.wordlimit){return false}}}return true},onDependentReveal:function(){this.editor.resize()},setValue:function(d){var c=this;if(this.editor){this.editor.setValue(d)}this.base(d)},getValue:function(){var c=null;if(this.editor){c=this.editor.getValue()}return c},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{aceTheme:{title:"ACE Editor Theme",description:"Specifies the theme to set onto the editor instance",type:"string","default":"ace/theme/twilight"},aceMode:{title:"ACE Editor Mode",description:"Specifies the mode to set onto the editor instance",type:"string","default":"ace/mode/javascript"},aceWidth:{title:"ACE Editor Height",description:"Specifies the width of the wrapping div around the editor",type:"string","default":"100%"},aceHeight:{title:"ACE Editor Height",description:"Specifies the height of the wrapping div around the editor",type:"string","default":"300px"},aceFitContentHeight:{title:"ACE Fit Content Height",description:"Configures the ACE Editor to auto-fit its height to the contents of the editor",type:"boolean","default":false},wordlimit:{title:"Word Limit",description:"Limits the number of words allowed in the text area.",type:"number","default":-1}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{aceTheme:{type:"text"},aceMode:{type:"text"},wordlimit:{type:"integer"}}})},getTitle:function(){return"Editor"},getDescription:function(){return"Editor"},getFieldType:function(){return"editor"}});a.registerMessages({wordLimitExceeded:"The maximum word limit of {0} has been exceeded."});a.registerTemplate("controlFieldEditor",'<div id="${id}" class="control-field-editor-el"></div>');a.registerFieldClass("editor",a.Fields.EditorField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.EmailField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.schema.pattern){this.schema.pattern=a.regexps.email}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-email")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){c.invalidPattern["message"]=this.view.getMessage("invalidEmail")}return d},getSchemaOfSchema:function(){var c=(this.schema&&this.schema.pattern)?this.schema.pattern:a.regexps.email;return a.merge(this.base(),{properties:{pattern:{title:"Pattern",description:"Field Pattern in Regular Expression",type:"string","default":c,"enum":[c],readonly:true},format:{title:"Format",description:"Property data format",type:"string","default":"email","enum":["email"],readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getTitle:function(){return"Email Field"},getDescription:function(){return"Email Field."},getFieldType:function(){return"email"}});a.registerMessages({invalidEmail:"Invalid Email address e.g. info@cloudcms.com"});a.registerFieldClass("email",a.Fields.EmailField);a.registerDefaultFormatFieldMapping("email","email")})(jQuery);(function(b){var a=b.alpaca;a.Fields.IntegerField=a.Fields.NumberField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},getValue:function(){var c=this.field.val();if(a.isValEmpty(c)){return -1}else{return parseInt(c,10)}},onChange:function(c){this.base();if(this.slider){this.slider.slider("value",this.getValue())}},postRender:function(){this.base();var c=this;if(this.options.slider){if(!a.isEmpty(this.schema.maximum)&&!a.isEmpty(this.schema.minimum)){if(this.field){this.field.after('<div id="slider"></div>');this.slider=b("#slider",this.field.parent()).slider({value:this.getValue(),min:this.schema.minimum,max:this.schema.maximum,slide:function(d,e){c.setValue(e.value);c.renderValidationState()}})}}}if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-integer")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.stringNotANumber["status"]){c.stringNotANumber["message"]=this.view.getMessage("stringNotAnInteger")}return d},_validateNumber:function(){var c=this.field.val();if(a.isValEmpty(c)){return true}var d=this.getValue();if(isNaN(d)){return false}if(!c.match(a.regexps.integer)){return false}return true},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{minimum:{title:"Minimum",description:"Minimum value of the property.",type:"integer"},maximum:{title:"Maximum",description:"Maximum value of the property.",type:"integer"},divisibleBy:{title:"Divisible By",description:"Property value must be divisible by this number.",type:"integer"}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{minimum:{helper:"Minimum value of the field.",type:"integer"},maximum:{helper:"Maximum value of the field.",type:"integer"},divisibleBy:{helper:"Property value must be divisible by this number.",type:"integer"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{slider:{title:"Slider",description:"Generate jQuery UI slider control with the field if true.",type:"boolean","default":false}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{slider:{rightLabel:"Slider control ?",helper:"Generate slider control if selected.",type:"checkbox"}}})},getTitle:function(){return"Integer Field"},getDescription:function(){return"Field for integers."},getType:function(){return"integer"},getFieldType:function(){return"integer"}});a.registerMessages({stringNotAnInteger:"This value is not an integer."});a.registerFieldClass("integer",a.Fields.IntegerField);a.registerDefaultSchemaFieldMapping("integer","integer")})(jQuery);(function(b){var a=b.alpaca;a.Fields.IPv4Field=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.schema.pattern){this.schema.pattern=a.regexps.ipv4}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-ipv4")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){c.invalidPattern["message"]=this.view.getMessage("invalidIPv4")}return d},getSchemaOfSchema:function(){var c=(this.schema&&this.schema.pattern)?this.schema.pattern:a.regexps.ipv4;return a.merge(this.base(),{properties:{pattern:{title:"Pattern",description:"Field Pattern in Regular Expression",type:"string","default":c,readonly:true},format:{title:"Format",description:"Property data format",type:"string","enum":["ip-address"],"default":"ip-address",readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getTitle:function(){return"IP Address Field"},getDescription:function(){return"IP Address Field."},getFieldType:function(){return"ipv4"}});a.registerMessages({invalidIPv4:"Invalid IPv4 address, e.g. 192.168.0.1"});a.registerFieldClass("ipv4",a.Fields.IPv4Field);a.registerDefaultFormatFieldMapping("ip-address","ipv4")})(jQuery);(function(b){var a=b.alpaca;a.Fields.JSONField=a.Fields.TextAreaField.extend({constructor:function(f,j,h,i,e,d,g){this.base(f,j,h,i,e,d,g)},setValue:function(d){if(a.isObject(d)||typeof(d)=="object"){d=JSON.stringify(d,null,3)}this.base(d)},getValue:function(){var d=this.base();if(d&&a.isString(d)){d=JSON.parse(d)}return d},handleValidate:function(){var f=this.base();var e=this.validation;var d=this._validateJSON();e.stringNotAJSON={message:d.status?"":this.view.getMessage("stringNotAJSON")+" "+d.message,status:d.status};return f&&e.stringNotAJSON["status"]},_validateJSON:function(){var d=this.field.val();if(a.isValEmpty(d)){return{status:true}}try{var g=JSON.parse(d);this.setValue(JSON.stringify(g,null,3));return{status:true}}catch(f){return{status:false,message:f.message}}},postRender:function(){this.base();var d=this;if(this.field){this.field.bind("keypress",function(f){if(f.which==34){d.field.insertAtCaret('"')}if(f.which==123){d.field.insertAtCaret("}")}if(f.which==91){d.field.insertAtCaret("]")}});this.field.bind("keypress","Ctrl+l",function(){d.getEl().removeClass("alpaca-field-focused");d.renderValidationState()});this.field.attr("title","Type Ctrl+L to format and validate the JSON string.")}if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-json")}},getTitle:function(){return"JSON Editor"},getDescription:function(){return"Editor for JSON objects with basic validation and formatting."},getFieldType:function(){return"json"}});a.registerMessages({stringNotAJSON:"This value is not a valid JSON string."});a.registerFieldClass("json",a.Fields.JSONField);b.fn.insertAtCaret=function(d){return this.each(function(){if(document.selection){this.focus();sel=document.selection.createRange();sel.text=d;this.focus()}else{if(this.selectionStart||this.selectionStart=="0"){var f=this.selectionStart;var e=this.selectionEnd;var g=this.scrollTop;this.value=this.value.substring(0,f)+d+this.value.substring(e,this.value.length);this.focus();this.selectionStart=f;this.selectionEnd=f;this.scrollTop=g}else{this.value+=d;this.focus()}}})};jQuery.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"}};function c(e){if(typeof e.data!=="string"){return}var d=e.handler,f=e.data.toLowerCase().split(" ");e.handler=function(o){if(this!==o.target&&(/textarea|select/i.test(o.target.nodeName)||o.target.type==="text")){return}var j=o.type!=="keypress"&&jQuery.hotkeys.specialKeys[o.which],p=String.fromCharCode(o.which).toLowerCase(),m,n="",h={};if(o.altKey&&j!=="alt"){n+="alt+"}if(o.ctrlKey&&j!=="ctrl"){n+="ctrl+"}if(o.metaKey&&!o.ctrlKey&&j!=="meta"){n+="meta+"}if(o.shiftKey&&j!=="shift"){n+="shift+"}if(j){h[n+j]=true}else{h[n+p]=true;h[n+jQuery.hotkeys.shiftNums[p]]=true;if(n==="shift+"){h[jQuery.hotkeys.shiftNums[p]]=true}}for(var k=0,g=f.length;k<g;k++){if(h[f[k]]){return d.apply(this,arguments)}}}}jQuery.each(["keydown","keyup","keypress"],function(){jQuery.event.special[this]={add:c}})})(jQuery);(function(b){var a=b.alpaca;a.Fields.IntegerField=a.Fields.NumberField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},getValue:function(){var c=this.field.val();if(a.isValEmpty(c)){return -1}else{return parseInt(c,10)}},onChange:function(c){this.base();if(this.slider){this.slider.slider("value",this.getValue())}},postRender:function(){this.base();var c=this;if(this.options.slider){if(!a.isEmpty(this.schema.maximum)&&!a.isEmpty(this.schema.minimum)){if(this.field){this.field.after('<div id="slider"></div>');this.slider=b("#slider",this.field.parent()).slider({value:this.getValue(),min:this.schema.minimum,max:this.schema.maximum,slide:function(d,e){c.setValue(e.value);c.renderValidationState()}})}}}if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-integer")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.stringNotANumber["status"]){c.stringNotANumber["message"]=this.view.getMessage("stringNotAnInteger")}return d},_validateNumber:function(){var c=this.field.val();if(a.isValEmpty(c)){return true}var d=this.getValue();if(isNaN(d)){return false}if(!c.match(a.regexps.integer)){return false}return true},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{minimum:{title:"Minimum",description:"Minimum value of the property.",type:"integer"},maximum:{title:"Maximum",description:"Maximum value of the property.",type:"integer"},divisibleBy:{title:"Divisible By",description:"Property value must be divisible by this number.",type:"integer"}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{minimum:{helper:"Minimum value of the field.",type:"integer"},maximum:{helper:"Maximum value of the field.",type:"integer"},divisibleBy:{helper:"Property value must be divisible by this number.",type:"integer"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{slider:{title:"Slider",description:"Generate jQuery UI slider control with the field if true.",type:"boolean","default":false}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{slider:{rightLabel:"Slider control ?",helper:"Generate slider control if selected.",type:"checkbox"}}})},getTitle:function(){return"Integer Field"},getDescription:function(){return"Field for integers."},getType:function(){return"integer"},getFieldType:function(){return"integer"}});a.registerMessages({stringNotAnInteger:"This value is not an integer."});a.registerFieldClass("integer",a.Fields.IntegerField);a.registerDefaultSchemaFieldMapping("integer","integer")})(jQuery);(function(b){var a=b.alpaca;a.Fields.LowerCaseField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-lowercase")}},setValue:function(d){var c=d.toLowerCase();if(c!=this.getValue()){this.base(c)}},onKeyPress:function(c){this.base(c);var d=this;a.later(25,this,function(){var e=d.getValue();d.setValue(e)})},getTitle:function(){return"Lowercase Text"},getDescription:function(){return"Text field for lowercase text."},getFieldType:function(){return"lowercase"}});a.registerFieldClass("lowercase",a.Fields.LowerCaseField);a.registerDefaultFormatFieldMapping("lowercase","lowercase")})(jQuery);(function(b){var a=b.alpaca;a.Fields.MapField=a.Fields.ArrayField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();a.mergeObject(this.options,{forceRevalidation:true});if(a.isEmpty(this.data)){return}if(!a.isArray(this.data)){if(a.isObject(this.data)){var c=[];b.each(this.data,function(d,e){var f=a.copyOf(e);f._key=d;c.push(f)});this.data=c}}},getValue:function(){if(this.children.length===0&&!this.schema.required){return}var f={};for(var e=0;e<this.children.length;e++){var c=this.children[e].getValue();var d=c._key;if(d){delete c._key;f[d]=c}}return f},handleValidate:function(){var e=this.base();var d=this.validation;var f=this._validateMapKeysNotEmpty();d.keyMissing={message:f?"":this.view.getMessage("keyMissing"),status:f};var c=this._validateMapKeysUnique();d.keyNotUnique={message:c?"":this.view.getMessage("keyNotUnique"),status:c};return e&&d.keyMissing["status"]&&d.keyNotUnique["status"]},_validateMapKeysNotEmpty:function(){var f=true;for(var e=0;e<this.children.length;e++){var c=this.children[e].getValue();var d=c._key;if(!d){f=false;break}}return f},_validateMapKeysUnique:function(){var g=true;var f={};for(var e=0;e<this.children.length;e++){var c=this.children[e].getValue();var d=c._key;if(f[d]){g=false}f[d]=d}return g},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-map")}},getTitle:function(){return"Map Field"},getDescription:function(){return"Field for objects with key/value pairs that share the same schema for values."},getFieldType:function(){return"map"}});a.registerFieldClass("map",a.Fields.MapField);a.registerMessages({keyNotUnique:"Keys of map field are not unique.",keyMissing:"Map contains an empty key."})})(jQuery);(function(b){var a=b.alpaca;a.Fields.PasswordField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.schema.pattern){this.schema.pattern=a.regexps.password}this.controlFieldTemplateDescriptor=this.view.getTemplateDescriptor("controlFieldPassword")},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-password")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){c.invalidPattern["message"]=this.view.getMessage("invalidPassword")}return d},getSchemaOfSchema:function(){var c=(this.schema&&this.schema.pattern)?this.schema.pattern:/^[0-9a-zA-Z\x20-\x7E]*$/;return a.merge(this.base(),{properties:{pattern:{title:"Pattern",description:"Field Pattern in Regular Expression",type:"string","default":this.schema.pattern,"enum":[c],readonly:true},format:{title:"Format",description:"Property data format",type:"string","default":"password","enum":["password"],readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getTitle:function(){return"Password Field"},getDescription:function(){return"Password Field."},getFieldType:function(){return"password"}});a.registerTemplate("controlFieldPassword",'<input type="password" id="${id}" {{if options.size}}size="${options.size}"{{/if}} {{if options.readonly}}readonly="readonly"{{/if}} {{if name}}name="${name}"{{/if}} {{each(i,v) options.data}}data-${i}="${v}"{{/each}}/>');a.registerMessages({invalidPassword:"Invalid Password"});a.registerFieldClass("password",a.Fields.PasswordField);a.registerDefaultFormatFieldMapping("password","password")})(jQuery);(function(b){var a=b.alpaca;a.Fields.PersonalNameField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-personalname")}},setValue:function(d){var e="";for(var c=0;c<d.length;c++){if(c===0){e+=d.charAt(c).toUpperCase()}else{if(d.charAt(c-1)==" "||d.charAt(c-1)=="-"||d.charAt(c-1)=="'"){e+=d.charAt(c).toUpperCase()}else{e+=d.charAt(c)}}}if(e!=this.getValue()){this.base(e)}},onKeyPress:function(c){this.base(c);var d=this;a.later(25,this,function(){var e=d.getValue();d.setValue(e)})},getTitle:function(){return"Personal Name"},getDescription:function(){return"Text Field for personal name with captical letter for first letter & after hyphen, space or apostrophe."},getFieldType:function(){return"personalname"}});a.registerFieldClass("personalname",a.Fields.PersonalNameField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.PhoneField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.schema.pattern){this.schema.pattern=a.regexps.phone}if(a.isEmpty(this.options.maskString)){this.options.maskString="(999) 999-9999"}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-phone")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){c.invalidPattern["message"]=this.view.getMessage("invalidPhone")}return d},getSchemaOfSchema:function(){var c=(this.schema&&this.schema.pattern)?this.schema.pattern:a.regexps.phone;return a.merge(this.base(),{properties:{pattern:{title:"Pattern",description:"Field Pattern in Regular Expression",type:"string","default":c,"enum":[c],readonly:true},format:{title:"Format",description:"Property data format",type:"string","default":"phone","enum":["phone"],readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{maskString:{title:"Field Mask String",description:"Expression for field mask",type:"string","default":"(999) 999-9999"}}})},getTitle:function(){return"Phone Field"},getDescription:function(){return"Phone Field."},getFieldType:function(){return"phone"}});a.registerMessages({invalidPhone:"Invalid Phone Number, e.g. (123) 456-9999"});a.registerFieldClass("phone",a.Fields.PhoneField);a.registerDefaultFormatFieldMapping("phone","phone")})(jQuery);(function(b){var a=b.alpaca;a.Fields.TagField=a.Fields.LowerCaseField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.separator){this.options.separator=","}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-tag")}},getValue:function(){var c=this.base();if(c===""){return[]}return c.split(this.options.separator)},setValue:function(c){if(c===""){return}this.base(c.join(this.options.separator))},onBlur:function(f){this.base(f);var c=this.getValue();var d=[];b.each(c,function(g,e){if(e.trim()!==""){d.push(e.trim())}});this.setValue(d)},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{separator:{title:"Separator",description:"Separator used to split tags.",type:"string","default":","}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{separator:{type:"text"}}})},getTitle:function(){return"Tag Field"},getDescription:function(){return"Text field for entering list of tags separated by delimiter."},getFieldType:function(){return"tag"}});a.registerFieldClass("tag",a.Fields.TagField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.TimeField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.base();if(!this.options.timeFormat){this.options.timeFormat="hh:mm:ss"}if(!this.options.timeFormatRegex){this.options.timeFormatRegex=/^(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])$/}if(a.isEmpty(this.options.maskString)){this.options.maskString="99:99:99"}},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-time")}},onChange:function(c){this.base();this.renderValidationState()},handleValidate:function(){var e=this.base();var d=this.validation;var c=this._validateTimeFormat();d.invalidTime={message:c?"":a.substituteTokens(this.view.getMessage("invalidTime"),[this.options.timeFormat]),status:c};return e&&d.invalidTime["status"]},_validateTimeFormat:function(){var c=this.field.val();if(!this.schema.required&&(a.isValEmpty(c)||c=="__:__:__")){return true}return c.match(this.options.timeFormatRegex)},setValue:function(c){if(c===""){this.base(c);return}this.base(c)},getSchemaOfSchema:function(){return a.merge(this.base(),{properties:{format:{title:"Format",description:"Property data format",type:"string","default":"time","enum":["time"],readonly:true}}})},getOptionsForSchema:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{timeFormat:{title:"Time Format",description:"Time format",type:"string","default":"hh:mm:ss"},timeFormatRegex:{title:"Format Regular Expression",description:"Regular expression for validation time format",type:"string","default":/^(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])$/},maskString:{"default":"99:99:99"}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{timeFormat:{type:"text"},timeFormatRegex:{type:"text"}}})},getTitle:function(){return"Time Field"},getDescription:function(){return"Field for time."},getFieldType:function(){return"time"}});a.registerMessages({invalidTime:"Invalid time for format {0}"});a.registerFieldClass("time",a.Fields.TimeField);a.registerDefaultFormatFieldMapping("time","time")})(jQuery);(function(b){var a=b.alpaca;a.Fields.UpperCaseField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-uppercase")}},setValue:function(c){var d=c.toUpperCase();if(d!=this.getValue()){this.base(d)}},onKeyPress:function(c){this.base(c);var d=this;a.later(25,this,function(){var e=d.getValue();d.setValue(e)})},getTitle:function(){return"Uppercase Text"},getDescription:function(){return"Text field for uppercase text."},getFieldType:function(){return"uppercase"}});a.registerFieldClass("uppercase",a.Fields.UpperCaseField);a.registerDefaultFormatFieldMapping("uppercase","uppercase")})(jQuery);(function(b){var a=b.alpaca;a.Fields.WysiwygField=a.Fields.TextAreaField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f);this.controlsConfig={};this.controlsConfig.simple={html:{visible:true},createLink:{visible:false},unLink:{visible:false},h1:{visible:false},h2:{visible:false},h3:{visible:false},indent:{visible:false},insertHorizontalRule:{visible:false},insertImage:{visible:false},insertOrderedList:{visible:false},insertTable:{visible:false},insertUnorderedList:{visible:false},justifyCenter:{visible:false},justifyFull:{visible:false},justifyLeft:{visible:false},justifyRight:{visible:false},outdent:{visible:false},redo:{visible:false},removeFormat:{visible:false},subscript:{visible:false},superscript:{visible:false},undo:{visible:false},code:{visible:false},strikeThrough:{visible:false}}},setup:function(){this.base();this.plugin=null},postRender:function(){this.base();var d=this;if(this.field&&b.wysiwyg){var c=this.options.wysiwyg?this.options.wysiwyg:{};if(c.controls){if(typeof(c.controls)==="string"){c.controls=this.controlsConfig[c.controls];if(!c.controls){c.controls={}}}}if(this.options.onDemand){this.outerEl.find("textarea").mouseover(function(){if(!d.plugin){d.plugin=b(this).wysiwyg(c);d.outerEl.find(".wysiwyg").mouseout(function(){if(d.plugin){d.plugin.wysiwyg("destroy")}d.plugin=null})}})}else{this.plugin=this.field.wysiwyg(c)}this.outerEl.find(".wysiwyg").mouseout(function(){d.data=d.getValue();d.renderValidationState()})}if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-wysiwyg")}},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{wysiwyg:{title:"Editor options",description:"Options that are supported by the <a href='https://github.com/akzhan/jwysiwyg'>jQuery WYSIWYG plugin</a>.",type:"any"},onDemand:{title:"On Demand",description:"If true, WYSIWYG editor will only be enabled when the field is hovered.",type:"boolean","default":false}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{wysiwyg:{type:"any"},onDemand:{type:"checkbox",rightLabel:"Make the editor on-demand?"}}})},getTitle:function(){return"Wysiwyg Editor"},getDescription:function(){return"Wysiwyg editor for multi-line text which is based on Akzhan Abdulin's <a href='https://github.com/akzhan/jwysiwyg'>jQuery WYSIWYG plugin</a>."},getFieldType:function(){return"wysiwyg"}});a.registerFieldClass("wysiwyg",a.Fields.WysiwygField)})(jQuery);(function(b){var a=b.alpaca;a.Fields.StateField=a.Fields.SelectField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){if(a.isUndefined(this.options.capitalize)){this.options.capitalize=false}if(a.isUndefined(this.options.includeStates)){this.options.includeStates=true}if(a.isUndefined(this.options.includeTerritories)){this.options.includeTerritories=true}if(a.isUndefined(this.options.format)){this.options.format="name"}if(this.options.format=="name"||this.options.format=="code"){}else{a.logError("The configured state format: "+this.options.format+" is not a legal value [name, code]");this.options.format="name"}var c=a.retrieveUSHoldings(this.options.includeStates,this.options.includeTerritories,(this.options.format=="code"),this.options.capitalize);this.schema["enum"]=c.keys;this.options.optionLabels=c.values;this.base()},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-state")}},handleValidate:function(){var c=this.base();return c},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{format:{title:"Format",description:"How to represent the state values in the selector",type:"string","default":"name","enum":["name","code"],readonly:true},capitalize:{title:"Capitalize",description:"Whether the values should be capitalized",type:"boolean","default":false,readonly:true},includeStates:{title:"Include States",description:"Whether to include the states of the United States",type:"boolean","default":true,readonly:true},includeTerritories:{title:"Include Territories",description:"Whether to include the territories of the United States",type:"boolean","default":true,readonly:true}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{format:{type:"text"},capitalize:{type:"checkbox"},includeStates:{type:"checkbox"},includeTerritories:{type:"checkbox"}}})},getTitle:function(){return"State Field"},getDescription:function(){return"Provides a dropdown selector of states and/or territories in the United States, keyed by their two-character code."},getFieldType:function(){return"state"}});a.registerFieldClass("state",a.Fields.StateField);a.registerDefaultFormatFieldMapping("state","state");a.retrieveUSHoldings=function(){var c=[];c.push({name:"Arkansas",code:"AK",state:true,territory:false});c.push({name:"Alabama",code:"AL",state:true,territory:false});c.push({name:"American Samoa",code:"AS",state:false,territory:true});c.push({name:"Arizona",code:"AR",state:true,territory:false});c.push({name:"California",code:"CA",state:true,territory:false});c.push({name:"Colorado",code:"CO",state:true,territory:false});c.push({name:"Connecticut",code:"CT",state:true,territory:false});c.push({name:"Delaware",code:"DE",state:true,territory:false});c.push({name:"Distict of Columbia",code:"DC",state:false,territory:true});c.push({name:"Federated States of Micronesia",code:"FM",state:false,territory:true});c.push({name:"Florida",code:"FL",state:true,territory:false});c.push({name:"Georgia",code:"GA",state:true,territory:false});c.push({name:"Guam",code:"GU",state:false,territory:true});c.push({name:"Georgia",code:"GA",state:true,territory:false});c.push({name:"Hawaii",code:"HI",state:true,territory:false});c.push({name:"Idaho",code:"ID",state:true,territory:false});c.push({name:"Illinois",code:"IL",state:true,territory:false});c.push({name:"Indiana",code:"IN",state:true,territory:false});c.push({name:"Iowa",code:"IA",state:true,territory:false});c.push({name:"Kansas",code:"KS",state:true,territory:false});c.push({name:"Kentucky",code:"KY",state:true,territory:false});c.push({name:"Louisiana",code:"LA",state:true,territory:false});c.push({name:"Maine",code:"ME",state:true,territory:false});c.push({name:"Marshall Islands",code:"MH",state:false,territory:true});c.push({name:"Maryland",code:"MD",state:true,territory:false});c.push({name:"Massachusetts",code:"MA",state:true,territory:false});c.push({name:"Michigan",code:"MI",state:true,territory:false});c.push({name:"Minnesota",code:"MN",state:true,territory:false});c.push({name:"Mississippi",code:"MS",state:true,territory:false});c.push({name:"Missouri",code:"MO",state:true,territory:false});c.push({name:"Montana",code:"MT",state:true,territory:false});c.push({name:"Nebraska",code:"NE",state:true,territory:false});c.push({name:"Nevada",code:"NV",state:true,territory:false});c.push({name:"New Hampshire",code:"NH",state:true,territory:false});c.push({name:"New Jersey",code:"NJ",state:true,territory:false});c.push({name:"New Mexico",code:"NM",state:true,territory:false});c.push({name:"New York",code:"NY",state:true,territory:false});c.push({name:"North Carolina",code:"NC",state:true,territory:false});c.push({name:"North Dakota",code:"ND",state:true,territory:false});c.push({name:"Northern Mariana Islands",code:"MP",state:true,territory:false});c.push({name:"Ohio",code:"OH",state:true,territory:false});c.push({name:"Oklahoma",code:"OK",state:true,territory:false});c.push({name:"Oregon",code:"OR",state:true,territory:false});c.push({name:"Palau",code:"PW",state:false,territory:true});c.push({name:"Pennsylvania",code:"PA",state:true,territory:false});c.push({name:"Puerto Rico",code:"PR",state:false,territory:true});c.push({name:"Rhode Island",code:"RI",state:true,territory:false});c.push({name:"South Carolina",code:"SC",state:true,territory:false});c.push({name:"South Dakota",code:"SD",state:true,territory:false});c.push({name:"Tennessee",code:"TN",state:true,territory:false});c.push({name:"Texas",code:"TX",state:true,territory:false});c.push({name:"Utah",code:"UT",state:true,territory:false});c.push({name:"Vermont",code:"VT",state:true,territory:false});c.push({name:"Virgin Islands",code:"VI",state:false,territory:true});c.push({name:"Virginia",code:"VA",state:true,territory:false});c.push({name:"Washington",code:"WA",state:true,territory:false});c.push({name:"West Virginia",code:"WV",state:true,territory:false});c.push({name:"Wisconsin",code:"WI",state:true,territory:false});c.push({name:"Wyoming",code:"WY",state:true,territory:false});return function(l,e,h,g){var m={keys:[],values:[]};for(var f=0;f<c.length;f++){var d=false;if(c[f].state&&l){d=true}else{if(c[f].territory&&e){d=true}}if(d){var k=c[f].code;var j=c[f].name;if(h){j=c[f].code}if(g){j=j.toUpperCase()}m.keys.push(k);m.values.push(j)}}return m}}()})(jQuery);(function(b){var a=b.alpaca;a.Fields.CountryField=a.Fields.SelectField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){if(a.isUndefined(this.options.capitalize)){this.options.capitalize=false}this.schema["enum"]=[];this.options.optionLabels=[];var e=this.view.getMessage("countries");if(e){for(var d in e){this.schema["enum"].push(d);var c=e[d];if(this.options.capitalize){c=c.toUpperCase()}this.options.optionLabels.push(c)}}this.base()},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-country")}},handleValidate:function(){var c=this.base();return c},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{capitalize:{title:"Capitalize",description:"Whether the values should be capitalized",type:"boolean","default":false,readonly:true}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{capitalize:{type:"checkbox"}}})},getTitle:function(){return"Country Field"},getDescription:function(){return"Provides a dropdown selector of countries keyed by their ISO3 code. The names of the countries are read from the I18N bundle for the current locale."},getFieldType:function(){return"country"}});a.registerFieldClass("country",a.Fields.CountryField);a.registerDefaultFormatFieldMapping("country","country")})(jQuery);(function(b){var a=b.alpaca;a.Fields.ZipcodeField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.options.format=(this.options.format?this.options.format:"nine");if(this.options.format=="nine"){this.schema.pattern=a.regexps["zipcode-nine"]}else{if(this.options.format=="five"){this.schema.pattern=a.regexps["zipcode-five"]}else{a.logError("The configured zipcode format: "+this.options.format+" is not a legal value [five, nine]");this.options.format="nine";this.schema.pattern=a.regexps["zipcode-nine"]}}if(this.options.format=="nine"){this.options.maskString="99999-9999"}else{if(this.options.format=="five"){this.options.maskString="99999"}}this.base()},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-zipcode")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){if(this.options.format=="nine"){c.invalidPattern["message"]=this.view.getMessage("invalidZipcodeFormatNine")}else{if(this.options.format=="five"){c.invalidPattern["message"]=this.view.getMessage("invalidZipcodeFormatFive")}}}return d},getSchemaOfOptions:function(){return a.merge(this.base(),{properties:{format:{title:"Format",description:"How to represent the zipcode field",type:"string","default":"five","enum":["five","nine"],readonly:true}}})},getOptionsForOptions:function(){return a.merge(this.base(),{fields:{format:{type:"text"}}})},getTitle:function(){return"Zipcode Field"},getDescription:function(){return"Provides a five or nine-digital US zipcode control with validation."},getFieldType:function(){return"zipcode"}});a.registerMessages({invalidZipcodeFormatFive:"Invalid Five-Digit Zipcode (#####)",invalidZipcodeFormatNine:"Invalid Nine-Digit Zipcode (#####-####)"});a.registerFieldClass("zipcode",a.Fields.ZipcodeField);a.registerDefaultFormatFieldMapping("zipcode","zipcode")})(jQuery);(function(b){var a=b.alpaca;a.Fields.URLField=a.Fields.TextField.extend({constructor:function(e,i,g,h,d,c,f){this.base(e,i,g,h,d,c,f)},setup:function(){this.schema.pattern=a.regexps.url;this.schema.format="uri";this.base()},postRender:function(){this.base();if(this.fieldContainer){this.fieldContainer.addClass("alpaca-controlfield-url")}},handleValidate:function(){var d=this.base();var c=this.validation;if(!c.invalidPattern["status"]){c.invalidPattern["message"]=this.view.getMessage("invalidURLFormat")}return d},getTitle:function(){return"URL Field"},getDescription:function(){return"Provides a text control with validation for an internet web address."},getFieldType:function(){return"url"}});a.registerMessages({invalidURLFormat:"The URL provided is not a valid web address."});a.registerFieldClass("url",a.Fields.URLField);a.registerDefaultFormatFieldMapping("url","url")})(jQuery);
0 73 \ No newline at end of file
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-core.min.css
... ... @@ -0,0 +1,22 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/.alpaca-clear{clear:both}.alpaca-controlfield{display:block;padding:2px;margin:2px}.alpaca-controlfield-container{display:block;padding-top:4px;padding-bottom:4px}.alpaca-controlfield-label{font-size:1.0em;font-weight:bold;text-align:left;margin-left:1px}.alpaca-controlfield-helper{font-size:.75em;margin-top:2px}.alpaca-controlfield-message{font-size:.85em}.alpaca-controlfield-message-hidden{display:none}.alpaca-field-required span.ui-icon-star{float:left;margin-right:.3em}.alpaca-controlfield-helper>span.ui-icon,.alpaca-controlfield-message>span.ui-icon{float:left;margin-right:.3em}input,textarea,select{border:1px solid #555;padding:2px;font-size:1em;border-radius:2px;-khtml-border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}input[type="checkbox"],input[type="radio"]{border:0}input[type="file"]{border:0;box-shadow:none}select{min-width:150px}input:focus,textarea:focus{outline:0;border:1px solid #058cf5}.alpaca-field-readonly input,.alpaca-field-readonly textarea,input[readonly],textarea[readonly]{background-color:#dcdcdc;cursor:default}DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu{background-color:white;border:1px #777 solid;padding-left:10px;margin-left:2px;padding-right:10px;color:#ccc}DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu P{font-size:1em}.tt-suggestion.tt-is-under-cursor{background-color:#ccc;color:#333}.alpaca-controlfield-email>span.ui-icon,.alpaca-controlfield-date>span.ui-icon,.alpaca-controlfield-phone>span.ui-icon{float:right;margin-left:.3em}.alpaca-controlfield-helper .alpaca-controlfield-helper-text,.alpaca-controlfield-message .alpaca-controlfield-message-text,.alpaca-controlfield-email>input,.alpaca-controlfield-date>input,.alpaca-controlfield-phone>input{line-height:16px}.alpaca-controlfield-address-mapcanvas{height:300px;width:300px;margin:10px}.alpaca-controlfield-checkbox{padding-top:.4em}.alpaca-controlfield-checkbox input{margin-right:1em}.alpaca-controlfield-checkbox{*padding-top:0}.alpaca-controlfield-radio{padding-top:.5em}.alpaca-controlfield-radio input{margin-right:.3em}.alpaca-controlfield-radio-label{margin-right:.3em}.alpaca-controlfield-file-custom-input{position:absolute;height:100px;cursor:pointer;background:transparent;border:0;opacity:0;-moz-opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity = 0);z-index:999}.alpaca-controlfield-file-custom{width:350px;cursor:pointer;overflow:hidden;padding:2px;position:relative}.alpaca-controlfield-file-custom-disabled{opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity = 0);cursor:default}.alpaca-controlfield-file-custom-feedback{display:block;margin:1px 1px 1px 5px;font-style:italic;padding:.3em .6em}.alpaca-controlfield-file-custom-feedback-populated{font-style:normal;font-weight:bold;padding-left:20px}.alpaca-controlfield-editor{position:relative;width:100%;height:300px;border:1px #ccc solid}.alpaca-controlfield-editor .control-field-editor-el{position:absolute;top:0;bottom:0;left:0;right:0}.alpaca-controlfield .alpaca-controlfield-json textarea{font-family:"Courier New";font-size:.9em;font-style:italic}.alpaca-controlfield-hidden{display:none}.alpaca-fieldset{padding:4px;margin:4px;overflow:auto;position:relative}fieldset.alpaca-fieldset{margin-top:.5em;margin-right:0;margin-left:0;margin-bottom:.5em}legend.alpaca-fieldset-legend{font-size:1.1em;text-align:left;bottom:-1px}.alpaca-fieldset-legend{font-size:1.0em;font-weight:bold;text-align:left}.alpaca-fieldset-helper{padding-top:10px;padding-bottom:5px;clear:both}.alpaca-fieldset-items-container{padding-top:5px;clear:both}.alpaca-fieldset-legend-link{float:left;margin-right:.3em}.alpaca-fieldset-array-item-toolbar{padding:1px;margin:0 2px 0 2px;font-size:.75em}.alpaca-fieldset-array-toolbar{padding:10px 4px}.alpaca-fieldset-array-item-toolbar-disabled{opacity:.5}.alpaca-form{margin-top:15px;margin-left:15px}.alpaca-form-buttons-container{clear:both;display:block;margin:5px 0 5px 0}.alpaca-form-button-view-switcher{position:absolute;float:left;font-size:1em;padding:8px 3px 3px;zIndex:999999}.alpaca-form-button-view-switcher ul{listStyle:none;margin:0;padding:0;overflow:auto}.alpaca-form-button-view-switcher ul li{padding:2px;margin:1px;clear:left;float:left}.alpaca-form-button-view-switcher ul li a{text-decoration:none}.alpaca-form-buttons-container input{margin-right:4px}.alpaca-form-buttons-container input.alpaca-form-button:hover{background:#ffc}div.alpaca-fieldset{display:block;border:0;margin:1.5em 1em 1em 0}.alpaca-data-container{margin:5px 5px 5px 5px;padding:5px 5px 5px 5px;display:block}.alpaca-data{text-align:left;padding-left:10px}.alpaca-data-label{float:left;min-width:100px;clear:both;font-weight:bold;display:block}.alpaca-wizard-status-bar{list-style:none;overflow:hidden;margin:10px 0 10px 0;padding:0;counter-reset:step;float:left}.alpaca-wizard-status-bar li{float:left}.alpaca-wizard-status-bar li span{display:block;font-size:1.2em}.alpaca-wizard-status-bar li div{display:block;position:relative;padding:2px 25px 2px 30px}.alpaca-wizard-status-bar li div:before{font-size:1em;position:absolute;top:50%;left:5px;margin-top:-8px;text-align:center;font-weight:bold;padding:2px 6px;counter-increment:step;content:counter(step)}.alpaca-wizard-status-bar li div strong{font-weight:normal}.alpaca-wizard-title{font-size:1.2em;margin:0;padding:10px 0;font-weight:bold}.alpaca-wizard-desc{font-size:.9em;margin:0;padding:5px 0}.alpaca-wizard-step-title{font-size:1em;margin:0;padding:10px 0;text-decoration:underline;font-weight:bold}.alpaca-wizard-nav-bar{clear:both;float:right}fieldset.alpaca-view-web-list{border-left:none;border-bottom:0;border-right:0;padding-right:3em}fieldset.alpaca-view-web-list.fieldset-collapsed{border:solid 1px}.alpaca-view-web-list .alpaca-controlfield-label{display:inline-block;vertical-align:top;padding-top:.5em}.alpaca-view-web-list .alpaca-controlfield-label{width:130px}fieldset.alpaca-view-list legend{font-size:1.01em}.alpaca-controlfield.alpaca-view-web-list{display:inline-block}SPAN.alpaca-view-web-list label.alpaca-controlfield-label{font-size:1.0em;font-weight:bold!important;text-align:left;white-space:nowrap}.alpaca-view-web-list DIV.alpaca-controlfield-container{display:inline-block}.alpaca-controlfield-label-list-view{width:100px;display:inline-block;vertical-align:top;padding-top:.5em}.alpaca-fieldset-message-list-view{float:left;margin-right:.3em}.alpaca-controlfield-item-label-list-view{width:100px;display:inline-block;vertical-align:top;padding-top:.25em}ol.alpaca-fieldset-itemscontainer-list-view-top{padding-left:0}li.alpaca-fieldset-itemcontainer-list-view-top{list-style:none}.alpaca-fieldset-items-container-empty{padding-top:0;padding-bottom:0}.alpaca-layout-two-column-mask{overflow:auto;width:100%;min-width:600px;display:inline-block}.alpaca-layout-two-column-left{overflow:auto;display:inline-block;padding:5px;vertical-align:top}.alpaca-layout-two-column-right{overflow:auto;display:inline-block;padding:5px;vertical-align:top}fieldset.alpaca-fieldset-no-legend{border:0}fieldset.alpaca-view-web-edit-yaml.alpaca-fieldset{border:solid 1px;border-radius:5px;margin:1px 0 0 0;padding-top:4px;padding-bottom:2px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend span{display:none}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend{font-size:1em}fieldset.alpaca-view-web-edit-yaml.fieldset-collapsed{border:0;margin:1px 1px 1px 1px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-expanded:after{content:url("./images/down.png");padding-left:5px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-collapsed:after{content:url("./images/left.png");padding-left:5px}fieldset.alpaca-view-web-edit-yaml span:not(.alpaca-field-focused) div.alpaca-controlfield-text input{background:0;border:0;box-shadow:none;margin-top:2px;margin-left:2px;margin-bottom:2px;margin-right:2px}fieldset.alpaca-view-web-edit-yaml{font-family:courier;padding-right:1em;padding-top:0}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-checkbox{margin-top:4px;margin-bottom:4px}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-select{margin-bottom:1px}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-radio div.alpaca-controlfield-radio{padding-top:3px;padding-bottom:4px}fieldset.alpaca-view-web-edit-yaml>input,fieldset.alpaca-view-web-edit-yaml>select,fieldset.alpaca-view-web-edit-yaml>label{font-family:courier}span.alpaca-view-web-edit-yaml .alpaca-controlfield-label{width:175px;padding-top:3px;padding-left:3px;display:inline-block;vertical-align:top}span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container{padding-top:0;padding-bottom:0}span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container>input,span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container>select{padding:1px 1px 1px 1px}fieldset.alpaca-view-web-edit-yaml span.alpaca-field{padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}fieldset.alpaca-view-web-edit-yaml ol.alpaca-fieldset-items-container{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}fieldset.alpaca-view-web-edit-yaml div.alpaca-fieldset-array-item-toolbar{position:absolute;z-index:99999;right:15px}fieldset.alpaca-view-web-edit-yaml .ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:2px}.alpaca-inline .alpaca-inline-item-container{float:left}.alpaca-inline-item-container .alpaca-inline .alpaca-fieldset,.alpaca-inline-item-container .alpaca-fieldset.alpaca-inline{margin:0 1.5em;padding:0}.alpaca-inline-item-container .alpaca-fieldset-array-item-toolbar{width:60px;float:right;margin-top:.7em}.alpaca-inline .alpaca-fieldset-items-container{margin:0 1em;padding:0}.alpaca-inline select{min-width:0}#module-settings input:focus,textarea:focus{border-width:1px}
0 23 \ No newline at end of file
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-extras.min.css
... ... @@ -0,0 +1,22 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/
0 23 \ No newline at end of file
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui-newticketwizard.css
... ... @@ -0,0 +1,43 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/
  23 +/**
  24 + * Fix for jQuery datepicker initial state issue.
  25 + */
  26 +#ui-datepicker-div
  27 +{
  28 + display: none;
  29 + background-color:white;
  30 + z-index: 9999999 !important;
  31 + width: 22em !important;
  32 +}
  33 +
  34 +/* Fix for Chrome issue with Button text */
  35 +.ui-button .ui-button-text {
  36 + white-space: nowrap;
  37 +}
  38 +
  39 +.ui-datepicker
  40 +{
  41 + z-index: 100;
  42 +}
  43 +
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-jqueryui.min.css
... ... @@ -0,0 +1,22 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/#ui-datepicker-div{display:none;background-color:white;z-index:9999999!important;width:22em!important}.ui-button .ui-button-text{white-space:nowrap}.ui-datepicker{z-index:100}
0 23 \ No newline at end of file
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca-newticketwizard.css
... ... @@ -0,0 +1,945 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/
  23 +.alpaca-hover {
  24 +}
  25 +
  26 +.alpaca-clear {
  27 + clear: both;
  28 +}
  29 +
  30 +/** Abstract Field **/
  31 +.alpaca-field {
  32 + padding-top: 0px;
  33 +}
  34 +
  35 +.alpaca-field-required {
  36 +}
  37 +
  38 +.alpaca-field-optional {
  39 +}
  40 +
  41 +.alpaca-field-valid {
  42 +}
  43 +
  44 +.alpaca-field-invalid {
  45 +}
  46 +
  47 +.alpaca-field-readonly {
  48 +}
  49 +
  50 +/**
  51 + * Control Field
  52 + */
  53 +.alpaca-controlfield {
  54 + display: block;
  55 + padding: 2px;
  56 + margin: 2px;
  57 + vertical-align: middle;
  58 +}
  59 +
  60 +.alpaca-controlfield * {
  61 + /*background: transparent;*/
  62 +}
  63 +
  64 +.alpaca-controlfield-container {
  65 + display: block;
  66 + padding-top: 4px;
  67 + padding-bottom: 4px;
  68 +}
  69 +
  70 +.alpaca-controlfield-label
  71 +{
  72 + font-size: 1.0em;
  73 + font-weight: bold;
  74 + text-align: right;
  75 + margin-left: 1px;
  76 + float: left;
  77 + width: 100px;
  78 + padding-top: 0px;
  79 + padding-bottom: 0px;
  80 + vertical-align: middle;
  81 +}
  82 +
  83 +.alpaca-controlfield-helper {
  84 + font-size: 0.75em;
  85 + margin-top: 2px;
  86 +}
  87 +
  88 +.alpaca-controlfield-message {
  89 + font-size: 0.85em;
  90 +}
  91 +
  92 +.alpaca-controlfield-message-hidden {
  93 + display: none;
  94 +}
  95 +
  96 +.alpaca-field-message-container {
  97 +}
  98 +
  99 +.alpaca-field-required span.ui-icon-star {
  100 + float: left;
  101 + margin-right: 0.3em;
  102 +}
  103 +
  104 +.alpaca-controlfield-helper > span.ui-icon, .alpaca-controlfield-message > span.ui-icon {
  105 + float: left;
  106 + margin-right: .3em;
  107 +}
  108 +
  109 +/**
  110 + * Form Controls
  111 + */
  112 +input, textarea, select {
  113 + border: 1px solid #555;
  114 + padding: 2px;
  115 + font-size: 1em;
  116 + border-radius: 2px;
  117 + -khtml-border-radius: 2px;
  118 + -moz-border-radius: 2px;
  119 + -webkit-border-radius: 2px;
  120 + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
  121 + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
  122 + box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
  123 +}
  124 +
  125 +input[type="checkbox"], input[type="radio"] {
  126 + border: 0px;
  127 +}
  128 +
  129 +input[type="file"] {
  130 + border: none;
  131 + box-shadow: none;
  132 +}
  133 +
  134 +select {
  135 + min-width: 150px;
  136 +}
  137 +
  138 +input:focus, textarea:focus {
  139 + outline: none;
  140 + border: 1px solid #058cf5;
  141 +}
  142 +
  143 +.alpaca-field-readonly input, .alpaca-field-readonly textarea, input[readonly], textarea[readonly] {
  144 + background-color: #dcdcdc;
  145 + cursor: default;
  146 +}
  147 +
  148 +/* BEGIN styles for Text Field */
  149 +
  150 +.alpaca-controlfield-text {
  151 +}
  152 +
  153 +DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu
  154 +{
  155 + background-color: white;
  156 + border: 1px #777 solid;
  157 + padding-left: 10px;
  158 + margin-left: 2px;
  159 + padding-right: 10px;
  160 + color: #ccc;
  161 +}
  162 +
  163 +DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu P
  164 +{
  165 + font-size: 1em;
  166 +}
  167 +
  168 +.tt-suggestion.tt-is-under-cursor
  169 +{
  170 + background-color: #ccc;
  171 + color: #333;
  172 +}
  173 +
  174 +/* END styles for Text Field */
  175 +
  176 +/* BEGIN styles for Date Field, Phone Field, Password Field and Email Field */
  177 +
  178 +.alpaca-controlfield-date {
  179 +}
  180 +
  181 +.alpaca-controlfield-date input {
  182 +/* background: url("./images/alpaca-icons.png") no-repeat right -5px;*/
  183 +}
  184 +
  185 +.alpaca-controlfield-phone {
  186 +}
  187 +
  188 +.alpaca-controlfield-phone input {
  189 +/* background: url("./images/alpaca-icons.png") no-repeat right -85px;*/
  190 +}
  191 +
  192 +.alpaca-controlfield-email {
  193 +}
  194 +
  195 +.alpaca-controlfield-email input {
  196 +/* background: url("./images/alpaca-icons.png") no-repeat right -45px;*/
  197 +}
  198 +
  199 +.alpaca-controlfield-time {
  200 +}
  201 +
  202 +.alpaca-controlfield-time input {
  203 +/* background: url("./images/alpaca-icons.png") no-repeat right -125px;*/
  204 +}
  205 +
  206 +.alpaca-controlfield-password {
  207 +}
  208 +
  209 +.alpaca-controlfield-email > span.ui-icon, .alpaca-controlfield-date > span.ui-icon, .alpaca-controlfield-phone > span.ui-icon {
  210 + float: right;
  211 + margin-left: .3em;
  212 +}
  213 +
  214 +.alpaca-controlfield-helper .alpaca-controlfield-helper-text, .alpaca-controlfield-message .alpaca-controlfield-message-text, .alpaca-controlfield-email > input, .alpaca-controlfield-date > input, .alpaca-controlfield-phone > input {
  215 + line-height: 16px;
  216 +}
  217 +
  218 +/* END styles for Date Field, Phone Field, Password Field and Email Field */
  219 +
  220 +/* BEGIN styles for Address Map Field */
  221 +
  222 +.alpaca-controlfield-address-mapcanvas {
  223 + height: 300px;
  224 + width: 300px;
  225 + margin: 10px;
  226 +}
  227 +
  228 +/* END styles for Address Map Field */
  229 +
  230 +/* BEGIN styles for Checkbox Field */
  231 +
  232 +.alpaca-controlfield-checkbox {
  233 + padding-top: 0.4em;
  234 +}
  235 +
  236 +.alpaca-controlfield-checkbox input {
  237 + margin-right: 1em;
  238 +}
  239 +
  240 +/* IE < 8 */
  241 +.alpaca-controlfield-checkbox {
  242 + *padding-top: 0;
  243 +}
  244 +
  245 +/* END styles for Checkbox Field */
  246 +
  247 +/* BEGIN styles for Radio Field */
  248 +
  249 +.alpaca-controlfield-radio {
  250 + padding-top: 0.5em;
  251 +}
  252 +
  253 +.alpaca-controlfield-radio input {
  254 + margin-right: 0.3em;
  255 +}
  256 +
  257 +.alpaca-controlfield-radio-label {
  258 + margin-right: 0.3em;
  259 +}
  260 +
  261 +/* END styles for Radio Field */
  262 +
  263 +/* BEGIN styles for Select Field */
  264 +
  265 +.alpaca-controlfield-select {
  266 +}
  267 +
  268 +/* END styles for Select Field */
  269 +
  270 +/* BEGIN styles for Number Field */
  271 +
  272 +.alpaca-controlfield-number {
  273 +}
  274 +
  275 +/* END styles for Number Field */
  276 +
  277 +/* BEGIN styles for Integer Field */
  278 +
  279 +.alpaca-controlfield-integer {
  280 +}
  281 +
  282 +/* END styles for Integer Field */
  283 +
  284 +/* BEGIN styles for Textarea Field */
  285 +
  286 +.alpaca-controlfield-textarea {
  287 +}
  288 +
  289 +/* END styles for Textarea Field */
  290 +
  291 +/* BEGIN styles for WYSIWYG Field */
  292 +
  293 +.alpaca-controlfield-wysiwyg {
  294 +}
  295 +
  296 +/* END styles for WYSIWYG Field */
  297 +
  298 +/* BEGIN styles for Button Field */
  299 +
  300 +.alpaca-controlfield-button {
  301 +}
  302 +
  303 +/* END styles for Button Field */
  304 +
  305 +/* BEGIN styles for File Field */
  306 +
  307 +.alpaca-controlfield-file {
  308 +}
  309 +
  310 +.alpaca-controlfield-file-custom-input {
  311 + position: absolute;
  312 + height: 100px;
  313 + cursor: pointer;
  314 + background: transparent;
  315 + border: 0;
  316 + opacity: 0;
  317 + -moz-opacity: 0;
  318 + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 0);
  319 + z-index: 999;
  320 +}
  321 +
  322 +.alpaca-controlfield-file-custom {
  323 + width: 350px;
  324 + cursor: pointer;
  325 + overflow: hidden;
  326 + padding: 2px;
  327 + position: relative;
  328 +}
  329 +
  330 +.alpaca-controlfield-file-custom-disabled {
  331 + opacity: .5;
  332 + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 0);
  333 + cursor: default;
  334 +}
  335 +
  336 +.alpaca-controlfield-file-custom-feedback {
  337 + display: block;
  338 + margin: 1px 1px 1px 5px;
  339 + font-style: italic;
  340 + padding: .3em .6em;
  341 +}
  342 +
  343 +.alpaca-controlfield-file-custom-feedback-populated {
  344 + font-style: normal;
  345 + font-weight: bold;
  346 + padding-left: 20px;
  347 +}
  348 +
  349 +/* END styles for File Field */
  350 +
  351 +/* BEGIN styles for Editor Field */
  352 +
  353 +.alpaca-controlfield-editor
  354 +{
  355 + position: relative;
  356 + width: 100%;
  357 + height: 300px;
  358 + border: 1px #ccc solid;
  359 +}
  360 +
  361 +.alpaca-controlfield-editor .control-field-editor-el
  362 +{
  363 + position:absolute;
  364 + top:0;
  365 + bottom:0;
  366 + left: 0;
  367 + right:0
  368 +}
  369 +
  370 +/* END styles for Editor Field */
  371 +
  372 +/* BEGIN styles for JSON Field */
  373 +
  374 +.alpaca-controlfield .alpaca-controlfield-json textarea {
  375 + font-family: "Courier New";
  376 + font-size: 0.9em;
  377 + font-style: italic;
  378 +}
  379 +
  380 +/* END styles for JSON Field */
  381 +
  382 +/* BEGIN styles for Hidden Field */
  383 +.alpaca-controlfield-hidden {
  384 + display: none;
  385 +}
  386 +/* END styles for Hidden Field */
  387 +
  388 +/* BEGIN styles for Container Field (Fieldset) */
  389 +
  390 +.alpaca-fieldset {
  391 + padding: 4px;
  392 + margin: 4px;
  393 + overflow: auto;
  394 + position: relative;
  395 +}
  396 +
  397 +fieldset.alpaca-fieldset {
  398 + /*margin: 0.5em 1em 1em 0px;*/
  399 + margin-top: 0.5em;
  400 + margin-right: 0px;
  401 + margin-left: 0px;
  402 + margin-bottom: 0.5em;
  403 +}
  404 +
  405 +legend.alpaca-fieldset-legend {
  406 + font-size: 1.1em;
  407 + text-align: left;
  408 + bottom: -1px;
  409 +}
  410 +
  411 +.alpaca-fieldset-legend {
  412 + font-size: 1.0em;
  413 + font-weight: bold;
  414 + text-align: left;
  415 +}
  416 +
  417 +.alpaca-fieldset-helper {
  418 + padding-top: 10px;
  419 + padding-bottom: 5px;
  420 + clear: both;
  421 +}
  422 +
  423 +.alpaca-fieldset-items-container {
  424 + padding-top: 5px;
  425 + /**padding-bottom: 5px;**/
  426 + clear: both;
  427 +}
  428 +
  429 +.alpaca-fieldset-legend-link {
  430 + float: left;
  431 + margin-right: 0.3em;
  432 +}
  433 +
  434 +/* END styles for Container Field (Fieldset) */
  435 +
  436 +/* BEGIN styles for Array Field */
  437 +
  438 +.alpaca-fieldset-array-item-toolbar {
  439 + padding: 1px;
  440 + margin: 0px 2px 0px 2px;
  441 + font-size: 0.75em;
  442 +}
  443 +
  444 +.alpaca-fieldset-array-toolbar {
  445 + padding: 10px 4px;
  446 +}
  447 +
  448 +.alpaca-fieldset-array-item-toolbar-disabled {
  449 + opacity: .5;
  450 +}
  451 +
  452 +.alpaca-fieldset-array-item-toolbar-add {
  453 +}
  454 +
  455 +.alpaca-fieldset-array-item-toolbar-remove {
  456 +}
  457 +
  458 +.alpaca-fieldset-array-item-toolbar-up {
  459 +}
  460 +
  461 +.alpaca-fieldset-array-item-toolbar-down {
  462 +}
  463 +
  464 +/* END styles for Array Field */
  465 +
  466 +/* BEGIN styles for Form */
  467 +
  468 +.alpaca-form {
  469 + margin-top: 15px;
  470 + margin-left: 15px;
  471 +}
  472 +
  473 +.alpaca-form-buttons-container {
  474 + clear: both;
  475 + display: block;
  476 + margin: 5px 0 5px 0;
  477 + text-align: center;
  478 +}
  479 +
  480 +.alpaca-form-button {
  481 +}
  482 +
  483 +.alpaca-form-button-print {
  484 +}
  485 +
  486 +.alpaca-form-button-reload {
  487 +}
  488 +
  489 +.alpaca-form-button-save {
  490 +}
  491 +
  492 +.alpaca-form-button-view-switcher {
  493 + position: absolute;
  494 + float: left;
  495 + font-size: 1em;
  496 + padding: 8px 3px 3px;
  497 + zIndex: 999999;
  498 +}
  499 +
  500 +.alpaca-form-button-view-switcher ul {
  501 + listStyle: none;
  502 + margin: 0;
  503 + padding: 0;
  504 + overflow: auto;
  505 +}
  506 +
  507 +.alpaca-form-button-view-switcher ul li {
  508 + padding: 2px;
  509 + margin: 1px;
  510 + clear: left;
  511 + float: left;
  512 +}
  513 +
  514 +.alpaca-form-button-view-switcher ul li a {
  515 + text-decoration: none;
  516 +}
  517 +
  518 +.alpaca-form-buttons-container input {
  519 + margin-right: 4px;
  520 +}
  521 +
  522 +.alpaca-form-buttons-container input.alpaca-form-button:hover {
  523 + background: #FFFFCC;
  524 +}
  525 +
  526 +/* END styles for Form */
  527 +
  528 +/* BEGIN styles for VIEW: DISPLAY */
  529 +
  530 +div.alpaca-fieldset {
  531 + display: block;
  532 + border: none;
  533 + margin: 1.5em 1em 1em 0px;
  534 +}
  535 +
  536 +div.alpaca-fieldset-legend {
  537 +}
  538 +
  539 +.alpaca-data-container {
  540 + margin: 5px 5px 5px 5px;
  541 + padding: 5px 5px 5px 5px;
  542 + display: block;
  543 +}
  544 +
  545 +.alpaca-data {
  546 + text-align: left;
  547 + padding-left: 10px;
  548 +}
  549 +
  550 +.alpaca-data-label {
  551 + float: left;
  552 + min-width: 100px;
  553 + clear: both;
  554 + font-weight: bold;
  555 + display: block;
  556 +}
  557 +
  558 +/* END styles for VIEW: DISPLAY */
  559 +
  560 +/* BEGIN styles for Wizard */
  561 +
  562 +.alpaca-wizard-status-bar {
  563 + list-style: none;
  564 + overflow: hidden;
  565 + margin: 10px 0px 10px 0px;
  566 + padding: 0px;
  567 + counter-reset: step;
  568 + float: left;
  569 +}
  570 +
  571 +.alpaca-wizard-status-bar li {
  572 + float: left;
  573 +}
  574 +
  575 +.alpaca-wizard-status-bar li span {
  576 + display: block;
  577 + font-size: 1.2em;
  578 +}
  579 +
  580 +.alpaca-wizard-status-bar li div {
  581 + display: block;
  582 + position: relative;
  583 + padding: 2px 25px 2px 30px;
  584 +}
  585 +
  586 +.alpaca-wizard-status-bar li div:before {
  587 + font-size: 1em;
  588 + position: absolute;
  589 + top: 50%;
  590 + left: 5px;
  591 + margin-top: -8px;
  592 + text-align: center;
  593 + font-weight: bold;
  594 + padding: 2px 6px;
  595 + counter-increment: step;
  596 + content: counter(step);
  597 +}
  598 +
  599 +.alpaca-wizard-status-bar li div strong {
  600 + font-weight: normal
  601 +}
  602 +
  603 +.alpaca-wizard-status-bar li.current {
  604 +}
  605 +
  606 +.alpaca-wizard-status-bar li.current-has-next {
  607 +}
  608 +
  609 +.alpaca-wizard-title {
  610 + font-size: 1.2em;
  611 + margin: 0px;
  612 + padding: 10px 0px;
  613 + font-weight: bold;
  614 +}
  615 +
  616 +.alpaca-wizard-desc {
  617 + font-size: 0.9em;
  618 + margin: 0px;
  619 + padding: 5px 0px;
  620 +}
  621 +
  622 +.alpaca-wizard-step-title {
  623 + font-size: 1em;
  624 + margin: 0px;
  625 + padding: 10px 0px;
  626 + text-decoration: underline;
  627 + font-weight: bold;
  628 +}
  629 +
  630 +.alpaca-wizard-nav-bar {
  631 + clear: both;
  632 + float: right;
  633 +}
  634 +
  635 +.alpaca-wizard-button {
  636 +}
  637 +
  638 +.alpaca-wizard-button:hover {
  639 +}
  640 +
  641 +.alpaca-wizard-button-back {
  642 +}
  643 +
  644 +.alpaca-wizard-button-next {
  645 +}
  646 +
  647 +/* END styles for Wizard */
  648 +
  649 +/** BEGIN view-web-list **/
  650 +
  651 +fieldset.alpaca-view-web-list
  652 +{
  653 + border-left: none;
  654 + border-bottom: none;
  655 + border-right: none;
  656 + padding-right: 3em;
  657 +}
  658 +
  659 +fieldset.alpaca-view-web-list.fieldset-collapsed
  660 +{
  661 + border: solid 1px;
  662 +}
  663 +
  664 +.alpaca-view-web-list .alpaca-controlfield-label {
  665 + display: inline-block;
  666 + vertical-align: top;
  667 + padding-top: 0.5em;
  668 +}
  669 +
  670 +.alpaca-view-web-list .alpaca-controlfield-label {
  671 + width: 130px;
  672 +}
  673 +
  674 +fieldset.alpaca-view-list legend {
  675 + /* to make chrome not wrapping text */
  676 + font-size: 1.01em
  677 +}
  678 +
  679 +.alpaca-controlfield.alpaca-view-web-list
  680 +{
  681 + display:inline-block;
  682 +}
  683 +
  684 +SPAN.alpaca-view-web-list label.alpaca-controlfield-label
  685 +{
  686 + font-size: 1.0em;
  687 + font-weight: bold !important;
  688 + text-align: left;
  689 + white-space: nowrap;
  690 +}
  691 +
  692 +.alpaca-view-web-list DIV.alpaca-controlfield-container
  693 +{
  694 + display:inline-block;
  695 +}
  696 +
  697 +.alpaca-controlfield-label-list-view {
  698 + width: 100px;
  699 + display: inline-block;
  700 + vertical-align: top;
  701 + padding-top: 0.5em;
  702 +}
  703 +
  704 +.alpaca-fieldset-message-list-view {
  705 + float: left;
  706 + margin-right: .3em;
  707 +}
  708 +
  709 +.alpaca-controlfield-item-label-list-view {
  710 + width: 100px;
  711 + display: inline-block;
  712 + vertical-align: top;
  713 + padding-top: 0.25em;
  714 +}
  715 +
  716 +ol.alpaca-fieldset-itemscontainer-list-view-top {
  717 + padding-left :0;
  718 +}
  719 +
  720 +li.alpaca-fieldset-itemcontainer-list-view-top {
  721 + list-style:none;
  722 +}
  723 +
  724 +.alpaca-item-container-first
  725 +{
  726 +
  727 +}
  728 +
  729 +.alpaca-item-container-last
  730 +{
  731 +
  732 +}
  733 +
  734 +.alpaca-fieldset-items-container-empty
  735 +{
  736 + padding-top: 0px;
  737 + padding-bottom: 0px;
  738 +}
  739 +
  740 +/** END view-web-list **/
  741 +
  742 +/* BEGIN styles for VIEW: TWO COLUMN */
  743 +
  744 +.alpaca-layout-two-column-mask {
  745 + overflow: auto;
  746 + width: 100%;
  747 + min-width: 600px;
  748 + display: inline-block;
  749 +}
  750 +
  751 +.alpaca-layout-two-column-left {
  752 + overflow: auto;
  753 + display: inline-block;
  754 + padding: 5px;
  755 + vertical-align: top;
  756 +}
  757 +
  758 +.alpaca-layout-two-column-right {
  759 + overflow: auto;
  760 + display: inline-block;
  761 + padding: 5px;
  762 + vertical-align: top;
  763 +}
  764 +
  765 +
  766 +fieldset.alpaca-fieldset-no-legend {
  767 + border: none;
  768 +}
  769 +
  770 +/* END styles for VIEW: TWO COLUMN */
  771 +
  772 +/* BEGIN styles for VIEW: VIEW_WEB_EDIT_YAML */
  773 +
  774 +fieldset.alpaca-view-web-edit-yaml.alpaca-fieldset {
  775 + border: solid 1px;
  776 + border-radius: 5px;
  777 + margin: 1px 0 0 0;
  778 + padding-top: 4px;
  779 + padding-bottom: 2px;
  780 +}
  781 +
  782 +/*hide the arrow icon before the fieldset name*/
  783 +fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend span {
  784 + display: none;
  785 +}
  786 +
  787 +/* make the fonts the right size */
  788 +fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend {
  789 + font-size: 1em;
  790 +}
  791 +
  792 +fieldset.alpaca-view-web-edit-yaml.fieldset-collapsed {
  793 + border: none;
  794 + margin: 1px 1px 1px 1px;
  795 +}
  796 +
  797 +fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-expanded:after {
  798 + content: url("./images/down.png");
  799 + padding-left: 5px;
  800 +}
  801 +fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-collapsed:after {
  802 + content: url("./images/left.png");
  803 + padding-left: 5px;
  804 +}
  805 +
  806 +/*sort out the text boxes so that they disappear when not focused */
  807 +fieldset.alpaca-view-web-edit-yaml span:not(.alpaca-field-focused) div.alpaca-controlfield-text input {
  808 + background: none;
  809 + border: none;
  810 + box-shadow: none;
  811 + margin-top: 2px;
  812 + margin-left: 2px;
  813 + margin-bottom: 2px;
  814 + margin-right: 2px;
  815 +}
  816 +
  817 +fieldset.alpaca-view-web-edit-yaml {
  818 + font-family: courier;
  819 + padding-right: 1em;
  820 + padding-top: 0px;
  821 +}
  822 +
  823 +fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-checkbox {
  824 + margin-top: 4px;
  825 + margin-bottom: 4px;
  826 +}
  827 +
  828 +fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-select {
  829 + margin-bottom: 1px;
  830 +}
  831 +fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-radio div.alpaca-controlfield-radio {
  832 + padding-top: 3px;
  833 + padding-bottom: 4px;
  834 +}
  835 +
  836 +fieldset.alpaca-view-web-edit-yaml > input,
  837 +fieldset.alpaca-view-web-edit-yaml > select,
  838 +fieldset.alpaca-view-web-edit-yaml > label
  839 +{
  840 + font-family: courier;
  841 +}
  842 +
  843 +span.alpaca-view-web-edit-yaml .alpaca-controlfield-label {
  844 + width: 175px;
  845 + padding-top: 0px;
  846 + padding-left: 3px;
  847 + display: inline-block;
  848 + vertical-align: top;
  849 +}
  850 +
  851 +span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container {
  852 + padding-top: 0px;
  853 + padding-bottom: 0px;
  854 +}
  855 +
  856 +span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container > input,
  857 +span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container > select
  858 +{
  859 + padding: 1px 1px 1px 1px;
  860 +}
  861 +
  862 +fieldset.alpaca-view-web-edit-yaml span.alpaca-field {
  863 + padding-top: 0px;
  864 + padding-bottom: 0px;
  865 + margin-top: 0px;
  866 + margin-bottom: 0px;
  867 +}
  868 +
  869 +fieldset.alpaca-view-web-edit-yaml ol.alpaca-fieldset-items-container {
  870 + margin-top: 0px;
  871 + margin-bottom: 0px;
  872 + padding-top: 0px;
  873 + padding-bottom: 0px;
  874 +}
  875 +
  876 +
  877 +/* make the array item toolbar float, without displacing any other elements */
  878 +fieldset.alpaca-view-web-edit-yaml div.alpaca-fieldset-array-item-toolbar {
  879 + position: absolute;
  880 + z-index: 99999;
  881 + right: 15px;
  882 +}
  883 +
  884 +
  885 +fieldset.alpaca-view-web-edit-yaml .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text {
  886 + padding: 2px;
  887 +}
  888 +
  889 +/* END styles for the view VIEW_WEB_EDIT_YAML */
  890 +
  891 +/* BEGIN styles for the view VIEW_WEB_EDIT_INLINE */
  892 +
  893 +.alpaca-inline .alpaca-inline-item-container {
  894 + float: left;
  895 +}
  896 +
  897 +.alpaca-inline-item-container .alpaca-inline .alpaca-fieldset, .alpaca-inline-item-container .alpaca-fieldset.alpaca-inline {
  898 + margin: 0 1.5em;
  899 + padding: 0;
  900 +}
  901 +
  902 +.alpaca-inline-item-container .alpaca-fieldset-array-item-toolbar {
  903 + width: 60px;
  904 + float: right;
  905 + margin-top: 0.7em;
  906 +}
  907 +
  908 +.alpaca-inline .alpaca-fieldset-items-container {
  909 + margin: 0em 1em;
  910 + padding: 0;
  911 +}
  912 +
  913 +.alpaca-inline select {
  914 + min-width: 0px;
  915 +}
  916 +
  917 +#module-settings input:focus, textarea:focus {
  918 + border-width: 1px;
  919 +}
  920 +
  921 +
  922 +fieldset DIV {
  923 + padding-top: 0px !important;
  924 + vertical-align: middle !important;
  925 +}
  926 +
  927 +
  928 +/* To Remove up/down buttons on items
  929 +
  930 +.alpaca-inline-item-container .alpaca-fieldset-array-item-toolbar .alpaca-fieldset-array-item-toolbar-up,
  931 +.alpaca-inline-item-container .alpaca-fieldset-array-item-toolbar .alpaca-fieldset-array-item-toolbar-down {
  932 +{
  933 + display: none;
  934 +}
  935 +*/
  936 +
  937 +/* To hide labels of inlined fields
  938 +
  939 +.alpaca-inline-item-container .alpaca-inline .alpaca-controlfield-label, .alpaca-inline-item-container .alpaca-inline .alpaca-fieldset-legend {
  940 + display: none;
  941 +}
  942 +
  943 +*/
  944 +
  945 +/* END styles for VIEW: VIEW_WEB_EDIT_INLINE */
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css 0 → 100644
  1 +++ a/var/httpd/htdocs/skins/Customer/default/css/alpaca/alpaca.min.css
... ... @@ -0,0 +1,22 @@
  1 +/*!
  2 +Alpaca Version 1.1.1
  3 +
  4 +Copyright 2013 Gitana Software, Inc.
  5 +
  6 +Licensed under the Apache License, Version 2.0 (the "License");
  7 +you may not use this file except in compliance with the License.
  8 +
  9 +You may obtain a copy of the License at
  10 + http://www.apache.org/licenses/LICENSE-2.0
  11 +
  12 +Unless required by applicable law or agreed to in writing, software
  13 +distributed under the License is distributed on an "AS IS" BASIS,
  14 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15 +See the License for the specific language governing permissions and
  16 +limitations under the License.
  17 +
  18 +For more information, please contact Gitana Software, Inc. at this
  19 +address:
  20 +
  21 + info@gitanasoftware.com
  22 +*/.alpaca-clear{clear:both}.alpaca-controlfield{display:block;padding:2px;margin:2px}.alpaca-controlfield-container{display:block;padding-top:4px;padding-bottom:4px}.alpaca-controlfield-label{font-size:1.0em;font-weight:bold;text-align:left;margin-left:1px}.alpaca-controlfield-helper{font-size:.75em;margin-top:2px}.alpaca-controlfield-message{font-size:.85em}.alpaca-controlfield-message-hidden{display:none}.alpaca-field-required span.ui-icon-star{float:left;margin-right:.3em}.alpaca-controlfield-helper>span.ui-icon,.alpaca-controlfield-message>span.ui-icon{float:left;margin-right:.3em}input,textarea,select{border:1px solid #555;padding:2px;font-size:1em;border-radius:2px;-khtml-border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}input[type="checkbox"],input[type="radio"]{border:0}input[type="file"]{border:0;box-shadow:none}select{min-width:150px}input:focus,textarea:focus{outline:0;border:1px solid #058cf5}.alpaca-field-readonly input,.alpaca-field-readonly textarea,input[readonly],textarea[readonly]{background-color:#dcdcdc;cursor:default}DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu{background-color:white;border:1px #777 solid;padding-left:10px;margin-left:2px;padding-right:10px;color:#ccc}DIV.alpaca-controlfield-text .twitter-typeahead .tt-dropdown-menu P{font-size:1em}.tt-suggestion.tt-is-under-cursor{background-color:#ccc;color:#333}.alpaca-controlfield-email>span.ui-icon,.alpaca-controlfield-date>span.ui-icon,.alpaca-controlfield-phone>span.ui-icon{float:right;margin-left:.3em}.alpaca-controlfield-helper .alpaca-controlfield-helper-text,.alpaca-controlfield-message .alpaca-controlfield-message-text,.alpaca-controlfield-email>input,.alpaca-controlfield-date>input,.alpaca-controlfield-phone>input{line-height:16px}.alpaca-controlfield-address-mapcanvas{height:300px;width:300px;margin:10px}.alpaca-controlfield-checkbox{padding-top:.4em}.alpaca-controlfield-checkbox input{margin-right:1em}.alpaca-controlfield-checkbox{*padding-top:0}.alpaca-controlfield-radio{padding-top:.5em}.alpaca-controlfield-radio input{margin-right:.3em}.alpaca-controlfield-radio-label{margin-right:.3em}.alpaca-controlfield-file-custom-input{position:absolute;height:100px;cursor:pointer;background:transparent;border:0;opacity:0;-moz-opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity = 0);z-index:999}.alpaca-controlfield-file-custom{width:350px;cursor:pointer;overflow:hidden;padding:2px;position:relative}.alpaca-controlfield-file-custom-disabled{opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity = 0);cursor:default}.alpaca-controlfield-file-custom-feedback{display:block;margin:1px 1px 1px 5px;font-style:italic;padding:.3em .6em}.alpaca-controlfield-file-custom-feedback-populated{font-style:normal;font-weight:bold;padding-left:20px}.alpaca-controlfield-editor{position:relative;width:100%;height:300px;border:1px #ccc solid}.alpaca-controlfield-editor .control-field-editor-el{position:absolute;top:0;bottom:0;left:0;right:0}.alpaca-controlfield .alpaca-controlfield-json textarea{font-family:"Courier New";font-size:.9em;font-style:italic}.alpaca-controlfield-hidden{display:none}.alpaca-fieldset{padding:4px;margin:4px;overflow:auto;position:relative}fieldset.alpaca-fieldset{margin-top:.5em;margin-right:0;margin-left:0;margin-bottom:.5em}legend.alpaca-fieldset-legend{font-size:1.1em;text-align:left;bottom:-1px}.alpaca-fieldset-legend{font-size:1.0em;font-weight:bold;text-align:left}.alpaca-fieldset-helper{padding-top:10px;padding-bottom:5px;clear:both}.alpaca-fieldset-items-container{padding-top:5px;clear:both}.alpaca-fieldset-legend-link{float:left;margin-right:.3em}.alpaca-fieldset-array-item-toolbar{padding:1px;margin:0 2px 0 2px;font-size:.75em}.alpaca-fieldset-array-toolbar{padding:10px 4px}.alpaca-fieldset-array-item-toolbar-disabled{opacity:.5}.alpaca-form{margin-top:15px;margin-left:15px}.alpaca-form-buttons-container{clear:both;display:block;margin:5px 0 5px 0}.alpaca-form-button-view-switcher{position:absolute;float:left;font-size:1em;padding:8px 3px 3px;zIndex:999999}.alpaca-form-button-view-switcher ul{listStyle:none;margin:0;padding:0;overflow:auto}.alpaca-form-button-view-switcher ul li{padding:2px;margin:1px;clear:left;float:left}.alpaca-form-button-view-switcher ul li a{text-decoration:none}.alpaca-form-buttons-container input{margin-right:4px}.alpaca-form-buttons-container input.alpaca-form-button:hover{background:#ffc}div.alpaca-fieldset{display:block;border:0;margin:1.5em 1em 1em 0}.alpaca-data-container{margin:5px 5px 5px 5px;padding:5px 5px 5px 5px;display:block}.alpaca-data{text-align:left;padding-left:10px}.alpaca-data-label{float:left;min-width:100px;clear:both;font-weight:bold;display:block}.alpaca-wizard-status-bar{list-style:none;overflow:hidden;margin:10px 0 10px 0;padding:0;counter-reset:step;float:left}.alpaca-wizard-status-bar li{float:left}.alpaca-wizard-status-bar li span{display:block;font-size:1.2em}.alpaca-wizard-status-bar li div{display:block;position:relative;padding:2px 25px 2px 30px}.alpaca-wizard-status-bar li div:before{font-size:1em;position:absolute;top:50%;left:5px;margin-top:-8px;text-align:center;font-weight:bold;padding:2px 6px;counter-increment:step;content:counter(step)}.alpaca-wizard-status-bar li div strong{font-weight:normal}.alpaca-wizard-title{font-size:1.2em;margin:0;padding:10px 0;font-weight:bold}.alpaca-wizard-desc{font-size:.9em;margin:0;padding:5px 0}.alpaca-wizard-step-title{font-size:1em;margin:0;padding:10px 0;text-decoration:underline;font-weight:bold}.alpaca-wizard-nav-bar{clear:both;float:right}fieldset.alpaca-view-web-list{border-left:none;border-bottom:0;border-right:0;padding-right:3em}fieldset.alpaca-view-web-list.fieldset-collapsed{border:solid 1px}.alpaca-view-web-list .alpaca-controlfield-label{display:inline-block;vertical-align:top;padding-top:.5em}.alpaca-view-web-list .alpaca-controlfield-label{width:130px}fieldset.alpaca-view-list legend{font-size:1.01em}.alpaca-controlfield.alpaca-view-web-list{display:inline-block}SPAN.alpaca-view-web-list label.alpaca-controlfield-label{font-size:1.0em;font-weight:bold!important;text-align:left;white-space:nowrap}.alpaca-view-web-list DIV.alpaca-controlfield-container{display:inline-block}.alpaca-controlfield-label-list-view{width:100px;display:inline-block;vertical-align:top;padding-top:.5em}.alpaca-fieldset-message-list-view{float:left;margin-right:.3em}.alpaca-controlfield-item-label-list-view{width:100px;display:inline-block;vertical-align:top;padding-top:.25em}ol.alpaca-fieldset-itemscontainer-list-view-top{padding-left:0}li.alpaca-fieldset-itemcontainer-list-view-top{list-style:none}.alpaca-fieldset-items-container-empty{padding-top:0;padding-bottom:0}.alpaca-layout-two-column-mask{overflow:auto;width:100%;min-width:600px;display:inline-block}.alpaca-layout-two-column-left{overflow:auto;display:inline-block;padding:5px;vertical-align:top}.alpaca-layout-two-column-right{overflow:auto;display:inline-block;padding:5px;vertical-align:top}fieldset.alpaca-fieldset-no-legend{border:0}fieldset.alpaca-view-web-edit-yaml.alpaca-fieldset{border:solid 1px;border-radius:5px;margin:1px 0 0 0;padding-top:4px;padding-bottom:2px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend span{display:none}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend{font-size:1em}fieldset.alpaca-view-web-edit-yaml.fieldset-collapsed{border:0;margin:1px 1px 1px 1px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-expanded:after{content:url("./images/down.png");padding-left:5px}fieldset.alpaca-view-web-edit-yaml legend.alpaca-fieldset-legend.legend-collapsed:after{content:url("./images/left.png");padding-left:5px}fieldset.alpaca-view-web-edit-yaml span:not(.alpaca-field-focused) div.alpaca-controlfield-text input{background:0;border:0;box-shadow:none;margin-top:2px;margin-left:2px;margin-bottom:2px;margin-right:2px}fieldset.alpaca-view-web-edit-yaml{font-family:courier;padding-right:1em;padding-top:0}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-checkbox{margin-top:4px;margin-bottom:4px}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-select{margin-bottom:1px}fieldset.alpaca-view-web-edit-yaml div.alpaca-controlfield-radio div.alpaca-controlfield-radio{padding-top:3px;padding-bottom:4px}fieldset.alpaca-view-web-edit-yaml>input,fieldset.alpaca-view-web-edit-yaml>select,fieldset.alpaca-view-web-edit-yaml>label{font-family:courier}span.alpaca-view-web-edit-yaml .alpaca-controlfield-label{width:175px;padding-top:3px;padding-left:3px;display:inline-block;vertical-align:top}span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container{padding-top:0;padding-bottom:0}span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container>input,span.alpaca-view-web-edit-yaml div.alpaca-controlfield-container>select{padding:1px 1px 1px 1px}fieldset.alpaca-view-web-edit-yaml span.alpaca-field{padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}fieldset.alpaca-view-web-edit-yaml ol.alpaca-fieldset-items-container{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}fieldset.alpaca-view-web-edit-yaml div.alpaca-fieldset-array-item-toolbar{position:absolute;z-index:99999;right:15px}fieldset.alpaca-view-web-edit-yaml .ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:2px}.alpaca-inline .alpaca-inline-item-container{float:left}.alpaca-inline-item-container .alpaca-inline .alpaca-fieldset,.alpaca-inline-item-container .alpaca-fieldset.alpaca-inline{margin:0 1.5em;padding:0}.alpaca-inline-item-container .alpaca-fieldset-array-item-toolbar{width:60px;float:right;margin-top:.7em}.alpaca-inline .alpaca-fieldset-items-container{margin:0 1em;padding:0}.alpaca-inline select{min-width:0}#module-settings input:focus,textarea:focus{border-width:1px}
0 23 \ No newline at end of file
... ...
var/httpd/htdocs/skins/Customer/default/css/alpaca/images/alpaca-icons.png 0 → 100644

2.36 KB

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/date.png 0 → 100644

3.42 KB

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/down.png 0 → 100644

2.85 KB

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/email.png 0 → 100644

3.24 KB

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/left.png 0 → 100644

170 Bytes

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/phone.png 0 → 100644

3.35 KB

var/httpd/htdocs/skins/Customer/default/css/alpaca/images/time.png 0 → 100644

963 Bytes