EXERCICE 2 : année du baccalauréat
2.1 / Trouvez la variable correspondant à l’année d’obtention du baccalauréat.
cpes$bac.annee
[1] 2014 2015 2015 2015 2014 2015 2016 2015 2015 2016 2016 2015 2015 2016 2015 2016
[17] 2015 2014 2016 2016 2014 2015 2015 2014 2013 2015 2015 2016 2015 2014 2015 2014
[33] 2015 2016 2014 2015 2015 2015 2015 2014 2016 2015 2015 2015 2015 2016 2016 2016
[49] 2014 2014 2015 2015 2015 2015 2015 2015 2016 2015 2015 2015 2015 2015 2016 2016
[65] 2016 2015 2015 2016 2015 2015 2016 2015 2014 2015 2015 2015 2015 2016 2014 2016
[81] 2016 2016 2015 2016 2015 2016 2015 2015 2015 2015 2014 2015 2015 2015 2014 2015
[97] 2016 2015 2015 2015 2016 2016 2015 2016 2014 2016 2016 2016 2016 2016 2015 2015
[113] 2015 2014 2013 2015 2015 2015 2014 2015 2016 2014 2015 2014 2016 2015 2016 2014
2.2 / Comment appelle-t-on ce type de variables ?
C’est une variable quantitative discrète.
2.3 / Représentez graphiquement la distribution de cette variable, en donnant le nom de cette représentation graphique.
hist(cpes$bac.annee)

C’est un histogramme.
2.4 / Trouvez le mode de cette distribution. Interprétez.
Le mode est l’année 2015. La plupart des étudiants interrogés ont obtenu leur bac en 2015.
2.5 / Donnez la moyenne et la médiane de l’année d’obtention du bac. Comparez et interprétez.
mean(cpes$bac.annee) # On trouve environ 2015
[1] 2015.094
median(cpes$bac.annee) # On trouve 2015
[1] 2015
La moyenne est (à peu près) égale à la médiane. La distribution de cette variable est donc (à peu près) symétrique.
EXERCICE 3 : situation du père
3.1 / Trouvez la variable correspondant à la situation du père.
cpes$pere.situation
[1] emploi emploi emploi chomage emploi retraite emploi <NA> emploi
[10] emploi emploi autre emploi foyer emploi emploi emploi retraite
[19] emploi emploi emploi emploi emploi emploi autre emploi emploi
[28] emploi emploi emploi emploi retraite retraite emploi emploi retraite
[37] emploi emploi emploi emploi emploi emploi retraite emploi emploi
[46] emploi autre emploi emploi autre autre emploi emploi emploi
[55] emploi emploi autre emploi emploi emploi emploi emploi emploi
[64] chomage emploi emploi emploi emploi emploi emploi emploi emploi
[73] autre emploi autre emploi emploi chomage chomage emploi emploi
[82] emploi emploi retraite emploi emploi emploi retraite emploi emploi
[91] <NA> emploi emploi emploi emploi emploi autre emploi emploi
[100] emploi emploi emploi emploi emploi emploi <NA> emploi emploi
[109] emploi emploi emploi emploi emploi emploi autre autre emploi
[118] emploi emploi emploi emploi emploi autre emploi emploi emploi
[127] emploi emploi
Levels: autre chomage emploi foyer retraite
3.2 / Comment appelle-t-on ce type de variables ?
C’est une variable qualitative.
3.3 / Quelles sont les modalités de cette variable ?
levels(cpes$pere.situation)
[1] "autre" "chomage" "emploi" "foyer" "retraite"
Autre, Chomage, Emploi, Foyer, Retraite
3.4 / Combien de personnes n’ont pas répondu à cette question ?
summary(cpes$pere.situation)
autre chomage emploi foyer retraite NA's
12 4 100 1 8 3
3 personnes n’ont pas répondu à cette question.
3.5 / Représentez graphiquement la distribution de cette variable, en donnant le nom de cette représentation graphique.
plot(cpes$pere.situation)

C’est un diagramme en barres.
3.6 / Effectuez un tri à plat (en effectifs).
table(cpes$pere.situation)
autre chomage emploi foyer retraite
12 4 100 1 8
3.7 / Effectuez un tri à plat (en fréquences).
freq(cpes$pere.situation)
3.8 / À l’aide des questions 3.4 à 3.7, commentez la distribution de la situation du père.
Nous constatons que la grande majorité des étudiants interrogés (78,1%, soit 100 personnes) ont un père en situation d’emploi, contre seulement 3,1% de chômage. Les situations “autre” représentent une partie non-négligeable de l’échantillon (9,4%), ce qui suggère que les options proposées dans la question étaient insuffisantes pour capter la diversité des situations paternelles. On peut notamment penser aux pères décédés, inconnus, etc.
EXERCICE 4 : baccalauréat des parents
4.1 / Réalisez un tableau croisé simple entre les deux variables dichotomiques (0: “n’a pas obtenu son baccalauréat”, 1: “a obtenu son baccalauréat”) du baccalauréat des parents. Prenez soin de mettre le baccalauréat de la mère en premier argument, pour que cette variable apparaisse en ligne dans le tableau. Stockez ce tableau dans une variable nommée “tabBac”.
tabBac <- table(cpes$mere.bac, cpes$pere.bac)
tabBac
0 1
0 15 8
1 15 89
Facultatif : pour vous aider à mieux lire le tableau, vous pouvez éxécuter la commande suivante dans votre console.
names(dimnames(tabBac)) <- c("Bac de la mere", "Bac du pere")
4.2 / Ajoutez les marges à ce tableau.
addmargins(tabBac)
Bac du pere
Bac de la mere 0 1 Sum
0 15 8 23
1 15 89 104
Sum 30 97 127
4.3 / À partir du tableau en effectifs “tabBac”, réalisez un tableau en pourcentages vous permettant de répondre à la question suivante : quelle proportion de notre échantillon les étudiants dont aucun des deux parents n’a de baccalauréat représentent-ils ? Donnez le nom de ce type de pourcentages, et donnez la proportion mentionnée ci-dessus.
prop(tabBac)
Bac du pere
Bac de la mere 0 1 Total
0 11.8 6.3 18.1
1 11.8 70.1 81.9
Total 23.6 76.4 100.0
Ce sont des pourcentages totaux. Les étudiants dont aucun des deux parents n’a de baccalauréat représentent 11.8% de notre échantillon.
4.3 / À partir du tableau en effectifs “tabBac”, établissez un tableau croisé avec des pourcentages en ligne. Faites une phrase complète pour expliquer l’un des pourcentages en ligne. Faites une phrase complète pour expliquer l’un des pourcentages de l’ensemble.
lprop(tabBac)
Bac du pere
Bac de la mere 0 1 Total
0 65.2 34.8 100.0
1 14.4 85.6 100.0
Ensemble 23.6 76.4 100.0
Parmi les étudiants dont la mère n’a pas de baccalauréat, 65,2% ont un père qui n’a pas non plus de baccalauréat. Les étudiants dont le père n’a pas eu son baccalauréat représentent 23,6% de l’échantillon.
4.4 / À partir du tableau en effectifs “tabBac”, établissez un tableau croisé avec des pourcentages en colonne. Faites une phrase complète pour expliquer l’un des pourcentages en colonne Faites une phrase complète pour expliquer l’un des pourcentages de l’ensemble.
cprop(tabBac)
Bac du pere
Bac de la mere 0 1 Ensemble
0 50.0 8.2 18.1
1 50.0 91.8 81.9
Total 100.0 100.0 100.0
Parmi les étudiants dont le père a son baccalauréat, 8,2% ont une mère qui n’a pas obtenu son baccalauréat. Les étudiants dont la mère a eu son baccalauréat représentent 81,9% de l’échantillon.
4.5 / À partir de ces différents tableaux croisés, décrivez et commentez la répartition du baccalauréat parental, puis formulez une hypothèse sur le lien entre ces deux variables. À votre avis, quels facteurs pourraient expliquer cette répartition et, donc, votre hypothèse ?
Remarquons tout d’abord que le taux d’étudiants dont les deux parents ont un baccalauréat représentent 70% de l’échantillon. En supposant que les parents des étudiants sont nés au début des années 1970 et ont passé leur baccalauréat à la fin des années 1980, ce résultat paraît être dans la moyenne française de l’époque.
Nous pouvons faire, par ailleurs, l’hypothèse qu’il existe un lien entre ces deux variables, c’est-à-dire que lorsque la mère a son baccalauréat, c’est également le cas du père (et inversement), c’est-à-dire un phènomène d’homogamie (en terme de diplôme).
Une analyse plus fine révèle également une différence entre pères et mères : les premiers sont à peine plus nombreux que les secondes à ne pas avoir de baccalauréat (23% contre 18%). Or, quand les parents n’ont pas de baccalauréat, la proportion d’hommes dont la conjointe avait son baccalauréat est de 50%, contre 34% pour les femmes. Inversement, quand ils ont leur baccalauréat, la proportion de femmes dont le conjoint n’a pas son bac est de 14,4% contre 6,3% pour les hommes. Autrement dit, il semblerait que les hommes ont plus souvent des conjointes ayant un niveau de diplôme supérieur au leur.
EXERCICE 5 : Exploration de deux variables
Dans cet exercice, vous travaillerez à partir de la base de donnees HDV (Histoire de Vies). Chargement des données : exécutez les deux lignes ci-dessous
data(hdv2003)
hdv <- hdv2003
5.1 / Affichez la liste des variables du jeu de données hdv, le nombre de lignes et le nombre de colonnes
str(hdv)
'data.frame': 2000 obs. of 20 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ age : int 28 23 59 34 71 35 60 47 20 28 ...
$ sexe : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
$ nivetud : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
$ poids : num 2634 9738 3994 5732 4329 ...
$ occup : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
$ qualif : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
$ freres.soeurs: int 8 2 2 1 0 5 1 5 4 2 ...
$ clso : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
$ relig : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
$ trav.imp : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
$ trav.satisf : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
$ hard.rock : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ lecture.bd : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
$ cuisine : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
$ bricol : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
$ cinema : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
$ sport : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
$ heures.tv : num 0 1 0 2 3 2 2.9 1 2 2 ...
nrow(hdv)
[1] 2000
ncol(hdv)
[1] 20
5.2 / Représentez (graphique) et décrivez (indicateurs statistiques) la variable heures.tv, qui fournit le nombre d’heures passées devant la télévision par jour.
hist(hdv$heures.tv) # histogramme

On peut observer une distribution décroissante de la variable, avec un mode pour la classe [0-1h]
boxplot(hdv$heures.tv) # boîte à moustaches

summary(hdv$heures.tv)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000 1.000 2.000 2.247 3.000 12.000 5
La médiane est de 2 heures de télévision par jour.
mean(hdv$heures.tv, na.rm = TRUE)
[1] 2.246566
sd(hdv$heures.tv, na.rm = TRUE)
[1] 1.775853
La moyenne est de 2,3 heures par jour, avec un écart-type de 1,7 heures, ce qui témoigne d’une certaine dispersion autour de la valeur moyenne, dans un intervalle toutefois restreint.
En conclusion, nous avons mode < médiane < moyenne, ce qui correspond bien à une répartition décroissante, asymétrique à gauche. Autrement dit, plus le nombre d’heures par jour devant la TV est grand, moins de personnes sont concernées.
5.3 / Que peut-on dire des relations entre nombre d’heures passées devant la télévision et sexe ?
boxplot(hdv$heures.tv ~ hdv$sexe) # Représentation graphique

Tableau de comparaison des moyennes :
aggregate(hdv$heures.tv, list(Genre=hdv$sexe), mean, na.rm = TRUE)
Tableau de comparaison des écarts-types
aggregate(hdv$heures.tv, list(Genre=hdv$sexe), sd, na.rm = TRUE)
Une première étude de la relation des deux variables avec le paradigme de la médiane nous montre une répartition homogène entre hommes et femmes (médianes égales, quartiles égaux dans les deux sous-groupes).
Une deuxième approche, dans le paradigme de la moyenne, montre des moyennes et des écarts-types très proches également.
Nous pouvons donc dire qu’il ne semble pas y avoir de lien important entre le genre et la consommation (quantitative) de télévision.
5.4. / Que peut-on dire des relations entre nombre d’heures passées devant la télévision et niveau d’études ? Optionnel : éxécutez les lignes suivantes pour simplifier vos interprétations, et utilisez la variable “nivetud.simp” pour cette analyse.
hdv$nivetud.simp <- hdv$nivetud
levels(hdv$nivetud.simp) <- c("Niveau primaire ou inf", "Niveau primaire ou inf",
"Niveau primaire ou inf", "1er cycle", "2e cycle",
"Ens. technique ou professionnel",
"Ens. technique ou professionnel",
"Études supérieures")
Tableau comparatif des moyennes :
aggregate(hdv$heures.tv, list(Niveau=hdv$nivetud.simp), mean, na.rm = TRUE)
On observe une claire diminution de la moyenne avec l’augmentation du niveau d’études (exception de l’enseignement technique et professionnel).
Tableau comparatif des écarts-types :
aggregate(hdv$heures.tv, list(Niveau=hdv$nivetud.simp), sd, na.rm = TRUE)
On observe une claire diminution de l’écart-type avec l’augmentation du niveau d’études, ce qui suggère que plus le niveau d’étude est élevé, plus forte est la concentration des valeurs autour de la moyenne. Autrement dit, les comportements ont tendance à s’homogénéiser avec l’augmentation du niveau d’études.
Étude avec des boîtes à moustache multiples :
boxplot(hdv$heures.tv ~ hdv$nivetud.simp)

Cette première approche montre des variations importantes de la consommation de TV selon les niveaux d’étude. En effet, Q1 pour les personnes ayant un niveau d’études primaires ou inférieur est égal à la médiane des personnes ayant un premier cycle, soit environ 2 heures par jour. Autrement dit, plus des trois quarts des personnes ayant un niveau primaire ou inférieur consomment de la télévision 2h/jour, contre seulement 50% des personnes ayant un niveau premier cycle.
Les répartitions sont essentiellement similaires pour les niveaux d’études premier cycle, 2e cycle et enseignement technique.
En revanche, nous observons une autre variation importante pour le sous-groupe des études supérieures, où la médiane du deuxième cycle est égale au Q3 des études supérieures. Ainsi, plus de la moitié des personnes ayant un niveau premier cycle regardent la TV 2h/jour, contre seulement un quart des personnes ayant suivi des études supérieures.
En conclusion : il semble bien y avoir une relation entre niveau d’études et consommation horaire de télévision. Pour simplifier, la consommation quotidienne de TV diminue au fur et à mesure que le niveau d’études augmente.
Nous pouvons aussi préciser cette relation à deux niveaux :
- L’effet semble moins fonctionner progressivement que par paliers, avec deux seuils : niveau supérieur au primaire et études supérieures.
- Une étude de la répartition des valeurs au sein de chaque palier témoigne d’une homogénéisation plus forte des comportements avec la croissance du niveau d’études (voir boîtes à moustache et décroissance de l’écart-type)
LS0tCnRpdGxlOiAiQ1BFUzIgLSBNw6l0aG9kZXMgcXVhbnRpdGF0aXZlcyIKc3VidGl0bGU6ICJDb3JyaWfDqSBkdSBkZXZvaXIgc291cyBSIgphdXRob3I6ICJHYWJyaWVsIEFsY2FyYXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHF1ZXN0aW9ucikKY3BlcyA8LSByZWFkLmNzdigifi9Eb2N1bWVudHMvY291cnMtc3RhdHMvY3Blc19xdWFudGkvYmRkX2FsaW1lbnRhdGlvbi5jc3YiKQpgYGAKCgojIyMgRVhFUkNJQ0UgMSA6IHF1ZXN0aW9ucyBnw6luw6lyYWxlcwoKCioqMS4xIC8gVHJvdXZleiBsZSBub21icmUgZGUgbGlnbmVzIGV0IGRlIGNvbG9ubmVzIGRhbnMgY2V0dGUgYmFzZSBkZSBkb25uw6llcy4qKgoKYGBge3IsIGVjaG89VFJVRX0KbnJvdyhjcGVzKQpuY29sKGNwZXMpCmBgYAoKT24gdHJvdXZlIDEyOCBsaWduZXMgZXQgMTI1IGNvbG9ubmVzLgoKKioxLjIgLyBEdSBwb2ludCBkZSB2dWUgc3RhdGlzdGlxdWUsIMOgIHF1b2kgY29ycmVzcG9uZGVudCBsZXMgbGlnbmVzID8qKgoKRWxsZXMgY29ycmVzcG9uZGVudCBhdXggaW5kaXZpZHVzLgoKKioxLjMgLyBEdSBwb2ludCBkZSB2dWUgc3RhdGlzdGlxdWUsIMOgIHF1b2kgY29ycmVzcG9uZGVudCBsZXMgY29sb25uZXMgPyoqCgpFbGxlcyBjb3JyZXNwb25kZW50IGF1eCB2YXJpYWJsZXMuCgojI0VYRVJDSUNFIDIgOiBhbm7DqWUgZHUgYmFjY2FsYXVyw6lhdAoKKioyLjEgLyBUcm91dmV6IGxhIHZhcmlhYmxlIGNvcnJlc3BvbmRhbnQgw6AgbCdhbm7DqWUgZCdvYnRlbnRpb24gZHUgYmFjY2FsYXVyw6lhdC4qKgoKCmBgYHtyfQpjcGVzJGJhYy5hbm5lZQpgYGAKCioqMi4yIC8gQ29tbWVudCBhcHBlbGxlLXQtb24gY2UgdHlwZSBkZSB2YXJpYWJsZXMgPyoqCgpDJ2VzdCB1bmUgdmFyaWFibGUgcXVhbnRpdGF0aXZlIGRpc2Nyw6h0ZS4KCioqMi4zIC8gUmVwcsOpc2VudGV6IGdyYXBoaXF1ZW1lbnQgbGEgZGlzdHJpYnV0aW9uIGRlIGNldHRlIHZhcmlhYmxlLCBlbiBkb25uYW50IGxlIG5vbSBkZSBjZXR0ZSByZXByw6lzZW50YXRpb24gZ3JhcGhpcXVlLioqCgpgYGB7cn0KaGlzdChjcGVzJGJhYy5hbm5lZSkKYGBgCgpDJ2VzdCB1biBoaXN0b2dyYW1tZS4KCioqMi40IC8gVHJvdXZleiBsZSBtb2RlIGRlIGNldHRlIGRpc3RyaWJ1dGlvbi4gSW50ZXJwcsOpdGV6LioqCgpMZSBtb2RlIGVzdCBsJ2FubsOpZSAyMDE1LgpMYSBwbHVwYXJ0IGRlcyDDqXR1ZGlhbnRzIGludGVycm9nw6lzIG9udCBvYnRlbnUgbGV1ciBiYWMgZW4gMjAxNS4KCioqMi41IC8gRG9ubmV6IGxhIG1veWVubmUgZXQgbGEgbcOpZGlhbmUgZGUgbCdhbm7DqWUgZCdvYnRlbnRpb24gZHUgYmFjLiBDb21wYXJleiBldCBpbnRlcnByw6l0ZXouKioKCmBgYHtyfQptZWFuKGNwZXMkYmFjLmFubmVlKSAjIE9uIHRyb3V2ZSBlbnZpcm9uIDIwMTUKbWVkaWFuKGNwZXMkYmFjLmFubmVlKSAjIE9uIHRyb3V2ZSAyMDE1CmBgYAoKTGEgbW95ZW5uZSBlc3QgKMOgIHBldSBwcsOocykgw6lnYWxlIMOgIGxhIG3DqWRpYW5lLiBMYSBkaXN0cmlidXRpb24gZGUgY2V0dGUKdmFyaWFibGUgZXN0IGRvbmMgKMOgIHBldSBwcsOocykgc3ltw6l0cmlxdWUuCgoKIyMjIEVYRVJDSUNFIDMgOiBzaXR1YXRpb24gZHUgcMOocmUKCgoqKjMuMSAvIFRyb3V2ZXogbGEgdmFyaWFibGUgY29ycmVzcG9uZGFudCDDoCBsYSBzaXR1YXRpb24gZHUgcMOocmUuKioKCgpgYGB7cn0KY3BlcyRwZXJlLnNpdHVhdGlvbgpgYGAKCioqMy4yIC8gQ29tbWVudCBhcHBlbGxlLXQtb24gY2UgdHlwZSBkZSB2YXJpYWJsZXMgPyoqCgpDJ2VzdCB1bmUgdmFyaWFibGUgcXVhbGl0YXRpdmUuCgoqKjMuMyAvIFF1ZWxsZXMgc29udCBsZXMgbW9kYWxpdMOpcyBkZSBjZXR0ZSB2YXJpYWJsZSA/KioKCmBgYHtyfQpsZXZlbHMoY3BlcyRwZXJlLnNpdHVhdGlvbikKYGBgCgpBdXRyZSwgQ2hvbWFnZSwgRW1wbG9pLCBGb3llciwgUmV0cmFpdGUKCioqMy40IC8gQ29tYmllbiBkZSBwZXJzb25uZXMgbidvbnQgcGFzIHLDqXBvbmR1IMOgIGNldHRlIHF1ZXN0aW9uID8qKgoKYGBge3J9CnN1bW1hcnkoY3BlcyRwZXJlLnNpdHVhdGlvbikKYGBgCgozIHBlcnNvbm5lcyBuJ29udCBwYXMgcsOpcG9uZHUgw6AgY2V0dGUgcXVlc3Rpb24uCgoqKjMuNSAvIFJlcHLDqXNlbnRleiBncmFwaGlxdWVtZW50IGxhIGRpc3RyaWJ1dGlvbiBkZSBjZXR0ZSB2YXJpYWJsZSwgZW4gZG9ubmFudAogICAgICBsZSBub20gZGUgY2V0dGUgcmVwcsOpc2VudGF0aW9uIGdyYXBoaXF1ZS4qKgoKYGBge3J9CnBsb3QoY3BlcyRwZXJlLnNpdHVhdGlvbikgCmBgYAoKQydlc3QgdW4gZGlhZ3JhbW1lIGVuIGJhcnJlcy4KCioqMy42IC8gRWZmZWN0dWV6IHVuIHRyaSDDoCBwbGF0IChlbiBlZmZlY3RpZnMpLioqCgpgYGB7cn0KdGFibGUoY3BlcyRwZXJlLnNpdHVhdGlvbikKYGBgCgoqKjMuNyAvIEVmZmVjdHVleiB1biB0cmkgw6AgcGxhdCAoZW4gZnLDqXF1ZW5jZXMpLioqCgpgYGB7cn0KZnJlcShjcGVzJHBlcmUuc2l0dWF0aW9uKQpgYGAKCioqMy44IC8gw4AgbCdhaWRlIGRlcyBxdWVzdGlvbnMgMy40IMOgIDMuNywgY29tbWVudGV6IGxhIGRpc3RyaWJ1dGlvbiBkZSBsYQogICAgICBzaXR1YXRpb24gZHUgcMOocmUuKioKCk5vdXMgY29uc3RhdG9ucyBxdWUgbGEgZ3JhbmRlIG1ham9yaXTDqSBkZXMgw6l0dWRpYW50cyBpbnRlcnJvZ8OpcyAoNzgsMSUsCnNvaXQgMTAwIHBlcnNvbm5lcykgb250IHVuIHDDqHJlIGVuIHNpdHVhdGlvbiBkJ2VtcGxvaSwgY29udHJlIHNldWxlbWVudCAzLDElIGRlIApjaMO0bWFnZS4gTGVzIHNpdHVhdGlvbnMgImF1dHJlIiByZXByw6lzZW50ZW50IHVuZSBwYXJ0aWUgbm9uLW7DqWdsaWdlYWJsZSBkZQpsJ8OpY2hhbnRpbGxvbiAoOSw0JSksIGNlIHF1aSBzdWdnw6hyZSBxdWUgbGVzIG9wdGlvbnMgcHJvcG9zw6llcyBkYW5zIGxhIHF1ZXN0aW9uCsOpdGFpZW50IGluc3VmZmlzYW50ZXMgcG91ciBjYXB0ZXIgbGEgZGl2ZXJzaXTDqSBkZXMgc2l0dWF0aW9ucyBwYXRlcm5lbGxlcy4gT24gcGV1dApub3RhbW1lbnQgcGVuc2VyIGF1eCBww6hyZXMgZMOpY8OpZMOpcywgaW5jb25udXMsIGV0Yy4KCgojIyMgRVhFUkNJQ0UgNCA6IGJhY2NhbGF1csOpYXQgZGVzIHBhcmVudHMKCgoqKjQuMSAvIFLDqWFsaXNleiB1biB0YWJsZWF1IGNyb2lzw6kgc2ltcGxlIGVudHJlIGxlcyBkZXV4IHZhcmlhYmxlcyBkaWNob3RvbWlxdWVzCiAgICAgICgwOiAibidhIHBhcyBvYnRlbnUgc29uIGJhY2NhbGF1csOpYXQiLCAxOiAiYSBvYnRlbnUgc29uIGJhY2NhbGF1csOpYXQiKSBkdQogICAgICBiYWNjYWxhdXLDqWF0IGRlcyBwYXJlbnRzLgogICAgICBQcmVuZXogc29pbiBkZSBtZXR0cmUgbGUgYmFjY2FsYXVyw6lhdCBkZSBsYSBtw6hyZSBlbiBwcmVtaWVyIGFyZ3VtZW50LCBwb3VyIHF1ZQogICAgICBjZXR0ZSB2YXJpYWJsZSBhcHBhcmFpc3NlIGVuIGxpZ25lIGRhbnMgbGUgdGFibGVhdS4KICAgICAgU3RvY2tleiBjZSB0YWJsZWF1IGRhbnMgdW5lIHZhcmlhYmxlIG5vbW3DqWUgInRhYkJhYyIuKioKCmBgYHtyfQp0YWJCYWMgPC0gdGFibGUoY3BlcyRtZXJlLmJhYywgY3BlcyRwZXJlLmJhYykKdGFiQmFjCmBgYAoKKipGYWN1bHRhdGlmIDogcG91ciB2b3VzIGFpZGVyIMOgIG1pZXV4IGxpcmUgbGUgdGFibGVhdSwgdm91cyBwb3V2ZXogw6l4w6ljdXRlcgpsYSBjb21tYW5kZSBzdWl2YW50ZSBkYW5zIHZvdHJlIGNvbnNvbGUuKioKCmBgYHtyfQpuYW1lcyhkaW1uYW1lcyh0YWJCYWMpKSA8LSBjKCJCYWMgZGUgbGEgbWVyZSIsICJCYWMgZHUgcGVyZSIpCmBgYAoKKio0LjIgLyBBam91dGV6IGxlcyBtYXJnZXMgw6AgY2UgdGFibGVhdS4qKgoKYGBge3J9CmFkZG1hcmdpbnModGFiQmFjKQpgYGAKCioqNC4zIC8gw4AgcGFydGlyIGR1IHRhYmxlYXUgZW4gZWZmZWN0aWZzICJ0YWJCYWMiLCByw6lhbGlzZXogdW4gdGFibGVhdSBlbiBwb3VyY2VudGFnZXMKICAgICAgdm91cyBwZXJtZXR0YW50IGRlIHLDqXBvbmRyZSDDoCBsYSBxdWVzdGlvbiBzdWl2YW50ZSA6CiAgICAgIHF1ZWxsZSBwcm9wb3J0aW9uIGRlIG5vdHJlIMOpY2hhbnRpbGxvbiBsZXMgw6l0dWRpYW50cyBkb250IGF1Y3VuIGRlcyBkZXV4CiAgICAgIHBhcmVudHMgbidhIGRlIGJhY2NhbGF1csOpYXQgcmVwcsOpc2VudGVudC1pbHMgPwogICAgICBEb25uZXogbGUgbm9tIGRlIGNlIHR5cGUgZGUgcG91cmNlbnRhZ2VzLCBldCBkb25uZXogbGEgcHJvcG9ydGlvbiBtZW50aW9ubsOpZQogICAgICBjaS1kZXNzdXMuKioKCmBgYHtyfQpwcm9wKHRhYkJhYykKYGBgCgpDZSBzb250IGRlcyBwb3VyY2VudGFnZXMgdG90YXV4LgpMZXMgw6l0dWRpYW50cyBkb250IGF1Y3VuIGRlcyBkZXV4IHBhcmVudHMgbidhIGRlIGJhY2NhbGF1csOpYXQgcmVwcsOpc2VudGVudCAxMS44JSBkZQpub3RyZSDDqWNoYW50aWxsb24uCgoqKjQuMyAvIMOAIHBhcnRpciBkdSB0YWJsZWF1IGVuIGVmZmVjdGlmcyAidGFiQmFjIiwgw6l0YWJsaXNzZXogdW4gdGFibGVhdSBjcm9pc8OpCiAgICAgIGF2ZWMgZGVzIHBvdXJjZW50YWdlcyBlbiBsaWduZS4KICAgICAgRmFpdGVzIHVuZSBwaHJhc2UgY29tcGzDqHRlIHBvdXIgZXhwbGlxdWVyIGwndW4gZGVzIHBvdXJjZW50YWdlcyBlbiBsaWduZS4KICAgICAgRmFpdGVzIHVuZSBwaHJhc2UgY29tcGzDqHRlIHBvdXIgZXhwbGlxdWVyIGwndW4gZGVzIHBvdXJjZW50YWdlcyBkZSBsJ2Vuc2VtYmxlLioqCgpgYGB7cn0KbHByb3AodGFiQmFjKQpgYGAKClBhcm1pIGxlcyDDqXR1ZGlhbnRzIGRvbnQgbGEgbcOocmUgbidhIHBhcyBkZSBiYWNjYWxhdXLDqWF0LCA2NSwyJSBvbnQgdW4gcMOocmUKcXVpIG4nYSBwYXMgbm9uIHBsdXMgZGUgYmFjY2FsYXVyw6lhdC4KTGVzIMOpdHVkaWFudHMgZG9udCBsZSBww6hyZSBuJ2EgcGFzIGV1IHNvbiBiYWNjYWxhdXLDqWF0IHJlcHLDqXNlbnRlbnQgMjMsNiUKZGUgbCfDqWNoYW50aWxsb24uCgoqKjQuNCAvIMOAIHBhcnRpciBkdSB0YWJsZWF1IGVuIGVmZmVjdGlmcyAidGFiQmFjIiwgw6l0YWJsaXNzZXogdW4gdGFibGVhdSBjcm9pc8OpCiAgICAgIGF2ZWMgZGVzIHBvdXJjZW50YWdlcyBlbiBjb2xvbm5lLgogICAgICBGYWl0ZXMgdW5lIHBocmFzZSBjb21wbMOodGUgcG91ciBleHBsaXF1ZXIgbCd1biBkZXMgcG91cmNlbnRhZ2VzIGVuIGNvbG9ubmUKICAgICAgRmFpdGVzIHVuZSBwaHJhc2UgY29tcGzDqHRlIHBvdXIgZXhwbGlxdWVyIGwndW4gZGVzIHBvdXJjZW50YWdlcyBkZSBsJ2Vuc2VtYmxlLioqCgpgYGB7cn0KY3Byb3AodGFiQmFjKQpgYGAKClBhcm1pIGxlcyDDqXR1ZGlhbnRzIGRvbnQgbGUgcMOocmUgYSBzb24gYmFjY2FsYXVyw6lhdCwgOCwyJSBvbnQgdW5lIG3DqHJlCnF1aSBuJ2EgcGFzIG9idGVudSBzb24gYmFjY2FsYXVyw6lhdC4KTGVzIMOpdHVkaWFudHMgZG9udCBsYSBtw6hyZSBhIGV1IHNvbiBiYWNjYWxhdXLDqWF0IHJlcHLDqXNlbnRlbnQgODEsOSUKZGUgbCfDqWNoYW50aWxsb24uCgoqKjQuNSAvIMOAIHBhcnRpciBkZSBjZXMgZGlmZsOpcmVudHMgdGFibGVhdXggY3JvaXPDqXMsIGTDqWNyaXZleiBldCBjb21tZW50ZXoKICAgICAgbGEgcsOpcGFydGl0aW9uIGR1IGJhY2NhbGF1csOpYXQgcGFyZW50YWwsIHB1aXMgZm9ybXVsZXogdW5lIGh5cG90aMOoc2UKICAgICAgc3VyIGxlIGxpZW4gZW50cmUgY2VzIGRldXggdmFyaWFibGVzLgogICAgICDDgCB2b3RyZSBhdmlzLCBxdWVscyBmYWN0ZXVycyBwb3VycmFpZW50IGV4cGxpcXVlciBjZXR0ZSByw6lwYXJ0aXRpb24gZXQsIGRvbmMsCiAgICAgIHZvdHJlIGh5cG90aMOoc2UgPyoqCgpSZW1hcnF1b25zIHRvdXQgZCdhYm9yZCBxdWUgbGUgdGF1eCBkJ8OpdHVkaWFudHMgZG9udCBsZXMgZGV1eCBwYXJlbnRzIG9udAp1biBiYWNjYWxhdXLDqWF0IHJlcHLDqXNlbnRlbnQgNzAlIGRlIGwnw6ljaGFudGlsbG9uLgpFbiBzdXBwb3NhbnQgcXVlIGxlcyBwYXJlbnRzIGRlcyDDqXR1ZGlhbnRzIHNvbnQgbsOpcyBhdSBkw6lidXQgZGVzIGFubsOpZXMgMTk3MCBldCBvbnQKcGFzc8OpIGxldXIgYmFjY2FsYXVyw6lhdCDDoCBsYSBmaW4gZGVzIGFubsOpZXMgMTk4MCwgY2UgcsOpc3VsdGF0IHBhcmHDrnQgw6p0cmUgZGFucyBsYQptb3llbm5lIGZyYW7Dp2Fpc2UgZGUgbCfDqXBvcXVlLgoKTm91cyBwb3V2b25zIGZhaXJlLCBwYXIgYWlsbGV1cnMsIGwnaHlwb3Row6hzZSBxdSdpbCBleGlzdGUgdW4gbGllbiBlbnRyZSBjZXMgZGV1eAp2YXJpYWJsZXMsIGMnZXN0LcOgLWRpcmUgcXVlIGxvcnNxdWUgbGEgbcOocmUgYSBzb24gYmFjY2FsYXVyw6lhdCwgYydlc3Qgw6lnYWxlbWVudApsZSBjYXMgZHUgcMOocmUgKGV0IGludmVyc2VtZW50KSwgYydlc3Qtw6AtZGlyZSB1biBwaMOobm9tw6huZSBkJ2hvbW9nYW1pZSAoZW4gdGVybWUKZGUgZGlwbMO0bWUpLgoKVW5lIGFuYWx5c2UgcGx1cyBmaW5lIHLDqXbDqGxlIMOpZ2FsZW1lbnQgdW5lIGRpZmbDqXJlbmNlIGVudHJlIHDDqHJlcyBldCBtw6hyZXMgOiBsZXMgcHJlbWllcnMKc29udCDDoCBwZWluZSBwbHVzIG5vbWJyZXV4IHF1ZSBsZXMgc2Vjb25kZXMgw6AgbmUgcGFzIGF2b2lyIGRlIGJhY2NhbGF1csOpYXQKKDIzJSBjb250cmUgMTglKS4gT3IsIHF1YW5kIGxlcyBwYXJlbnRzIG4nb250IHBhcyBkZSBiYWNjYWxhdXLDqWF0LCBsYSBwcm9wb3J0aW9uIGQnaG9tbWVzCmRvbnQgbGEgY29uam9pbnRlIGF2YWl0IHNvbiBiYWNjYWxhdXLDqWF0IGVzdCBkZSA1MCUsIGNvbnRyZSAzNCUgcG91ciBsZXMgZmVtbWVzLgpJbnZlcnNlbWVudCwgcXVhbmQgaWxzIG9udCBsZXVyIGJhY2NhbGF1csOpYXQsIGxhIHByb3BvcnRpb24gZGUgZmVtbWVzIGRvbnQgbGUgY29uam9pbnQKbidhIHBhcyBzb24gYmFjIGVzdCBkZSAxNCw0JSBjb250cmUgNiwzJSBwb3VyIGxlcyBob21tZXMuIEF1dHJlbWVudCBkaXQsIGlsIHNlbWJsZXJhaXQKcXVlIGxlcyBob21tZXMgb250IHBsdXMgc291dmVudCBkZXMgY29uam9pbnRlcyBheWFudCB1biBuaXZlYXUgZGUgZGlwbMO0bWUgc3Vww6lyaWV1cgphdSBsZXVyLgoKCiMjIyBFWEVSQ0lDRSA1IDogRXhwbG9yYXRpb24gZGUgZGV1eCB2YXJpYWJsZXMgIyMjIwoKCioqRGFucyBjZXQgZXhlcmNpY2UsIHZvdXMgdHJhdmFpbGxlcmV6IMOgIHBhcnRpciBkZSBsYSBiYXNlIGRlIGRvbm5lZXMgSERWCihIaXN0b2lyZSBkZSBWaWVzKS4KQ2hhcmdlbWVudCBkZXMgZG9ubsOpZXMgOiBleMOpY3V0ZXogbGVzIGRldXggbGlnbmVzIGNpLWRlc3NvdXMgKioKCmBgYHtyfQpkYXRhKGhkdjIwMDMpCmhkdiA8LSBoZHYyMDAzCmBgYAoKKio1LjEgLyBBZmZpY2hleiBsYSBsaXN0ZSBkZXMgdmFyaWFibGVzIGR1IGpldSBkZSBkb25uw6llcyBoZHYsIAogICAgICBsZSBub21icmUgZGUgbGlnbmVzIGV0IGxlIG5vbWJyZSBkZSBjb2xvbm5lcyoqCgpgYGB7cn0Kc3RyKGhkdikKbnJvdyhoZHYpCm5jb2woaGR2KQpgYGAKCioqNS4yIC8gUmVwcsOpc2VudGV6IChncmFwaGlxdWUpIGV0IGTDqWNyaXZleiAoaW5kaWNhdGV1cnMgc3RhdGlzdGlxdWVzKSAKICAgICAgICBsYSB2YXJpYWJsZSBoZXVyZXMudHYsIHF1aSBmb3Vybml0IGxlIG5vbWJyZSBkJ2hldXJlcyBwYXNzw6llcyAKICAgICAgZGV2YW50IGxhIHTDqWzDqXZpc2lvbiBwYXIgam91ci4qKgoKYGBge3J9Cmhpc3QoaGR2JGhldXJlcy50dikgIyBoaXN0b2dyYW1tZQpgYGAKCk9uIHBldXQgb2JzZXJ2ZXIgdW5lIGRpc3RyaWJ1dGlvbiBkw6ljcm9pc3NhbnRlIGRlIGxhIHZhcmlhYmxlLAphdmVjIHVuIG1vZGUgcG91ciBsYSBjbGFzc2UgWzAtMWhdCgpgYGB7cn0KYm94cGxvdChoZHYkaGV1cmVzLnR2KSAjIGJvw650ZSDDoCBtb3VzdGFjaGVzCnN1bW1hcnkoaGR2JGhldXJlcy50dikKYGBgCgpMYSBtw6lkaWFuZSBlc3QgZGUgMiBoZXVyZXMgZGUgdMOpbMOpdmlzaW9uIHBhciBqb3VyLgoKYGBge3J9Cm1lYW4oaGR2JGhldXJlcy50diwgbmEucm0gPSBUUlVFKQpzZChoZHYkaGV1cmVzLnR2LCBuYS5ybSA9IFRSVUUpCmBgYAoKTGEgbW95ZW5uZSBlc3QgZGUgMiwzIGhldXJlcyBwYXIgam91ciwgYXZlYyB1biDDqWNhcnQtdHlwZSBkZQoxLDcgaGV1cmVzLCBjZSBxdWkgdMOpbW9pZ25lIGQndW5lIGNlcnRhaW5lIGRpc3BlcnNpb24gYXV0b3VyIGRlIGxhCnZhbGV1ciBtb3llbm5lLCBkYW5zIHVuIGludGVydmFsbGUgdG91dGVmb2lzIHJlc3RyZWludC4KCkVuIGNvbmNsdXNpb24sIG5vdXMgYXZvbnMgbW9kZSA8IG3DqWRpYW5lIDwgbW95ZW5uZSwgY2UgcXVpCmNvcnJlc3BvbmQgYmllbiDDoCB1bmUgcsOpcGFydGl0aW9uIGTDqWNyb2lzc2FudGUsIGFzeW3DqXRyaXF1ZSDDoCBnYXVjaGUuCkF1dHJlbWVudCBkaXQsIHBsdXMgbGUgbm9tYnJlIGQnaGV1cmVzIHBhciBqb3VyIGRldmFudCBsYSBUViBlc3QgZ3JhbmQsCm1vaW5zIGRlIHBlcnNvbm5lcyBzb250IGNvbmNlcm7DqWVzLgoKKio1LjMgLyBRdWUgcGV1dC1vbiBkaXJlIGRlcyByZWxhdGlvbnMgZW50cmUgbm9tYnJlIGQnaGV1cmVzIHBhc3PDqWVzIAogICAgICBkZXZhbnQgbGEgdMOpbMOpdmlzaW9uIGV0IHNleGUgPyoqCgpgYGB7cn0KYm94cGxvdChoZHYkaGV1cmVzLnR2IH4gaGR2JHNleGUpICMgUmVwcsOpc2VudGF0aW9uIGdyYXBoaXF1ZQpgYGAKClRhYmxlYXUgZGUgY29tcGFyYWlzb24gZGVzIG1veWVubmVzIDoKCmBgYHtyfQphZ2dyZWdhdGUoaGR2JGhldXJlcy50diwgbGlzdChHZW5yZT1oZHYkc2V4ZSksIG1lYW4sIG5hLnJtID0gVFJVRSkKYGBgCgpUYWJsZWF1IGRlIGNvbXBhcmFpc29uIGRlcyDDqWNhcnRzLXR5cGVzCgpgYGB7cn0KYWdncmVnYXRlKGhkdiRoZXVyZXMudHYsIGxpc3QoR2VucmU9aGR2JHNleGUpLCBzZCwgbmEucm0gPSBUUlVFKQpgYGAKClVuZSBwcmVtacOocmUgw6l0dWRlIGRlIGxhIHJlbGF0aW9uIGRlcyBkZXV4IHZhcmlhYmxlcyBhdmVjIGxlIHBhcmFkaWdtZSBkZSBsYQptw6lkaWFuZSBub3VzIG1vbnRyZSB1bmUgcsOpcGFydGl0aW9uIGhvbW9nw6huZSBlbnRyZSBob21tZXMgZXQgZmVtbWVzIChtw6lkaWFuZXMKw6lnYWxlcywgcXVhcnRpbGVzIMOpZ2F1eCBkYW5zIGxlcyBkZXV4IHNvdXMtZ3JvdXBlcykuCgpVbmUgZGV1eGnDqG1lIGFwcHJvY2hlLCBkYW5zIGxlIHBhcmFkaWdtZSBkZSBsYSBtb3llbm5lLCBtb250cmUgZGVzIG1veWVubmVzCmV0IGRlcyDDqWNhcnRzLXR5cGVzIHRyw6hzIHByb2NoZXMgw6lnYWxlbWVudC4KCk5vdXMgcG91dm9ucyBkb25jIGRpcmUgcXUnaWwgbmUgc2VtYmxlIHBhcyB5IGF2b2lyIGRlIGxpZW4gaW1wb3J0YW50CmVudHJlIGxlIGdlbnJlIGV0IGxhIGNvbnNvbW1hdGlvbiAocXVhbnRpdGF0aXZlKSBkZSB0w6lsw6l2aXNpb24uCgoKKio1LjQuIC8gUXVlIHBldXQtb24gZGlyZSBkZXMgcmVsYXRpb25zIGVudHJlIG5vbWJyZSBkJ2hldXJlcyBwYXNzw6llcyAKICAgICAgIGRldmFudCBsYSB0w6lsw6l2aXNpb24gZXQgbml2ZWF1IGQnw6l0dWRlcyA/CiAgICAgICBPcHRpb25uZWwgOiDDqXjDqWN1dGV6IGxlcyBsaWduZXMgc3VpdmFudGVzIHBvdXIgc2ltcGxpZmllciB2b3MKICAgICAgIGludGVycHLDqXRhdGlvbnMsIGV0IHV0aWxpc2V6IGxhIHZhcmlhYmxlICJuaXZldHVkLnNpbXAiIHBvdXIKICAgICAgIGNldHRlIGFuYWx5c2UuKioKCmBgYHtyfQpoZHYkbml2ZXR1ZC5zaW1wIDwtIGhkdiRuaXZldHVkCmxldmVscyhoZHYkbml2ZXR1ZC5zaW1wKSA8LSBjKCJOaXZlYXUgcHJpbWFpcmUgb3UgaW5mIiwgIk5pdmVhdSBwcmltYWlyZSBvdSBpbmYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTml2ZWF1IHByaW1haXJlIG91IGluZiIsICIxZXIgY3ljbGUiLCAiMmUgY3ljbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5zLiB0ZWNobmlxdWUgb3UgcHJvZmVzc2lvbm5lbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbnMuIHRlY2huaXF1ZSBvdSBwcm9mZXNzaW9ubmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsOJdHVkZXMgc3Vww6lyaWV1cmVzIikKYGBgCgpUYWJsZWF1IGNvbXBhcmF0aWYgZGVzIG1veWVubmVzIDoKCmBgYHtyfQphZ2dyZWdhdGUoaGR2JGhldXJlcy50diwgbGlzdChOaXZlYXU9aGR2JG5pdmV0dWQuc2ltcCksIG1lYW4sIG5hLnJtID0gVFJVRSkKYGBgCgpPbiBvYnNlcnZlIHVuZSBjbGFpcmUgZGltaW51dGlvbiBkZSBsYSBtb3llbm5lIGF2ZWMgbCdhdWdtZW50YXRpb24gZHUgbml2ZWF1CmQnw6l0dWRlcyAoZXhjZXB0aW9uIGRlIGwnZW5zZWlnbmVtZW50IHRlY2huaXF1ZSBldCBwcm9mZXNzaW9ubmVsKS4KClRhYmxlYXUgY29tcGFyYXRpZiBkZXMgw6ljYXJ0cy10eXBlcyA6CgpgYGB7cn0KYWdncmVnYXRlKGhkdiRoZXVyZXMudHYsIGxpc3QoTml2ZWF1PWhkdiRuaXZldHVkLnNpbXApLCBzZCwgbmEucm0gPSBUUlVFKQpgYGAKCk9uIG9ic2VydmUgdW5lIGNsYWlyZSBkaW1pbnV0aW9uIGRlIGwnw6ljYXJ0LXR5cGUgYXZlYyBsJ2F1Z21lbnRhdGlvbiBkdSBuaXZlYXUKZCfDqXR1ZGVzLCBjZSBxdWkgc3VnZ8OocmUgcXVlIHBsdXMgbGUgbml2ZWF1IGQnw6l0dWRlIGVzdCDDqWxldsOpLCBwbHVzIGZvcnRlCmVzdCBsYSBjb25jZW50cmF0aW9uIGRlcyB2YWxldXJzIGF1dG91ciBkZSBsYSBtb3llbm5lLiBBdXRyZW1lbnQgZGl0LCBsZXMKY29tcG9ydGVtZW50cyBvbnQgdGVuZGFuY2Ugw6Agcydob21vZ8OpbsOpaXNlciBhdmVjIGwnYXVnbWVudGF0aW9uIGR1IG5pdmVhdSBkJ8OpdHVkZXMuCgrDiXR1ZGUgYXZlYyBkZXMgYm/DrnRlcyDDoCBtb3VzdGFjaGUgbXVsdGlwbGVzIDoKCmBgYHtyfQpib3hwbG90KGhkdiRoZXVyZXMudHYgfiBoZHYkbml2ZXR1ZC5zaW1wKQpgYGAKCkNldHRlIHByZW1pw6hyZSBhcHByb2NoZSBtb250cmUgZGVzIHZhcmlhdGlvbnMgaW1wb3J0YW50ZXMgZGUgbGEgY29uc29tbWF0aW9uCmRlIFRWIHNlbG9uIGxlcyBuaXZlYXV4IGQnw6l0dWRlLiBFbiBlZmZldCwgUTEgcG91ciBsZXMgcGVyc29ubmVzIGF5YW50IHVuIG5pdmVhdQpkJ8OpdHVkZXMgcHJpbWFpcmVzIG91IGluZsOpcmlldXIgZXN0IMOpZ2FsIMOgIGxhIG3DqWRpYW5lIGRlcyBwZXJzb25uZXMgYXlhbnQgdW4gcHJlbWllcgpjeWNsZSwgc29pdCBlbnZpcm9uIDIgaGV1cmVzIHBhciBqb3VyLiBBdXRyZW1lbnQgZGl0LCBwbHVzIGRlcyB0cm9pcyBxdWFydHMKZGVzIHBlcnNvbm5lcyBheWFudCB1biBuaXZlYXUgcHJpbWFpcmUgb3UgaW5mw6lyaWV1ciBjb25zb21tZW50IGRlIGxhIHTDqWzDqXZpc2lvbiAyaC9qb3VyLApjb250cmUgc2V1bGVtZW50IDUwJSBkZXMgcGVyc29ubmVzIGF5YW50IHVuIG5pdmVhdSBwcmVtaWVyIGN5Y2xlLgoKTGVzIHLDqXBhcnRpdGlvbnMgc29udCBlc3NlbnRpZWxsZW1lbnQgc2ltaWxhaXJlcyBwb3VyIGxlcyBuaXZlYXV4IGQnw6l0dWRlcyBwcmVtaWVyCmN5Y2xlLCAyZSBjeWNsZSBldCBlbnNlaWduZW1lbnQgdGVjaG5pcXVlLgoKRW4gcmV2YW5jaGUsIG5vdXMgb2JzZXJ2b25zIHVuZSBhdXRyZSB2YXJpYXRpb24gaW1wb3J0YW50ZSBwb3VyIGxlIHNvdXMtZ3JvdXBlCmRlcyDDqXR1ZGVzIHN1cMOpcmlldXJlcywgb8O5IGxhIG3DqWRpYW5lIGR1IGRldXhpw6htZSBjeWNsZSBlc3Qgw6lnYWxlIGF1IFEzIGRlcwrDqXR1ZGVzIHN1cMOpcmlldXJlcy4gQWluc2ksIHBsdXMgZGUgbGEgbW9pdGnDqSBkZXMgcGVyc29ubmVzIGF5YW50IHVuIG5pdmVhdSBwcmVtaWVyCmN5Y2xlIHJlZ2FyZGVudCBsYSBUViAyaC9qb3VyLCBjb250cmUgc2V1bGVtZW50IHVuIHF1YXJ0IGRlcyBwZXJzb25uZXMgYXlhbnQgc3VpdmkKZGVzIMOpdHVkZXMgc3Vww6lyaWV1cmVzLgoKRW4gY29uY2x1c2lvbiA6IGlsIHNlbWJsZSBiaWVuIHkgYXZvaXIgdW5lIHJlbGF0aW9uIGVudHJlIG5pdmVhdSBkJ8OpdHVkZXMgZXQgY29uc29tbWF0aW9uCmhvcmFpcmUgZGUgdMOpbMOpdmlzaW9uLiBQb3VyIHNpbXBsaWZpZXIsIGxhIGNvbnNvbW1hdGlvbiBxdW90aWRpZW5uZSBkZSBUViBkaW1pbnVlCmF1IGZ1ciBldCDDoCBtZXN1cmUgcXVlIGxlIG5pdmVhdSBkJ8OpdHVkZXMgYXVnbWVudGUuCgpOb3VzIHBvdXZvbnMgYXVzc2kgcHLDqWNpc2VyIGNldHRlIHJlbGF0aW9uIMOgIGRldXggbml2ZWF1eCA6CgoxLiBMJ2VmZmV0IHNlbWJsZSBtb2lucyBmb25jdGlvbm5lciBwcm9ncmVzc2l2ZW1lbnQKICAgcXVlIHBhciBwYWxpZXJzLCBhdmVjIGRldXggc2V1aWxzIDogbml2ZWF1IHN1cMOpcmlldXIgYXUgcHJpbWFpcmUgZXQgw6l0dWRlcyBzdXDDqXJpZXVyZXMuIAoyLiBVbmUgw6l0dWRlIGRlIGxhIHLDqXBhcnRpdGlvbiBkZXMgdmFsZXVycyBhdSBzZWluIGRlIGNoYXF1ZSBwYWxpZXIgdMOpbW9pZ25lIGQndW5lCiAgIGhvbW9nw6luw6lpc2F0aW9uIHBsdXMgZm9ydGUgZGVzIGNvbXBvcnRlbWVudHMgYXZlYyBsYSBjcm9pc3NhbmNlIGR1IG5pdmVhdSBkJ8OpdHVkZXMKICAgKHZvaXIgYm/DrnRlcyDDoCBtb3VzdGFjaGUgZXQgZMOpY3JvaXNzYW5jZSBkZSBsJ8OpY2FydC10eXBlKQo=