import java.io.* ;
class FinalExotic
{
static int cd,pr,num;
static char a= ' ' ,b= ' ' ,c= ' ' ,d= ' ' ,e= ' ' ,f= ' ' ,g= ' ' ,h= ' ' ,i= ' ' ;
static int m,y,mt,da,per,tr,ta,cno;
static FinalExotic xo = new FinalExotic( ) ;
{
System .
out .
println ( "******************************************************************************************************************************************" ) ;
System .
out .
println ( "*************************************************WELCOME TO EXOTIC TOURS**************************************************************" ) ;
System .
out .
println ( "******************************************************************************************************************************************" ) ;
System .
out .
println ( "The journey of a thousand miles begins with a single step....." ) ;
System .
out .
println ( "Explore the world with us" ) ;
System .
out .
println ( "We allow our customers to travel conveniently and provide them a wide varieties of choices to choose from." ) ;
for ( i= 1 ; ; i++ )
{
System .
out .
println ( "The choices are:-\n 1.DOMESTIC TOURS 2.INTERNATIONAL TOURS" ) ;
System .
out .
println ( "Enter your choice:" ) ;
cd
= Integer .
parseInt ( br.
readLine ( ) ) ;
FinalExotic a= new FinalExotic( ) ;
switch ( cd)
{
case 1 : System .
out .
println ( "Explore the wonders of India" ) ;
System .
out .
println ( "Choose your favourite spot:\n a. North India\n b. South India \n c. West India\n d. East India\n e. Central India" ) ;
char ch= ( char ) br.read ( ) ;
br.readLine ( ) ;
switch ( ch)
{
case 'a' : System .
out .
println ( " WELCOME TO NORTH INDIA" ) ;
System .
out .
println ( "Explore North India with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Best of Kashmir\n 2.Golden Triangle \n 3.Enchanting Himachal" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Best of Kashmir\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Walk around the world's largest golf course." ) ;
System .
out .
println ( "*Enjoy a Shikara ride on Dal Lake" ) ;
System .
out .
println ( "*Enjoy the visit to beautiful Mughals garden in Srinagar" ) ;
System .
out .
println ( "PRICE: Rs.23,000" ) ;
pr= 23000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Srinagar\n 2.Gulmarg\n 3.Pahalgam" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
wmt= "Airways" ;
}
else if ( mt== 2 )
{
tr= 3500 ;
wmt= "Rilways" ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum1 ( ) ;
xo.invoice1 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Golden Triangle\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Mathura temple." ) ;
System .
out .
println ( "Visit Taj Mahal,Agra Fort,Dayal Bagh." ) ;
System .
out .
println ( "*Visit Amer & Nahergarh Fort." ) ;
System .
out .
println ( "PRICE: Rs.14,900" ) ;
pr= 14900 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Jaipur\n 2.Agra\n 3.Delhi" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum2 ( ) ;
xo.invoice2 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "Enchanting Himachal\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit the Solang Valley to view snow capped mountains." ) ;
System .
out .
println ( "Surrender to the charms of nature in Kufri." ) ;
System .
out .
println ( "PRICE: Rs.20,700" ) ;
pr= 20700 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1. Shimla\n 2.Manali\n 3.Chandigarh" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum3 ( ) ;
xo.invoice3 ( ) ;
}
break ;
case 'b' : System .
out .
println ( " WELCOME TO SOUTH INDIA" ) ;
System .
out .
println ( "Explore South India with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Enchanting Kerala\n 2.Nilgiri Delight \n 3.Best of Malabar" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Enchanting Kerala\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Munnar" ) ;
System .
out .
println ( "*Walk through bustling spice market" ) ;
System .
out .
println ( "PRICE: Rs.40,100" ) ;
pr= 40100 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Kochi\n 2.Munnar\n 3.Allepey" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 4500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum4 ( ) ;
xo.invoice4 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Nilgiri Delight\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit to Coonnoor" ) ;
System .
out .
println ( "*Visit Pillar Rocks." ) ;
System .
out .
println ( "PRICE: Rs.18,700" ) ;
pr= 18700 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Ooty\n 2.Kodaikanal" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 3500 ;
}
else if ( mt== 2 )
{
tr= 1500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum5 ( ) ;
xo.invoice5 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "South Indian Delight\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Hoyasala Temple at Somnathpur." ) ;
System .
out .
println ( "Visit Srirangapatnam." ) ;
System .
out .
println ( "PRICE: Rs.22,800" ) ;
pr= 22800 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1. Mysore\n 2.Ooty\n 3.Kodaikanal" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 4500 ;
}
else if ( mt== 2 )
{
tr= 2500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum6 ( ) ;
xo.invoice6 ( ) ;
}
break ;
case 'c' : System .
out .
println ( " WELCOME TO WEST INDIA" ) ;
System .
out .
println ( "Explore West India with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Goa\n 2.Temple Tour of Gujarat \n 3.Colours of Gujarat" ) ;
int num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Goa\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Walk on the beautigul Goa beach." ) ;
System .
out .
println ( "PRICE: Rs.16,500" ) ;
pr= 16500 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Goa" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum7 ( ) ;
xo.invoice7 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Temple Tour of Gujarat \n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit the Sun Temple." ) ;
System .
out .
println ( "*Visit Rukmini Temple." ) ;
System .
out .
println ( "PRICE: Rs.35000" ) ;
pr= 35000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Ahmedabad\n 2.Rajkot" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 1500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum8 ( ) ;
xo.invoice8 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "Colours of Gujarat\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Safari at Gir National park." ) ;
System .
out .
println ( "Explore Indus Valley Civilization." ) ;
System .
out .
println ( "PRICE: Rs.37,000" ) ;
pr= 37000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Ahmedabad\n 2.Rajkot" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 4500 ;
}
else if ( mt== 2 )
{
tr= 2500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum9 ( ) ;
xo.invoice9 ( ) ;
}
break ;
case 'd' : System .
out .
println ( " WELCOME TO EAST INDIA" ) ;
System .
out .
println ( "Explore East India with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Rayal Nepal\n 2.Eastern Himalayan Delight \n 3.Hills of East" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Rayal Nepal\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Enjoy the safari at Chitwan National Park ." ) ;
System .
out .
println ( "PRICE: Rs.29,000" ) ;
pr= 29000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Chitwan" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum10 ( ) ;
xo.invoice10 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Eastern Himalayan Delight \n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Tiger Hill." ) ;
System .
out .
println ( "*Visit the beautiful Tshanghu lake." ) ;
System .
out .
println ( "PRICE: Rs.39,000" ) ;
pr= 39000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Gangtok\n 2.Pelling" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 1500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum11 ( ) ;
xo.invoice11 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "Hills of East\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Tiger Hill." ) ;
System .
out .
println ( "*Visit the beautiful Tshanghu lake." ) ;
System .
out .
println ( "PRICE: Rs.40,000" ) ;
pr= 40000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Darjeeling\n 2.Gangtok\n 3.Pelling" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 4500 ;
}
else if ( mt== 2 )
{
tr= 2500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum12 ( ) ;
xo.invoice12 ( ) ;
}
break ;
case 'e' : System .
out .
println ( " WELCOME TO CENTRAL INDIA" ) ;
System .
out .
println ( "Explore Central India with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Heart of India \n 2.Classic Madhya Pradesh " ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Heart \n 8 days 7 nights" ) ;
System .
out .
println ( "Highlights:\n * Travel to the city of lakes Bhopal ." ) ;
System .
out .
println ( "PRICE: Rs.32,000" ) ;
pr= 32000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Bhopal\n 2.Jaipur" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 3500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum13 ( ) ;
xo.invoice13 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Classic Madhya Pradesh \n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Discover the rich culture of Agra." ) ;
System .
out .
println ( "*Explore Taj Mahal." ) ;
System .
out .
println ( "PRICE: Rs.22,000" ) ;
pr= 22000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Agra\n 2.Bhopal" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
System .
out .
println ( "Choose the Mode of Transport:\n 1.Airways \n 2.Railways" ) ;
int mt
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( mt== 1 )
{
tr= 6500 ;
}
else if ( mt== 2 )
{
tr= 1500 ;
}
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum14 ( ) ;
xo.invoice14 ( ) ;
}
break ;
}
break ;
case 2 : System .
out .
println ( "Explore the world with us." ) ;
System .
out .
println ( "Choose your favourite spot:\n f.Europe Tour Package\n g.Far East Tours \n h.Travel to Australia-New Zealand\n i.Exotic Internatiional Vacations" ) ;
char cm= ( char ) br.read ( ) ;
br.readLine ( ) ;
switch ( cm)
{
case 'f' : System .
out .
println ( " EUROPE TOUR PACKAGES" ) ;
System .
out .
println ( "Explore Europe with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Marvels of Europe\n 2.Romantic Russia \n 3.French Swiss Medley." ) ;
int num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Marvels of Europe\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Meet Mickey and Minni in Euro Disney Park." ) ;
System .
out .
println ( "*Exclusive Mt. Cox and Kings with Gala dinner in Switzerland." ) ;
System .
out .
println ( "*Be dazzled in Swarovski Crystal World." ) ;
System .
out .
println ( "PRICE: Rs.1,20,000" ) ;
pr= 120000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.France\n 2.Switzerland \n 3. Austria" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 55000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum15 ( ) ;
xo.invoice15 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Romantic Russia\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Tour of the lovely Pushkin city ." ) ;
System .
out .
println ( "*Boat ride in St. Petersburg." ) ;
System .
out .
println ( "*Sightseeing That Takes Your Breath Away - Enjoy the scenic journey through Europe " ) ;
System .
out .
println ( "PRICE: Rs.1,55,000" ) ;
pr= 155000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Russian Federation" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 50000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum16 ( ) ;
xo.invoice16 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "French Swiss Medley\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *World Famous Lido Show and an illumination tour of the City of Lights. " ) ;
System .
out .
println ( "*Views of Paris from the River Seine Cruise." ) ;
System .
out .
println ( "PRICE: Rs.1,41,000" ) ;
pr= 141000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.France \n 2.Switzerland" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 50000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum17 ( ) ;
xo.invoice17 ( ) ;
}
break ;
case 'g' : System .
out .
println ( " FAR EAST TOURS" ) ;
System .
out .
println ( "Explore Thailand,Singapore,Hong Kong & Macau with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Instant Thailand\n 2.Instant Singapore \n 3.Instant Hong Kong & Macau" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Instant Thailand\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Bangkok city tour. " ) ;
System .
out .
println ( "*Relax on the Idyllic Coral Island in Pattaya." ) ;
System .
out .
println ( "PRICE: Rs.55,000" ) ;
pr= 55000 ;
System .
out .
println ( "Please enter 'Confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Thailand" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 30000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum18 ( ) ;
xo.invoice18 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Instant Singapore\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Enjoy panoramic city tour of Singapore. " ) ;
System .
out .
println ( "*Enjoy half day Santosa Island" ) ;
System .
out .
println ( "PRICE: Rs.61,800" ) ;
pr= 61800 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Singapore" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 40000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum19 ( ) ;
xo.invoice19 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "Instant Hong Kong & Macau\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Enjoy the city tour of Macau. " ) ;
System .
out .
println ( "*Enjoy panoramic city tour of Hong Kong with Madame Tussauds." ) ;
System .
out .
println ( "PRICE: Rs.79,000" ) ;
pr= 79000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Hong Kong \n 2.Macau" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 50000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum20 ( ) ;
xo.invoice20 ( ) ;
}
break ;
case 'h' : System .
out .
println ( "TRAVEL TO AUSTRALIA-NEW ZEALAND" ) ;
System .
out .
println ( "Explore Australia and New Zealnd with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Magical Australia\n 2.Auatralia & New Zealand" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Magical Australia\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Philip Island.." ) ;
System .
out .
println ( "PRICE: Rs.2,34,000" ) ;
pr= 234000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Australia" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 70000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum21 ( ) ;
xo.invoice21 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "Australia & New Zealand\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n *Enjoy Helicopter ride at Gold Coast (05 Minutes)" ) ;
System .
out .
println ( "*Spend a thrilling day at Movie World, Sea World & Dream World." ) ;
System .
out .
println ( "PRICE: Rs.3,65,000" ) ;
pr= 365000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.Australia \n 2.New Zealand" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 80000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum22 ( ) ;
xo.invoice22 ( ) ;
}
break ;
case 'i' : System .
out .
println ( "EXOTIC INTERNATIONAL VACATIONS" ) ;
System .
out .
println ( "Explore China, Dubai & South Africa with our exclusive packages!!!" ) ;
System .
out .
println ( "Choose your desired Package:-\n 1.Magical China\n 2.South African Sojourn \n 3.Dubai Delight" ) ;
num
= Integer .
parseInt ( br.
readLine ( ) ) ;
if ( num== 1 )
{
System .
out .
println ( "Magical China\n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Enjoy a cable car ride at the Great Wall." ) ;
System .
out .
println ( "PRICE: Rs.1,35,000" ) ;
pr= 135000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.China" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 40000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum23 ( ) ;
xo.invoice23 ( ) ;
}
if ( num== 2 )
{
System .
out .
println ( "South African Sojourn \n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Spend one night in Sun City." ) ;
System .
out .
println ( "*See superb views of Cape Town spread out before you from the top of Table Mountain." ) ;
System .
out .
println ( "PRICE: Rs.1,33,000" ) ;
pr= 133000 ;
System .
out .
println ( "Please enter 'confirm' for booking" ) ;
System .
out .
println ( "******PLEASE CHECK YOUR PRICE & AVAILABILITY******" ) ;
System .
out .
println ( "Enter the hub of your choice:-\n 1.South Africa" ) ;
int no
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the travel date:" ) ;
da
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the month:" ) ;
System .
out .
println ( "Enter the year:" ) ;
tr= 60000 ;
System .
out .
println ( "Choose the Hotel class of your choice:-\n 1.Economics \n 2.Standard\n 3.Deluxe" ) ;
int n
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter the number of rooms:" ) ;
int r
= Integer .
parseInt ( br.
readLine ( ) ) ;
System .
out .
println ( "Enter your name:" ) ;
xo.paysum24 ( ) ;
xo.invoice24 ( ) ;
}
if ( num== 3 )
{
System .
out .
println ( "Dubai Delight \n 10 days 9 nights" ) ;
System .
out .
println ( "Highlights:\n * Visit Burj Khalifa - 124th Floor." ) ;
System .
out .
println ( "*Enjoy Desert Safari with Dinner.." ) ;
System .
out .
println ( "PRICE: Rs.95,000" ) ;
aW1wb3J0IGphdmEuaW8uKjsKCmNsYXNzIEZpbmFsRXhvdGljCgp7CgogIAoKICAgIHN0YXRpYyBTdHJpbmcgc3Qsd210LGlkLHNlbnQ7CgogICAgc3RhdGljIGludCBjZCxwcixudW07CgogICAgc3RhdGljIGNoYXIgYT0nICcsYj0nICcsYz0nICcsZD0nICcsZT0nICcsZj0nICcsZz0nICcsaD0nICcsaT0nICc7CgogICAgc3RhdGljIEJ1ZmZlcmVkUmVhZGVyIGJyPW5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CgogICAgc3RhdGljIGludCBtLHksbXQsZGEscGVyLHRyLHRhLGNubzsKICAgIHN0YXRpYyBGaW5hbEV4b3RpYyB4byA9IG5ldyBGaW5hbEV4b3RpYygpOwogICAgcHVibGljICAgc3RhdGljIHZvaWQgbWFpbigpdGhyb3dzIElPRXhjZXB0aW9uCgogICAgewoKICAgICAgICBCdWZmZXJlZFJlYWRlciBicj1uZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipXRUxDT01FIFRPIEVYT1RJQyBUT1VSUyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGpvdXJuZXkgb2YgYSB0aG91c2FuZCBtaWxlcyBiZWdpbnMgd2l0aCBhIHNpbmdsZSBzdGVwLi4uLi4iKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIHRoZSB3b3JsZCB3aXRoIHVzIik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2UgYWxsb3cgb3VyIGN1c3RvbWVycyB0byB0cmF2ZWwgY29udmVuaWVudGx5IGFuZCBwcm92aWRlIHRoZW0gYSB3aWRlIHZhcmlldGllcyBvZiBjaG9pY2VzIHRvIGNob29zZSBmcm9tLiIpOwoKICAgICAgICBmb3IoaT0xOyA7aSsrKQoKICAgICAgICB7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNob2ljZXMgYXJlOi1cbiAxLkRPTUVTVElDIFRPVVJTIDIuSU5URVJOQVRJT05BTCBUT1VSUyIpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgY2hvaWNlOiIpOwoKICAgICAgICBjZD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICBGaW5hbEV4b3RpYyBhPW5ldyBGaW5hbEV4b3RpYygpOwoKICAgICAgICBzd2l0Y2goY2QpCgogICAgICAgIHsKCiAgICAgICAgICAgICAgIGNhc2UgMTpTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGxvcmUgdGhlIHdvbmRlcnMgb2YgSW5kaWEiKTsKCiAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB5b3VyIGZhdm91cml0ZSBzcG90OlxuIGEuIE5vcnRoIEluZGlhXG4gYi4gU291dGggSW5kaWEgXG4gYy4gV2VzdCBJbmRpYVxuIGQuIEVhc3QgSW5kaWFcbiBlLiBDZW50cmFsIEluZGlhIik7CgogICAgICAgICAgICAgICAgICAgICAgY2hhciBjaD0oY2hhcilici5yZWFkKCk7CgogICAgICAgICAgICAgICAgICAgICAgYnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY2gpCgogICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzpTeXN0ZW0ub3V0LnByaW50bG4oIiBXRUxDT01FIFRPIE5PUlRIIElORElBIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGxvcmUgTm9ydGggSW5kaWEgd2l0aCBvdXIgZXhjbHVzaXZlIHBhY2thZ2VzISEhIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB5b3VyIGRlc2lyZWQgUGFja2FnZTotXG4xLkJlc3Qgb2YgS2FzaG1pclxuIDIuR29sZGVuIFRyaWFuZ2xlIFxuIDMuRW5jaGFudGluZyBIaW1hY2hhbCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlc3Qgb2YgS2FzaG1pclxuMTAgZGF5cyA5IG5pZ2h0cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKldhbGsgYXJvdW5kIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ29sZiBjb3Vyc2UuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipFbmpveSBhIFNoaWthcmEgcmlkZSBvbiBEYWwgTGFrZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqRW5qb3kgdGhlIHZpc2l0IHRvIGJlYXV0aWZ1bCBNdWdoYWxzIGdhcmRlbiBpbiBTcmluYWdhciIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMjMsMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj0yMzAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbjEuU3JpbmFnYXJcbjIuR3VsbWFyZ1xuMy5QYWhhbGdhbSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXQ9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTY1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd210PSJBaXJ3YXlzIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobXQ9PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0zNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd210PSJSaWx3YXlzIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb2xkZW4gVHJpYW5nbGVcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgTWF0aHVyYSB0ZW1wbGUuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZpc2l0IFRhaiBNYWhhbCxBZ3JhIEZvcnQsRGF5YWwgQmFnaC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKlZpc2l0IEFtZXIgJiBOYWhlcmdhcmggRm9ydC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjE0LDkwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MTQ5MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5KYWlwdXJcbjIuQWdyYVxuMy5EZWxoaSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG10PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtdD09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj02NTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtdD09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0zNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMigpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UyKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuY2hhbnRpbmcgSGltYWNoYWxcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgdGhlIFNvbGFuZyBWYWxsZXkgdG8gdmlldyBzbm93IGNhcHBlZCBtb3VudGFpbnMuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1cnJlbmRlciB0byB0aGUgY2hhcm1zIG9mIG5hdHVyZSBpbiBLdWZyaS4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjIwLDcwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MjA3MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS4gU2hpbWxhXG4yLk1hbmFsaVxuMy5DaGFuZGlnYXJoIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHRyYXZlbCBkYXRlOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBNb2RlIG9mIFRyYW5zcG9ydDpcbiAxLkFpcndheXMgXG4yLlJhaWx3YXlzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXQ9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTY1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG10PT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTM1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0zKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8uaW52b2ljZTMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6U3lzdGVtLm91dC5wcmludGxuKCIgV0VMQ09NRSBUTyBTT1VUSCBJTkRJQSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIFNvdXRoIEluZGlhIHdpdGggb3VyIGV4Y2x1c2l2ZSBwYWNrYWdlcyEhISIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgeW91ciBkZXNpcmVkIFBhY2thZ2U6LVxuMS5FbmNoYW50aW5nIEtlcmFsYVxuIDIuTmlsZ2lyaSBEZWxpZ2h0IFxuIDMuQmVzdCBvZiBNYWxhYmFyIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5jaGFudGluZyBLZXJhbGFcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgTXVubmFyIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipXYWxrIHRocm91Z2ggYnVzdGxpbmcgc3BpY2UgbWFya2V0Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy40MCwxMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTQwMTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuS29jaGlcbjIuTXVubmFyXG4zLkFsbGVwZXkiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBubz1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbW9udGg6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIE1vZGUgb2YgVHJhbnNwb3J0OlxuIDEuQWlyd2F5cyBcbjIuUmFpbHdheXMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXQ9PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTQ1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG10PT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0zNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW00KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlNCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOaWxnaXJpIERlbGlnaHRcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgdG8gQ29vbm5vb3IiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKlZpc2l0IFBpbGxhciBSb2Nrcy4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjE4LDcwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MTg3MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5Pb3R5XG4yLktvZGFpa2FuYWwiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBubz1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbW9udGg6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIE1vZGUgb2YgVHJhbnNwb3J0OlxuIDEuQWlyd2F5cyBcbjIuUmFpbHdheXMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXQ9PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9MzUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobXQ9PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9MTUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlNSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU291dGggSW5kaWFuIERlbGlnaHRcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgSG95YXNhbGEgVGVtcGxlIGF0IFNvbW5hdGhwdXIuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZpc2l0IFNyaXJhbmdhcGF0bmFtLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMjIsODAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj0yMjgwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLiBNeXNvcmVcbjIuT290eVxuMy5Lb2RhaWthbmFsIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHRyYXZlbCBkYXRlOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBNb2RlIG9mIFRyYW5zcG9ydDpcbiAxLkFpcndheXMgXG4yLlJhaWx3YXlzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXQ9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTQ1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG10PT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTI1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW02KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8uaW52b2ljZTYoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlN5c3RlbS5vdXQucHJpbnRsbigiIFdFTENPTUUgVE8gV0VTVCBJTkRJQSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwbG9yZSBXZXN0IEluZGlhIHdpdGggb3VyIGV4Y2x1c2l2ZSBwYWNrYWdlcyEhISIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHlvdXIgZGVzaXJlZCBQYWNrYWdlOi1cbjEuR29hXG4gMi5UZW1wbGUgVG91ciBvZiBHdWphcmF0IFxuIDMuQ29sb3VycyBvZiBHdWphcmF0Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvYVxuMTAgZGF5cyA5IG5pZ2h0cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKiBXYWxrIG9uIHRoZSBiZWF1dGlndWwgR29hIGJlYWNoLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMTYsNTAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj0xNjUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkdvYSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG10PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtdD09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj02NTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtdD09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0zNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW03KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlNygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlbXBsZSBUb3VyIG9mIEd1amFyYXQgXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qIFZpc2l0IHRoZSBTdW4gVGVtcGxlLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqVmlzaXQgUnVrbWluaSBUZW1wbGUuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4zNTAwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MzUwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5BaG1lZGFiYWRcbjIuUmFqa290Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHRyYXZlbCBkYXRlOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBNb2RlIG9mIFRyYW5zcG9ydDpcbiAxLkFpcndheXMgXG4yLlJhaWx3YXlzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXQ9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTY1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG10PT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0xNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW04KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlOCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb2xvdXJzIG9mIEd1amFyYXRcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogU2FmYXJpIGF0IEdpciBOYXRpb25hbCBwYXJrLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIEluZHVzIFZhbGxleSBDaXZpbGl6YXRpb24uIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4zNywwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTM3MDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuQWhtZWRhYmFkXG4yLlJhamtvdCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG10PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtdD09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NDUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobXQ9PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0yNTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW05KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlOSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAKCiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlN5c3RlbS5vdXQucHJpbnRsbigiIFdFTENPTUUgVE8gRUFTVCBJTkRJQSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGxvcmUgRWFzdCBJbmRpYSB3aXRoIG91ciBleGNsdXNpdmUgcGFja2FnZXMhISEiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgeW91ciBkZXNpcmVkIFBhY2thZ2U6LVxuMS5SYXlhbCBOZXBhbFxuIDIuRWFzdGVybiBIaW1hbGF5YW4gRGVsaWdodCBcbiAzLkhpbGxzIG9mIEVhc3QiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJheWFsIE5lcGFsXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogRW5qb3kgdGhlIHNhZmFyaSBhdCBDaGl0d2FuIE5hdGlvbmFsIFBhcmsgLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4yOSwwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MjkwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkNoaXR3YW4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHRyYXZlbCBkYXRlOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBNb2RlIG9mIFRyYW5zcG9ydDpcbiAxLkFpcndheXMgXG4yLlJhaWx3YXlzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtdD09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NjUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG10PT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9MzUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTEwKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UxMCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVhc3Rlcm4gSGltYWxheWFuIERlbGlnaHQgXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogVmlzaXQgVGlnZXIgSGlsbC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqVmlzaXQgdGhlIGJlYXV0aWZ1bCBUc2hhbmdodSBsYWtlLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4zOSwwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MzkwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkdhbmd0b2tcbjIuUGVsbGluZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIE1vZGUgb2YgVHJhbnNwb3J0OlxuIDEuQWlyd2F5cyBcbjIuUmFpbHdheXMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG10PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj02NTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobXQ9PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTE1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0xMSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMTEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWxscyBvZiBFYXN0XG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogIFZpc2l0IFRpZ2VyIEhpbGwuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKlZpc2l0IHRoZSBiZWF1dGlmdWwgVHNoYW5naHUgbGFrZS4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuNDAsMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTQwMDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5EYXJqZWVsaW5nXG4yLkdhbmd0b2tcbjMuUGVsbGluZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIE1vZGUgb2YgVHJhbnNwb3J0OlxuIDEuQWlyd2F5cyBcbjIuUmFpbHdheXMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG10PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj00NTAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobXQ9PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTI1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0xMigpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMTIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgIAoKICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6U3lzdGVtLm91dC5wcmludGxuKCIgV0VMQ09NRSBUTyBDRU5UUkFMIElORElBIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwbG9yZSBDZW50cmFsIEluZGlhIHdpdGggb3VyIGV4Y2x1c2l2ZSBwYWNrYWdlcyEhISIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB5b3VyIGRlc2lyZWQgUGFja2FnZTotXG4xLkhlYXJ0IG9mIEluZGlhIFxuIDIuQ2xhc3NpYyBNYWRoeWEgUHJhZGVzaCAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVhcnQgXG44IGRheXMgNyBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qIFRyYXZlbCB0byB0aGUgY2l0eSBvZiBsYWtlcyBCaG9wYWwgLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjMyLDAwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTMyMDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkJob3BhbFxuMi5KYWlwdXIiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NjUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtdD09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTM1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMTMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMTMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzaWMgTWFkaHlhIFByYWRlc2ggXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKiBEaXNjb3ZlciB0aGUgcmljaCBjdWx0dXJlIG9mIEFncmEuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqRXhwbG9yZSBUYWogTWFoYWwuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMjIsMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MjIwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuQWdyYVxuMi5CaG9wYWwiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgTW9kZSBvZiBUcmFuc3BvcnQ6XG4gMS5BaXJ3YXlzIFxuMi5SYWlsd2F5cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdD1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG10PT0xKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NjUwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtdD09MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTE1MDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMTQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMTQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICBjYXNlIDI6U3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIHRoZSB3b3JsZCB3aXRoIHVzLiIpOwoKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHlvdXIgZmF2b3VyaXRlIHNwb3Q6XG4gZi5FdXJvcGUgVG91ciBQYWNrYWdlXG5nLkZhciBFYXN0IFRvdXJzIFxuIGguVHJhdmVsIHRvIEF1c3RyYWxpYS1OZXcgWmVhbGFuZFxuIGkuRXhvdGljIEludGVybmF0aWlvbmFsIFZhY2F0aW9ucyIpOwoKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY209KGNoYXIpYnIucmVhZCgpOwoKICAgICAgICAgICAgICAgICAgICAgIGJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGNtKQoKICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpTeXN0ZW0ub3V0LnByaW50bG4oIiBFVVJPUEUgVE9VUiBQQUNLQUdFUyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIEV1cm9wZSB3aXRoIG91ciBleGNsdXNpdmUgcGFja2FnZXMhISEiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHlvdXIgZGVzaXJlZCBQYWNrYWdlOi1cbjEuTWFydmVscyBvZiBFdXJvcGVcbiAyLlJvbWFudGljIFJ1c3NpYSBcbiAzLkZyZW5jaCBTd2lzcyBNZWRsZXkuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcnZlbHMgb2YgRXVyb3BlXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qTWVldCBNaWNrZXkgYW5kIE1pbm5pIGluIEV1cm8gRGlzbmV5IFBhcmsuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipFeGNsdXNpdmUgTXQuIENveCBhbmQgS2luZ3Mgd2l0aCBHYWxhIGRpbm5lciBpbiBTd2l0emVybGFuZC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKkJlIGRhenpsZWQgaW4gU3dhcm92c2tpIENyeXN0YWwgV29ybGQuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4xLDIwLDAwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MTIwMDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuRnJhbmNlXG4yLlN3aXR6ZXJsYW5kIFxuMy4gQXVzdHJpYSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj01NTAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMTUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UxNSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSb21hbnRpYyBSdXNzaWFcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbipUb3VyIG9mIHRoZSBsb3ZlbHkgUHVzaGtpbiBjaXR5IC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKkJvYXQgcmlkZSBpbiBTdC4gUGV0ZXJzYnVyZy4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKlNpZ2h0c2VlaW5nIFRoYXQgVGFrZXMgWW91ciBCcmVhdGggQXdheSAtIEVuam95IHRoZSBzY2VuaWMgam91cm5leSB0aHJvdWdoIEV1cm9wZSAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjEsNTUsMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj0xNTUwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnY29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5SdXNzaWFuIEZlZGVyYXRpb24iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBubz1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbW9udGg6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NTAwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTE2KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMTYoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT09MykKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRnJlbmNoIFN3aXNzIE1lZGxleVxuMTAgZGF5cyA5IG5pZ2h0cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKldvcmxkIEZhbW91cyBMaWRvIFNob3cgYW5kIGFuIGlsbHVtaW5hdGlvbiB0b3VyIG9mIHRoZSBDaXR5IG9mIExpZ2h0cy4gIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipWaWV3cyBvZiBQYXJpcyBmcm9tIHRoZSBSaXZlciBTZWluZSBDcnVpc2UuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy4xLDQxLDAwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MTQxMDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuRnJhbmNlIFxuMi5Td2l0emVybGFuZCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj01MDAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMTcoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UxNygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpTeXN0ZW0ub3V0LnByaW50bG4oIiBGQVIgRUFTVCBUT1VSUyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBsb3JlIFRoYWlsYW5kLFNpbmdhcG9yZSxIb25nIEtvbmcgJiBNYWNhdSAgd2l0aCBvdXIgZXhjbHVzaXZlIHBhY2thZ2VzISEhIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB5b3VyIGRlc2lyZWQgUGFja2FnZTotXG4xLkluc3RhbnQgVGhhaWxhbmRcbiAyLkluc3RhbnQgU2luZ2Fwb3JlIFxuIDMuSW5zdGFudCBIb25nIEtvbmcgJiBNYWNhdSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc3RhbnQgVGhhaWxhbmRcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbipCYW5na29rIGNpdHkgdG91ci4gIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipSZWxheCBvbiB0aGUgSWR5bGxpYyBDb3JhbCBJc2xhbmQgaW4gUGF0dGF5YS4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjU1LDAwMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9NTUwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciAnQ29uZmlybScgZm9yIGJvb2tpbmciKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIGh1YiBvZiB5b3VyIGNob2ljZTotXG4gMS5UaGFpbGFuZCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj0zMDAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYT1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8ucGF5c3VtMTgoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UxOCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnN0YW50IFNpbmdhcG9yZVxuMTAgZGF5cyA5IG5pZ2h0cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKkVuam95IHBhbm9yYW1pYyBjaXR5IHRvdXIgb2YgU2luZ2Fwb3JlLiAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKkVuam95IGhhbGYgZGF5IFNhbnRvc2EgSXNsYW5kIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy42MSw4MDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTYxODAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29uPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuU2luZ2Fwb3JlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm89SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHRyYXZlbCBkYXRlOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG1vbnRoOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyPTQwMDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvb21zOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgeW91ciBuYW1lOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0xOSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8uaW52b2ljZTE5KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc3RhbnQgSG9uZyBLb25nICYgTWFjYXVcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbipFbmpveSB0aGUgY2l0eSB0b3VyIG9mIE1hY2F1LiAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKkVuam95IHBhbm9yYW1pYyBjaXR5IHRvdXIgb2YgSG9uZyBLb25nIHdpdGggTWFkYW1lIFR1c3NhdWRzLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuNzksMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj03OTAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkhvbmcgS29uZyBcbjIuTWFjYXUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBubz1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbW9udGg6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NTAwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTIwKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMjAoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzpTeXN0ZW0ub3V0LnByaW50bG4oIlRSQVZFTCBUTyBBVVNUUkFMSUEtTkVXIFpFQUxBTkQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGxvcmUgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbG5kIHdpdGggb3VyIGV4Y2x1c2l2ZSBwYWNrYWdlcyEhISIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHlvdXIgZGVzaXJlZCBQYWNrYWdlOi1cbjEuTWFnaWNhbCBBdXN0cmFsaWFcbiAyLkF1YXRyYWxpYSAmIE5ldyBaZWFsYW5kIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hZ2ljYWwgQXVzdHJhbGlhXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qIFZpc2l0IFBoaWxpcCBJc2xhbmQuLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMiwzNCwwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTIzNDAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkF1c3RyYWxpYSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB0cmF2ZWwgZGF0ZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG09SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIHllYXI6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cj03MDAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hvb3NlIHRoZSBIb3RlbCBjbGFzcyBvZiB5b3VyIGNob2ljZTotXG4gMS5FY29ub21pY3MgXG4yLlN0YW5kYXJkXG4zLkRlbHV4ZSIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgdGhlIG51bWJlciBvZiByb29tczoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hPWJyLnJlYWRMaW5lKCk7ICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0yMSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG8uaW52b2ljZTIxKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1c3RyYWxpYSAmIE5ldyBaZWFsYW5kXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qRW5qb3kgSGVsaWNvcHRlciByaWRlIGF0IEdvbGQgQ29hc3QgKDA1IE1pbnV0ZXMpIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipTcGVuZCBhIHRocmlsbGluZyBkYXkgYXQgTW92aWUgV29ybGQsIFNlYSBXb3JsZCAmIERyZWFtIFdvcmxkLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMyw2NSwwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByPTM2NTAwMDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKipQTEVBU0UgQ0hFQ0sgWU9VUiBQUklDRSAmIEFWQUlMQUJJTElUWSoqKioqKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkF1c3RyYWxpYSBcbjIuTmV3IFplYWxhbmQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBubz1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgbW9udGg6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSB5ZWFyOiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9ODAwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNob29zZSB0aGUgSG90ZWwgY2xhc3Mgb2YgeW91ciBjaG9pY2U6LVxuIDEuRWNvbm9taWNzIFxuMi5TdGFuZGFyZFxuMy5EZWx1eGUiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcj1JbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB5b3VyIG5hbWU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLnBheXN1bTIyKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5pbnZvaWNlMjIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzpTeXN0ZW0ub3V0LnByaW50bG4oIkVYT1RJQyBJTlRFUk5BVElPTkFMIFZBQ0FUSU9OUyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwbG9yZSBDaGluYSwgRHViYWkgJiBTb3V0aCBBZnJpY2Egd2l0aCBvdXIgZXhjbHVzaXZlIHBhY2thZ2VzISEhIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgeW91ciBkZXNpcmVkIFBhY2thZ2U6LVxuMS5NYWdpY2FsIENoaW5hXG4gMi5Tb3V0aCBBZnJpY2FuIFNvam91cm4gXG4gMy5EdWJhaSBEZWxpZ2h0Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihudW09PTEpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYWdpY2FsIENoaW5hXG4xMCBkYXlzIDkgbmlnaHRzIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIaWdobGlnaHRzOlxuKiBFbmpveSBhIGNhYmxlIGNhciByaWRlIGF0IHRoZSBHcmVhdCBXYWxsLiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJJQ0U6IFJzLjEsMzUsMDAwIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHI9MTM1MDAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGxlYXNlIGVudGVyICdjb25maXJtJyBmb3IgYm9va2luZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb249YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKlBMRUFTRSBDSEVDSyBZT1VSIFBSSUNFICYgQVZBSUxBQklMSVRZKioqKioqIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgaHViIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkNoaW5hIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NDAwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0yMygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UyMygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPT0yKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU291dGggQWZyaWNhbiBTb2pvdXJuIFxuMTAgZGF5cyA5IG5pZ2h0cyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGlnaGxpZ2h0czpcbiogU3BlbmQgb25lIG5pZ2h0IGluIFN1biBDaXR5LiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKlNlZSBzdXBlcmIgdmlld3Mgb2YgQ2FwZSBUb3duIHNwcmVhZCBvdXQgYmVmb3JlIHlvdSBmcm9tIHRoZSB0b3Agb2YgVGFibGUgTW91bnRhaW4uIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUklDRTogUnMuMSwzMywwMDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcj0xMzMwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgJ2NvbmZpcm0nIGZvciBib29raW5nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbj1ici5yZWFkTGluZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqUExFQVNFIENIRUNLIFlPVVIgUFJJQ0UgJiBBVkFJTEFCSUxJVFkqKioqKioiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBodWIgb2YgeW91ciBjaG9pY2U6LVxuIDEuU291dGggQWZyaWNhIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgdHJhdmVsIGRhdGU6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGE9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBtb250aDoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciB0aGUgeWVhcjoiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHI9NjAwMDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaG9vc2UgdGhlIEhvdGVsIGNsYXNzIG9mIHlvdXIgY2hvaWNlOi1cbiAxLkVjb25vbWljcyBcbjIuU3RhbmRhcmRcbjMuRGVsdXhlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG49SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHRoZSBudW1iZXIgb2Ygcm9vbXM6Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHI9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIHlvdXIgbmFtZToiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmE9YnIucmVhZExpbmUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4by5wYXlzdW0yNCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvLmludm9pY2UyNCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPT0zKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRHViYWkgRGVsaWdodCBcbjEwIGRheXMgOSBuaWdodHMiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhpZ2hsaWdodHM6XG4qICBWaXNpdCBCdXJqIEtoYWxpZmEgLSAxMjR0aCBGbG9vci4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIipFbmpveSBEZXNlcnQgU2FmYXJpIHdpdGggRGlubmVyLi4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSSUNFOiBScy45NSwwMDAiKTsKCiAgICAgICAgICAgICAgICAg