This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

library(ggplot2)
library(plotly)
library(dplyr)
library(readr)
library(lubridate)
library(stringr)
library(ggthemes)
library(extrafont)
library(gapminder)
official_table <- read.csv(file='AAPL_Pre_Official_DB_7_31.csv',check.names=F,stringsAsFactors = F)#Reading the official file
month_summary<- subset(official_table) %>% group_by(Month) %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for months by volume 
month_plt <- ggplot(month_summary,aes(x=Month,y=Mean_volume)) #import dataset into ggplot2
month_plt + geom_line() + 
  
  theme_minimal() +
  scale_fill_gradient(low = "black", high = "#8de1f0") +
  labs(title = "Total Volume By months") +

  theme(panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        text = element_text(family="DM Sans"),
        plot.title = element_text(hjust = 0.5),
        legend.position = "none")

NA

year_summary_season <- subset(official_table) %>% group_by(Year, Season)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table


plt_year_summary_season <- ggplot(year_summary_season,aes(x=Year,y=Mean_volume,color=Season)) #import dataset into ggplot2

plt_year_summary_season + geom_point() + labs(x="Year", y="Mean_volume", color="Season", title ="Summary of Volume per Season & Year" )#add scatter plot with labels

year_lastTenSeason <- subset(official_table, Year > 2015 & Year <= 2020) %>% group_by(Year, Season)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_lastTenSeason <- ggplot(year_lastTenSeason,aes(x=Year,y=Mean_volume,color=Season)) #import dataset into ggplot2

plt_year_lastTenSeason + geom_point() + labs(x="Year", y="Mean_volume", color="Season", title="Summary of Volume in Last 5 Years for Seasons")#add scatter plot with labels

year_summary_quarter <- subset(official_table) %>% group_by(Year, Quarter)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table

plt_year_summary_quarter <- ggplot(year_summary_quarter,aes(x=Year,y=Mean_volume,color=Quarter)) #import dataset into ggplot2

plt_year_summary_quarter + geom_point() + labs(x="Year", y="Mean_volume", color="Quarter", title ="Summary of Volume per Quarters & Year")#add scatter plot with labels

NA
NA
year_lastTenQuarter <- subset(official_table, Year > 2015 & Year <= 2020) %>% group_by(Year, Quarter)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table
plt_year_lastTenQuarter <- ggplot(year_lastTenQuarter,aes(x=Year,y=Mean_volume,color=Quarter)) #import dataset into ggplot2

plt_year_lastTenQuarter + geom_point() + labs(x="Year", y="Mean_volume", color="Quarters", title="Summary of Volume in Last 5 Years for Quarters")#add scatter plot with labels

month_summary_Gain_Loss_Open_season <- subset(official_table) %>% group_by(Gain_Loss_Open, Month , Season)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for Gain_Loss_Open in each seasons for the months

plt_month_summary_Gain_Loss_Open_season <- ggplot(month_summary_Gain_Loss_Open_season,aes(x=Month,y=Mean_volume,color=Season,shape = Gain_Loss_Open)) #import dataset into ggplot2

plt_month_summary_Gain_Loss_Open_season + geom_point() + labs(x="Month", y="Mean_volume", color="Season", shape ="Gain_Loss_Open")#add scatter plot with labels



month_summary_Gain_Loss_Open_quarter <- subset(official_table) %>% group_by(Gain_Loss_Open, Month , Quarter)  %>% summarize(Mean_volume=mean(Volume), .groups = 'keep') #create summary table for Gain_Loss_Open in each quarters for the months

plt_month_summary_Gain_Loss_Open <- ggplot(month_summary_Gain_Loss_Open_quarter,aes(x=Month,y=Mean_volume,color=Quarter,shape = Gain_Loss_Open)) #import dataset into ggplot2


plt_month_summary_Gain_Loss_Open + geom_point() + labs(x="Month", y="Mean_volume", color="Quarter", shape ="Gain_Loss_Open")#add scatter plot with labels


#create summary table for quarter by volume 
quarter_summary_<- subset(official_table) %>% group_by(Quarter) %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') 


##create summary table for Gain_Loss_Open in each quarter 
quarter_summary_Gain_Loss_Open <- subset(official_table) %>% 
  group_by(Gain_Loss_Open, Quarter)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Open <- 
  ggplot(quarter_summary_Gain_Loss_Open,
         aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Open)) 

#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Open + geom_point() + 
  labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Open",
       color="Quarter", shape ="Gain_Loss_Open")


##create summary table for Gain_Loss_Closein each quarter 
quarter_summary_Gain_Loss_Close <- subset(official_table) %>% 
  group_by(Gain_Loss_Close, Quarter)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Close <- 
  ggplot(quarter_summary_Gain_Loss_Close,
         aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Close)) 

#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Close + geom_point() + 
  labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Close",
       color="Quarter", shape ="Gain_Loss_Close")


##create summary table for Gain_Loss_High in each quarter 
quarter_summary_Gain_Loss_High <- subset(official_table) %>% 
  group_by(Gain_Loss_High, Quarter)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_High <- 
  ggplot(quarter_summary_Gain_Loss_High,
         aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_High)) 

#add scatter plot with labels
plt_quarter_summary_Gain_Loss_High + geom_point() + 
  labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_High",
       color="Quarter", shape ="Gain_Loss_High")


##create summary table for Gain_Loss_Low in each quarter 
quarter_summary_Gain_Loss_Low <- subset(official_table) %>% 
  group_by(Gain_Loss_Low, Quarter)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_quarter_summary_Gain_Loss_Low <- 
  ggplot(quarter_summary_Gain_Loss_Low,
         aes(x=Quarter,y=Mean_volume,color=Quarter,shape = Gain_Loss_Low)) 

#add scatter plot with labels
plt_quarter_summary_Gain_Loss_Low + geom_point() + 
  labs(x="Quarter", y="Mean_volume", title ="Quarter_G/L_Low",
       color="Quarter", shape ="Gain_Loss_Low")


#create summary table for season by volume 
season_summary_<- subset(official_table) %>% group_by(Season) %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep')

##create summary table for Gain_Loss_Open in each season
season_summary_Gain_Loss_Open <- subset(official_table) %>% 
  group_by(Gain_Loss_Open, Season)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_season_summary_Gain_Loss_Open <- 
  ggplot(season_summary_Gain_Loss_Open,
         aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Open)) 

#add scatter plot with labels
plt_season_summary_Gain_Loss_Open + geom_point() + 
  labs(x="Season", y="Mean_volume", title ="Season_G/L_Open",
       color="Season", shape ="Gain_Loss_Open")


##create summary table for Gain_Loss_Close in each season
season_summary_Gain_Loss_Close <- subset(official_table) %>% 
  group_by(Gain_Loss_Close, Season)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_season_summary_Gain_Loss_Close <- 
  ggplot(season_summary_Gain_Loss_Close,
         aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Close)) 

#add scatter plot with labels
plt_season_summary_Gain_Loss_Close + geom_point() + 
  labs(x="Season", y="Mean_volume", title ="Season_G/L_Close",
       color="Season", shape ="Gain_Loss_Close")



##create summary table for Gain_Loss_High in each season
season_summary_Gain_Loss_High <- subset(official_table) %>% 
  group_by(Gain_Loss_High, Season)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_season_summary_Gain_Loss_High <- 
  ggplot(season_summary_Gain_Loss_High,
         aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_High)) 

#add scatter plot with labels
plt_season_summary_Gain_Loss_High + geom_point() + 
  labs(x="Season", y="Mean_volume", title ="Season_G/L_High",
       color="Season", shape ="Gain_Loss_High")


##create summary table for Gain_Loss_Low in each season
season_summary_Gain_Loss_Low <- subset(official_table) %>% 
  group_by(Gain_Loss_Low, Season)  %>% 
  summarize(Mean_volume=mean(Volume), .groups = 'keep') #

#import dataset into ggplot2
plt_season_summary_Gain_Loss_Low <- 
  ggplot(season_summary_Gain_Loss_Low,
         aes(x=Season,y=Mean_volume,color=Season,shape = Gain_Loss_Low)) 

#add scatter plot with labels
plt_season_summary_Gain_Loss_Low + geom_point() + 
  labs(x="Season", y="Mean_volume", title ="Season_G/L_Low",
       color="Season", shape ="Gain_Loss_Low")

NA
NA
NA
NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIApgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkcikKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShnZ3RoZW1lcykKbGlicmFyeShleHRyYWZvbnQpCmxpYnJhcnkoZ2FwbWluZGVyKQoKYGBgCgoKYGBge3J9Cm9mZmljaWFsX3RhYmxlIDwtIHJlYWQuY3N2KGZpbGU9J0FBUExfUHJlX09mZmljaWFsX0RCXzdfMzEuY3N2JyxjaGVjay5uYW1lcz1GLHN0cmluZ3NBc0ZhY3RvcnMgPSBGKSNSZWFkaW5nIHRoZSBvZmZpY2lhbCBmaWxlCm1vbnRoX3N1bW1hcnk8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSBncm91cF9ieShNb250aCkgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgbW9udGhzIGJ5IHZvbHVtZSAKbW9udGhfcGx0IDwtIGdncGxvdChtb250aF9zdW1tYXJ5LGFlcyh4PU1vbnRoLHk9TWVhbl92b2x1bWUpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCm1vbnRoX3BsdCArIGdlb21fbGluZSgpICsgCiAgCiAgdGhlbWVfbWluaW1hbCgpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAiIzhkZTFmMCIpICsKICBsYWJzKHRpdGxlID0gIlRvdGFsIFZvbHVtZSBCeSBtb250aHMiKSArCgogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5PSJETSBTYW5zIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQogIApgYGAKCgpgYGB7cn0KCnllYXJfc3VtbWFyeV9zZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoWWVhciwgU2Vhc29uKSAgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZQoKCnBsdF95ZWFyX3N1bW1hcnlfc2Vhc29uIDwtIGdncGxvdCh5ZWFyX3N1bW1hcnlfc2Vhc29uLGFlcyh4PVllYXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9zdW1tYXJ5X3NlYXNvbiArIGdlb21fcG9pbnQoKSArIGxhYnMoeD0iWWVhciIsIHk9Ik1lYW5fdm9sdW1lIiwgY29sb3I9IlNlYXNvbiIsIHRpdGxlID0iU3VtbWFyeSBvZiBWb2x1bWUgcGVyIFNlYXNvbiAmIFllYXIiICkjYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwoKYGBgCmBgYHtyfQp5ZWFyX2xhc3RUZW5TZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlLCBZZWFyID4gMjAxNSAmIFllYXIgPD0gMjAyMCkgJT4lIGdyb3VwX2J5KFllYXIsIFNlYXNvbikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKcGx0X3llYXJfbGFzdFRlblNlYXNvbiA8LSBnZ3Bsb3QoeWVhcl9sYXN0VGVuU2Vhc29uLGFlcyh4PVllYXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9sYXN0VGVuU2Vhc29uICsgZ2VvbV9wb2ludCgpICsgbGFicyh4PSJZZWFyIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iU2Vhc29uIiwgdGl0bGU9IlN1bW1hcnkgb2YgVm9sdW1lIGluIExhc3QgNSBZZWFycyBmb3IgU2Vhc29ucyIpI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKYGBgCgpgYGB7cn0KeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIgPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoWWVhciwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKCnBsdF95ZWFyX3N1bW1hcnlfcXVhcnRlciA8LSBnZ3Bsb3QoeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIsYWVzKHg9WWVhcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9zdW1tYXJ5X3F1YXJ0ZXIgKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9IlllYXIiLCB5PSJNZWFuX3ZvbHVtZSIsIGNvbG9yPSJRdWFydGVyIiwgdGl0bGUgPSJTdW1tYXJ5IG9mIFZvbHVtZSBwZXIgUXVhcnRlcnMgJiBZZWFyIikjYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwoKCmBgYApgYGB7cn0KeWVhcl9sYXN0VGVuUXVhcnRlciA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUsIFllYXIgPiAyMDE1ICYgWWVhciA8PSAyMDIwKSAlPiUgZ3JvdXBfYnkoWWVhciwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUKcGx0X3llYXJfbGFzdFRlblF1YXJ0ZXIgPC0gZ2dwbG90KHllYXJfbGFzdFRlblF1YXJ0ZXIsYWVzKHg9WWVhcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIpKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfeWVhcl9sYXN0VGVuUXVhcnRlciArIGdlb21fcG9pbnQoKSArIGxhYnMoeD0iWWVhciIsIHk9Ik1lYW5fdm9sdW1lIiwgY29sb3I9IlF1YXJ0ZXJzIiwgdGl0bGU9IlN1bW1hcnkgb2YgVm9sdW1lIGluIExhc3QgNSBZZWFycyBmb3IgUXVhcnRlcnMiKSNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCmBgYAoKCgpgYGB7cn0KbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIE1vbnRoICwgU2Vhc29uKSAgJT4lIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX09wZW4gaW4gZWFjaCBzZWFzb25zIGZvciB0aGUgbW9udGhzCgpwbHRfbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gPC0gZ2dwbG90KG1vbnRoX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW5fc2Vhc29uLGFlcyh4PU1vbnRoLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX09wZW4pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgpwbHRfbW9udGhfc3VtbWFyeV9HYWluX0xvc3NfT3Blbl9zZWFzb24gKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9Ik1vbnRoIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfT3BlbiIpI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKCgptb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuX3F1YXJ0ZXIgPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIE1vbnRoICwgUXVhcnRlcikgICU+JSBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19PcGVuIGluIGVhY2ggcXVhcnRlcnMgZm9yIHRoZSBtb250aHMKCnBsdF9tb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuIDwtIGdncGxvdChtb250aF9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuX3F1YXJ0ZXIsYWVzKHg9TW9udGgseT1NZWFuX3ZvbHVtZSxjb2xvcj1RdWFydGVyLHNoYXBlID0gR2Fpbl9Mb3NzX09wZW4pKSAjaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCgoKcGx0X21vbnRoX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gKyBnZW9tX3BvaW50KCkgKyBsYWJzKHg9Ik1vbnRoIiwgeT0iTWVhbl92b2x1bWUiLCBjb2xvcj0iUXVhcnRlciIsIHNoYXBlID0iR2Fpbl9Mb3NzX09wZW4iKSNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCgojY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIHF1YXJ0ZXIgYnkgdm9sdW1lIApxdWFydGVyX3N1bW1hcnlfPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgZ3JvdXBfYnkoUXVhcnRlcikgJT4lIAogIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpIAoKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19PcGVuIGluIGVhY2ggcXVhcnRlciAKcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuIDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19PcGVuLCBRdWFydGVyKSAgJT4lIAogIHN1bW1hcml6ZShNZWFuX3ZvbHVtZT1tZWFuKFZvbHVtZSksIC5ncm91cHMgPSAna2VlcCcpICMKCiNpbXBvcnQgZGF0YXNldCBpbnRvIGdncGxvdDIKcGx0X3F1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfT3BlbiA8LSAKICBnZ3Bsb3QocXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuLAogICAgICAgICBhZXMoeD1RdWFydGVyLHk9TWVhbl92b2x1bWUsY29sb3I9UXVhcnRlcixzaGFwZSA9IEdhaW5fTG9zc19PcGVuKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19PcGVuICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJRdWFydGVyIiwgeT0iTWVhbl92b2x1bWUiLCB0aXRsZSA9IlF1YXJ0ZXJfRy9MX09wZW4iLAogICAgICAgY29sb3I9IlF1YXJ0ZXIiLCBzaGFwZSA9IkdhaW5fTG9zc19PcGVuIikKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19DbG9zZWluIGVhY2ggcXVhcnRlciAKcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfQ2xvc2UsIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSAKICBnZ3Bsb3QocXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSwKICAgICAgICAgYWVzKHg9UXVhcnRlcix5PU1lYW5fdm9sdW1lLGNvbG9yPVF1YXJ0ZXIsc2hhcGUgPSBHYWluX0xvc3NfQ2xvc2UpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0Nsb3NlICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJRdWFydGVyIiwgeT0iTWVhbl92b2x1bWUiLCB0aXRsZSA9IlF1YXJ0ZXJfRy9MX0Nsb3NlIiwKICAgICAgIGNvbG9yPSJRdWFydGVyIiwgc2hhcGUgPSJHYWluX0xvc3NfQ2xvc2UiKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0hpZ2ggaW4gZWFjaCBxdWFydGVyIApxdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgCiAgZ3JvdXBfYnkoR2Fpbl9Mb3NzX0hpZ2gsIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoIDwtIAogIGdncGxvdChxdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2gsCiAgICAgICAgIGFlcyh4PVF1YXJ0ZXIseT1NZWFuX3ZvbHVtZSxjb2xvcj1RdWFydGVyLHNoYXBlID0gR2Fpbl9Mb3NzX0hpZ2gpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlF1YXJ0ZXIiLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iUXVhcnRlcl9HL0xfSGlnaCIsCiAgICAgICBjb2xvcj0iUXVhcnRlciIsIHNoYXBlID0iR2Fpbl9Mb3NzX0hpZ2giKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0xvdyBpbiBlYWNoIHF1YXJ0ZXIgCnF1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfTG93IDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19Mb3csIFF1YXJ0ZXIpICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfcXVhcnRlcl9zdW1tYXJ5X0dhaW5fTG9zc19Mb3cgPC0gCiAgZ2dwbG90KHF1YXJ0ZXJfc3VtbWFyeV9HYWluX0xvc3NfTG93LAogICAgICAgICBhZXMoeD1RdWFydGVyLHk9TWVhbl92b2x1bWUsY29sb3I9UXVhcnRlcixzaGFwZSA9IEdhaW5fTG9zc19Mb3cpKSAKCiNhZGQgc2NhdHRlciBwbG90IHdpdGggbGFiZWxzCnBsdF9xdWFydGVyX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyArIGdlb21fcG9pbnQoKSArIAogIGxhYnMoeD0iUXVhcnRlciIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJRdWFydGVyX0cvTF9Mb3ciLAogICAgICAgY29sb3I9IlF1YXJ0ZXIiLCBzaGFwZSA9IkdhaW5fTG9zc19Mb3ciKQoKI2NyZWF0ZSBzdW1tYXJ5IHRhYmxlIGZvciBzZWFzb24gYnkgdm9sdW1lIApzZWFzb25fc3VtbWFyeV88LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSBncm91cF9ieShTZWFzb24pICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX09wZW4gaW4gZWFjaCBzZWFzb24Kc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gPC0gc3Vic2V0KG9mZmljaWFsX3RhYmxlKSAlPiUgCiAgZ3JvdXBfYnkoR2Fpbl9Mb3NzX09wZW4sIFNlYXNvbikgICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjCgojaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCnBsdF9zZWFzb25fc3VtbWFyeV9HYWluX0xvc3NfT3BlbiA8LSAKICBnZ3Bsb3Qoc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4sCiAgICAgICAgIGFlcyh4PVNlYXNvbix5PU1lYW5fdm9sdW1lLGNvbG9yPVNlYXNvbixzaGFwZSA9IEdhaW5fTG9zc19PcGVuKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX09wZW4gKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlNlYXNvbiIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJTZWFzb25fRy9MX09wZW4iLAogICAgICAgY29sb3I9IlNlYXNvbiIsIHNoYXBlID0iR2Fpbl9Mb3NzX09wZW4iKQoKIyNjcmVhdGUgc3VtbWFyeSB0YWJsZSBmb3IgR2Fpbl9Mb3NzX0Nsb3NlIGluIGVhY2ggc2Vhc29uCnNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfQ2xvc2UsIFNlYXNvbikgICU+JSAKICBzdW1tYXJpemUoTWVhbl92b2x1bWU9bWVhbihWb2x1bWUpLCAuZ3JvdXBzID0gJ2tlZXAnKSAjCgojaW1wb3J0IGRhdGFzZXQgaW50byBnZ3Bsb3QyCnBsdF9zZWFzb25fc3VtbWFyeV9HYWluX0xvc3NfQ2xvc2UgPC0gCiAgZ2dwbG90KHNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19DbG9zZSwKICAgICAgICAgYWVzKHg9U2Vhc29uLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX0Nsb3NlKSkgCgojYWRkIHNjYXR0ZXIgcGxvdCB3aXRoIGxhYmVscwpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0Nsb3NlICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJTZWFzb24iLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iU2Vhc29uX0cvTF9DbG9zZSIsCiAgICAgICBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfQ2xvc2UiKQoKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19IaWdoIGluIGVhY2ggc2Vhc29uCnNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoIDwtIHN1YnNldChvZmZpY2lhbF90YWJsZSkgJT4lIAogIGdyb3VwX2J5KEdhaW5fTG9zc19IaWdoLCBTZWFzb24pICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0hpZ2ggPC0gCiAgZ2dwbG90KHNlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoLAogICAgICAgICBhZXMoeD1TZWFzb24seT1NZWFuX3ZvbHVtZSxjb2xvcj1TZWFzb24sc2hhcGUgPSBHYWluX0xvc3NfSGlnaCkpIAoKI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKcGx0X3NlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19IaWdoICsgZ2VvbV9wb2ludCgpICsgCiAgbGFicyh4PSJTZWFzb24iLCB5PSJNZWFuX3ZvbHVtZSIsIHRpdGxlID0iU2Vhc29uX0cvTF9IaWdoIiwKICAgICAgIGNvbG9yPSJTZWFzb24iLCBzaGFwZSA9IkdhaW5fTG9zc19IaWdoIikKCiMjY3JlYXRlIHN1bW1hcnkgdGFibGUgZm9yIEdhaW5fTG9zc19Mb3cgaW4gZWFjaCBzZWFzb24Kc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyA8LSBzdWJzZXQob2ZmaWNpYWxfdGFibGUpICU+JSAKICBncm91cF9ieShHYWluX0xvc3NfTG93LCBTZWFzb24pICAlPiUgCiAgc3VtbWFyaXplKE1lYW5fdm9sdW1lPW1lYW4oVm9sdW1lKSwgLmdyb3VwcyA9ICdrZWVwJykgIwoKI2ltcG9ydCBkYXRhc2V0IGludG8gZ2dwbG90MgpwbHRfc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdyA8LSAKICBnZ3Bsb3Qoc2Vhc29uX3N1bW1hcnlfR2Fpbl9Mb3NzX0xvdywKICAgICAgICAgYWVzKHg9U2Vhc29uLHk9TWVhbl92b2x1bWUsY29sb3I9U2Vhc29uLHNoYXBlID0gR2Fpbl9Mb3NzX0xvdykpIAoKI2FkZCBzY2F0dGVyIHBsb3Qgd2l0aCBsYWJlbHMKcGx0X3NlYXNvbl9zdW1tYXJ5X0dhaW5fTG9zc19Mb3cgKyBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHg9IlNlYXNvbiIsIHk9Ik1lYW5fdm9sdW1lIiwgdGl0bGUgPSJTZWFzb25fRy9MX0xvdyIsCiAgICAgICBjb2xvcj0iU2Vhc29uIiwgc2hhcGUgPSJHYWluX0xvc3NfTG93IikKCgoKCmBgYAo=