Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Intro Clustering - NB
Intro Clustering - NB
Semestre 02-2019
Este documento trabaja el análisis de grupos como una ténica de aprendizaje no supervisado. Se
consideran métodos no supervisados porque las observaciones no tienen una clasificación a priori.
En lugar de ello queremos ver si las observaciones se agrupan de manera natural.
Una manera de crear los grupos es utilizando métodos de particionamiento, como por ejemplo
árboles de decisión o bosques aleatorios. Estos métodos tiene la ventaja de poder considerar
simultáneamente variables cualitativas y cuantitativas. En este documento nos enfocaremos en los
métodos de agrupamiento jerárquico.
Similaridad
Ejemplos de medidas de similaridad son la aplicación de las normas conocidas sobre la diferencia
entre dos observaciones:
Métodos aglomerativos
Como se dijo antes, se comienza con \(n\) grupos donde cada observación es un grupo. A partir de
esto los pasos son los siguientes:
1. Se fusionan los dos grupos más cercanos. Así se tienen \(n-2\) grupos que contienen una
observación y un grupo que contiene dos observaciones. En total hay \(n-1\) grupos.
2. Se fusionan los dos grupos más cercanos para obtener \(n-2\) grupos.
3. Se continúa de esta manera hasta llegar a un solo grupo.
A medida que las observaciones se aglomeran en grupos es necesario entonces medir la distancia
entre grupos. Algunas distancias entre grupos son \(G_1\) y \(G_2\):
1. Los dos grupos más cercanos son los conformados por el grupo que tiene la observación 1
y el que tiene la observación 3. La distancia entre estos grupos es \(h=1\). Estos dos grupos
constituirán un nuevo grupo. Así, la nueva matriz de distancias es:
2. Ahora son el grupo conformado por la observación 2 y el grupo conformado por la
observación 4 los más cercanos. La distancia entre estos dos grupos es \(h=3\). Al
fusionarlos tenemos la siguiente matriz de distancias:
3. Ahora son el grupo conformado por la observación 5 y el grupo G24 los que se fusionarán.
La distancia entre estos dos grupos es \(h=4\). La matriz de distancias actualizada es:
4. Finalmente, la distancia entre los dos grupos resultantes es de \(h=5\).
Podemos representar esto con ayuda de un dendograma, así:
D_dist=as.dist(D)
d_tree=hclust(D_dist,method="single")
plot(d_tree, main="Dendograma")
Ejemplo: USArrest
Consideremos la base de datos USArrest que contiene información tasas de crímene en ciudades
de Estados Unidos:
data("USArrests")
head(USArrests)
Si queremos segmentar el conjunto de ciudades, por ejemplo en seis grupos, podemos proceder
así:
USArrests_clust_4=cutree(USArrests_clust,k=6)
plot(USArrests_clust)
rect.hclust(USArrests_clust,k=6)
LS0tCnRpdGxlOiAiSW50cm9kdWNjacOzbiBhbCBhbsOhbGlzaXMgZGUgZ3J1cG9zIgphdXRob3I6I
CJKdWFuIERhdmlkIE9zcGluYSBBcmFuZ28gPGJyLz4gVW5pdmVyc2lkYWQgTmFjaW9uYWwgZG
UgQ29sb21iaWEgLSBTZWRlIE1lZGVsbMOtbiA8YnIvPiBEZXBhcnRhbWVudG8gZGUgQ2llbmNpYX
MgZGUgbGEgQ29tcHV0YWNpw7NuIHkgZGUgbGEgRGVjaXNpw7NuIDxici8+IFTDqWNuaWNhcyB
kZSBhcHJlbmRpemFqZSBlc3RhZMOtc3RpY28iCmRhdGU6ICJTZW1lc3RyZSAwMi0yMDE5IgpvdX
RwdXQ6CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQ
KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKRXN0ZSBkb2N1bWVudG8gdHJhYmFqYSBlb
CBhbsOhbGlzaXMgZGUgZ3J1cG9zIGNvbW8gdW5hIHTDqW5pY2EgZGUgW2FwcmVuZGl6YWplI
G5vIHN1cGVydmlzYWRvXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VbnN1cGVydmlzZ
WRfbGVhcm5pbmcpLiBTZSBjb25zaWRlcmFuIG3DqXRvZG9zIG5vIHN1cGVydmlzYWRvcyBwb3Jx
dWUgbGFzIG9ic2VydmFjaW9uZXMgbm8gdGllbmVuIHVuYSBjbGFzaWZpY2FjacOzbiAqYSBwcmlv
cmkqLiBFbiBsdWdhciBkZSBlbGxvIHF1ZXJlbW9zIHZlciBzaSBsYXMgb2JzZXJ2YWNpb25lcyBzZS
BhZ3J1cGFuIGRlIG1hbmVyYSBuYXR1cmFsLgoKIyBFbCBwcm9ibGVtYSBkZWwgYWdydXBhbWll
bnRvCkRhZGFzIGxhcyBvYnNlcnZhY2lvbmVzICRcbWF0aGJme3hfMX0kLCAuLi4sICRcbWF0aGJm
e3hfbn0kLCBxdWUgcGVydGVuZWNlbiBhICRcbWF0aGJie1J9XmQkIHF1ZXJlbW9zIGFncnVwYXJs
b3MgZGUgbWFuZXJhIHF1ZToKCisgTGFzIG9ic2VydmFjaW9uZXMgZGUgdW4gbWlzbW8gZ3J1cG
8gc2VhbiBtdXkgc2ltaWxhcmVzCisgTGFzIG9ic2VydmFjaW9uZXMgZGUgZG9zIGdydXBvcyBkaWZl
cmVudGVzIHNlYW4gbXV5IGRpZmVyZW50ZXMuCgpFc3RvIHJlcXVpZXJlIGRvcyBjb3NhczoKCisgV
W4gY3JpdGVyaW8gKG8gbWVkaWRhKSBkZSBzaW1pbGFyaWRhZAorIFVuYSBlc3RyYXRlZ2lhIHB
hcmEgY3JlYXIgbG9zIGdydXBvcyBxdWUgb3B0aW1pY2UgZXN0ZSBjcml0ZXJpbyBwYXJhIG9idGV
uZXIgZ3J1cG9zLgoKClVuYSBtYW5lcmEgZGUgY3JlYXIgbG9zIGdydXBvcyBlcyB1dGlsaXphbmRvIF
ttw6l0b2RvcyBkZSBwYXJ0aWNpb25hbWllbnRvXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2l
raS9SZWN1cnNpdmVfcGFydGl0aW9uaW5nKSwgY29tbyBwb3IgZWplbXBsbyBbw6FyYm9sZXMgZ
GUgZGVjaXNpw7NuXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZWNpc2lvbl90cmVlX
2xlYXJuaW5nKSBvIFtib3NxdWVzIGFsZWF0b3Jpb3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy9
3aWtpL1JhbmRvbV9mb3Jlc3QpLiBFc3RvcyBtw6l0b2RvcyB0aWVuZSBsYSB2ZW50YWphIGRlIHB
vZGVyIGNvbnNpZGVyYXIgc2ltdWx0w6FuZWFtZW50ZSB2YXJpYWJsZXMgY3VhbGl0YXRpdmFzI
HkgY3VhbnRpdGF0aXZhcy4gRW4gZXN0ZSBkb2N1bWVudG8gbm9zIGVuZm9jYXJlbW9zIGVuIGx
vcyBtw6l0b2RvcyBkZSBbYWdydXBhbWllbnRvIGplcsOhcnF1aWNvXShodHRwczovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9IaWVyYXJjaGljYWxfY2x1c3RlcmluZykuCgojIyBTaW1pbGFyaWRhZApDb2
1lbnphcmVtb3MgcG9yIHRyYXRhciBsYSBub2Npw7NuIGRlIHNpbWlsYXJpZGFkLiBFbiB0w6lybWlu
b3MgbWF0ZW3DoXRpY29zLCBkb3Mgb2JzZXJ2YWNpb25lcyBzb24gc2ltaWxhcmVzIHNpIGVzdM
OhbiBjZXJjYSBlbiB0w6lybWlub3MgZGUgdW5hIGZ1bmNpw7NuIGRlIGRpc3RhbmNpYS4gRGUgZ
XN0YSBtYW5lcmEgbGFzIG5vY2lvbmVzIGRlIGNlcmNhbsOtYSB5IHNpbWlsYXJpZGFkIHNvbiBwcs
OhY3RpY2FtZW50ZSBlcXVpdmFsZW50ZXMgZW4gZWwgYW7DoWxpc2lzIGRlIGdydXBvcy4KClVu
YSBkaXN0YW5jaWEgZW4gJFxtYXRoYmJ7Un1eZCQgZXMgdW5hIGZ1bmNpw7NuICRkOiBcbWF0
aGJie1J9XmQgXHRpbWVzIFxtYXRoYmJ7Un1eZCBccmlnaHRhcnJvdyBbMCwrXGluZnR5KSQgdG
FsIHF1ZSBwYXJhIGxhcyBvYnNlcnZhY2lvbmVzICRcbWF0aGJme3hfMX0kLCAkXG1hdGhiZnt4XzJ
9JCB5ICRcbWF0aGJme3hfM30kLCBlbnRvbmNlczoKCisgJGQoXG1hdGhiZnt4XzF9LFxtYXRoYmZ
7eF8yfSlcZ2VxIDAkLCBwYXJhIHRvZG8gJFxtYXRoYmZ7eF8xfSQgeSAkXG1hdGhiZnt4XzJ9JAorIC
RkKFxtYXRoYmZ7eF8xfSxcbWF0aGJme3hfMn0pPTAkIHNpIHkgc29sbyBzaSAkXG1hdGhiZnt4XzF
9PVxtYXRoYmZ7eF8yfSQsCisgJGQoXG1hdGhiZnt4XzF9LFxtYXRoYmZ7eF8yfSk9ZChcbWF0aGJ
me3hfMn0sXG1hdGhiZnt4XzF9KSQsCisgJGQoXG1hdGhiZnt4XzF9LFxtYXRoYmZ7eF8yfSlcbGVxI
GQoXG1hdGhiZnt4XzF9LFxtYXRoYmZ7eF8zfSkrZChcbWF0aGJme3hfM30sXG1hdGhiZnt4XzJ9KS
QuCgpMYSBzaW1pbGFyaWRhZCBzZSBkZWZpbmUgZW4gdMOpcm1pbm9zIGRlIHVuYSBmdW5j
acOzbiBkZSBkaXN0YW5jaWEgeSBsYSBkaXNpbWlsYXJpZGFkIGVuIHTDqXJtaW5vcyBkZSBsYSB
zaW1pbGFyaWRhZC4KCkVqZW1wbG9zIGRlIG1lZGlkYXMgZGUgc2ltaWxhcmlkYWQgc29uIGxhIG
FwbGljYWNpw7NuIGRlIGxhcyBub3JtYXMgY29ub2NpZGFzIHNvYnJlIGxhIGRpZmVyZW5jaWEgZW
50cmUgZG9zIG9ic2VydmFjaW9uZXM6CgoxLiBOb3JtYS1wOiAkZChcbWF0aGJme3hfMX0sXG1hd
GhiZnt4XzJ9KT0oXHN1bV97aj0xfV57ZH18eF9qXnsoMSl9LXhfal57KDIpfXwpXnsxLzJ9JC4gRXN0Y
SBub3JtYSBlcyBzZW5zaWJsZSBhIGxhcyBlc2NhbGFzIGRlIGxhcyB2YXJpYWJsZXMuCjIuIE5vcm1
hIGluZmluaXRvOiAkZChcbWF0aGJme3hfMX0sXG1hdGhiZnt4XzJ9KT1zdXBfezFcbGVxIGogXGxlc
SBkfSB8eF9qXnsoMSl9LXhfal57KDIpfXwkLiBFc3RhIG5vcm1hIGVzIHNlbnNpYmxlIGEgbGFzIGVzY
2FsYXMgZGUgbGFzIHZhcmlhYmxlcy4KMy4gTWFoYWxhbm9iaXM6ICRkKFxtYXRoYmZ7eF8xfSxc
bWF0aGJme3hfMn0pPShcbWF0aGJme3hfMX0tXG1hdGhiZnt4XzJ9KV5UU157LTF9KFxtYXRoYm
Z7eF8xfS1cbWF0aGJme3hfMn0pJCwgZG9uZGUgJFMkIGVzIGxhIG1hdHJpeiBkZSB2YXJpYW56Y
XMgeSBjb3ZhcmlhbnphcyBkZSBsYXMgb2JzZXJ2YWNpb25lcy4gRXN0YSBkaXN0YW5jaWEgZXM
gaW52YXJpYW50ZSBhIHRyYW5zZm9ybWFjaW9uZXMgZGUgbGEgZm9ybWEgJEFcbWF0aGJme
3h9K1xtYXRoYmZ7Yn0kIChBIG1hdHJpeikuIAo0LiBDYW5iZXJyYTogJGQoXG1hdGhiZnt4XzF9LFxt
YXRoYmZ7eF8yfSk9XGZyYWN7MX17ZH1cc3VtX3tqfVxmcmFje3x4X2peeygxKX0teF9qXnsoMil9fH
17fHhfal57KDEpfSt4X2peeygyKX18fSQuIEVzdGEgbm9ybWEgc2UgdXRpbGl6YSBzb2JyZSB0b2Rv
IHBhcmEgb2JqZXRvcyBiaW5hcmlvcy4KCiMjIE3DqXRvZG9zIGFnbG9tZXJhdGl2b3MKU2kgc2Ugd
GllbmVuICRuJCBvYnNlcnZhY2lvbmVzICRcbWF0aGJme3hfMX0kLCAuLi4sICRcbWF0aGJme3hfbn
0kLCBzZSBjb21pZW56YSBjb24gJG4kIGdydXBvcyB5IGNvbiBsYSBtYXRyaXogZGUgZGlzdGFuY2l
hcyAkRD0oZF97aWp9KT1kKFxtYXRoYmZ7eH1faSxcbWF0aGJme3h9X2opJC4gRW4gZXN0ZSBt
w6l0b2RvIHNlICJhZ2xvbWVyYW4iIGxhcyBvYnNlcnZhY2lvbmVzLCBlcyBkZWNpciBxdWUgc2kgdm
FyaWFzIG9ic2VydmFjaW9uZXMgc2UgYWdydXBhbiBlbnRvbmNlcyBlbGxhcyBzZSByZWVtcGxhem
FuIHBvciB1bmEgbnVldmEgb2JzZXJ2YWNpw7NuIHF1ZSBsYXMgcmVwcmVzZW50ZSAoaS5lIGVsI
HByb21lZGlvIGRlIHRvZGFzIGVsbGFzKS4KCkNvbW8gc2UgZGlqbyBhbnRlcywgc2UgY29taWVuem
EgY29uICRuJCBncnVwb3MgZG9uZGUgY2FkYSBvYnNlcnZhY2nDs24gZXMgdW4gZ3J1cG8uIEEg
cGFydGlyIGRlIGVzdG8gbG9zIHBhc29zIHNvbiBsb3Mgc2lndWllbnRlczoKCjEuIFNlIGZ1c2lvbmFuIG
xvcyBkb3MgZ3J1cG9zIG3DoXMgY2VyY2Fub3MuIEFzw60gc2UgdGllbmVuICRuLTIkIGdydXBvcyB
xdWUgY29udGllbmVuIHVuYSBvYnNlcnZhY2nDs24geSB1biBncnVwbyBxdWUgY29udGllbmUgZG
9zIG9ic2VydmFjaW9uZXMuIEVuIHRvdGFsIGhheSAkbi0xJCBncnVwb3MuCjIuIFNlIGZ1c2lvbmFuIG
xvcyBkb3MgZ3J1cG9zIG3DoXMgY2VyY2Fub3MgcGFyYSBvYnRlbmVyICRuLTIkIGdydXBvcy4KMy
4gU2UgY29udGluw7phIGRlIGVzdGEgbWFuZXJhIGhhc3RhIGxsZWdhciBhIHVuIHNvbG8gZ3J1cG8
uCgpBIG1lZGlkYSBxdWUgbGFzIG9ic2VydmFjaW9uZXMgc2UgYWdsb21lcmFuIGVuIGdydXBvcyBl
cyBuZWNlc2FyaW8gZW50b25jZXMgbWVkaXIgbGEgZGlzdGFuY2lhIGVudHJlIGdydXBvcy4gQWxn
dW5hcyBkaXN0YW5jaWFzIGVudHJlIGdydXBvcyBzb24gJEdfMSQgeSAkR18yJDoKCisgU2luZ2xlIG
xpbmthZ2U6ICRcRGVsdGEoR18xLEdfMik9XG1pbl97XG1hdGhiZnt4fSBcaW4gR18xLFxtYXRoYmZ
7eX0gXGluIEdfMix9IGQoXG1hdGhiZnt4fSxcbWF0aGJme3l9KSQKKyBDb21wbGV0ZSBsaW5rYWd
lOiAkXERlbHRhKEdfMSxHXzIpPVxtYXhfe1xtYXRoYmZ7eH0gXGluIEdfMSxcbWF0aGJme3l9IFxpbi
BHXzIsfSBkKFxtYXRoYmZ7eH0sXG1hdGhiZnt5fSkkCisgQ2VudHJvaWRlOiAkXERlbHRhKEdfMSx
HXzIpPWQoXG1hdGhiZntcYmFyIHt4fX1fe0dfMX0sXG1hdGhiZntcYmFyIHt4fX1fe0dfMn0pJCwgZG
9uZGUgJFxtYXRoYmZ7XGJhciB7eH19X3tHXzF9JCB5ICRcbWF0aGJme1xiYXIge3h9fV97R18yfSQ
gc29uIGxvcyBjZW50cm9pZGVzIGRlIGxvcyBncnVwb3MgJEdfMSQgeSAkR18yJCByZXNwZWN0aX
ZhbWVudGUsIHF1ZSBzZSBwdWVkZW4gZGVmaW5pciBjb21vIGxhIG9ic2VydmFjacOzbiBwcm9tZ
WRpbyBkZSBjYWRhIGdydXBvLiBFbCBjZW50cm9pZGUgZGVsIGdydXBvIHJlc3VsdGFudGUgZGU
gbGEgdW5pw7NuIGRlIGxvcyBncnVwb3MgJEdfMSQgeSAkR18yJCBzZSBwdWVkZSBkZWZpbmly
IGNvbW8gJFxtYXRoYmZ7XGJhciB7eH19X3tHXzEsR18yfT1cZnJhY3t8R18xfCBcbWF0aGJme1xiY
XIge3h9fV97R18xfSArfEdfMnwgXG1hdGhiZntcYmFyIHt4fX1fe0dfMn19e3xHXzF8K3xHXzJ8fSQsIG
RvbmRlICR8R19pfCQgZXMgZWwgbsO6bWVybyBkZSBvYnNlcnZhY2lvbmVzIGVuIGVsIGdydXBvIC
RpJC4KKyBTdW1hIGRlIGN1YWRyYWRvcyBpbmNyZW1lbnRhbCAoV2FyZCk6IHNlIGZ1c2lvbmFuI
GxvcyBncnVwb3MgJEdfMSQgeSAkR18yJCBxdWUgbWluaW1pY2VuIGVsIGZ1bmNpb25hbCAkSS
hHXzEsR18yKSQ6CiQkSShHXzEsR18yKT1cc3VtX3tcbWF0aGJme3h9IFxpbiBHXzEgXGN1cCBHXz
J9e2ReMihcbWF0aGJme3h9LFxtYXRoYmZ7XGJhciB7eH19X3tHXzEsR18yfSl9LVx7XHN1bV97XG
1hdGhiZnt4fSBcaW4gR18xIH17ZF4yKFxtYXRoYmZ7eH0sXG1hdGhiZntcYmFyIHt4fX1fe0dfMX0pf
Stcc3VtX3tcbWF0aGJme3h9IFxpbiBHXzJ9e2ReMihcbWF0aGJme3h9LFxtYXRoYmZ7XGJhciB7eH
19X3tHXzJ9KX0gXH0uJCQKCgojIyBFamVtcGxvIChzaW5nbGUgbGlua2FnZSk6CkNvbnNpZGVyZ
W1vcyBsYSBzaWd1aWVudGUgbWF0cml6IGRlIGRpc3RhbmNpYXM6CgpgYGB7ciBlY2hvPUZBTF
NFfQpEPW1hdHJpeChjKDAsNywxLDksOCw3LDAsNiwzLDUsMSw2LDAsOCw3LDksMyw4LDAsN
Cw4LDUsNyw0LDApLG5jb2w9NSkKY29sbmFtZXMoRCk9YXMuY2hhcmFjdGVyKDE6NSkKcm93b
mFtZXMoRCk9YXMuY2hhcmFjdGVyKDE6NSkKcHJpbnQoRCkKYGBgCgoKCjEuIExvcyBkb3MgZ3
J1cG9zIG3DoXMgY2VyY2Fub3Mgc29uIGxvcyBjb25mb3JtYWRvcyBwb3IgZWwgZ3J1cG8gcXVlIH
RpZW5lIGxhIG9ic2VydmFjacOzbiAxIHkgZWwgcXVlIHRpZW5lIGxhIG9ic2VydmFjacOzbiAzLiBMYS
BkaXN0YW5jaWEgZW50cmUgZXN0b3MgZ3J1cG9zIGVzICRoPTEkLiBFc3RvcyBkb3MgZ3J1cG9zI
GNvbnN0aXR1aXLDoW4gdW4gbnVldm8gZ3J1cG8uIEFzw60sIGxhIG51ZXZhIG1hdHJpeiBkZSBka
XN0YW5jaWFzIGVzOgoKYGBge3IgZWNobz1GQUxTRX0KRDE9bWF0cml4KGMoMCw2LDgsNyw2
LDAsMyw1LDgsMywwLDQsNyw1LDQsMCksbmNvbD00KQpjb2xuYW1lcyhEMSk9YygiRzEzIiwyLD
QsNSkKcm93bmFtZXMoRDEpPWMoIkcxMyIsMiw0LDUpCnByaW50KEQxKQpgYGAKCgoKMi4gQ
WhvcmEgc29uIGVsIGdydXBvIGNvbmZvcm1hZG8gcG9yIGxhIG9ic2VydmFjacOzbiAyIHkgZWwgZ3
J1cG8gY29uZm9ybWFkbyBwb3IgbGEgb2JzZXJ2YWNpw7NuIDQgbG9zIG3DoXMgY2VyY2Fub3M
uIExhIGRpc3RhbmNpYSBlbnRyZSBlc3RvcyBkb3MgZ3J1cG9zIGVzICRoPTMkLiBBbCBmdXNpb25
hcmxvcyB0ZW5lbW9zIGxhIHNpZ3VpZW50ZSBtYXRyaXogZGUgZGlzdGFuY2lhczoKCmBgYHtyIG
VjaG89RkFMU0V9CkQyPW1hdHJpeChjKDAsNiw1LDYsMCw0LDUsNCwwKSxuY29sPTMpCmNvb
G5hbWVzKEQyKT1jKCJHMTMiLCJHMjQiLDUpCnJvd25hbWVzKEQyKT1jKCJHMTMiLCJHMjQiLD
UpCnByaW50KEQyKQpgYGAKCgoKCjMuIEFob3JhIHNvbiBlbCBncnVwbyBjb25mb3JtYWRvIHBvci
BsYSBvYnNlcnZhY2nDs24gNSB5IGVsIGdydXBvIEcyNCBsb3MgcXVlIHNlIGZ1c2lvbmFyw6FuLiBM
YSBkaXN0YW5jaWEgZW50cmUgZXN0b3MgZG9zIGdydXBvcyBlcyAkaD00JC4gTGEgbWF0cml6IG
RlIGRpc3RhbmNpYXMgYWN0dWFsaXphZGEgZXM6CgpgYGB7ciBlY2hvPUZBTFNFfQpEMz1tYXR
yaXgoYygwLDUsNSwwKSxuY29sPTIpCmNvbG5hbWVzKEQzKT1jKCJHMTIiLCJHMjQ1IikKcm93b
mFtZXMoRDMpPWMoIkcxMiIsIkcyNDUiKQpwcmludChEMykKYGBgCgo0LiBGaW5hbG1lbnRlLCB
sYSBkaXN0YW5jaWEgZW50cmUgbG9zIGRvcyBncnVwb3MgcmVzdWx0YW50ZXMgZXMgZGUgJ
Gg9NSQuCgpQb2RlbW9zIHJlcHJlc2VudGFyIGVzdG8gY29uIGF5dWRhIGRlIHVuIGRlbmRvZ3JhbW
EsIGFzw606CgpgYGB7ciBlY2hvPVRSVUV9CkRfZGlzdD1hcy5kaXN0KEQpCmRfdHJlZT1oY2x1c3
QoRF9kaXN0LG1ldGhvZD0ic2luZ2xlIikKcGxvdChkX3RyZWUsIG1haW49IkRlbmRvZ3JhbWEiKQpg
YGAKCiMjIEVqZW1wbG86IFVTQXJyZXN0CkNvbnNpZGVyZW1vcyBsYSBiYXNlIGRlIGRhdG9zICpV
U0FycmVzdCogcXVlIGNvbnRpZW5lIGluZm9ybWFjacOzbiB0YXNhcyBkZSBjcsOtbWVuZSBlbiBjaX
VkYWRlcyBkZSBFc3RhZG9zIFVuaWRvczoKCmBgYHtyfQpkYXRhKCJVU0FycmVzdHMiKQpoZWF
kKFVTQXJyZXN0cykKYGBgCgpBcGxpcXVlbW9zIGxhIG1ldG9kb2xvZ8OtYSBhbnRlcmlvcjoKCmBg
YHtyfQpVU0FycmVzdHNfZGlzdD1kaXN0KFVTQXJyZXN0cykKVVNBcnJlc3RzX2NsdXN0PWhjbHVz
dChVU0FycmVzdHNfZGlzdCxtZXRob2Q9InNpbmdsZSIpCnBsb3QoVVNBcnJlc3RzX2NsdXN0KQp
gYGAKClNpIHF1ZXJlbW9zIHNlZ21lbnRhciBlbCBjb25qdW50byBkZSBjaXVkYWRlcywgcG9yIGVqZ
W1wbG8gZW4gc2VpcyBncnVwb3MsIHBvZGVtb3MgcHJvY2VkZXIgYXPDrToKCmBgYHtyfQpVU0
FycmVzdHNfY2x1c3RfND1jdXRyZWUoVVNBcnJlc3RzX2NsdXN0LGs9NikKcGxvdChVU0FycmVzd
HNfY2x1c3QpCnJlY3QuaGNsdXN0KFVTQXJyZXN0c19jbHVzdCxrPTYpCmBgYAoK