Email             :
RPubs            : https://rpubs.com/noviaanita/
Jurusan          : Fisika Medis
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.


1 Carilah definisi Algoritma dan Struktur Data dalam berbagai bidang ilmu.

Jawaban :

  • a.Definisi Algoritma dan Struktur Data berdasarkan bidang ilmu Sains Data Algoritma Supervised Learning atau algoritma pembelajaran terpadu merupakan suatu algoritma dimana data yang digunakan dalam algoritma ini adalah data yang memiliki label atau kelas, artinya algoritma ini mengidentifikasi fitur secara eksplisit dan memprediksi atau klasifikasi yang sesuai.

  • b.Definisi Algoritma dan Struktur Data berdasarkan bidang ilmu Fisika Mampu dengan jelas menggambarkan data-data yang ada dan hubungannya dengan data-data yang lain dengan instruksi yang tepat.

  • c.Definisi Algoritma dan Struktur Data berdasarkan bidang ilmu Teknik Informatika Adalah suatu daftar langkah demi langkah yang terhingga dari intruksi-intruksi yang terdefinisikan dengan jelas yang digunakan untuk memecahkan permasalahan tertentu.

  • d.Definisi Algoritma dan Struktur Data berdasarkan bidang ilmu Sistem Informasi Merupakan langkah penyelesaian suatu masalah yang menghasilkan solusi dalam bentuk program komputer.

2 Sebagai mahasiswa buatlah algoritma dan flowchart yang anda lakukan untuk mencapai kelulusan sarjana dengan IPK minimal 3.5 dari Universitas Matana

Jawaban :

**a.Algoritma 
   Mahasiswa mengikuti perkuliahan 
   Mencari dasar-dasar materi perkuliahan 
   Membaca materi sebelum perkuliahan dimulai 
   Aktif bertanya 
   Mengulang materi saat sampai dirumah 
   Mengerjakan tugas yang diberikan
   Mengumpulkan tugas 
   Mengikuti organisasi untuk menambah nilai
   Mengikuti olimpiade antar kampus 
   Mengikuti praktikum
   Belajar dengan giat sebelum ujian semester
   Menjawab soal ujian semester dengan teliti
   Melakukan praktik pengalaman lapangan/ppl
   Mengikuti olimpiade antar kampus
   Menyusun skripsi
   Melakukan ujian seminar proposal 
   Melakukan ujian seminar hasil
   Melakukan sidang skripsi
   Wisuda 

**b.Flowchart

Gambar 1: flowchart mahasiswa

Gambar 1: flowchart mahasiswa

3 Mengapa anda harus belajar Algoritma dan Struktur Data ?

Jawaban :

Menurut saya belajar algoritma dapat mengasah logika saya karena bahasa pemrograman sangat membutuhkan logika. Sedangkan untuk struktur data agar saya mampu memahami sistem pengorganisasian data pada memori dan file pada media penyimpanan data.

4 Sebutkan 3 bahasa pemrograman yang paling banyak digunakan dalam Sains Data, berikan penjelasan kelebihan, kekurangan, dan hubungan bahasa pemrograman yang satu dengan yang lainnya.

Jawaban :

*a.Python 
      Adalah bahasa yang sangat populer, dinamis, dan merupakan bahasa yang        digunakan secara luas dalam komunitas sains data. Bahasa ini adalah
   bahasa yang sangat cocok untuk pemula karena sintaksnya yang mudah dan
   simple. 
**a) Kelebihan 
    *Mudah dipelajari
          Dibanding bahasa pemrograman lain, Phyton relatif lebih mudah             dipelajari. Bahasa ini memiliki sintaks-sintaks yang cukup
     sederhana dan gampang dimengerti. Bahasa ini sangat dinamis dan
     dibangun berdasarkan tingkat keterbacaan kode yang tinggi. 
   *Mudah diaplikasikan
          Kelebihan lainnya dari bahasa pemrograman Python adalah
    kemudahannya dalam diaplikasikan dalam mengembangkan sebuah produk,
    baik itu situs,software, aplikasi situs, maupun video game
   *Dukung loT
          Bahasa pemrograman Python mendukung ekosistem Internet of Things
    (IoT) dengan sangat baik. IoT sedang marak dibicarakan atau bahkan
    dikembangkan di kalangan maker. Internet of Things merupakan sebuah
    teknologi yang menghubungkan benda-benda di sekitar kita ke dalam
    sebuah jaring-jaring yang saling terhubung. 
   *Fleksibel
         Program yang ditulis menggunakan Python dapat dijalankan di hampir
    semua sistem operasi (Unix, Windows, Mac OS X, dll.), termasuk untuk
    perangkat-perangkat selular. 
   *Meningkatkan produktivitas
        Karena memiliki library yang luas dan desain berorientasi objek
    yang bersih, penggunaan bahasa pemrograman Python dapat menunjang 
    produktivitas programer dibanding saat menggunakan bahasa pemrograman
    lain seperti Java dan C++.
   *Free dan open source 
        Tidak hanya dapat diunduh secara gratis, bahasa Python juga
    dikembangkan di bawah lisensi open source yang disetujui OSI, yang
    berarti bahasa pemrograman ini bebas untuk digunakan, dikembangkan dan
    didistribusikan, termasuk untuk tujuan komersial. 
    

b) Kekurangan

   *Kurangnya dukungan multiprosesor
       Multiprocessing adalah bagian penting dalam penulisan aplikasi. 
    Python memang mendukung multiprocessing, namun mungkin tidak
    sefleksibel atau senyaman bahasa lain. Itu sebabnya mungkin ini dapat
    sedikit membatasi kamu saat menulis kode. 
   *Lebih sedikit developers yang berpengalaman
       Saat kamu membuat aplikasi, kamu pasti ingin para developer paling
    berpengalaman yang melakukan pekerjaan itu. Namun, tidak sesederhana
    itu dengan Python karena tidak banyak ahli programmer yang menggunakan
    bahasa ini terutama  jika dibandingkan dengan Java.
   *Tidak ideal untuk memory intensive task
       Python adalah bahasa yang dikenal dengan fleksibilitas tipe datanya.
    Hal ini membuatnya menghasilkan konsumsi memori yang cukup tinggi dan 
    menjadi tidak nyaman digunakan untuk memory intensive task. 
   *Kurang populer untuk mobile app development 
       Python bukan bahasa pemrograman yang populer untuk mobile
    development. Hanya sedikit perusahaan yang menggunakan bahasa
    pemrograman ini untuk tujuan tersebut. Karena itu kamu juga akan sulit
    menemukan  developer yang berpengalaman dalam mobile development yang
    menggunakan Python. 
   *Batasan desain 
       Python diketik secara dinamis sehingga memiliki banyak batasan
    desain. Python bahkan terlihat membutuhkan lebih banyak waktu pengujian
    dan  kesalahan yang muncul ketika aplikasi akhirnya dijalankan. 
   *Batasan kecepatan
       Python sering dikritik karena kecepatannya yang lebih lambat
    dibanding bahasa pemrograman yang dikompilasi seperti C atau C++ karena
    metode berbeda yang digunakannya untuk menerjemahkan kode.
    Meski begitu, beberapa benchmark Python bekerja lebih cepat daripada C
    dan C++. Beberapa masalah terkait kecepatan bahasa pemrograman ini juga
    telah diatasi dan dioptimalkan sehingga Python bisa dibilang tetap
    menjadi salah satu pilihan teratus untuk pengembangan perangkat lunak. 

b.R Adalah salah satu alat yang paling sering digunakan. R adalah bahasa open source dan lingkungan perangkat lunak untuk komputasi statistik dan grafis, yang didukung oleh R Yayasan Komputasi Statistika. keahlian ini memiliki permintaan tinggi di semua perekrut dalam mesin pembelajaran dan ilmu pengetahuan data.

a)Kelebihan

   *Gratis
      Kita sebagai pengguna dapat memanfaatkan R dengan bebas dan gratis.
    Kita dapat dengan bebas menginstal, menggunakan, memperbarui,
    mengkloning, memodifikasi, mendistribusikan ulang, bahkan menjualnya
    kembali. 
   *Populer 
      Popularitas R dapat dilihat dari banyaknya penggunanya. Setelah
    sempat mengalami penurunan pada tahun 2018-2019, R kembali menanjak
    popularitasnya tahun 2020, dimungkinkan dengan adanya Covid-19. Menurut
    Tiobe Index per Januari 2021, R menempati urutan ke-8, naik dari urutan
    ke-18 pada bulan Januari 2020.
   *Powerful Kemampuan yang datang dari packages
      R memiliki banyak package yang lengkap dengan fungsi yang sangat
    powerful. Misal package “caret” yang digunakan oleh para data scientist
    untuk menjalankan machine learning.
   *Kemampuan meng-handle berbagai macam data
      R memiliki kemampuan untuk membaca berbagai macam data mulai dari 
    data, txt dan, csv,data excel, gambar, hingga data spasial baik format
    vektor maupun raster. Selain itu, R juga banyak digunakan untuk
    pemrosesa Big Data, yang semakin cepat karena R memiliki kemampuan
    untuk memanfaatkan banyak core dari processor dan full penggunaan RAM
    pada komputer. 

b)Kekurangan

     Jika bisa dibilang kelemahan, satu kelemahan dari R adalah sulit 
  dipelajari.Terutama, jika dibandingkan dengan software serupa yang
  memiliki user interface berbasis mouse klik yang jauh lebih mudah
  dioperasikan. Setiap perintah dijalankan dengan menulis kode, meskipun
  dengan bantuan beberapa package, analisis dengan user interface yang
  lebih friendly dapat dilakukan. Meskipun demikian, sekarang telah banyak
  platform yang menyediakan kursus dan pelatihan R sehingga kita dapat
  mempelajarinya dengan mudah. Ditambah dengan dukungan komunitas yang
  dimiliki, proses belajar R menjadi semakin dan semakin mudah. 

c.SQL (Structured Query Language)

        Adalah salah satu yang paling populer di kalangan bidang data data
 science. Hal ini digunakan baik untuk memberikan perintah dan mengedit
 informasi yang tersimpan dalam database relasional. Dan juga, SQL
 digunakan untuk menyimpan dan mengambil data selama beberapa dekade. Hal
 ini digunakan untuk mengelola DataBase yang sangat besar, mempercepat
 waktu koneksi ke server dalam hal pengambilan data. keterampilan SQL dapat
 menjadi aset untuk ilmu pembelajaran mesin dan data, karena SQL adalah
 keterampilan yang paling disukai untuk semua industri.
 
 **a)Kelebihan 
     Memiliki kemampuan untuk management user dan tiap user bisa diatur hak
      akses terhadap suatu database oleh database administrator.
     Memiliki tingkat pengamanan/security data yang baik.
     Memiliki kemampuan untuk back-up data, restore data dan recovery data.
     Memiliki kemampuan untuk membuat database mirroring dan clustering.
     Cocok untuk diterapkan pada pembangunan suatu program aplikasi, akan
      mudah dalam melakukan koneksi dengan komputer klien yang pembangunan
      aplikasinya menggunakan software yang sama platform dengan MSSQL,
      misalnya Microsoft Visual Basic 

  **b)Kekurangan 
      Merupakan software berlisensi dan berharga mahal
      Hanya bisa berjalan pada satu platform system operasi yaitu Microsoft
       Windows.
      Bahasa pemograman yang terbatas.
      Tidak cocok untuk database skala besar. 

Python, R, dan SQL Merupakan Bahasa Pemrograman yang Populer Untuk visualisasi data, R merupakan bahasa pemrograman yang tepat untuk digunakan. Sebab R punya cukup banyak packages yang sangat mendukung untuk membangun sebuah visualisasi yang cukup menarik. Misalnya saja, adanya ggplot2 yang digunakan untuk membuat grafik, lattice untuk menunjukkan hubungan dari variabel, dan rCharts untuk memunculkan visualisasi dari java script dengan menggunakan R.

Berbeda dengan Python, bahasa pemrograman ini membuat pekerjaan lebih mudah karena adanya IPython Notebook, yang dapat membagikan catatan kepada siapa saja tanpa meminta mereka mengunduh program. Python juga merupakan bahasa general yang mudah dipelajari dan dimengerti oleh banyak developer dan siap untuk digunakan ke dunia kerja.

Tidak seperti bahasa pemrograman lainnya yang membutuhkan pemahaman konseptual tingkat tinggi dan menghafal langkah-langkah yang diperlukan, SQL dipuji karena kesederhanaannya dengan menggunakan




```r
div.main-container {
  max-width: 1280px;
}

.main-container {
  max-width: 1280px;
}

div.tocify {
  width: 20%;
  max-width: 280px;
  max-height: 85%;
}

.tocify {
  border: 1px solid #50719447;
}

body {
  text-align: justify
  
}

a {
  color: #2f4b7c;
    text-decoration: none;
}

p {
  margin: 0 0 13px;
  font-size: 1.1em;
  font-family: "calibri", Garamond, 'Comic Sans MS';
}

.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
  z-index: 2;
  color: #ffffff;
    background-color: #003f5c;
    border-color: #2f4b7c;
}

.nav>li>a:hover, .nav>li>a:focus {
  text-decoration: none;
  background-color: #1a242f;
    color: white;
}

.nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus {
  color: #2c3e50;
    background-color: #ffffff;
    border: 1px solid #1a242f;
  border-bottom-color: transparent;
  cursor: default;
}

.nav-tabs {
  border-bottom: 1px solid #1a242f;
}

.nav-pills li>a {
  
  border: 2px solid #f47c3c40;
}

.nav-pills>li.active>a, .nav-pills>li.active>a:hover, .nav-pills>li.active>a:focus {
  color: #ffffff;
    background-color: #006b21c4;
}

.nav>li>a:hover, .nav>li>a:focus {
  
  text-decoration: none;
  background-color: #bbc1c78a;
    color: #6f6f6f;
}

.tocify {
  border: 1px solid #1a242f;
}

.tocify-extend-page {
  height: 24px !important;
}

h1 {
  font-size: 1.4em;
  font-weight: bolder;
}

h2, h3 {
  font-size: 1.2em;
  font-weight: bolder;
}

h3 {
  font-size: 1.1em;
  font-weight: bolder;
}

h1.title {
  font-size: 1.8em;
}


em {
  color: #ff7c43;
    margin-left: .5%;
  margin-right: .5%;
  font-weight: bold;
}

.date > em {
  font-size: 0.8em;
}

h4.author > em {
  color: white;
  text-decoration: initial;
  background: black;
  border-radius: 6px;
  padding: 6px 8px;
  margin: 5% 0;
  font-size: 0.8em;
}

code > span.kw {
  color:#54b4eb;
}


p > code {
  background-color: #ecf0f1!important;
    padding: 0.2%;
  margin: 0.2%;
  font-weight: 500;
}

pre {
    font-size: 16px;
    background-color: #6f6f6f;
    border: 1px solid #d2d2d2;
}

pre > code {
  color: #656565;
}

code.sourceCode.r {
  color: white;
}

code > span.ot {
  color: #ef6d5f;
}

code > span.st {
  color: #37982c;
}

code > span.dt {
  color: #2f4b7c;
}

code > span.dv {
  color: #2f4b7c;
}

code > span.fl {
  color: #18bc9c;
}

#header:after {
content: " ";
display: block;
margin-top: 2%;
margin-bottom: 2%;
}


code span.kw {
  color: #ff7c43;
}

img {
  color: white;
  font-style: italic;
  padding: 2px;
  text-align: center;
  margin: 5px;
}
LS0tDQp0aXRsZTogIkFsZ29yaXRtYSBkYW4gU3RydWt0dXIgRGF0YSINCnN1YnRpdGxlOiAiVHVnYXMgMSINCmF1dGhvcjogIk5vdmlhIEFuaXRhICgyMDIxNDUyMDAwOCkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBodG1sX2RvY3VtZW50OiBudWxsDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHNhbmRzdG9uZQ0KICAgIGNzczogc3R5bGUxLmNzcw0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KLS0tDQoNCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IDBweCAxMDBweCAwcHggMHB4OyB3aWR0aDoyNSUiIHNyYz0ibm92aWEuSlBHIi8+IA0KDQpgYGB7ciBsb2dvLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzMwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygibG9nb3VuaXYucG5nIikNCmBgYA0KDQpFbWFpbCAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDs6ICBub3ZpYWFsYmwwMkBnbWFpbC5jb20gPGJyPg0KUlB1YnMgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzogaHR0cHM6Ly9ycHVicy5jb20vbm92aWFhbml0YS8gPGJyPg0KSnVydXNhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiAgIFtGaXNpa2EgTWVkaXNdKGh0dHBzOi8vbWF0YW5hdW5pdmVyc2l0eS5hYy5pZC8/bHk9YWNhZGVtaWMmYz1zYikgPGJyPg0KQWRkcmVzcyAgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDogQVJBIENlbnRlciwgTWF0YW5hIFVuaXZlcnNpdHkgVG93ZXIgPGJyPg0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDsgSmwuIENCRCBCYXJhdCBLYXYsIFJULjEsIEN1cnVnIFNhbmdlcmVuZywgS2VsYXBhIER1YSwgVGFuZ2VyYW5nLCBCYW50ZW4gMTU4MTAuDQoNCioqKioNCg0KIyBDYXJpbGFoIGRlZmluaXNpIEFsZ29yaXRtYSBkYW4gU3RydWt0dXIgRGF0YSBkYWxhbSBiZXJiYWdhaSBiaWRhbmcgaWxtdS4gDQoNCiAgKipKYXdhYmFuIDogKiogDQoNCiogYS5EZWZpbmlzaSBBbGdvcml0bWEgZGFuIFN0cnVrdHVyIERhdGEgYmVyZGFzYXJrYW4gYmlkYW5nIGlsbXUgU2FpbnMgRGF0YSANCiAgICAgIEFsZ29yaXRtYSBTdXBlcnZpc2VkIExlYXJuaW5nIGF0YXUgYWxnb3JpdG1hIHBlbWJlbGFqYXJhbiB0ZXJwYWR1DQogICAgbWVydXBha2FuIHN1YXR1IGFsZ29yaXRtYSBkaW1hbmEgZGF0YSB5YW5nIGRpZ3VuYWthbiBkYWxhbSBhbGdvcml0bWEgaW5pDQogICAgYWRhbGFoIGRhdGEgeWFuZyBtZW1pbGlraSBsYWJlbCBhdGF1IGtlbGFzLCBhcnRpbnlhIGFsZ29yaXRtYSBpbmkNCiAgICBtZW5naWRlbnRpZmlrYXNpIGZpdHVyIHNlY2FyYSBla3NwbGlzaXQgZGFuIG1lbXByZWRpa3NpIGF0YXUga2xhc2lmaWthc2kNCiAgICB5YW5nIHNlc3VhaS4gDQoNCiogYi5EZWZpbmlzaSBBbGdvcml0bWEgZGFuIFN0cnVrdHVyIERhdGEgYmVyZGFzYXJrYW4gYmlkYW5nIGlsbXUgRmlzaWthIA0KICAgICAgTWFtcHUgZGVuZ2FuIGplbGFzIG1lbmdnYW1iYXJrYW4gZGF0YS1kYXRhIHlhbmcgYWRhIGRhbiBodWJ1bmdhbm55YQ0KICAgIGRlbmdhbiBkYXRhLWRhdGEgeWFuZyBsYWluIGRlbmdhbiBpbnN0cnVrc2kgeWFuZyB0ZXBhdC4gDQoNCiogYy5EZWZpbmlzaSBBbGdvcml0bWEgZGFuIFN0cnVrdHVyIERhdGEgYmVyZGFzYXJrYW4gYmlkYW5nIGlsbXUgVGVrbmlrDQogICAgSW5mb3JtYXRpa2ENCiAgICAgIEFkYWxhaCBzdWF0dSBkYWZ0YXIgbGFuZ2thaCBkZW1pIGxhbmdrYWggeWFuZyB0ZXJoaW5nZ2EgZGFyaQ0KICAgIGludHJ1a3NpLWludHJ1a3NpIHlhbmcgdGVyZGVmaW5pc2lrYW4gZGVuZ2FuIGplbGFzIHlhbmcgZGlndW5ha2FuIHVudHVrDQogICAgbWVtZWNhaGthbiBwZXJtYXNhbGFoYW4gdGVydGVudHUuIA0KDQoqIGQuRGVmaW5pc2kgQWxnb3JpdG1hIGRhbiBTdHJ1a3R1ciBEYXRhIGJlcmRhc2Fya2FuIGJpZGFuZyBpbG11IFNpc3RlbQ0KICAgIEluZm9ybWFzaSANCiAgICAgIE1lcnVwYWthbiBsYW5na2FoIHBlbnllbGVzYWlhbiBzdWF0dSBtYXNhbGFoIHlhbmcgbWVuZ2hhc2lsa2FuIHNvbHVzaQ0KICAgIGRhbGFtIGJlbnR1ayBwcm9ncmFtIGtvbXB1dGVyLiANCg0KIyBTZWJhZ2FpIG1haGFzaXN3YSBidWF0bGFoIGFsZ29yaXRtYSBkYW4gZmxvd2NoYXJ0IHlhbmcgYW5kYSBsYWt1a2FuIHVudHVrIG1lbmNhcGFpIGtlbHVsdXNhbiBzYXJqYW5hIGRlbmdhbiBJUEsgbWluaW1hbCAzLjUgZGFyaSBVbml2ZXJzaXRhcyBNYXRhbmEgDQoNCiAgKipKYXdhYmFuIDoqKg0KDQogICAgKiphLkFsZ29yaXRtYSANCiAgICAgIO+DmCBNYWhhc2lzd2EgbWVuZ2lrdXRpIHBlcmt1bGlhaGFuIA0KICAgICAg74OYIE1lbmNhcmkgZGFzYXItZGFzYXIgbWF0ZXJpIHBlcmt1bGlhaGFuIA0KICAgICAg74OYIE1lbWJhY2EgbWF0ZXJpIHNlYmVsdW0gcGVya3VsaWFoYW4gZGltdWxhaSANCiAgICAgIO+DmCBBa3RpZiBiZXJ0YW55YSANCiAgICAgIO+DmCBNZW5ndWxhbmcgbWF0ZXJpIHNhYXQgc2FtcGFpIGRpcnVtYWggDQogICAgICDvg5ggTWVuZ2VyamFrYW4gdHVnYXMgeWFuZyBkaWJlcmlrYW4NCiAgICAgIO+DmCBNZW5ndW1wdWxrYW4gdHVnYXMgDQogICAgICDvg5ggTWVuZ2lrdXRpIG9yZ2FuaXNhc2kgdW50dWsgbWVuYW1iYWggbmlsYWkNCiAgICAgIO+DmCBNZW5naWt1dGkgb2xpbXBpYWRlIGFudGFyIGthbXB1cyANCiAgICAgIO+DmCBNZW5naWt1dGkgcHJha3Rpa3VtDQogICAgICDvg5ggQmVsYWphciBkZW5nYW4gZ2lhdCBzZWJlbHVtIHVqaWFuIHNlbWVzdGVyDQogICAgICDvg5ggTWVuamF3YWIgc29hbCB1amlhbiBzZW1lc3RlciBkZW5nYW4gdGVsaXRpDQogICAgICDvg5ggTWVsYWt1a2FuIHByYWt0aWsgcGVuZ2FsYW1hbiBsYXBhbmdhbi9wcGwNCiAgICAgIO+DmCBNZW5naWt1dGkgb2xpbXBpYWRlIGFudGFyIGthbXB1cw0KICAgICAg74OYIE1lbnl1c3VuIHNrcmlwc2kNCiAgICAgIO+DmCBNZWxha3VrYW4gdWppYW4gc2VtaW5hciBwcm9wb3NhbCANCiAgICAgIO+DmCBNZWxha3VrYW4gdWppYW4gc2VtaW5hciBoYXNpbA0KICAgICAg74OYIE1lbGFrdWthbiBzaWRhbmcgc2tyaXBzaQ0KICAgICAg74OYIFdpc3VkYSANCiAgIA0KICAgKipiLkZsb3djaGFydA0KIA0KYGBge3IgaW1hZ2UxLCBlY2hvPUZBTFNFLCBmaWcuY2FwPSJHYW1iYXIgMTogZmxvd2NoYXJ0IG1haGFzaXN3YSIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyAoIkZsb3djaGFydC5KUEciKQ0KYGBgDQoNCiMgTWVuZ2FwYSBhbmRhIGhhcnVzIGJlbGFqYXIgQWxnb3JpdG1hIGRhbiBTdHJ1a3R1ciBEYXRhID8NCg0KICAgKipKYXdhYmFuIDoqKiANCiAgDQogIE1lbnVydXQgc2F5YSBiZWxhamFyIGFsZ29yaXRtYSBkYXBhdCBtZW5nYXNhaCBsb2dpa2Egc2F5YSBrYXJlbmEgYmFoYXNhDQpwZW1yb2dyYW1hbiBzYW5nYXQgbWVtYnV0dWhrYW4gbG9naWthLiBTZWRhbmdrYW4gdW50dWsgc3RydWt0dXIgZGF0YSBhZ2FyIHNheWENCm1hbXB1IG1lbWFoYW1pIHNpc3RlbSBwZW5nb3JnYW5pc2FzaWFuIGRhdGEgcGFkYSBtZW1vcmkgZGFuIGZpbGUgcGFkYSBtZWRpYQ0KcGVueWltcGFuYW4gZGF0YS4gDQogICAgIA0KIyBTZWJ1dGthbiAzIGJhaGFzYSBwZW1yb2dyYW1hbiB5YW5nIHBhbGluZyBiYW55YWsgZGlndW5ha2FuIGRhbGFtIFNhaW5zIERhdGEsIGJlcmlrYW4gcGVuamVsYXNhbiBrZWxlYmloYW4sIGtla3VyYW5nYW4sIGRhbiBodWJ1bmdhbiBiYWhhc2EgcGVtcm9ncmFtYW4geWFuZyBzYXR1IGRlbmdhbiB5YW5nIGxhaW5ueWEuIA0KDQogICoqSmF3YWJhbiA6KiogDQogIA0KICAgICphLlB5dGhvbiANCiAgICAgICAgICBBZGFsYWggYmFoYXNhIHlhbmcgc2FuZ2F0IHBvcHVsZXIsIGRpbmFtaXMsIGRhbiBtZXJ1cGFrYW4gYmFoYXNhIHlhbmcgICAgICAgIGRpZ3VuYWthbiBzZWNhcmEgbHVhcyBkYWxhbSBrb211bml0YXMgc2FpbnMgZGF0YS4gQmFoYXNhIGluaSBhZGFsYWgNCiAgICAgICBiYWhhc2EgeWFuZyBzYW5nYXQgY29jb2sgdW50dWsgcGVtdWxhIGthcmVuYSBzaW50YWtzbnlhIHlhbmcgbXVkYWggZGFuDQogICAgICAgc2ltcGxlLiANCiAgICAqKmEpIEtlbGViaWhhbiANCiAgICAgICAgKk11ZGFoIGRpcGVsYWphcmkNCiAgICAgICAgICAgICAgRGliYW5kaW5nIGJhaGFzYSBwZW1yb2dyYW1hbiBsYWluLCBQaHl0b24gcmVsYXRpZiBsZWJpaCBtdWRhaCAgICAgICAgICAgICBkaXBlbGFqYXJpLiBCYWhhc2EgaW5pIG1lbWlsaWtpIHNpbnRha3Mtc2ludGFrcyB5YW5nIGN1a3VwDQogICAgICAgICBzZWRlcmhhbmEgZGFuIGdhbXBhbmcgZGltZW5nZXJ0aS4gQmFoYXNhIGluaSBzYW5nYXQgZGluYW1pcyBkYW4NCiAgICAgICAgIGRpYmFuZ3VuIGJlcmRhc2Fya2FuIHRpbmdrYXQga2V0ZXJiYWNhYW4ga29kZSB5YW5nIHRpbmdnaS4gDQogICAgICAgKk11ZGFoIGRpYXBsaWthc2lrYW4NCiAgICAgICAgICAgICAgS2VsZWJpaGFuIGxhaW5ueWEgZGFyaSBiYWhhc2EgcGVtcm9ncmFtYW4gUHl0aG9uIGFkYWxhaA0KICAgICAgICBrZW11ZGFoYW5ueWEgZGFsYW0gZGlhcGxpa2FzaWthbiBkYWxhbSBtZW5nZW1iYW5na2FuIHNlYnVhaCBwcm9kdWssDQogICAgICAgIGJhaWsgaXR1IHNpdHVzLHNvZnR3YXJlLCBhcGxpa2FzaSBzaXR1cywgbWF1cHVuIHZpZGVvIGdhbWUNCiAgICAgICAqRHVrdW5nIGxvVA0KICAgICAgICAgICAgICBCYWhhc2EgcGVtcm9ncmFtYW4gUHl0aG9uIG1lbmR1a3VuZyBla29zaXN0ZW0gSW50ZXJuZXQgb2YgVGhpbmdzDQogICAgICAgIChJb1QpIGRlbmdhbiBzYW5nYXQgYmFpay4gSW9UIHNlZGFuZyBtYXJhayBkaWJpY2FyYWthbiBhdGF1IGJhaGthbg0KICAgICAgICBkaWtlbWJhbmdrYW4gZGkga2FsYW5nYW4gbWFrZXIuIEludGVybmV0IG9mIFRoaW5ncyBtZXJ1cGFrYW4gc2VidWFoDQogICAgICAgIHRla25vbG9naSB5YW5nIG1lbmdodWJ1bmdrYW4gYmVuZGEtYmVuZGEgZGkgc2VraXRhciBraXRhIGtlIGRhbGFtDQogICAgICAgIHNlYnVhaCBqYXJpbmctamFyaW5nIHlhbmcgc2FsaW5nIHRlcmh1YnVuZy4gDQogICAgICAgKkZsZWtzaWJlbA0KICAgICAgICAgICAgIFByb2dyYW0geWFuZyBkaXR1bGlzIG1lbmdndW5ha2FuIFB5dGhvbiBkYXBhdCBkaWphbGFua2FuIGRpIGhhbXBpcg0KICAgICAgICBzZW11YSBzaXN0ZW0gb3BlcmFzaSAoVW5peCwgV2luZG93cywgTWFjIE9TIFgsIGRsbC4pLCB0ZXJtYXN1ayB1bnR1aw0KICAgICAgICBwZXJhbmdrYXQtcGVyYW5na2F0IHNlbHVsYXIuIA0KICAgICAgICpNZW5pbmdrYXRrYW4gcHJvZHVrdGl2aXRhcw0KICAgICAgICAgICAgS2FyZW5hIG1lbWlsaWtpIGxpYnJhcnkgeWFuZyBsdWFzIGRhbiBkZXNhaW4gYmVyb3JpZW50YXNpIG9iamVrDQogICAgICAgIHlhbmcgYmVyc2loLCBwZW5nZ3VuYWFuIGJhaGFzYSBwZW1yb2dyYW1hbiBQeXRob24gZGFwYXQgbWVudW5qYW5nIA0KICAgICAgICBwcm9kdWt0aXZpdGFzIHByb2dyYW1lciBkaWJhbmRpbmcgc2FhdCBtZW5nZ3VuYWthbiBiYWhhc2EgcGVtcm9ncmFtYW4NCiAgICAgICAgbGFpbiBzZXBlcnRpIEphdmEgZGFuIEMrKy4NCiAgICAgICAqRnJlZSBkYW4gb3BlbiBzb3VyY2UgDQogICAgICAgICAgICBUaWRhayBoYW55YSBkYXBhdCBkaXVuZHVoIHNlY2FyYSBncmF0aXMsIGJhaGFzYSBQeXRob24ganVnYQ0KICAgICAgICBkaWtlbWJhbmdrYW4gZGkgYmF3YWggbGlzZW5zaSBvcGVuIHNvdXJjZSB5YW5nIGRpc2V0dWp1aSBPU0ksIHlhbmcNCiAgICAgICAgYmVyYXJ0aSBiYWhhc2EgcGVtcm9ncmFtYW4gaW5pIGJlYmFzIHVudHVrIGRpZ3VuYWthbiwgZGlrZW1iYW5na2FuIGRhbg0KICAgICAgICBkaWRpc3RyaWJ1c2lrYW4sIHRlcm1hc3VrIHVudHVrIHR1anVhbiBrb21lcnNpYWwuIA0KICAgICAgICANCiAgICoqYikgS2VrdXJhbmdhbiAqKg0KICAgDQogICAgICAgKkt1cmFuZ255YSBkdWt1bmdhbiBtdWx0aXByb3Nlc29yDQogICAgICAgICAgIE11bHRpcHJvY2Vzc2luZyBhZGFsYWggYmFnaWFuIHBlbnRpbmcgZGFsYW0gcGVudWxpc2FuIGFwbGlrYXNpLiANCiAgICAgICAgUHl0aG9uIG1lbWFuZyBtZW5kdWt1bmcgbXVsdGlwcm9jZXNzaW5nLCBuYW11biBtdW5na2luIHRpZGFrDQogICAgICAgIHNlZmxla3NpYmVsIGF0YXUgc2VueWFtYW4gYmFoYXNhIGxhaW4uIEl0dSBzZWJhYm55YSBtdW5na2luIGluaSBkYXBhdA0KICAgICAgICBzZWRpa2l0IG1lbWJhdGFzaSBrYW11IHNhYXQgbWVudWxpcyBrb2RlLiANCiAgICAgICAqTGViaWggc2VkaWtpdCBkZXZlbG9wZXJzIHlhbmcgYmVycGVuZ2FsYW1hbg0KICAgICAgICAgICBTYWF0IGthbXUgbWVtYnVhdCBhcGxpa2FzaSwga2FtdSBwYXN0aSBpbmdpbiBwYXJhIGRldmVsb3BlciBwYWxpbmcNCiAgICAgICAgYmVycGVuZ2FsYW1hbiB5YW5nIG1lbGFrdWthbiBwZWtlcmphYW4gaXR1LiBOYW11biwgdGlkYWsgc2VzZWRlcmhhbmENCiAgICAgICAgaXR1IGRlbmdhbiBQeXRob24ga2FyZW5hIHRpZGFrIGJhbnlhayBhaGxpIHByb2dyYW1tZXIgeWFuZyBtZW5nZ3VuYWthbg0KICAgICAgICBiYWhhc2EgaW5pIHRlcnV0YW1hICBqaWthIGRpYmFuZGluZ2thbiBkZW5nYW4gSmF2YS4NCiAgICAgICAqVGlkYWsgaWRlYWwgdW50dWsgbWVtb3J5IGludGVuc2l2ZSB0YXNrDQogICAgICAgICAgIFB5dGhvbiBhZGFsYWggYmFoYXNhIHlhbmcgZGlrZW5hbCBkZW5nYW4gZmxla3NpYmlsaXRhcyB0aXBlIGRhdGFueWEuDQogICAgICAgIEhhbCBpbmkgbWVtYnVhdG55YSBtZW5naGFzaWxrYW4ga29uc3Vtc2kgbWVtb3JpIHlhbmcgY3VrdXAgdGluZ2dpIGRhbiANCiAgICAgICAgbWVuamFkaSB0aWRhayBueWFtYW4gZGlndW5ha2FuIHVudHVrIG1lbW9yeSBpbnRlbnNpdmUgdGFzay4gDQogICAgICAgKkt1cmFuZyBwb3B1bGVyIHVudHVrIG1vYmlsZSBhcHAgZGV2ZWxvcG1lbnQgDQogICAgICAgICAgIFB5dGhvbiBidWthbiBiYWhhc2EgcGVtcm9ncmFtYW4geWFuZyBwb3B1bGVyIHVudHVrIG1vYmlsZQ0KICAgICAgICBkZXZlbG9wbWVudC4gSGFueWEgc2VkaWtpdCBwZXJ1c2FoYWFuIHlhbmcgbWVuZ2d1bmFrYW4gYmFoYXNhDQogICAgICAgIHBlbXJvZ3JhbWFuIGluaSB1bnR1ayB0dWp1YW4gdGVyc2VidXQuIEthcmVuYSBpdHUga2FtdSBqdWdhIGFrYW4gc3VsaXQNCiAgICAgICAgbWVuZW11a2FuICBkZXZlbG9wZXIgeWFuZyBiZXJwZW5nYWxhbWFuIGRhbGFtIG1vYmlsZSBkZXZlbG9wbWVudCB5YW5nDQogICAgICAgIG1lbmdndW5ha2FuIFB5dGhvbi4gDQogICAgICAgKkJhdGFzYW4gZGVzYWluIA0KICAgICAgICAgICBQeXRob24gZGlrZXRpayBzZWNhcmEgZGluYW1pcyBzZWhpbmdnYSBtZW1pbGlraSBiYW55YWsgYmF0YXNhbg0KICAgICAgICBkZXNhaW4uIFB5dGhvbiBiYWhrYW4gdGVybGloYXQgbWVtYnV0dWhrYW4gbGViaWggYmFueWFrIHdha3R1IHBlbmd1amlhbg0KICAgICAgICBkYW4gIGtlc2FsYWhhbiB5YW5nIG11bmN1bCBrZXRpa2EgYXBsaWthc2kgYWtoaXJueWEgZGlqYWxhbmthbi4gDQogICAgICAgKkJhdGFzYW4ga2VjZXBhdGFuDQogICAgICAgICAgIFB5dGhvbiBzZXJpbmcgZGlrcml0aWsga2FyZW5hIGtlY2VwYXRhbm55YSB5YW5nIGxlYmloIGxhbWJhdA0KICAgICAgICBkaWJhbmRpbmcgYmFoYXNhIHBlbXJvZ3JhbWFuIHlhbmcgZGlrb21waWxhc2kgc2VwZXJ0aSBDIGF0YXUgQysrIGthcmVuYQ0KICAgICAgICBtZXRvZGUgYmVyYmVkYSB5YW5nIGRpZ3VuYWthbm55YSB1bnR1ayBtZW5lcmplbWFoa2FuIGtvZGUuDQogICAgICAgIE1lc2tpIGJlZ2l0dSwgYmViZXJhcGEgYmVuY2htYXJrIFB5dGhvbiBiZWtlcmphIGxlYmloIGNlcGF0IGRhcmlwYWRhIEMNCiAgICAgICAgZGFuIEMrKy4gQmViZXJhcGEgbWFzYWxhaCB0ZXJrYWl0IGtlY2VwYXRhbiBiYWhhc2EgcGVtcm9ncmFtYW4gaW5pIGp1Z2ENCiAgICAgICAgdGVsYWggZGlhdGFzaSBkYW4gZGlvcHRpbWFsa2FuIHNlaGluZ2dhIFB5dGhvbiBiaXNhIGRpYmlsYW5nIHRldGFwDQogICAgICAgIG1lbmphZGkgc2FsYWggc2F0dSBwaWxpaGFuIHRlcmF0dXMgdW50dWsgcGVuZ2VtYmFuZ2FuIHBlcmFuZ2thdCBsdW5hay4gDQoNCiAgKmIuUiogDQogICAgICBBZGFsYWggc2FsYWggc2F0dSBhbGF0IHlhbmcgcGFsaW5nIHNlcmluZyBkaWd1bmFrYW4uIFIgYWRhbGFoIGJhaGFzYSBvcGVuDQogICBzb3VyY2UgZGFuIGxpbmdrdW5nYW4gcGVyYW5na2F0IGx1bmFrIHVudHVrIGtvbXB1dGFzaSBzdGF0aXN0aWsgZGFuIGdyYWZpcywNCiAgIHlhbmcgZGlkdWt1bmcgb2xlaCBSIFlheWFzYW4gS29tcHV0YXNpIFN0YXRpc3Rpa2EuIGtlYWhsaWFuIGluaSBtZW1pbGlraQ0KICAgcGVybWludGFhbiB0aW5nZ2kgZGkgc2VtdWEgcGVyZWtydXQgZGFsYW0gbWVzaW4gcGVtYmVsYWphcmFuIGRhbiBpbG11DQogICBwZW5nZXRhaHVhbiBkYXRhLg0KICAgDQogICAqKmEpS2VsZWJpaGFuKioNCiAgIA0KICAgICAgICpHcmF0aXMNCiAgICAgICAgICBLaXRhIHNlYmFnYWkgcGVuZ2d1bmEgZGFwYXQgbWVtYW5mYWF0a2FuIFIgZGVuZ2FuIGJlYmFzIGRhbiBncmF0aXMuDQogICAgICAgIEtpdGEgZGFwYXQgZGVuZ2FuIGJlYmFzIG1lbmdpbnN0YWwsIG1lbmdndW5ha2FuLCBtZW1wZXJiYXJ1aSwNCiAgICAgICAgbWVuZ2tsb25pbmcsIG1lbW9kaWZpa2FzaSwgbWVuZGlzdHJpYnVzaWthbiB1bGFuZywgYmFoa2FuIG1lbmp1YWxueWENCiAgICAgICAga2VtYmFsaS4gDQogICAgICAgKlBvcHVsZXIgDQogICAgICAgICAgUG9wdWxhcml0YXMgUiBkYXBhdCBkaWxpaGF0IGRhcmkgYmFueWFrbnlhIHBlbmdndW5hbnlhLiBTZXRlbGFoDQogICAgICAgIHNlbXBhdCBtZW5nYWxhbWkgcGVudXJ1bmFuIHBhZGEgdGFodW4gMjAxOC0yMDE5LCBSIGtlbWJhbGkgbWVuYW5qYWsNCiAgICAgICAgcG9wdWxhcml0YXNueWEgdGFodW4gMjAyMCwgZGltdW5na2lua2FuIGRlbmdhbiBhZGFueWEgQ292aWQtMTkuIE1lbnVydXQNCiAgICAgICAgVGlvYmUgSW5kZXggcGVyIEphbnVhcmkgMjAyMSwgUiBtZW5lbXBhdGkgdXJ1dGFuIGtlLTgsIG5haWsgZGFyaSB1cnV0YW4NCiAgICAgICAga2UtMTggcGFkYSBidWxhbiBKYW51YXJpIDIwMjAuDQogICAgICAgKlBvd2VyZnVsIEtlbWFtcHVhbiB5YW5nIGRhdGFuZyBkYXJpIHBhY2thZ2VzDQogICAgICAgICAgUiBtZW1pbGlraSBiYW55YWsgcGFja2FnZSB5YW5nIGxlbmdrYXAgZGVuZ2FuIGZ1bmdzaSB5YW5nIHNhbmdhdA0KICAgICAgICBwb3dlcmZ1bC4gTWlzYWwgcGFja2FnZSDigJxjYXJldOKAnSB5YW5nIGRpZ3VuYWthbiBvbGVoIHBhcmEgZGF0YSBzY2llbnRpc3QNCiAgICAgICAgdW50dWsgbWVuamFsYW5rYW4gbWFjaGluZSBsZWFybmluZy4NCiAgICAgICAqS2VtYW1wdWFuIG1lbmctaGFuZGxlIGJlcmJhZ2FpIG1hY2FtIGRhdGENCiAgICAgICAgICBSIG1lbWlsaWtpIGtlbWFtcHVhbiB1bnR1ayBtZW1iYWNhIGJlcmJhZ2FpIG1hY2FtIGRhdGEgbXVsYWkgZGFyaSANCiAgICAgICAgZGF0YSwgdHh0IGRhbiwgY3N2LGRhdGEgZXhjZWwsIGdhbWJhciwgaGluZ2dhIGRhdGEgc3Bhc2lhbCBiYWlrIGZvcm1hdA0KICAgICAgICB2ZWt0b3IgbWF1cHVuIHJhc3Rlci4gU2VsYWluIGl0dSwgUiBqdWdhIGJhbnlhayBkaWd1bmFrYW4gdW50dWsNCiAgICAgICAgcGVtcm9zZXNhIEJpZyBEYXRhLCB5YW5nIHNlbWFraW4gY2VwYXQga2FyZW5hIFIgbWVtaWxpa2kga2VtYW1wdWFuDQogICAgICAgIHVudHVrIG1lbWFuZmFhdGthbiBiYW55YWsgY29yZSBkYXJpIHByb2Nlc3NvciBkYW4gZnVsbCBwZW5nZ3VuYWFuIFJBTQ0KICAgICAgICBwYWRhIGtvbXB1dGVyLiANCg0KICAgKipiKUtla3VyYW5nYW4qKg0KICAgDQogICAgICAgICBKaWthIGJpc2EgZGliaWxhbmcga2VsZW1haGFuLCBzYXR1IGtlbGVtYWhhbiBkYXJpIFIgYWRhbGFoIHN1bGl0IA0KICAgICAgZGlwZWxhamFyaS5UZXJ1dGFtYSwgamlrYSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHNvZnR3YXJlIHNlcnVwYSB5YW5nDQogICAgICBtZW1pbGlraSB1c2VyIGludGVyZmFjZSBiZXJiYXNpcyBtb3VzZSBrbGlrIHlhbmcgamF1aCBsZWJpaCBtdWRhaA0KICAgICAgZGlvcGVyYXNpa2FuLiBTZXRpYXAgcGVyaW50YWggZGlqYWxhbmthbiBkZW5nYW4gbWVudWxpcyBrb2RlLCBtZXNraXB1bg0KICAgICAgZGVuZ2FuIGJhbnR1YW4gYmViZXJhcGEgcGFja2FnZSwgYW5hbGlzaXMgZGVuZ2FuIHVzZXIgaW50ZXJmYWNlIHlhbmcNCiAgICAgIGxlYmloIGZyaWVuZGx5IGRhcGF0IGRpbGFrdWthbi4gTWVza2lwdW4gZGVtaWtpYW4sIHNla2FyYW5nIHRlbGFoIGJhbnlhaw0KICAgICAgcGxhdGZvcm0geWFuZyBtZW55ZWRpYWthbiBrdXJzdXMgZGFuIHBlbGF0aWhhbiBSIHNlaGluZ2dhIGtpdGEgZGFwYXQNCiAgICAgIG1lbXBlbGFqYXJpbnlhIGRlbmdhbiBtdWRhaC4gRGl0YW1iYWggZGVuZ2FuIGR1a3VuZ2FuIGtvbXVuaXRhcyB5YW5nDQogICAgICBkaW1pbGlraSwgcHJvc2VzIGJlbGFqYXIgUiBtZW5qYWRpIHNlbWFraW4gZGFuIHNlbWFraW4gbXVkYWguIA0KDQogICpjLlNRTCAoU3RydWN0dXJlZCBRdWVyeSBMYW5ndWFnZSkqDQogIA0KICAgICAgICAgICAgQWRhbGFoIHNhbGFoIHNhdHUgeWFuZyBwYWxpbmcgcG9wdWxlciBkaSBrYWxhbmdhbiBiaWRhbmcgZGF0YSBkYXRhDQogICAgIHNjaWVuY2UuIEhhbCBpbmkgZGlndW5ha2FuIGJhaWsgdW50dWsgbWVtYmVyaWthbiBwZXJpbnRhaCBkYW4gbWVuZ2VkaXQNCiAgICAgaW5mb3JtYXNpIHlhbmcgdGVyc2ltcGFuIGRhbGFtIGRhdGFiYXNlIHJlbGFzaW9uYWwuIERhbiBqdWdhLCBTUUwNCiAgICAgZGlndW5ha2FuIHVudHVrIG1lbnlpbXBhbiBkYW4gbWVuZ2FtYmlsIGRhdGEgc2VsYW1hIGJlYmVyYXBhIGRla2FkZS4gSGFsDQogICAgIGluaSBkaWd1bmFrYW4gdW50dWsgbWVuZ2Vsb2xhIERhdGFCYXNlIHlhbmcgc2FuZ2F0IGJlc2FyLCBtZW1wZXJjZXBhdA0KICAgICB3YWt0dSBrb25la3NpIGtlIHNlcnZlciBkYWxhbSBoYWwgcGVuZ2FtYmlsYW4gZGF0YS4ga2V0ZXJhbXBpbGFuIFNRTCBkYXBhdA0KICAgICBtZW5qYWRpIGFzZXQgdW50dWsgaWxtdSBwZW1iZWxhamFyYW4gbWVzaW4gZGFuIGRhdGEsIGthcmVuYSBTUUwgYWRhbGFoDQogICAgIGtldGVyYW1waWxhbiB5YW5nIHBhbGluZyBkaXN1a2FpIHVudHVrIHNlbXVhIGluZHVzdHJpLg0KICAgICANCiAgICAgKiphKUtlbGViaWhhbiANCiAgICAgICAg74O8IE1lbWlsaWtpIGtlbWFtcHVhbiB1bnR1ayBtYW5hZ2VtZW50IHVzZXIgZGFuIHRpYXAgdXNlciBiaXNhIGRpYXR1ciBoYWsNCiAgICAgICAgICBha3NlcyB0ZXJoYWRhcCBzdWF0dSBkYXRhYmFzZSBvbGVoIGRhdGFiYXNlIGFkbWluaXN0cmF0b3IuDQogICAgICAgIO+DvCBNZW1pbGlraSB0aW5na2F0IHBlbmdhbWFuYW4vc2VjdXJpdHkgZGF0YSB5YW5nIGJhaWsuDQogICAgICAgIO+DvCBNZW1pbGlraSBrZW1hbXB1YW4gdW50dWsgYmFjay11cCBkYXRhLCByZXN0b3JlIGRhdGEgZGFuIHJlY292ZXJ5IGRhdGEuDQogICAgICAgIO+DvCBNZW1pbGlraSBrZW1hbXB1YW4gdW50dWsgbWVtYnVhdCBkYXRhYmFzZSBtaXJyb3JpbmcgZGFuIGNsdXN0ZXJpbmcuDQogICAgICAgIO+DvCBDb2NvayB1bnR1ayBkaXRlcmFwa2FuIHBhZGEgcGVtYmFuZ3VuYW4gc3VhdHUgcHJvZ3JhbSBhcGxpa2FzaSwgYWthbg0KICAgICAgICAgIG11ZGFoIGRhbGFtIG1lbGFrdWthbiBrb25la3NpIGRlbmdhbiBrb21wdXRlciBrbGllbiB5YW5nIHBlbWJhbmd1bmFuDQogICAgICAgICAgYXBsaWthc2lueWEgbWVuZ2d1bmFrYW4gc29mdHdhcmUgeWFuZyBzYW1hIHBsYXRmb3JtIGRlbmdhbiBNU1NRTCwNCiAgICAgICAgICBtaXNhbG55YSBNaWNyb3NvZnQgVmlzdWFsIEJhc2ljIA0KDQogICAgICAqKmIpS2VrdXJhbmdhbiANCiAgICAgICAgIO+DvCBNZXJ1cGFrYW4gc29mdHdhcmUgYmVybGlzZW5zaSBkYW4gYmVyaGFyZ2EgbWFoYWwNCiAgICAgICAgIO+DvCBIYW55YSBiaXNhIGJlcmphbGFuIHBhZGEgc2F0dSBwbGF0Zm9ybSBzeXN0ZW0gb3BlcmFzaSB5YWl0dSBNaWNyb3NvZnQNCiAgICAgICAgICAgV2luZG93cy4NCiAgICAgICAgIO+DvCBCYWhhc2EgcGVtb2dyYW1hbiB5YW5nIHRlcmJhdGFzLg0KICAgICAgICAg74O8IFRpZGFrIGNvY29rIHVudHVrIGRhdGFiYXNlIHNrYWxhIGJlc2FyLiANCg0KICBQeXRob24sIFIsIGRhbiBTUUwgTWVydXBha2FuIEJhaGFzYSBQZW1yb2dyYW1hbiB5YW5nIFBvcHVsZXINClVudHVrIHZpc3VhbGlzYXNpIGRhdGEsIFIgbWVydXBha2FuIGJhaGFzYSBwZW1yb2dyYW1hbiB5YW5nIHRlcGF0IHVudHVrIGRpZ3VuYWthbi4gU2ViYWIgUiBwdW55YSBjdWt1cCBiYW55YWsgcGFja2FnZXMgeWFuZyBzYW5nYXQgbWVuZHVrdW5nIHVudHVrIG1lbWJhbmd1biBzZWJ1YWggdmlzdWFsaXNhc2kgeWFuZyBjdWt1cCBtZW5hcmlrLiBNaXNhbG55YSBzYWphLCBhZGFueWEgZ2dwbG90MiB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1idWF0IGdyYWZpaywgbGF0dGljZSB1bnR1ayBtZW51bmp1a2thbiBodWJ1bmdhbiBkYXJpIHZhcmlhYmVsLCBkYW4gckNoYXJ0cyB1bnR1ayBtZW11bmN1bGthbiB2aXN1YWxpc2FzaSBkYXJpIGphdmEgc2NyaXB0IGRlbmdhbiBtZW5nZ3VuYWthbiBSLg0KDQpCZXJiZWRhIGRlbmdhbiBQeXRob24sIGJhaGFzYSBwZW1yb2dyYW1hbiBpbmkgbWVtYnVhdCBwZWtlcmphYW4gbGViaWggbXVkYWgga2FyZW5hIGFkYW55YSBJUHl0aG9uIE5vdGVib29rLCB5YW5nIGRhcGF0IG1lbWJhZ2lrYW4gY2F0YXRhbiBrZXBhZGEgc2lhcGEgc2FqYSB0YW5wYSBtZW1pbnRhIG1lcmVrYSBtZW5ndW5kdWggcHJvZ3JhbS4gUHl0aG9uIGp1Z2EgbWVydXBha2FuIGJhaGFzYSBnZW5lcmFsIHlhbmcgbXVkYWggZGlwZWxhamFyaSBkYW4gZGltZW5nZXJ0aSBvbGVoIGJhbnlhayBkZXZlbG9wZXIgZGFuIHNpYXAgdW50dWsgZGlndW5ha2FuIGtlIGR1bmlhIGtlcmphLg0KDQpUaWRhayBzZXBlcnRpIGJhaGFzYSBwZW1yb2dyYW1hbiBsYWlubnlhIHlhbmcgbWVtYnV0dWhrYW4gcGVtYWhhbWFuIGtvbnNlcHR1YWwgdGluZ2thdCB0aW5nZ2kgZGFuIG1lbmdoYWZhbCBsYW5na2FoLWxhbmdrYWggeWFuZyBkaXBlcmx1a2FuLCBTUUwgZGlwdWppIGthcmVuYSBrZXNlZGVyaGFuYWFubnlhIGRlbmdhbiBtZW5nZ3VuYWthbiANCmBgYA0KDQoNCmBgYHtyIGVjaG89VFJVRSwgZXZhbD1GQUxTRX0NCmRpdi5tYWluLWNvbnRhaW5lciB7DQogIG1heC13aWR0aDogMTI4MHB4Ow0KfQ0KDQoubWFpbi1jb250YWluZXIgew0KICBtYXgtd2lkdGg6IDEyODBweDsNCn0NCg0KZGl2LnRvY2lmeSB7DQogIHdpZHRoOiAyMCU7DQogIG1heC13aWR0aDogMjgwcHg7DQogIG1heC1oZWlnaHQ6IDg1JTsNCn0NCg0KLnRvY2lmeSB7DQogIGJvcmRlcjogMXB4IHNvbGlkICM1MDcxOTQ0NzsNCn0NCg0KYm9keSB7DQogIHRleHQtYWxpZ246IGp1c3RpZnkNCiAgDQp9DQoNCmEgew0KICBjb2xvcjogIzJmNGI3YzsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCnAgew0KICBtYXJnaW46IDAgMCAxM3B4Ow0KICBmb250LXNpemU6IDEuMWVtOw0KICBmb250LWZhbWlseTogImNhbGlicmkiLCBHYXJhbW9uZCwgJ0NvbWljIFNhbnMgTVMnOw0KfQ0KDQoubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSwgLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIsIC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHsNCiAgei1pbmRleDogMjsNCiAgY29sb3I6ICNmZmZmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwM2Y1YzsNCiAgICBib3JkZXItY29sb3I6ICMyZjRiN2M7DQp9DQoNCi5uYXY+bGk+YTpob3ZlciwgLm5hdj5saT5hOmZvY3VzIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWEyNDJmOw0KICAgIGNvbG9yOiB3aGl0ZTsNCn0NCg0KLm5hdi10YWJzPmxpLmFjdGl2ZT5hLCAubmF2LXRhYnM+bGkuYWN0aXZlPmE6aG92ZXIsIC5uYXYtdGFicz5saS5hY3RpdmU+YTpmb2N1cyB7DQogIGNvbG9yOiAjMmMzZTUwOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgIzFhMjQyZjsNCiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGN1cnNvcjogZGVmYXVsdDsNCn0NCg0KLm5hdi10YWJzIHsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMxYTI0MmY7DQp9DQoNCi5uYXYtcGlsbHMgbGk+YSB7DQogIA0KICBib3JkZXI6IDJweCBzb2xpZCAjZjQ3YzNjNDA7DQp9DQoNCi5uYXYtcGlsbHM+bGkuYWN0aXZlPmEsIC5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6aG92ZXIsIC5uYXYtcGlsbHM+bGkuYWN0aXZlPmE6Zm9jdXMgew0KICBjb2xvcjogI2ZmZmZmZjsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2YjIxYzQ7DQp9DQoNCi5uYXY+bGk+YTpob3ZlciwgLm5hdj5saT5hOmZvY3VzIHsNCiAgDQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2JiYzFjNzhhOw0KICAgIGNvbG9yOiAjNmY2ZjZmOw0KfQ0KDQoudG9jaWZ5IHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzFhMjQyZjsNCn0NCg0KLnRvY2lmeS1leHRlbmQtcGFnZSB7DQogIGhlaWdodDogMjRweCAhaW1wb3J0YW50Ow0KfQ0KDQpoMSB7DQogIGZvbnQtc2l6ZTogMS40ZW07DQogIGZvbnQtd2VpZ2h0OiBib2xkZXI7DQp9DQoNCmgyLCBoMyB7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGZvbnQtd2VpZ2h0OiBib2xkZXI7DQp9DQoNCmgzIHsNCiAgZm9udC1zaXplOiAxLjFlbTsNCiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsNCn0NCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDEuOGVtOw0KfQ0KDQoNCmVtIHsNCiAgY29sb3I6ICNmZjdjNDM7DQogICAgbWFyZ2luLWxlZnQ6IC41JTsNCiAgbWFyZ2luLXJpZ2h0OiAuNSU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQouZGF0ZSA+IGVtIHsNCiAgZm9udC1zaXplOiAwLjhlbTsNCn0NCg0KaDQuYXV0aG9yID4gZW0gew0KICBjb2xvcjogd2hpdGU7DQogIHRleHQtZGVjb3JhdGlvbjogaW5pdGlhbDsNCiAgYmFja2dyb3VuZDogYmxhY2s7DQogIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgcGFkZGluZzogNnB4IDhweDsNCiAgbWFyZ2luOiA1JSAwOw0KICBmb250LXNpemU6IDAuOGVtOw0KfQ0KDQpjb2RlID4gc3Bhbi5rdyB7DQogIGNvbG9yOiM1NGI0ZWI7DQp9DQoNCg0KcCA+IGNvZGUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNmMGYxIWltcG9ydGFudDsNCiAgICBwYWRkaW5nOiAwLjIlOw0KICBtYXJnaW46IDAuMiU7DQogIGZvbnQtd2VpZ2h0OiA1MDA7DQp9DQoNCnByZSB7DQogICAgZm9udC1zaXplOiAxNnB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICM2ZjZmNmY7DQogICAgYm9yZGVyOiAxcHggc29saWQgI2QyZDJkMjsNCn0NCg0KcHJlID4gY29kZSB7DQogIGNvbG9yOiAjNjU2NTY1Ow0KfQ0KDQpjb2RlLnNvdXJjZUNvZGUuciB7DQogIGNvbG9yOiB3aGl0ZTsNCn0NCg0KY29kZSA+IHNwYW4ub3Qgew0KICBjb2xvcjogI2VmNmQ1ZjsNCn0NCg0KY29kZSA+IHNwYW4uc3Qgew0KICBjb2xvcjogIzM3OTgyYzsNCn0NCg0KY29kZSA+IHNwYW4uZHQgew0KICBjb2xvcjogIzJmNGI3YzsNCn0NCg0KY29kZSA+IHNwYW4uZHYgew0KICBjb2xvcjogIzJmNGI3YzsNCn0NCg0KY29kZSA+IHNwYW4uZmwgew0KICBjb2xvcjogIzE4YmM5YzsNCn0NCg0KI2hlYWRlcjphZnRlciB7DQpjb250ZW50OiAiICI7DQpkaXNwbGF5OiBibG9jazsNCm1hcmdpbi10b3A6IDIlOw0KbWFyZ2luLWJvdHRvbTogMiU7DQp9DQoNCg0KY29kZSBzcGFuLmt3IHsNCiAgY29sb3I6ICNmZjdjNDM7DQp9DQoNCmltZyB7DQogIGNvbG9yOiB3aGl0ZTsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KICBwYWRkaW5nOiAycHg7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgbWFyZ2luOiA1cHg7DQp9DQoNCmBgYA0KDQoNCg0KDQojIFJlZmVyZW5zaQ0KDQoqIFtSZWZlcmVuc2kgMV0oaHR0cHM6Ly93d3cuZHFsYWIuaWQva2VuYWxpLTMtYWxnb3JpdG1hLWRhbGFtLWRhdGEtc2NpZW5jZWh0dHBzOi8vd3d3LmRxbGFiLmlkL2tlbmFsaS0zLWFsZ29yaXRtYS1kYWxhbS1kYXRhLXNjaWVuY2UpDQoqIFtSZWZlcmVuc2kgMl0oaHR0cHM6Ly93d3cuZHFsYWIuaWQvbWVuZ2VuYWwtcGVyYmVkYWFuLXItcHl0aG9uLWRhbi1zcWwpDQoqIFtSZWZlcmVuc2kgM10oaHR0cHM6Ly93d3cucm9iYnlqdW5nanVuYW4uY29tLzIwMjAvMDMvYmFoYXNhLXBlbW9ncmFtYW4tdW50dWstZGF0YS1zY2llbmNlLmh0bWw/bT0xKQ0KKiBbUmVmZXJlbnNpIDRdKGh0dHBzOi8vd3d3LmVrcnV0LmNvbS9tZWRpYS80LWtlbGViaWhhbi1iYWhhc2EtcGVtcm9ncmFtYW4tcHl0aG9uKQ0KKiBbUmVmZXJlbnNpIDVdKGh0dHBzOi8vZ2Vvc3Bhc2lhbGlzLmNvbS9rZWxlYmloYW4ta2VrdXJhbmdhbi1yLykNCg0KDQoNCg==