Deskripsi

Banyak perusahaan pakaian e-niaga mengumpulkan peringkat dan ulasan yang diberikan pelanggan mereka untuk produk. Dalam Analisis ini, saya akan menunjukkan bagaimana perusahaan dapat dengan cepat dan mudah menjelajahi informasi ini dan menemukan wawasan untuk meningkatkan bisnisnya.

Dataset ini mencakup 23486 baris dan 10 variabel fitur. Setiap baris sesuai dengan ulasan pelanggan, dan termasuk variabel :

  1. Cloting ID : Variablel Integer Categorical yang mengacu pada bagian tertentu yang sedang di tinjau.

  2. Age : Variabel bilangan bulat positif dari usia pengulas

  3. Title : Variabel string untuk judul ulasan.

  4. Review Text : Variabel string untuk isi ulasan.

  5. Rating : Variabel interger Ordinal positif untuk skor produk yang diberikan oleh pelanggan dari 1 Terburuk, hingga 5 Terbaik.

  6. Recommended IND : Variabel biner yang menyatakan di mana pelanggan merekomendasikan produk dimana 1 direkomendasikan, sedangkan 0 tidak direkomendasikan.

  7. Positive Feedback Count : Bilangan bulat positif yang mendokumentasikan jumlah pelanggan lain yang menganggap ulasan ini positif.

  8. Division Name : Nama kategori dari divisi tingkat tinggi produk.

  9. Departement Name : Nama kategori dari nama departemen produk.

  10. Class Name : Nama kategori dadri nama kelas produk.

Data Set

colSums(is.na(data))
                      X             Clothing.ID                     Age 
                      0                       0                       0 
                  Title             Review.Text                  Rating 
                   3810                     845                       0 
        Recommended.IND Positive.Feedback.Count           Division.Name 
                      0                       0                      14 
        Department.Name              Class.Name 
                     14                      14 

Disi saya punya : 3810 NA di judul, 845 di Review.Text, dan 14 NA di Division/Departement/Class.Name. Biasanya memiliki banyak nilai NA dalam data ulasan, jadi saya akan mengabaikanya.

summary(data)
       X          Clothing.ID          Age          Title           Review.Text       
 Min.   :    0   Min.   :   0.0   Min.   :18.0   Length:23486       Length:23486      
 1st Qu.: 5871   1st Qu.: 861.0   1st Qu.:34.0   Class :character   Class :character  
 Median :11742   Median : 936.0   Median :41.0   Mode  :character   Mode  :character  
 Mean   :11742   Mean   : 918.1   Mean   :43.2                                        
 3rd Qu.:17614   3rd Qu.:1078.0   3rd Qu.:52.0                                        
 Max.   :23485   Max.   :1205.0   Max.   :99.0                                        
     Rating      Recommended.IND  Positive.Feedback.Count Division.Name     
 Min.   :1.000   Min.   :0.0000   Min.   :  0.000         Length:23486      
 1st Qu.:4.000   1st Qu.:1.0000   1st Qu.:  0.000         Class :character  
 Median :5.000   Median :1.0000   Median :  1.000         Mode  :character  
 Mean   :4.196   Mean   :0.8224   Mean   :  2.536                           
 3rd Qu.:5.000   3rd Qu.:1.0000   3rd Qu.:  3.000                           
 Max.   :5.000   Max.   :1.0000   Max.   :122.000                           
 Department.Name     Class.Name       
 Length:23486       Length:23486      
 Class :character   Class :character  
 Mode  :character   Mode  :character  
                                      
                                      
                                      

Dari Summary, saya mendapat informasi berikut : Clothing.ID - 1205 Potong pakaian Usia - Min 18, Max 99, Median Rating - Min 1, Max 5, Mean 4.2 (dibulatkan) - Keseluruhan toko sangat bagus Postitive.Feddback.Count - Hitung - Mean - 2.5, Max 122 - akan menarik untuk melihat ulasana yang berdampak itu nanti.

Visualisasi

Mari visualisasikan kolom Rating untuk lebih memahami pengalaman pelanggan di toko pakain wanita.

55, 91 % pelanggan menyukai toko dan memberi peringkat 5 dan 21,62 % memiliki peringkat 4, Hampir 80 % total - Pelanggan setia atau puas. Bisnis ini juga memiliki beberapa pelanggan yang tidak puas dan mencapati tingkat ke 3 atau lebih rendah.

Data Analysis

Dalam analisis ini, saya akan menemukan alasan kepuasan pelanggan yang buruk dan apa yang dapat dilakukan bisnis untuk memperbaikinya.

Data Analysis Exsplorasi

Saya akan mengiris dan memotong data dan menghitung peringkat rata-rata untuk group ini untuk menemukan produk atau layanan yang tidak memuaskan pelanggan.

Analysis Devision. Name

Peringkat di antara nama-nama Divisi sangat mirip sekitar 4.2.

Analysis Departemen.Name

Pertama saya menemukan bahwa Trend Departement. Name memiliki perinkat yang lebih rendah di bandingkan yang lain.

Clothing Trend

Kemudian saya medapatkan daftar 15 item di (Clothing.ID) yang di nilai lebih rendah dari 4. Toko pakaian wanita harus melihat item ini dan memperbaikinya.

Class.Name

Disini saya melihat kembali bahwa kategori Trend memiliki Rating terendah .

Produk 3 teratas dengan peringkat tertinggi adalah Jeans, Layering, Jackets.

Clothing.ID Rating

Disini saya memiliki 4 item untuk rekomendasikan di tingkatkan Rating dengan ID Clothing : 1087, 1082, 868, 865.

Age

Sepertinya toko itu memiliki pelanggan dari berabagai usia. Saya juga meliahat disini bahwa sejumlah besar ulasan datang dari pelanggan berusia 28 hingga 48 tahun. ini mungkin adalah target audiens toko ini.

Recomended.IND

Pelanggan yang akan merekomendasikan memberikan nilai rata-rata 4.6, Mereka yang tidak akan merekomendasikan - 2.3.

Meskipun saya memiliki lebih banyak klien yang akan merekomendasikan produk perusahaan, saya masih perlu berkerja untuk meningkatkan pengalaman pelanggan bagi mereka yang tidak merekomendasikannya.

TEXT ANALYSIS

Mari telusuri ulasan pelangan yang tidak akan merekomendasikan produk perusahaan.

negative_words_10 <- negative_words %>%
  arrange(desc(n)) %>%
  top_n(10)
Selecting by n

Dalam anlysis teks ini, saya akan mengguankan frekuensi kata untuk mengindentifkasi masalah apapun dengan produk perusahaan. Teknik sederhana namun sangat ampuh ini dapat memberikan banyak wawasan dan ide untuk perbaikan atau eksploraasi lebih lanjut.

Berikut ini adalaah 10 kata paling sering dari ulasan :

Di sini saya dapat memperhatikan beberapa hal :

  1. Dalam Ulasan Negatif mereka, Klien kebayakan berbicara tentang gaun dan atasan

  2. Pelanggan juga membicarakan masalah kecocokan dan ukuran. Perushaan dapat melihat dari dekat ukuran pakaian mereka dan mungkin menanmbahkan lebih banyak informasi tentangnya di situs web.

  3. Pelanggan menyebutkan kain dan bahan yang harus dievaluasi dan di tingkatkan jika memungkinkan.

  4. Pengembalian - Apakah mudah untuk mengembalikan produk ? Apakah perusahaan memiliki inforamasi yang jelas tentang proses ini di situs web mereka ?

  5. Warna terkadang pakaian pada gambar dapat memiliki warna yang berbeda dari warna aslinya. Perusahaan harus mengeksplorasi masalah ini lebih lanjut dan memastikan bahwa mereka menampilkan warna dengan benar. Kualitas gambar sangat penting bagi pengecer pakian online.

Positve.Feedback.Count

Hal terkahir yang akan saya jelajahi adalah kolom Positve.Feedback.Count.

Disini dapat dilihat 2 ulasan positif dan 1 negatif. Fakta bahwa lebih dari 100 orang menganggap ulasan bermanfaat dapat menunjukkan bahwa ketiga produk ini populer.

Perusahan harus menggunakan informasi ini untuk meningkatkan produk (dalam hal ini proudk dengan ID 986) Karena akan meningkatkan pendapatan.

Kesimpulan

Di akhir analysis ini, saya akan menyoroti beberapa wawasan yang akan menarik bagi bisnis yaitu :

  1. 55.91% pelanggan menyukai toko dan memberi peringkat 5 dan 21.62% memiliki peringkat 4, hampir 80% persen total - pelanggan setia atau puas.

  2. Trend Departement. Name memiliki peringkat yang lebih rendah dibadingkan yang lain. Di atas ada daftar 15 item Trend (Clothing. ID) yang dinilai lebih rendah dari 4. Toko pakaian wanita harus melihat item ini dan memperbaikinya.

  3. Top-3 Produk dengan rating tertinggi adalah Jeans, Layering, Jackets. Perusahaan dapat mengguankan produk ini dalam kampanye pemasaran online atau email sebagai penjualan terbaik untuk menarik perhatian pelanggan.

  4. 4 item lagi untuk ditingkatkan dengan ID Clothing : 1087, 1082, 868, 865.

  5. Sejumlah besar ulasana datang dari pelanggan berusia 28 tahun hinigga 48 tahun. Ini mungkin adalah target audiens toko ini. Jadi bisnis dapat fokus pada kelempok usia ini dalam periklanan online karena pelanggan ini tampaknya lebih tertarik pada produk perusahaan. Oleh karena itu tingkat konversi kampanye pemasaran itu mungkin lebih tinggi.

  6. Dalam ulasan negatif, Klien kebayakan beribicara tentang gaun dan atasan. Perusahaan harus memeriksa mengapa mereka memiliki begitu banyak umpan balik negatif tentang produk ini. Terkadang itu hanya berarti bahwa produk ini adalah yang paling populer, makanya banyak review positif dan negatifnya.

  7. Pelanggan juga membicarakan masalah kecocokan dan ukuran perusahaan harus memperhatikan ukuran pakian mereka dan mungkin menambahka lebih banyak informasi tentangnya di situs web.

  8. Dalam ulasan negatif, pelanggan menyebutkan kain dan bahan yang harus dievaluasi dan ditingkatkan jika memungkinkan.

  9. pengambalian - Apakah mudah untuk mengembalikan produk ? Apakah perusahaan memiliki informasi yang jelas tentang proses ini di situs web mereka ?

  10. Warna - terkadang pakaian pada gambar dapat memiliki warna yang berbeda dari warna aslinya. Perusahaan harus mengeksplorasi masalah ini lebih lanjut dan memastikan bahwa mereka menampilkn warna dengan benar. Kualitas Gambar sangat penting bagi pengecer pakaian online.

LS0tDQp0aXRsZTogIkFOQUxZU0lTIFJFVklFV1MgUkFUSU5HIFBFTEFOR0dBTiINCmF1dGhvcjogIlxVMDAwMUY1RTMgSmFtYWxsdWRpbiINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDcNCiAgICBmaWdfaGVpZ2h0OiA0LjUNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQotLS0NCg0KDQohW10ocmF0aW5nLmdpZikNCg0KDQojIERlc2tyaXBzaSANCg0KIVtdKGdpcGh5LmdpZikNCg0KQmFueWFrIHBlcnVzYWhhYW4gcGFrYWlhbiBlLW5pYWdhIG1lbmd1bXB1bGthbiBwZXJpbmdrYXQgZGFuIHVsYXNhbiB5YW5nIGRpYmVyaWthbiBwZWxhbmdnYW4gbWVyZWthIHVudHVrIHByb2R1ay4gRGFsYW0gQW5hbGlzaXMgaW5pLCBzYXlhIGFrYW4gbWVudW5qdWtrYW4gYmFnYWltYW5hIHBlcnVzYWhhYW4gZGFwYXQgZGVuZ2FuIGNlcGF0IGRhbiBtdWRhaCBtZW5qZWxhamFoaSBpbmZvcm1hc2kgaW5pIGRhbiBtZW5lbXVrYW4gd2F3YXNhbiB1bnR1ayBtZW5pbmdrYXRrYW4gYmlzbmlzbnlhLg0KIA0KRGF0YXNldCBpbmkgbWVuY2FrdXAgMjM0ODYgYmFyaXMgZGFuIDEwIHZhcmlhYmVsIGZpdHVyLiBTZXRpYXAgYmFyaXMgc2VzdWFpIGRlbmdhbiB1bGFzYW4gcGVsYW5nZ2FuLCBkYW4gdGVybWFzdWsgdmFyaWFiZWwgOiANCg0KMS4gQ2xvdGluZyBJRCA6IFZhcmlhYmxlbCBJbnRlZ2VyIENhdGVnb3JpY2FsIHlhbmcgbWVuZ2FjdSBwYWRhIGJhZ2lhbiB0ZXJ0ZW50dSB5YW5nIHNlZGFuZyBkaSB0aW5qYXUuDQoNCg0KMi4gQWdlIDogVmFyaWFiZWwgYmlsYW5nYW4gYnVsYXQgcG9zaXRpZiBkYXJpIHVzaWEgcGVuZ3VsYXMNCg0KDQozLiBUaXRsZSA6IFZhcmlhYmVsIHN0cmluZyB1bnR1ayBqdWR1bCB1bGFzYW4uIA0KDQoNCjQuIFJldmlldyBUZXh0IDogVmFyaWFiZWwgc3RyaW5nIHVudHVrIGlzaSB1bGFzYW4uDQoNCg0KNS4gUmF0aW5nIDogVmFyaWFiZWwgaW50ZXJnZXIgT3JkaW5hbCBwb3NpdGlmIHVudHVrIHNrb3IgcHJvZHVrIHlhbmcgZGliZXJpa2FuIG9sZWggcGVsYW5nZ2FuIGRhcmkgMSBUZXJidXJ1aywgaGluZ2dhIDUgVGVyYmFpay4NCg0KDQo2LiBSZWNvbW1lbmRlZCBJTkQgOiBWYXJpYWJlbCBiaW5lciB5YW5nIG1lbnlhdGFrYW4gZGkgbWFuYSBwZWxhbmdnYW4gbWVyZWtvbWVuZGFzaWthbiBwcm9kdWsgZGltYW5hIDEgZGlyZWtvbWVuZGFzaWthbiwgc2VkYW5na2FuIDAgdGlkYWsgZGlyZWtvbWVuZGFzaWthbi4gDQoNCg0KNy4gUG9zaXRpdmUgRmVlZGJhY2sgQ291bnQgOiBCaWxhbmdhbiBidWxhdCBwb3NpdGlmIHlhbmcgbWVuZG9rdW1lbnRhc2lrYW4ganVtbGFoIHBlbGFuZ2dhbiBsYWluIHlhbmcgbWVuZ2FuZ2dhcCB1bGFzYW4gaW5pIHBvc2l0aWYuDQoNCg0KOC4gRGl2aXNpb24gTmFtZSA6IE5hbWEga2F0ZWdvcmkgZGFyaSBkaXZpc2kgdGluZ2thdCB0aW5nZ2kgcHJvZHVrLg0KDQoNCjkuIERlcGFydGVtZW50IE5hbWUgOiBOYW1hIGthdGVnb3JpIGRhcmkgbmFtYSBkZXBhcnRlbWVuIHByb2R1ay4NCg0KDQoxMC4gQ2xhc3MgTmFtZSA6IE5hbWEga2F0ZWdvcmkgZGFkcmkgbmFtYSBrZWxhcyBwcm9kdWsuDQoNCg0KIyBEYXRhIFNldCANCg0KIVtdKERBVEEgU0VULmdpZikNCg0KDQpgYGB7cn0NCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHRpZHl0ZXh0KQ0KbGlicmFyeShTbm93YmFsbEMpDQoNCmRhdGEgPC0gcmVhZC5jc3YoIldvbWVucyBDbG90aGluZyBFLUNvbW1lcmNlIFJldmlld3MuY3N2IiwgbmEuc3RyaW5ncz1jKCcnLCAnTkEnKSkNCg0KI2NoZWNrIGFwYWthaCBhZGEgbmlsYWkgbmENCg0KY29sU3Vtcyhpcy5uYShkYXRhKSkNCg0KYGBgDQoNCkRpc2kgc2F5YSBwdW55YSA6IDM4MTAgTkEgZGkganVkdWwsIDg0NSBkaSBSZXZpZXcuVGV4dCwgZGFuIDE0IE5BIGRpIERpdmlzaW9uL0RlcGFydGVtZW50L0NsYXNzLk5hbWUuIA0KQmlhc2FueWEgbWVtaWxpa2kgYmFueWFrIG5pbGFpIE5BIGRhbGFtIGRhdGEgdWxhc2FuLCBqYWRpIHNheWEgYWthbiBtZW5nYWJhaWthbnlhLg0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShkYXRhKQ0KYGBgDQoNCg0KRGFyaSBTdW1tYXJ5LCBzYXlhIG1lbmRhcGF0IGluZm9ybWFzaSBiZXJpa3V0IDogQ2xvdGhpbmcuSUQgLSAxMjA1IFBvdG9uZyBwYWthaWFuIFVzaWEgLSBNaW4gMTgsIE1heCA5OSwgTWVkaWFuIFJhdGluZyAtIE1pbiAxLCBNYXggNSwgTWVhbiA0LjIgKGRpYnVsYXRrYW4pIC0gS2VzZWx1cnVoYW4gdG9rbyBzYW5nYXQgYmFndXMgUG9zdGl0aXZlLkZlZGRiYWNrLkNvdW50IC0gSGl0dW5nIC0gTWVhbiAtIDIuNSwgTWF4IDEyMiAtIGFrYW4gbWVuYXJpayB1bnR1ayBtZWxpaGF0IHVsYXNhbmEgeWFuZyBiZXJkYW1wYWsgaXR1IG5hbnRpLg0KDQoNCiMgVmlzdWFsaXNhc2kNCg0KDQohW10oVklTVUFMSVNBU0kuZ2lmKQ0KDQoNCk1hcmkgdmlzdWFsaXNhc2lrYW4ga29sb20gUmF0aW5nIHVudHVrIGxlYmloIG1lbWFoYW1pIHBlbmdhbGFtYW4gcGVsYW5nZ2FuIGRpIHRva28gcGFrYWluIHdhbml0YS4NCg0KYGBge3J9DQoNCnBpZV9jaGFydF9yYXRpbmcgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoUmF0aW5nKSAlPiUNCiAgc3VtbWFyaXplKFRvdGFsQ291bnQgPSBuKCkpJT4lDQogIG11dGF0ZShQcm9wID0gcm91bmQoVG90YWxDb3VudC9zdW0oVG90YWxDb3VudCkqMTAwLCBkaWdpdHMgPSAyKSkNCg0KIyB0YW1iYWhrYW4gcG9zaXNpIGxhYmVsDQoNCnBpZV9jaGFydF9yYXRpbmcgPC0gcGllX2NoYXJ0X3JhdGluZyAlPiUNCiAgYXJyYW5nZShkZXNjKFJhdGluZykpICU+JQ0KICBtdXRhdGUobGFiLnlwb3MgPSBjdW1zdW0oUHJvcCkgLSAwLjUqUHJvcCkNCg0KIyBwaWxpaCB3YXJuYSBwZWxhbmdnYW4NCg0KbXljb2xzIDwtIGMoIiM1NURERTAiLCAiIzMzNjU4QSIsICIjMkY0ODU4IiwgIiNGNkFFMkQiLCAiI0YyNjQxOSIpDQoNCg0KI3Zpc3VhbGlzYXNpDQoNCm9wdGlvbnMocmVwci5wbG90LndpZHRoID0gMTYsIHJlcHIucGxvdC5oZWlnaHQgPSA3KQ0KZ2dwbG90KHBpZV9jaGFydF9yYXRpbmcsIGFlcyh4ID0gIiIsIHkgPSBQcm9wLCBmaWxsID0gZmFjdG9yKFJhdGluZykpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yID0gIndoaXRlIikgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0ID0gMCkrDQogIGdlb21fdGV4dChhZXMoeSA9IGxhYi55cG9zLCBsYWJlbCA9IFByb3ApLCBjb2xvciA9ICJ3aGl0ZSIsIHNpemU9NykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IG15Y29scykgKw0KICB0aGVtZV92b2lkKCkgKw0KICBsYWJzKHRpdGxlPSJQZXJpbmdrYXQgUGVsYW5nZ2FuIGRhcmkgMSBoaW5nZ2EgNSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTEwKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSkNCmBgYA0KDQoNCjU1LCA5MSAlIHBlbGFuZ2dhbiBtZW55dWthaSB0b2tvIGRhbiBtZW1iZXJpIHBlcmluZ2thdCA1IGRhbiAyMSw2MiAlIG1lbWlsaWtpIHBlcmluZ2thdCA0LCBIYW1waXIgODAgJSB0b3RhbCAtIFBlbGFuZ2dhbiBzZXRpYSBhdGF1IHB1YXMuIA0KQmlzbmlzIGluaSBqdWdhIG1lbWlsaWtpIGJlYmVyYXBhIHBlbGFuZ2dhbiB5YW5nIHRpZGFrIHB1YXMgZGFuIG1lbmNhcGF0aSB0aW5na2F0IGtlIDMgYXRhdSBsZWJpaCByZW5kYWguDQoNCg0KDQojIERhdGEgQW5hbHlzaXMNCg0KDQohW10oREFUQSBBTkFMWVNJUy5naWYpDQoNCg0KRGFsYW0gYW5hbGlzaXMgaW5pLCBzYXlhIGFrYW4gbWVuZW11a2FuIGFsYXNhbiBrZXB1YXNhbiBwZWxhbmdnYW4geWFuZyBidXJ1ayBkYW4gYXBhIHlhbmcgZGFwYXQgZGlsYWt1a2FuIGJpc25pcyB1bnR1ayBtZW1wZXJiYWlraW55YS4NCg0KDQojIyBEYXRhIEFuYWx5c2lzIEV4c3Bsb3Jhc2kNCg0KIVtdKGdpcGh5LmdpZikNCg0KU2F5YSBha2FuIG1lbmdpcmlzIGRhbiBtZW1vdG9uZyBkYXRhIGRhbiBtZW5naGl0dW5nIHBlcmluZ2thdCByYXRhLXJhdGEgdW50dWsgZ3JvdXAgaW5pIHVudHVrIG1lbmVtdWthbiBwcm9kdWsgYXRhdSBsYXlhbmFuIHlhbmcgdGlkYWsgbWVtdWFza2FuIHBlbGFuZ2dhbi4NCg0KIyMjIEFuYWx5c2lzIERldmlzaW9uLiBOYW1lDQoNCg0KIVtdKERFVklTSSBOQU1FLmdpZikNCg0KYGBge3J9DQoNCkRpdmlzaW9uTiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShEaXZpc2lvbi5OYW1lKSAlPiUNCiAgZHJvcF9uYSgpJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNCmhlYWQoRGl2aXNpb25OKQ0KYGBgDQoNClBlcmluZ2thdCBkaSBhbnRhcmEgbmFtYS1uYW1hIERpdmlzaSBzYW5nYXQgbWlyaXAgc2VraXRhciA0LjIuDQoNCg0KIyMjIEFuYWx5c2lzIERlcGFydGVtZW4uTmFtZQ0KDQohW10oREVQQVJURU1FTi5naWYpDQoNCmBgYHtyfQ0KDQpEZXBhcnRtZW50TiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShEZXBhcnRtZW50Lk5hbWUpICU+JQ0KICBkcm9wX25hKCkgJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNCkRlcGFydG1lbnRODQpgYGANCg0KUGVydGFtYSBzYXlhIG1lbmVtdWthbiBiYWh3YSAqKlRyZW5kKiogRGVwYXJ0ZW1lbnQuIE5hbWUgbWVtaWxpa2kgcGVyaW5rYXQgeWFuZyBsZWJpaCByZW5kYWggZGkgYmFuZGluZ2thbiB5YW5nIGxhaW4uDQoNCg0KIyMjIENsb3RoaW5nIFRyZW5kDQoNCiFbXShDTE9USElORyBURVJFTkQuZ2lmKQ0KDQpgYGB7cn0NCkNsb3RoaW5nVHJlbmQgPC0gZGF0YSAlPiUNCiAgZmlsdGVyKERlcGFydG1lbnQuTmFtZT09IlRyZW5kIikgJT4lDQogIGdyb3VwX2J5KENsb3RoaW5nLklEKSAlPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkgJT4lDQogIGFycmFuZ2UoQXZlcmFnZV9SYXRpbmcpICU+JQ0KICBoZWFkKDE1KQ0KDQpDbG90aGluZ1RyZW5kDQpgYGANCg0KDQpLZW11ZGlhbiBzYXlhIG1lZGFwYXRrYW4gZGFmdGFyIDE1IGl0ZW0gZGkgKENsb3RoaW5nLklEKSB5YW5nIGRpIG5pbGFpIGxlYmloIHJlbmRhaCBkYXJpIDQuIFRva28gcGFrYWlhbiB3YW5pdGEgaGFydXMgbWVsaWhhdCBpdGVtIGluaSBkYW4gbWVtcGVyYmFpa2lueWEuDQoNCg0KIyMjIENsYXNzLk5hbWUgDQoNCiFbXShDTEFTUyBOQU1FLmdpZikNCg0KYGBge3J9DQoNCkNsYXNzTiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShDbGFzcy5OYW1lKSAlPiUNCiAgZHJvcF9uYSgpICU+JQ0KICBzdW1tYXJpemUoQXZlcmFnZV9SYXRpbmcgPSBtZWFuKFJhdGluZyksIFRvdGFsQ291bnQ9bigpKSAlPiUNCiAgYXJyYW5nZShkZXNjKEF2ZXJhZ2VfUmF0aW5nKSkNCg0KQ2xhc3NODQpgYGANCg0KDQpEaXNpbmkgc2F5YSBtZWxpaGF0IGtlbWJhbGkgYmFod2Ega2F0ZWdvcmkgVHJlbmQgbWVtaWxpa2kgUmF0aW5nIHRlcmVuZGFoIC4gDQoNClByb2R1ayAzIHRlcmF0YXMgZGVuZ2FuIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYWRhbGFoIEplYW5zLCBMYXllcmluZywgSmFja2V0cy4NCg0KDQojIyMgQ2xvdGhpbmcuSUQgUmF0aW5nIA0KDQoNCiFbXShDTE9USElORyBJRCBSQVRJTkcuZ2lmKQ0KDQpgYGB7cn0NCg0KQ2xvdGhpbmdJRCA8LSBkYXRhICU+JQ0KICBncm91cF9ieShDbG90aGluZy5JRCkgJT4lDQogIGRyb3BfbmEoKSAlPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkNCg0KIyB0ZW11a2FuIHByb2R1ayBkZW5nYW4gYmFueWFrIHVsYXNhbiAoPjEwMCkgZGFuIGxlYmloIHJlbmRhaCBkYXJpIDQgcGVyaW5na2F0DQoNCkNMb3RoaW5nSURMb3cgPC0gQ2xvdGhpbmdJRCAlPiUNCiAgZmlsdGVyKFRvdGFsQ291bnQgPj0xMDAgJiBBdmVyYWdlX1JhdGluZyA8NCkgJT4lDQogIGFycmFuZ2UoQXZlcmFnZV9SYXRpbmcpDQoNCkNMb3RoaW5nSURMb3cNCmBgYA0KDQogDQpEaXNpbmkgc2F5YSBtZW1pbGlraSA0IGl0ZW0gdW50dWsgcmVrb21lbmRhc2lrYW4gZGkgdGluZ2thdGthbiAqKlJhdGluZyoqIGRlbmdhbiBJRCBDbG90aGluZyA6IDEwODcsIDEwODIsIDg2OCwgODY1Lg0KIA0KIA0KIyMjIEFnZQ0KDQohW10oYWdlLmdpZikNCg0KDQpgYGB7cn0NCiMgbWVtYnVhdCBrZWxvbXBvayB1bXVyIGRhbiBjYXJpIHBlcmluZ2thdCBkaSBkYWxhbW55YQ0KDQpBZ2VHcm91cCA8LSBkYXRhICU+JQ0KICBncm91cF9ieShBZ2VHcm91cD1jdXQoQWdlLCBicmVha3M9c2VxKDE4LCAxMDAsIGJ5PTEwKSkpICU+JQ0KICBkcm9wX25hKCklPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkNCg0KQWdlR3JvdXANCmBgYA0KDQoNClNlcGVydGlueWEgdG9rbyBpdHUgbWVtaWxpa2kgcGVsYW5nZ2FuIGRhcmkgYmVyYWJhZ2FpIHVzaWEuIFNheWEganVnYSBtZWxpYWhhdCBkaXNpbmkgYmFod2Egc2VqdW1sYWggYmVzYXIgdWxhc2FuIGRhdGFuZyBkYXJpIHBlbGFuZ2dhbiBiZXJ1c2lhICAyOCBoaW5nZ2EgNDggdGFodW4uIGluaSBtdW5na2luIGFkYWxhaCB0YXJnZXQgYXVkaWVucyB0b2tvIGluaS4NCg0KDQojIyMgUmVjb21lbmRlZC5JTkQNCg0KIVtdKFJFQ09NTUVOREVEIElORC5naWYpDQoNCmBgYHtyfQ0KIyBhcGFrYWggYWthbiBtZXJla29tZW5kYXNpa2FuIHRva28gKHByb2R1aykgaW5pIGtlcGFkYSBvcmFuZyBsYWluIGF0YXUgdGlkYWsgPw0KDQpSZWNvbWVuZGVkIDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KFJlY29tbWVuZGVkLklORCkgJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNClJlY29tZW5kZWQNCmBgYA0KDQoNClBlbGFuZ2dhbiB5YW5nIGFrYW4gbWVyZWtvbWVuZGFzaWthbiBtZW1iZXJpa2FuIG5pbGFpIHJhdGEtcmF0YSA0LjYsIE1lcmVrYSB5YW5nIHRpZGFrIGFrYW4gbWVyZWtvbWVuZGFzaWthbiAtIDIuMy4NCg0KDQpNZXNraXB1biBzYXlhIG1lbWlsaWtpIGxlYmloIGJhbnlhayBrbGllbiB5YW5nIGFrYW4gbWVyZWtvbWVuZGFzaWthbiBwcm9kdWsgcGVydXNhaGFhbiwgc2F5YSBtYXNpaCBwZXJsdSBiZXJrZXJqYSB1bnR1ayBtZW5pbmdrYXRrYW4gcGVuZ2FsYW1hbiBwZWxhbmdnYW4gYmFnaSBtZXJla2EgeWFuZyB0aWRhayBtZXJla29tZW5kYXNpa2FubnlhLg0KDQoNCiMjIFRFWFQgQU5BTFlTSVMgDQoNCiFbXShURVhUIEFOQUxZU0lTLmdpZikNCg0KTWFyaSB0ZWx1c3VyaSB1bGFzYW4gcGVsYW5nYW4geWFuZyB0aWRhayBha2FuIG1lcmVrb21lbmRhc2lrYW4gcHJvZHVrIHBlcnVzYWhhYW4uDQoNCg0KYGBge3J9DQpUZXh0IDwtIGRhdGEgJT4lDQogIGZpbHRlcihSZWNvbW1lbmRlZC5JTkQ9PTApICU+JQ0KICBzdW1tYXJpemUoUmV2aWV3LlRleHQpJT4lDQogIGRyb3BfbmEoKQ0KDQojdG9rZW5pemF0aW9uDQoNCmNvbW1lbnRzIDwtIFRleHQgJT4lIA0KICB1bmdyb3VwKCkNCg0KDQoja2F0YSB0ZXJwaXNhaA0KDQpuZWdhdGl2ZV93b3JkcyA8LSBjb21tZW50cyAlPiUgdW5uZXN0X3Rva2Vucyh3b3JkLCBSZXZpZXcuVGV4dCkNCg0KIzI1NSAyNDgga2F0YQ0KDQojcmVtb3ZlIHN0b3Aga2F0YQ0KDQpuZWdhdGl2ZV93b3JkcyA8LSAgbmVnYXRpdmVfd29yZHMgJT4lIGFudGlfam9pbihzdG9wX3dvcmRzLCBieSA9IGMoJ3dvcmQnKSkNCm5lZ2F0aXZlX3dvcmRzICU+JSBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkNCg0KIzgyIDcwNCBrYXRhIGtpcmkNCg0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KI3N0ZW1taW5nIC0gbWVuZ2lkZW50aWZpa2FzaSBrYXRhIGRhc2FyICsgMjAga2VhdGFzDQoNCm5lZ2F0aXZlX3dvcmRzIDwtIG5lZ2F0aXZlX3dvcmRzICU+JSANCiAgbXV0YXRlKHdvcmQgPSB3b3JkU3RlbSh3b3JkKSkgJT4lDQogIGNvdW50KHdvcmQpDQoNCm5lZ2F0aXZlX3dvcmRzXzEwIDwtIG5lZ2F0aXZlX3dvcmRzICU+JQ0KICBhcnJhbmdlKGRlc2MobikpICU+JQ0KICB0b3BfbigxMCkNCmBgYA0KDQoNCkRhbGFtIGFubHlzaXMgdGVrcyBpbmksIHNheWEgYWthbiBtZW5nZ3VhbmthbiBmcmVrdWVuc2kga2F0YSB1bnR1ayBtZW5naW5kZW50aWZrYXNpIG1hc2FsYWggYXBhcHVuIGRlbmdhbiBwcm9kdWsgcGVydXNhaGFhbi4gDQpUZWtuaWsgc2VkZXJoYW5hIG5hbXVuIHNhbmdhdCBhbXB1aCBpbmkgZGFwYXQgbWVtYmVyaWthbiBiYW55YWsgd2F3YXNhbiBkYW4gaWRlIHVudHVrIHBlcmJhaWthbiBhdGF1IGVrc3Bsb3JhYXNpIGxlYmloIGxhbmp1dC4NCg0KDQpCZXJpa3V0IGluaSBhZGFsYWFoIDEwIGthdGEgcGFsaW5nIHNlcmluZyBkYXJpIHVsYXNhbiA6DQoNCg0KYGBge3J9DQojIFBlc2FuIHBla2VyamFhbiBERVNDIHVudHVrIGJhZ2FpbiBCYXJjaGFydA0KDQpuZWdhdGl2ZV93b3Jkc18xMCR3b3JkIDwtIGZhY3RvcihuZWdhdGl2ZV93b3Jkc18xMCR3b3JkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IG5lZ2F0aXZlX3dvcmRzXzEwJHdvcmRbb3JkZXIoLW5lZ2F0aXZlX3dvcmRzXzEwJG4pXSkNCg0KZ2dwbG90KG5lZ2F0aXZlX3dvcmRzXzEwLCBhZXMoeD13b3JkLCB5PW4pKSArDQogIGdlb21fYmFyKHdpZHRoPTAuNywgc3RhdCA9ICJpZGVudGl0eSIsIGZpbGw9Im9yYW5nZSIpICsNCiAgbGFicyh0aXRsZT0iMTAgS2F0YSBOZWdhdGlmIFRlcmF0YXMgRGFyaSBQZWxhbmdnYW4gWWFuZyBUaWRhayBBa2FuIE1lcmVrb21lbmRhc2lrYW4iKSArICANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksDQogICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSkNCmBgYA0KDQoNCkRpIHNpbmkgc2F5YSBkYXBhdCBtZW1wZXJoYXRpa2FuIGJlYmVyYXBhIGhhbCA6IA0KDQoNCjEpIERhbGFtIFVsYXNhbiBOZWdhdGlmIG1lcmVrYSwgS2xpZW4ga2ViYXlha2FuIGJlcmJpY2FyYSB0ZW50YW5nIGdhdW4gZGFuIGF0YXNhbiANCg0KMikgUGVsYW5nZ2FuIGp1Z2EgbWVtYmljYXJha2FuIG1hc2FsYWgga2Vjb2Nva2FuIGRhbiB1a3VyYW4uDQpQZXJ1c2hhYW4gZGFwYXQgbWVsaWhhdCBkYXJpIGRla2F0IHVrdXJhbiBwYWthaWFuIG1lcmVrYSBkYW4gbXVuZ2tpbiBtZW5hbm1iYWhrYW4gbGViaWggYmFueWFrIGluZm9ybWFzaSB0ZW50YW5nbnlhIGRpIHNpdHVzIHdlYi4NCg0KMykgUGVsYW5nZ2FuIG1lbnllYnV0a2FuIGthaW4gZGFuIGJhaGFuIHlhbmcgaGFydXMgZGlldmFsdWFzaSBkYW4gZGkgdGluZ2thdGthbiBqaWthIG1lbXVuZ2tpbmthbi4NCg0KNCkgUGVuZ2VtYmFsaWFuIC0gQXBha2FoIG11ZGFoIHVudHVrIG1lbmdlbWJhbGlrYW4gcHJvZHVrID8gQXBha2FoIHBlcnVzYWhhYW4gbWVtaWxpa2kgaW5mb3JhbWFzaSB5YW5nIGplbGFzIHRlbnRhbmcgcHJvc2VzIGluaSBkaSBzaXR1cyB3ZWIgbWVyZWthID8gDQoNCjUpIFdhcm5hIHRlcmthZGFuZyBwYWthaWFuIHBhZGEgZ2FtYmFyIGRhcGF0IG1lbWlsaWtpIHdhcm5hIHlhbmcgYmVyYmVkYSBkYXJpIHdhcm5hIGFzbGlueWEuIA0KUGVydXNhaGFhbiBoYXJ1cyBtZW5nZWtzcGxvcmFzaSBtYXNhbGFoIGluaSBsZWJpaCBsYW5qdXQgZGFuIG1lbWFzdGlrYW4gYmFod2EgbWVyZWthIG1lbmFtcGlsa2FuIHdhcm5hIGRlbmdhbiBiZW5hci4gS3VhbGl0YXMgZ2FtYmFyIHNhbmdhdCBwZW50aW5nIGJhZ2kgcGVuZ2VjZXIgcGFraWFuIG9ubGluZS4NCg0KDQojIyBQb3NpdHZlLkZlZWRiYWNrLkNvdW50DQoNCg0KIVtdKEZFRURCRUNLLmdpZikNCg0KDQpIYWwgdGVya2FoaXIgeWFuZyBha2FuIHNheWEgamVsYWphaGkgYWRhbGFoIGtvbG9tIFBvc2l0dmUuRmVlZGJhY2suQ291bnQuDQoNCg0KYGBge3J9DQpGZWVkYmFja0NvdW50IDwtIGRhdGEgJT4lDQogIGZpbHRlcihQb3NpdGl2ZS5GZWVkYmFjay5Db3VudCA+PTEwMCkgJT4lDQogIHN1bW1hcml6ZShDbG90aGluZy5JRCwgUmV2aWV3LlRleHQpDQoNCkZlZWRiYWNrQ291bnQNCmBgYA0KDQoNCkRpc2luaSBkYXBhdCBkaWxpaGF0IDIgdWxhc2FuIHBvc2l0aWYgZGFuIDEgbmVnYXRpZi4gRmFrdGEgYmFod2EgbGViaWggZGFyaSAxMDAgb3JhbmcgbWVuZ2FuZ2dhcCB1bGFzYW4gYmVybWFuZmFhdCBkYXBhdCBtZW51bmp1a2thbiBiYWh3YSBrZXRpZ2EgcHJvZHVrIGluaSBwb3B1bGVyLg0KDQoNClBlcnVzYWhhbiBoYXJ1cyBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lbmluZ2thdGthbiBwcm9kdWsgKGRhbGFtIGhhbCBpbmkgcHJvdWRrIGRlbmdhbiBJRCA5ODYpIEthcmVuYSBha2FuIG1lbmluZ2thdGthbiBwZW5kYXBhdGFuLg0KDQoNCiMgS2VzaW1wdWxhbiANCg0KDQohW10oS0VTSU1QVUxBTi5naWYpDQoNCkRpIGFraGlyIGFuYWx5c2lzIGluaSwgc2F5YSBha2FuIG1lbnlvcm90aSBiZWJlcmFwYSB3YXdhc2FuIHlhbmcgYWthbiBtZW5hcmlrIGJhZ2kgYmlzbmlzIHlhaXR1IDogDQoNCg0KMSkgNTUuOTElIHBlbGFuZ2dhbiBtZW55dWthaSB0b2tvIGRhbiBtZW1iZXJpIHBlcmluZ2thdCA1IGRhbiAyMS42MiUgbWVtaWxpa2kgcGVyaW5na2F0IDQsIGhhbXBpciA4MCUgcGVyc2VuIHRvdGFsIC0gcGVsYW5nZ2FuIHNldGlhIGF0YXUgcHVhcy4NCg0KDQoyKSBUcmVuZCBEZXBhcnRlbWVudC4gTmFtZSBtZW1pbGlraSBwZXJpbmdrYXQgeWFuZyBsZWJpaCByZW5kYWggZGliYWRpbmdrYW4geWFuZyBsYWluLiBEaSBhdGFzIGFkYSBkYWZ0YXIgMTUgaXRlbSBUcmVuZCAoQ2xvdGhpbmcuIElEKSB5YW5nIGRpbmlsYWkgbGViaWggcmVuZGFoIGRhcmkgNC4gVG9rbyBwYWthaWFuIHdhbml0YSBoYXJ1cyBtZWxpaGF0IGl0ZW0gaW5pIGRhbiBtZW1wZXJiYWlraW55YS4NCg0KDQozKSBUb3AtMyBQcm9kdWsgZGVuZ2FuIHJhdGluZyB0ZXJ0aW5nZ2kgYWRhbGFoIEplYW5zLCBMYXllcmluZywgSmFja2V0cy4gDQpQZXJ1c2FoYWFuIGRhcGF0IG1lbmdndWFua2FuIHByb2R1ayBpbmkgZGFsYW0ga2FtcGFueWUgcGVtYXNhcmFuIG9ubGluZSBhdGF1IGVtYWlsIHNlYmFnYWkgcGVuanVhbGFuIHRlcmJhaWsgdW50dWsgbWVuYXJpayBwZXJoYXRpYW4gcGVsYW5nZ2FuLg0KDQoNCjQpIDQgaXRlbSBsYWdpIHVudHVrIGRpdGluZ2thdGthbiBkZW5nYW4gSUQgQ2xvdGhpbmcgOiAxMDg3LCAxMDgyLCA4NjgsIDg2NS4NCg0KDQo1KSBTZWp1bWxhaCBiZXNhciB1bGFzYW5hIGRhdGFuZyBkYXJpIHBlbGFuZ2dhbiBiZXJ1c2lhIDI4IHRhaHVuIGhpbmlnZ2EgNDggdGFodW4uIEluaSBtdW5na2luIGFkYWxhaCB0YXJnZXQgYXVkaWVucyB0b2tvIGluaS4gSmFkaSBiaXNuaXMgZGFwYXQgZm9rdXMgcGFkYSBrZWxlbXBvayB1c2lhIGluaSBkYWxhbSBwZXJpa2xhbmFuIG9ubGluZSBrYXJlbmEgcGVsYW5nZ2FuIGluaSB0YW1wYWtueWEgbGViaWggdGVydGFyaWsgcGFkYSBwcm9kdWsgcGVydXNhaGFhbi4gDQpPbGVoIGthcmVuYSBpdHUgdGluZ2thdCBrb252ZXJzaSBrYW1wYW55ZSBwZW1hc2FyYW4gaXR1IG11bmdraW4gbGViaWggdGluZ2dpLg0KDQoNCjYpIERhbGFtIHVsYXNhbiBuZWdhdGlmLCBLbGllbiBrZWJheWFrYW4gYmVyaWJpY2FyYSB0ZW50YW5nIGdhdW4gZGFuIGF0YXNhbi4gUGVydXNhaGFhbiBoYXJ1cyBtZW1lcmlrc2EgbWVuZ2FwYSBtZXJla2EgbWVtaWxpa2kgYmVnaXR1IGJhbnlhayB1bXBhbiBiYWxpayBuZWdhdGlmIHRlbnRhbmcgcHJvZHVrIGluaS4gDQpUZXJrYWRhbmcgaXR1IGhhbnlhIGJlcmFydGkgYmFod2EgcHJvZHVrIGluaSBhZGFsYWggeWFuZyBwYWxpbmcgcG9wdWxlciwgbWFrYW55YSBiYW55YWsgcmV2aWV3IHBvc2l0aWYgZGFuIG5lZ2F0aWZueWEuDQoNCg0KNykgUGVsYW5nZ2FuIGp1Z2EgbWVtYmljYXJha2FuIG1hc2FsYWgga2Vjb2Nva2FuIGRhbiB1a3VyYW4gcGVydXNhaGFhbiBoYXJ1cyBtZW1wZXJoYXRpa2FuIHVrdXJhbiBwYWtpYW4gbWVyZWthIGRhbiBtdW5na2luIG1lbmFtYmFoa2EgbGViaWggYmFueWFrIGluZm9ybWFzaSB0ZW50YW5nbnlhIGRpIHNpdHVzIHdlYi4NCg0KDQo4KSBEYWxhbSB1bGFzYW4gbmVnYXRpZiwgcGVsYW5nZ2FuIG1lbnllYnV0a2FuIGthaW4gZGFuIGJhaGFuIHlhbmcgaGFydXMgZGlldmFsdWFzaSBkYW4gZGl0aW5na2F0a2FuIGppa2EgbWVtdW5na2lua2FuLg0KDQoNCjkpIHBlbmdhbWJhbGlhbiAtIEFwYWthaCBtdWRhaCB1bnR1ayBtZW5nZW1iYWxpa2FuIHByb2R1ayA/IA0KQXBha2FoIHBlcnVzYWhhYW4gbWVtaWxpa2kgaW5mb3JtYXNpIHlhbmcgamVsYXMgdGVudGFuZyBwcm9zZXMgaW5pIGRpIHNpdHVzIHdlYiBtZXJla2EgPw0KDQoNCjEwKSBXYXJuYSAtIHRlcmthZGFuZyBwYWthaWFuIHBhZGEgZ2FtYmFyIGRhcGF0IG1lbWlsaWtpIHdhcm5hIHlhbmcgYmVyYmVkYSBkYXJpIHdhcm5hIGFzbGlueWEuIFBlcnVzYWhhYW4gaGFydXMgbWVuZ2Vrc3Bsb3Jhc2kgbWFzYWxhaCBpbmkgbGViaWggbGFuanV0IGRhbiBtZW1hc3Rpa2FuIGJhaHdhIG1lcmVrYSBtZW5hbXBpbGtuIHdhcm5hIGRlbmdhbiBiZW5hci4gS3VhbGl0YXMgR2FtYmFyIHNhbmdhdCBwZW50aW5nIGJhZ2kgcGVuZ2VjZXIgcGFrYWlhbiBvbmxpbmUu