{"id":6495,"date":"2026-02-02T17:05:02","date_gmt":"2026-02-02T16:05:02","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=6495"},"modified":"2026-04-16T15:40:52","modified_gmt":"2026-04-16T14:40:52","slug":"servo-moteur-fs90","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/","title":{"rendered":"Servo Moteur FS90"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Un servo moteur , permet de contr\u00f4ler une position en fonction d&rsquo;une consigne , tr\u00e8s pratique en robotique et dans d&rsquo;autres projets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Servo vient du mot asservissement <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caract\u00e8ristiques du FS90<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le signal de commande (fil orange) est de fr\u00e9quence 50 Hz. T=20ms<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">l&rsquo;impusion va donner la consigne de position du Servo Moteur (\u00e9tat haut)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const int FS90_MIN = 500  ou 0.5 ms;     # angle  0 \u00b0   ou 0 radian<br>const int FS90_MAX = 2400 ou 2.4ms ; # angle  180\u00b0 ou pi radian<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">fil rouge<\/mark> est l&rsquo;alimentation en 5V \u00e0 7V max.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\">fil marron ou noir<\/mark> , le GND , le 0 , la masse !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">fil orange<\/mark> la consigne en PWM du servo-moteur<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">la consigne ici est envoy\u00e9 sur le fil orange c&rsquo;est une  PWM , impulsion de 500 \u00e0 2400 micro seconde<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"479\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg\" alt=\"\" class=\"wp-image-6502\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg 1000w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts-300x144.jpeg 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts-768x368.jpeg 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><figcaption class=\"wp-element-caption\">Vision r\u00e9elle d&rsquo;un Servo moteur type FS90<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne-1024x559.png\" alt=\"\" class=\"wp-image-7532\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne-1024x559.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne-300x164.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne-768x419.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/Servo_interne.png 1408w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Vision par Gemini du servo moteur <\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dur\u00e9es d&rsquo;impulsion en MICROSECONDES (\u00b5s) :<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00ab\u00a0Le FS90 utilise un circuit int\u00e9gr\u00e9 sp\u00e9cialis\u00e9 et d\u00e9di\u00e9, souvent un NE544 ou un \u00e9quivalent, qui agit comme le cerveau analogique du servo. Ce n&rsquo;est pas un microcontr\u00f4leur programmable, mais une puce c\u00e2bl\u00e9e pour ex\u00e9cuter une seule t\u00e2che : la commande en boucle ferm\u00e9e d&rsquo;un moteur pour atteindre une position d\u00e9finie par un signal PWM.\u00a0\u00bb<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Angle 0 degr\u00e9: T=500us<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0-1024x437.png\" alt=\"\" class=\"wp-image-7844\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0-1024x437.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0-300x128.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0-768x327.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0.png 1255w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Fr\u00e9quence 50Hz (T=20ms),  180 degr\u00e9s (2400uS)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180-1024x437.png\" alt=\"\" class=\"wp-image-7845\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180-1024x437.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180-300x128.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180-768x327.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/180.png 1255w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Commutation de 0 degr\u00e9 \u00e0 180 degr\u00e9 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180-1024x437.png\" alt=\"\" class=\"wp-image-7846\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180-1024x437.png 1024w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180-300x128.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180-768x327.png 768w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/04\/0_180.png 1255w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Solution en C , la plus simple<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/***************************************************\/\n\/* Code pour ma\u00eetriser un SERVO_MOTEUR FS90        *\/\n\/* en C simple , signal PWM r\u00e9alis\u00e9 dans le loop() *\/\n\/***************************************************\/\n#define signal 10\n#define imp 500\n\/* 0.5 &lt;  imp  &lt;2,4 *\/\n\/* 500 uS \u00e0 24000 uS *\/\n\n\n\/* tempo risation en microsecond pouvant etre sup\u00e8rieur a 1600 ms *\/\nvoid tempo_ms(int temps)\n{\n  if (temps &lt; 1600 )\n  {\n    delayMicroseconds (temps); \/* fini *\/\n  }\n  else\n  {\n      do\n      {\n       delayMicroseconds(1600);\n       temps=temps-1600;\n      }\n      while (temps > 1600);\n      delayMicroseconds(temps);\n  }\n}\n\/* mise en sortie la broche de commande du servo moteur *\/\nvoid setup() \n{\n  pinMode(signal, OUTPUT);\n}\n\n\n\/* boucle de commande du SERVO_Moteur fr\u00e9quence 50Hz *\/\nvoid loop() \n{  \/* boucle de 20ms *\/\n  digitalWrite(signal, HIGH);\n  tempo_ms(imp);  \n  digitalWrite(signal, LOW);\n  tempo_ms(20000-imp);      \/* 20ms -imp *\/\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Donner l&rsquo;organigramme et le PL de ce code <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Expliquer clairement comment fonctionne ce code par rapport au servo moteur<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Relever avec la sonde num\u00e9rique le signal de la broche 10 de l&rsquo;arduino <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Donner la fr\u00e9quance et le Rc <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Donner un code donnant un angle de 0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Tester et relever avec la sonde logique la fr\u00e9quence et le Rc<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Donner un code donnant un angle de moiti\u00e9.<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Tester et relever avec la sonde logique la fr\u00e9quence et le Rc<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Donner un code donnant un angle Maximum<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Tester et relever avec la sonde logique la fr\u00e9quence et le Rc<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">R\u00e9aliser un code \u00ab\u00a0m\u00e9tronome\u00a0\u00bb qui bascule le servo moteur de l&rsquo;angle 0 \u00e0 l&rsquo;angle 180\u00b0 et de 180\u00b0 \u00e0 0 toute les 2 secondes !<\/h3>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Solution<\/summary>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/***************************************************\/\n\/* Code pour ma\u00eetriser un SERVO_MOTEUR FS90        *\/\n\/* en C simple , signal PWM r\u00e9alis\u00e9 dans le loop() *\/\n\/***************************************************\/\n#define signal 10\n#define imp 500+950+950\n#define imp0 500\n#define imp180 2400\n#define temps 100\n\/* 500  minimum 500+950 milieu et 500+950+950 (2400) MAX*\/\nint cpt;\n\/* temporisation en microsecond pouvant etre sup\u00e8rieur a 1600 ms *\/\nvoid tempo_ms(int tmp)\n{\n  if (tmp &lt; 1600 )\n  {\n    delayMicroseconds (tmp); \/* fini *\/\n  }\n  else\n  {\n      do\n      {\n       delayMicroseconds(1600);\n       tmp=tmp-1600;\n      }\n      while (tmp > 1600);\n      delayMicroseconds(tmp);\n  }\n}\n\n\/* mise en sortie la broche de commande du servo moteur *\/\nvoid setup() \n{\n  pinMode(signal, OUTPUT);\n  cpt=0;\n}\n\n\n\/* boucle de commande du SERVO_Moteur fr\u00e9quence 50Hz *\/\nvoid loop() \n{\nif (cpt&lt;temps)\n{  \n  digitalWrite(signal, HIGH);\n  tempo_ms(imp0);  \n  digitalWrite(signal, LOW);\n  tempo_ms(20000-imp0);\n}\nelse\n{  \n  digitalWrite(signal, HIGH);\n  tempo_ms(imp180);  \n  digitalWrite(signal, LOW);\n  tempo_ms(20000-imp180);\n}\ncpt++;\nif (cpt>(2*temps))\n  {\n    cpt=0;\n  }      \n}<\/pre>\n<\/details>\n\n\n\n<h3 class=\"wp-block-heading\">Pour les plus curieux on va programmer le TWI , le timer de l&rsquo;atmega328p<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est hors programme ! mais c&rsquo;est comme cela que ca fonctionne.  On va utiliser les registres internes du timer &#8230; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">on note que Timer (TWI) va g\u00e9n\u00e9rer le signal pwm de commande ,  et le processeur de l&rsquo;atmega328p est totalement disponible (loop() vide)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Configuration du servo FS90 avec Timer1 sur la broche 10\n\/\/ Signal : 50Hz (p\u00e9riode 20ms)\n\/\/ Impulsion : 500\u00b5s \u00e0 2500\u00b5s (position 0\u00b0 \u00e0 180\u00b0)\n\nvolatile uint16_t pulseWidth = 1500; \/\/ Position initiale : 1500\u00b5s (90\u00b0)\n\nvoid setup() {\n  \/\/ Configurer la broche 10 (OC1B) comme sortie\n  pinMode(10, OUTPUT);\n  \n  \/\/ D\u00e9sactiver les interruptions globales pendant la configuration\n  cli();\n  \n  \/\/ Configurer Timer1 en mode Fast PWM 8-bit (mode 14)\n  \/\/ WGM13:1, WGM12:1, WGM11:1, WGM10:0 -> Mode 14 (Fast PWM, TOP = ICR1)\n  TCCR1A = 0;\n  TCCR1B = 0;\n  TCCR1A |= (1 &lt;&lt; WGM11);              \/\/ Mode 14: Fast PWM\n  TCCR1B |= (1 &lt;&lt; WGM13) | (1 &lt;&lt; WGM12); \/\/ TOP = ICR1\n  \n  \/\/ Configurer la sortie OC1B (broche 10) en mode non-invers\u00e9\n  TCCR1A |= (1 &lt;&lt; COM1B1);  \/\/ Clear OC1B on compare match, set at BOTTOM\n  \n  \/\/ D\u00e9finir TOP pour une fr\u00e9quence de 50Hz\n  \/\/ Fr\u00e9quence = 16MHz \/ (prescaler * (1 + ICR1))\n  \/\/ Pour 50Hz : 16MHz \/ (prescaler * (1 + ICR1)) = 50\n  \/\/ Avec prescaler = 8 : 1 + ICR1 = 16000000 \/ (8 * 50) = 40000\n  \/\/ Donc ICR1 = 39999\n  ICR1 = 39999;  \/\/ TOP pour 50Hz avec prescaler 8\n  \n  \/\/ D\u00e9finir le prescaler \u00e0 8\n  TCCR1B |= (1 &lt;&lt; CS11);  \/\/ CS11=1, CS10=0 -> Prescaler 8\n  \n  \/\/ D\u00e9finir la largeur d'impulsion initiale\n  \/\/ OCR1B = (pulseWidth \/ 20000) * (ICR1 + 1)\n  \/\/ Pour 500\u00b5s : OCR1B = (500\/20000) * 40000 = 1000\n  \/\/ Pour 1500\u00b5s : OCR1B = (1500\/20000) * 40000 = 3000\n  \/\/ Pour 2500\u00b5s : OCR1B = (2500\/20000) * 40000 = 5000\n  updatePulseWidth(pulseWidth);\n  \n  \/\/ R\u00e9activer les interruptions\n  sei();\n}\n\n\/\/ Fonction pour mettre \u00e0 jour la position du servo\nvoid setServoPosition(uint16_t microseconds) {\n  \/\/ Limiter la valeur entre 500\u00b5s et 2500\u00b5s\n  if (microseconds &lt; 500) microseconds = 500;\n  if (microseconds > 2500) microseconds = 2500;\n  \n  pulseWidth = microseconds;\n  updatePulseWidth(pulseWidth);\n}\n\n\/\/ Mettre \u00e0 jour OCR1B avec la nouvelle valeur\nvoid updatePulseWidth(uint16_t microseconds) {\n  \/\/ Calculer OCR1B en fonction de la largeur d'impulsion souhait\u00e9e\n  \/\/ OCR1B = (microseconds \/ 20000) * (ICR1 + 1)\n  uint16_t ocrValue = (uint32_t)microseconds * (ICR1 + 1) \/ 20000;\n  OCR1B = ocrValue;\n}\n\nvoid loop() {\n  \/\/ Le loop ne fait rien comme demand\u00e9\n  \/\/ Vous pouvez \u00e9ventuellement ajouter un d\u00e9lai pour \u00e9conomiser l'\u00e9nergie\n  delay(10);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C++ et objet <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Code avec un Timer (Circuit int\u00e9gr\u00e9 dans le Microcontr\u00f4leur TWI sur l&rsquo;atmega328p) et  nous allons d\u00e9couvrir l&rsquo;objet en C++<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Et la on va utiliser le C++ (car oui le compilateur pour arduino est g++), car l&rsquo;objet Servo est introduit ! (ca utilise les registres du timer comme dans l&rsquo;exemple pr\u00e9c\u00e9dent) mais c&rsquo;est cach\u00e9 dans la classe servo (plus facile \u00e0 faire ,car quelqu&rsquo;un \u00e0 cod\u00e9 pour vous) <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la librairie <a href=\"https:\/\/docs.arduino.cc\/libraries\/servo\/\">Servo.h<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sachant que cet objet n&rsquo;est utilisable que tu les broches poss\u00e9dant un TILDA ~  car si on regarde la documentation de l&rsquo;ATMEGA328P seul ces broches sont connectable sur un Timer capable de g\u00e9rer les Temps sans prendre de ressource au microprocesseur du microcontr\u00f4leur.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">broche \u00e0 utiliser pour la PWM<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>~3  ~5  ~6  ~9  ~10  ~11<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objet Servo() et oui la on va faire du C++ et utiliser un objet et d\u00e9couvrir ce qu&rsquo;est un objet !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fr\u00e9quence de 50Hz par et on r\u00e8gle la valeur min et max de l&rsquo;impulsion \u00e0 1, le premier param\u00e8tre est la PIN utilis\u00e9e.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Servo.h>\n\nServo monServo;  \/* Cr\u00e9er un objet servo , instanciation de l'objet , appel du constructeur *\/\n\nvoid setup() \n{\n  monServo.attach(9, 500, 2400);  \/* initialisation de l'objet *\/\n  \/\/ Positionner \u00e0 0\u00b0 (500\u00b5s)\n  monServo.writeMicroseconds(500);\n  \n  delay(1000);  \/* Attendre 1 seconde pour la stabilisation *\/\n}\n\nvoid loop() \n{\n  \/* Le servo reste \u00e0 0\u00b0\n     et le processeur ne fait rien , il est tout pour vous dans le loop()\n     Pas besoin de r\u00e9p\u00e9ter l'instruction\n     le signal PWM est g\u00e9rer automatiquement par l'objet monServo qui a programm\u00e9 un circuit d\u00e9di\u00e9 Timer (TWI)\n   *\/\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Maintenant on va utiliser la m\u00e9thode write qui permet de transmettre l&rsquo;angle de consigne  du servo-moteur<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Servo.h>\n\nServo monServo;  \/* Cr\u00e9er un objet servo , instanciation de l'objet , appel du constructeur *\/\n                              \/* Le constructeur par d\u00e9faut est appel\u00e9 automatiquement *\/\nvoid setup() \n{\n  monServo.attach(9, 500, 2400);  \/* initialisation de l'objet  le premier param\u00e8tre est obligatoire (la broche) *\/\n  \/\/ Positionner \u00e0 0\u00b0 (500\u00b5s)\n  monServo.write(0);\n  \n  delay(1000);  \/* Attendre 1 seconde pour la stabilisation et retour \u00e0 zero*\/\n}\n\nvoid loop() \n{\nint angle;\n\nfor (angle=0;angle&lt;180;angle++)\n    {\n    monServo.write(angle);\n    delay(10);\n    }\ndelay(1000);\nmonServo.write(0);\ndelay(1000);\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Que fais ce code ?<\/h5>\n\n\n\n<h3 class=\"wp-block-heading\">Donner un code utilisant la librairie servo.h , qui r\u00e9alise le m\u00e9tronome de 2 secondes.  comme dans l&rsquo;exemple en C simple !<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Donner les avantages <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un servo moteur , permet de contr\u00f4ler une position en fonction d&rsquo;une consigne , tr\u00e8s pratique en robotique et dans d&rsquo;autres projets. Servo vient du mot asservissement Caract\u00e8ristiques du FS90 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"{\"document\":\"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\/SPA6gt\/ECKPrIC4EICijqiBrIB1Bn6ZMgCrgqabwTAaiCQuAEBCJ4HtAHctwGwuQG4AdJtkssCyp0DjsQB4laICKYHoAesB6YHsIkC3NYB0gOSA+LaAaBIyEwkRAS+OpgFiKMDwu4CAIQK3DqkAziw6QLmsgOq2QEBAJID4toBoEioKr5N0rMBNjiUA4IBsMAB5CbQsgGmXwDmW7TkAdbdAZYEigeY+wLI+gKCPADOTvQEPKIKrgtMsgoBANQW3guyIQEAtgumHfA\/kiqkrQIgBgI8AD4MKAcAAKIDDCgaBgISAgUACpoDJB4GAhQGEgYIBgMAhgEEAwMHAAIFABYCBhYDAAYMChgkAgqeAwYMAwCKBIIHOA6SAQyiCdCFA5QDALhFkgOaA8w7sMEC7sECkgK8wgIAzLACjLACAQH8wgKSEwAIAIIEFPYDltoC5L0CqC3yAso9qDfAbrQCjFrEDp8NKAChAKgAxAShAsQAwQDEAMEAxADBAMQAwQDEAMEAxAHBAKEAxAKhAwAAwQAhAAcAKAInASgPJwDHACEAKAAhACcBIQAoDycABACBAIQAgQCEAIEAhACoASEAqADEAagFxAXHACgCJwAhACgVJwAoAKgAwQChAcEDIQABAAAAxADBAMQBoQDEAMEBoQDBAMQAwQChAMEAoQHBAaEBIQDHACgCJwEoECcABACBAIQAgQCEAIEAhADEAIQAgQCEAIEAxADBAMQBhACBAIQAgQCEAMEAoQHEACEAKAInAAQAJwAEAIEAhAKBA4QAgQGEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQAJwAoBCcAKAEnAAcAKAMnAQQAKBAnAIcAKAMnAQQAKBAnAIcAKAMnAQQAKBAnAIcAIQAoACEAKAAnAQEAKBAnAIcAIQAoACEAKAAnAQEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQAoECcAhwAhACgAIQAoACcBBACBAIQBgQCEAIEAhACBAIQAgQCEAIEAhAKBAIQBgQCEAIEAhACBAIQAgQAoECcAhwAhACgAIQAoACcBBACEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAYEAhACBAIQAgQCEAoEAKBAnAIcAIQAoACEAKAAnAQEAhAaBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQBgQCEAIEAhAKBAIQAgQCEAYEAhACBAIQAgQCEAIEAhAGBAIQAgQCEACgQJwCHACEAKAAhAScAIQIAACEDKA8nAIcAIQAoACEAKAAnACEAKAAnAAQAgQCEAIEAhACBAIQCgQCEACECKBAnAIcAIQAoACEBJwAhAAAAIQAoDycAhwAhACgAIQEnAQQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAAhACgPJwCHACEAKAAhAScAIQEoDycAAQAAAIEAAACBAAAAhwAoAycAKBEnAIcAKAMnAQQAKBAnAIcAIQAoAicAIQAoFicAhwAoAycBBAAhACgPJwCHACgDJwEEACgQJwCHACgDJwEEACEAKA8nAIcAKAMnAQQAKBAnAIcAKAMnAQQAIQAoDycAhwAoAycBBAAoECcAhwAoAycBBAAhACgPJwCHACgDJwEEACgQJwCHACgDJwEEACEAKA8nAIcAKAMnAQQAKBAnAIcAKAMnAQQAIQAoDycAhwAoAycAKAAnAAQAKA8nAAcAKAMnACEBKBUnAIcAKAMnACgRJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwEEACgPJwCHACgDJwEEACgQJwCHACgDJwEEACgQJwCHACgDJwAoFycAhwAoAycBBAAoECcAhwAoAycAKBcnAIcAKAMnAQQAKBAnAIcAKAMnAQQAKBAnAIcAKAMnAQQAKBAnACEBqAChAMEAoQEhAKEAqADEBqEBqADEAKEBIQDHACgCJwEoECcABACECsEAxACED8QAwQDEAIQGwQCoAYQCxAAhAKEBIQHHACgDJwAoEScAqAEoACcAKAXHACgCJwAoACcAKA8nACEFwQDEAMEAqAXHACgCJwAoACcAKA8nACgFwQDEAKEBxwAoAicBKBAnAAQAgQCEAIEAhADBAAAAxADBAMQAwQAAAMcAKAInASgQJwAEAIEAhADEAMEAxACEAMcAKAInASgQJwAEAIEAhACBAIQBgQCEAMQBhACBAIQAgQCEAMQAoQEhAKgCxAuoAcQKqAHEDKgBRADEF4QAqAInAAQAKACoAsQEhACoBSgBJwAEACgDqALEBSgAqAInAAQAKADBAAAAhACBAIQAgQCEAIEAhADBAcQAwQLEAMcAKAInASgQJwAEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAMQDhACBAMQCwQDEAIEAwQCBAMQAwQDEAMEAgQDEAIQAgQDEAIQAwQChAQAAxwAhACgAIQEnACEBKA8nAKEAwQGhAMQAwQChAcECAADBxrsC5KwCc3RhdGV2ZXJzaW9uI2RlZmluZSBpbXAgNTAwCi8qIDUwMCB1UyDDoCAyNDAwMCB1UyAqLwovKiB0ZW1wbyByaXNhdGlvbiBlbiBtaWNyb3NlY29uZCBwb3V2YW50IGV0cmUgc3Vww6hyaWV1ciBhIDE2MDAgbXMgKi8Kdm9pZCB0ZW1wb19tcyhpbnQgdGVtcHMpCnsKICBpZiAodGVtcHMgJmx0OyAxNjAwICkKICB7CiAgICBkZWxheU1pY3Jvc2Vjb25kcyAodGVtcHMpOyAvKiBmaW5pICovCiAgfQogIGVsc2UKICB7CiAgICAgIGRvCiAgICAgIHsKICAgICAgIGRlbGF5TWljcm9zZWNvbmRzKDE2MDApOwogICAgICAgdGVtcHM9dGVtcHMtMTYwMDsKICAgICAgfQogICAgICB3aGlsZSAodGVtcHMgPiAxNjAwKTsKICAgICAgZGVsYXlNaWNyb3NlY29uZHModGVtcHMpOwogIH0KfQogIHRlbXBvX21zKGltcCk7ICAKICB0ZW1wb19tcygyMDAwMC1pbXApOyAgICAgIC8qIDIwbXMgLWltcCAqLwovKiB0ZW1wb3Jpc2F0aW9uIGVuIG1pY3Jvc2Vjb25kIHBvdXZhbnQgZXRyZSBzdXDDqHJpZXVyIGEgMTYwMCBtcyAqLwp7CiAgewogIH0KICBlbHNlCiAgewogICAgICBkbwogICAgICB7CiAgICAgICBkZWxheU1pY3Jvc2Vjb25kcygxNjAwKTsKICAgICAgfQogIH0KfQogIHRlbXBvX21zKGltcDApOyAgCiAgdGVtcG9fbXMoMjAwMDAtaW1wMCk7CiAgdGVtcG9fbXMoaW1wMTgwKTsgIAogIHRlbXBvX21zKDIwMDAwLWltcDE4MCk7CnN0YXRldmVyc2lvbmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc1BvdXIgbGVzIHBsdXMgY3VyaWV1eCBvbiB2YSBwcm9ncmFtbWVyIGxlIFRXSSAsIGxlIHRpbWVyIGRlIGwnYXRtZWdhMzI4cGxldmVsPHVsIGNsYXNzPSJ3cC1ibG9jay1saXN0Ij48IS0tIHdwOmxpc3QtaXRlbSAtLT4KPGxpPjwvbGk+CjwhLS0gL3dwOmxpc3QtaXRlbSAtLT48L3VsPgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UG91ciBsZXMgcGx1cyBjdXJpZXV4IG9uIHZhIHByb2dyYW1tZXIgbGUgVFdJICwgbGUgdGltZXIgZGUgbCdhdG1lZ2EzMjhwPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjo0fSAtLT4KPGg0IGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Eb25uZXIgbCdvcmdhbmlncmFtbWUgZXQgbGUgUEwgZGUgY2UgY29kZSA8L2g0Pgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6NH0gLS0+CjxoNCBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UmVsZXZlciBhdmVjIGxhIHNvbmRlIG51bcOpcmlxdWUgbGUgc2lnbmFsIGRlIGxhIGJyb2NoZSAxMCBkZSBsJ2FyZHVpbm8gPC9oND4KPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjR9IC0tPgo8aDQgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkRvbm5lciB1biBjb2RlIGRvbm5hbnQgdW4gYW5nbGUgZGUgMDwvaDQ+CjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjo0fSAtLT4KPGg0IGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Eb25uZXIgdW4gY29kZSBkb25uYW50IHVuIGFuZ2xlIGRlIG1vaXRpw6kuPC9oND4KPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjR9IC0tPgo8aDQgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkRvbm5lciB1biBjb2RlIGRvbm5hbnQgdW4gYW5nbGUgTWF4aW11bTwvaDQ+CjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Sw6lhbGlzZXIgdW4gY29kZSAibcOpdHJvbm9tZSIgcXVpIGJhc2N1bGUgbGUgc2Vydm8gbW90ZXVyIGRlIGwnYW5nbGUgMCDDoCBsJ2FuZ2xlIDE4MMKwIGV0IGRlIDE4MMKwIMOgIDAgdG91dGUgbGVzIDIgc2Vjb25kZXMgITwvaDM+CmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzbGFuZ3VhZ2V0aGVtZWhpZ2hsaWdodGxpbmVudW1iZXJzbGluZW9mZnNldHRpdGxlZ3JvdXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY29udGVudHN0YXRldmVyc2lvbiAgb3UgMC41IG1zIG91IDIuNG1zIDxwPmNvbnN0IGludCBGUzkwX01JTiA9IDUwMCAgb3UgMC41IG1zOyAgICAgIyBhbmdsZSAgMCDCsCAgIG91IDAgcmFkaWFuPGJyPmNvbnN0IGludCBGUzkwX01BWCA9IDI0MDAgb3UgMi40bXMgOyAjIGFuZ2xlICAxODDCsCBvdSBwaSByYWRpYW48L3A+Ci8qIDAuNSAmbHQ7ICBpbXAgICZsdDsyLDQgKi8Kc3RhdGV2ZXJzaW9uY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NvbiBub3RlIHF1ZSBUaW1lciAoVFdJKSB2YSBnw6lucmVyIGxlIHNpZ25hbCBwd20gZGUgY29tbWFuZGUgw6ksICBldCBsZSBwcm9jZXNzZXVyIGQ8IS0tIHdwOnBhcmFncmFwaCAtLT4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDplbmxpZ2h0ZXIvY29kZWJsb2NrIHsibGFuZ3VhZ2UiOiJjIn0gLS0+CjxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+Ly8gQ29uZmlndXJhdGlvbiBkdSBzZXJ2byBGUzkwIGF2ZWMgVGltZXIxIHN1ciBsYSBicm9jaGUgMTAKLy8gU2lnbmFsIDogNTBIeiAocMOpcmlvZGUgMjBtcykKLy8gSW1wdWxzaW9uIDogNTAwwrVzIMOgIDI1MDDCtXMgKHBvc2l0aW9uIDDCsCDDoCAxODDCsCkKCnZvbGF0aWxlIHVpbnQxNl90IHB1bHNlV2lkdGggPSAxNTAwOyAvLyBQb3NpdGlvbiBpbml0aWFsZSA6IDE1MDDCtXMgKDkwwrApCgp2b2lkIHNldHVwKCkgewogIC8vIENvbmZpZ3VyZXIgbGEgYnJvY2hlIDEwIChPQzFCKSBjb21tZSBzb3J0aWUKICBwaW5Nb2RlKDEwLCBPVVRQVVQpOwogIAogIC8vIETDqXNhY3RpdmVyIGxlcyBpbnRlcnJ1cHRpb25zIGdsb2JhbGVzIHBlbmRhbnQgbGEgY29uZmlndXJhdGlvbgogIGNsaSgpOwogIAogIC8vIENvbmZpZ3VyZXIgVGltZXIxIGVuIG1vZGUgRmFzdCBQV00gOC1iaXQgKG1vZGUgMTQpCiAgLy8gV0dNMTM6MSwgV0dNMTI6MSwgV0dNMTE6MSwgV0dNMTA6MCAtPiBNb2RlIDE0IChGYXN0IFBXTSwgVE9QID0gSUNSMSkKICBUQ0NSMUEgPSAwOwogIFRDQ1IxQiA9IDA7CiAgVENDUjFBIHw9ICgxICZsdDsmbHQ7IFdHTTExKTsgICAgICAgICAgICAgIC8vIE1vZGUgMTQ6IEZhc3QgUFdNCiAgVENDUjFCIHw9ICgxICZsdDsmbHQ7IFdHTTEzKSB8ICgxICZsdDsmbHQ7IFdHTTEyKTsgLy8gVE9QID0gSUNSMQogIAogIC8vIENvbmZpZ3VyZXIgbGEgc29ydGllIE9DMUIgKGJyb2NoZSAxMCkgZW4gbW9kZSBub24taW52ZXJzw6kKICBUQ0NSMUEgfD0gKDEgJmx0OyZsdDsgQ09NMUIxKTsgIC8vIENsZWFyIE9DMUIgb24gY29tcGFyZSBtYXRjaCwgc2V0IGF0IEJPVFRPTQogIAogIC8vIETDqWZpbmlyIFRPUCBwb3VyIHVuZSBmcsOpcXVlbmNlIGRlIDUwSHoKICAvLyBGcsOpcXVlbmNlID0gMTZNSHogLyAocHJlc2NhbGVyICogKDEgKyBJQ1IxKSkKICAvLyBQb3VyIDUwSHogOiAxNk1IeiAvIChwcmVzY2FsZXIgKiAoMSArIElDUjEpKSA9IDUwCiAgLy8gQXZlYyBwcmVzY2FsZXIgPSA4IDogMSArIElDUjEgPSAxNjAwMDAwMCAvICg4ICogNTApID0gNDAwMDAKICAvLyBEb25jIElDUjEgPSAzOTk5OQogIElDUjEgPSAzOTk5OTsgIC8vIFRPUCBwb3VyIDUwSHogYXZlYyBwcmVzY2FsZXIgOAogIAogIC8vIETDqWZpbmlyIGxlIHByZXNjYWxlciDDoCA4CiAgVENDUjFCIHw9ICgxICZsdDsmbHQ7IENTMTEpOyAgLy8gQ1MxMT0xLCBDUzEwPTAgLT4gUHJlc2NhbGVyIDgKICAKICAvLyBEw6lmaW5pciBsYSBsYXJnZXVyIGQnaW1wdWxzaW9uIGluaXRpYWxlCiAgLy8gT0NSMUIgPSAocHVsc2VXaWR0aCAvIDIwMDAwKSAqIChJQ1IxICsgMSkKICAvLyBQb3VyIDUwMMK1cyA6IE9DUjFCID0gKDUwMC8yMDAwMCkgKiA0MDAwMCA9IDEwMDAKICAvLyBQb3VyIDE1MDDCtXMgOiBPQ1IxQiA9ICgxNTAwLzIwMDAwKSAqIDQwMDAwID0gMzAwMAogIC8vIFBvdXIgMjUwMMK1cyA6IE9DUjFCID0gKDI1MDAvMjAwMDApICogNDAwMDAgPSA1MDAwCiAgdXBkYXRlUHVsc2VXaWR0aChwdWxzZVdpZHRoKTsKICAKICAvLyBSw6lhY3RpdmVyIGxlcyBpbnRlcnJ1cHRpb25zCiAgc2VpKCk7Cn0KCi8vIEZvbmN0aW9uIHBvdXIgbWV0dHJlIMOgIGpvdXIgbGEgcG9zaXRpb24gZHUgc2Vydm8Kdm9pZCBzZXRTZXJ2b1Bvc2l0aW9uKHVpbnQxNl90IG1pY3Jvc2Vjb25kcykgewogIC8vIExpbWl0ZXIgbGEgdmFsZXVyIGVudHJlIDUwMMK1cyBldCAyNTAwwrVzCiAgaWYgKG1pY3Jvc2Vjb25kcyAmbHQ7IDUwMCkgbWljcm9zZWNvbmRzID0gNTAwOwogIGlmIChtaWNyb3NlY29uZHMgPiAyNTAwKSBtaWNyb3NlY29uZHMgPSAyNTAwOwogIAogIHB1bHNlV2lkdGggPSBtaWNyb3NlY29uZHM7CiAgdXBkYXRlUHVsc2VXaWR0aChwdWxzZVdpZHRoKTsKfQoKLy8gTWV0dHJlIMOgIGpvdXIgT0NSMUIgYXZlYyBsYSBub3V2ZWxsZSB2YWxldXIKdm9pZCB1cGRhdGVQdWxzZVdpZHRoKHVpbnQxNl90IG1pY3Jvc2Vjb25kcykgewogIC8vIENhbGN1bGVyIE9DUjFCIGVuIGZvbmN0aW9uIGRlIGxhIGxhcmdldXIgZCdpbXB1bHNpb24gc291aGFpdMOpZQogIC8vIE9DUjFCID0gKG1pY3Jvc2Vjb25kcyAvIDIwMDAwKSAqIChJQ1IxICsgMSkKICB1aW50MTZfdCBvY3JWYWx1ZSA9ICh1aW50MzJfdCltaWNyb3NlY29uZHMgKiAoSUNSMSArIDEpIC8gMjAwMDA7CiAgT0NSMUIgPSBvY3JWYWx1ZTsKfQoKdm9pZCBsb29wKCkgewogIC8vIExlIGxvb3AgbmUgZmFpdCByaWVuIGNvbW1lIGRlbWFuZMOpCiAgLy8gVm91cyBwb3V2ZXogw6l2ZW50dWVsbGVtZW50IGFqb3V0ZXIgdW4gZMOpbGFpIHBvdXIgw6ljb25vbWlzZXIgbCfDqW5lcmdpZQogIGRlbGF5KDEwKTsKfTwvcHJlPgo8IS0tIC93cDplbmxpZ2h0ZXIvY29kZWJsb2NrIC0tPgoKZSBsJ2F0bWVnYTMyOHAgZXN0IHRvdGFsZW1lbnQgZGlzcG9uaWJsZSAobG9vcCgpIHZpZGUpPHA+b24gbm90ZSBxdWUgVGltZXIgKFRXSSkgdmEgZ8OpbsOpcmVyIGxlIHNpZ25hbCBwd20gZGUgY29tbWFuZGUgLCAgZXQgbGUgcHJvY2Vzc2V1ciBkZSBsJ2F0bWVnYTMyOHAgZXN0IHRvdGFsZW1lbnQgZGlzcG9uaWJsZSAobG9vcCgpIHZpZGUpPC9wPgpzdGF0ZXZlcnNpb25kb2N1bWVudGRhdGVkb2N1bWVudHNsdWdkb2N1bWVudHN0YXR1c2RvY3VtZW50dGl0bGVTZXJ2byBNb3RldXIgRlM5MGRvY3VtZW50Y29udGVudDwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5VbiBzZXJ2byBtb3RldXIgLCBwZXJtZXQgZGUgY29udHLDtGxlciB1bmUgcG9zaXRpb24gZW4gZm9uY3Rpb24gZCd1bmUgY29uc2lnbmUgLCB0csOocyBwcmF0aXF1ZSBlbiByb2JvdGlxdWUgZXQgZGFucyBkJ2F1dHJlcyBwcm9qZXRzLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlNlcnZvIHZpZW50IGR1IG1vdCBhc3NlcnZpc3NlbWVudCA8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5DYXJhY3TDqHJpc3RpcXVlcyBkdSBGUzkwPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+TGUgPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwKSIgY2xhc3M9Imhhcy1pbmxpbmUtY29sb3IgaGFzLXZpdmlkLXJlZC1jb2xvciI+ZmlsIHJvdWdlPC9tYXJrPiBlc3QgbCdhbGltZW50YXRpb24gZW4gNVYgw6AgN1YgbWF4LjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkxlIDxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMCkiIGNsYXNzPSJoYXMtaW5saW5lLWNvbG9yIGhhcy1ibGFjay1jb2xvciI+ZmlsIG1hcnJvbiBvdSBub2lyPC9tYXJrPiAsIGxlIEdORCAsIGxlIDAgLCBsYSBtYXNzZSAhPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+TGUgPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwKSIgY2xhc3M9Imhhcy1pbmxpbmUtY29sb3IgaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1jb2xvciI+ZmlsIG9yYW5nZTwvbWFyaz4gbGEgY29uc2lnbmUgZW4gUFdNIGR1IHNlcnZvLW1vdGV1cjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPmxhIGNvbnNpZ25lIGljaSBlc3QgZW52b3nDqSBzdXIgbGUgZmlsIG9yYW5nZSBjJ2VzdCB1bmUgIFBXTSAsIGltcHVsc2lvbiBkZSA1MDAgw6AgMjQwMCBtaWNybyBzZWNvbmRlPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmltYWdlIHsiaWQiOjY1MDIsInNpemVTbHVnIjoiZnVsbCIsImxpbmtEZXN0aW5hdGlvbiI6Im1lZGlhIn0gLS0+CjxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLWltYWdlIHNpemUtZnVsbCI+PGEgaHJlZj0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMi9zZXJ2by1wYXJ0cy5qcGVnIj48aW1nIHNyYz0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMi9zZXJ2by1wYXJ0cy5qcGVnIiBhbHQ9IiIgY2xhc3M9IndwLWltYWdlLTY1MDIiLz48L2E+PGZpZ2NhcHRpb24gY2xhc3M9IndwLWVsZW1lbnQtY2FwdGlvbiI+VmlzaW9uIHLDqWVsbGUgZCd1biBTZXJ2byBtb3RldXIgdHlwZSBGUzkwPC9maWdjYXB0aW9uPjwvZmlndXJlPgo8IS0tIC93cDppbWFnZSAtLT4KCjwhLS0gd3A6aW1hZ2UgeyJpZCI6NzUzMiwic2l6ZVNsdWciOiJsYXJnZSIsImxpbmtEZXN0aW5hdGlvbiI6Im1lZGlhIn0gLS0+CjxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLWltYWdlIHNpemUtbGFyZ2UiPjxhIGhyZWY9Imh0dHBzOi8vd29ya2Jvb3QuZnIvY2llbGEvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDQvU2Vydm9faW50ZXJuZS5wbmciPjxpbWcgc3JjPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0L1NlcnZvX2ludGVybmUtMTAyNHg1NTkucG5nIiBhbHQ9IiIgY2xhc3M9IndwLWltYWdlLTc1MzIiLz48L2E+PGZpZ2NhcHRpb24gY2xhc3M9IndwLWVsZW1lbnQtY2FwdGlvbiI+VmlzaW9uIHBhciBHZW1pbmkgZHUgc2Vydm8gbW90ZXVyIDwvZmlnY2FwdGlvbj48L2ZpZ3VyZT4KPCEtLSAvd3A6aW1hZ2UgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PHN0cm9uZz5EdXLDqWVzIGQnaW1wdWxzaW9uIGVuIE1JQ1JPU0VDT05ERVMgKMK1cykgOjwvc3Ryb25nPjwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+PHN0cm9uZz4iTGUgRlM5MCB1dGlsaXNlIHVuIGNpcmN1aXQgaW50w6lncsOpIHNww6ljaWFsaXPDqSBldCBkw6lkacOpLCBzb3V2ZW50IHVuIE5FNTQ0IG91IHVuIMOpcXVpdmFsZW50LCBxdWkgYWdpdCBjb21tZSBsZSBjZXJ2ZWF1IGFuYWxvZ2lxdWUgZHUgc2Vydm8uIENlIG4nZXN0IHBhcyB1biBtaWNyb2NvbnRyw7RsZXVyIHByb2dyYW1tYWJsZSwgbWFpcyB1bmUgcHVjZSBjw6JibMOpZSBwb3VyIGV4w6ljdXRlciB1bmUgc2V1bGUgdMOiY2hlIDogbGEgY29tbWFuZGUgZW4gYm91Y2xlIGZlcm3DqWUgZCd1biBtb3RldXIgcG91ciBhdHRlaW5kcmUgdW5lIHBvc2l0aW9uIGTDqWZpbmllIHBhciB1biBzaWduYWwgUFdNLiI8L3N0cm9uZz48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6bGlzdCAtLT4KPCEtLSAvd3A6bGlzdCAtLT4KCjwhLS0gd3A6c2VwYXJhdG9yIC0tPgo8aHIgY2xhc3M9IndwLWJsb2NrLXNlcGFyYXRvciBoYXMtYWxwaGEtY2hhbm5lbC1vcGFjaXR5Ii8+CjwhLS0gL3dwOnNlcGFyYXRvciAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Tb2x1dGlvbiBlbiBDICwgbGEgcGx1cyBzaW1wbGU8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDplbmxpZ2h0ZXIvY29kZWJsb2NrIHsibGFuZ3VhZ2UiOiJjIn0gLS0+CjxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogQ29kZSBwb3VyIG1hw650cmlzZXIgdW4gU0VSVk9fTU9URVVSIEZTOTAgICAgICAgICovCi8qIGVuIEMgc2ltcGxlICwgc2lnbmFsIFBXTSByw6lhbGlzw6kgZGFucyBsZSBsb29wKCkgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBzaWduYWwgMTAKCgovKiBtaXNlIGVuIHNvcnRpZSBsYSBicm9jaGUgZGUgY29tbWFuZGUgZHUgc2Vydm8gbW90ZXVyICovCnZvaWQgc2V0dXAoKSAKewogIHBpbk1vZGUoc2lnbmFsLCBPVVRQVVQpOwp9CgoKLyogYm91Y2xlIGRlIGNvbW1hbmRlIGR1IFNFUlZPX01vdGV1ciBmcsOpcXVlbmNlIDUwSHogKi8Kdm9pZCBsb29wKCkgCiAgZGlnaXRhbFdyaXRlKHNpZ25hbCwgSElHSCk7CiAgZGlnaXRhbFdyaXRlKHNpZ25hbCwgTE9XKTsKfTwvcHJlPgo8IS0tIC93cDplbmxpZ2h0ZXIvY29kZWJsb2NrIC0tPgoKPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5FeHBsaXF1ZXIgY2xhaXJlbWVudCBjb21tZW50IGZvbmN0aW9ubmUgY2UgY29kZSBwYXIgcmFwcG9ydCBhdSBzZXJ2byBtb3RldXI8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+RG9ubmVyIGxhIGZyw6lxdWFuY2UgZXQgbGUgUmMgPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRlc3RlciBldCByZWxldmVyIGF2ZWMgbGEgc29uZGUgbG9naXF1ZSBsYSBmcsOpcXVlbmNlIGV0IGxlIFJjPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRlc3RlciBldCByZWxldmVyIGF2ZWMgbGEgc29uZGUgbG9naXF1ZSBsYSBmcsOpcXVlbmNlIGV0IGxlIFJjPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlRlc3RlciBldCByZWxldmVyIGF2ZWMgbGEgc29uZGUgbG9naXF1ZSBsYSBmcsOpcXVlbmNlIGV0IGxlIFJjPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpkZXRhaWxzIC0tPgovKiBDb2RlIHBvdXIgbWHDrnRyaXNlciB1biBTRVJWT19NT1RFVVIgRlM5MCAgICAgICAgKi8KLyogZW4gQyBzaW1wbGUgLCBzaWduYWwgUFdNIHLDqWFsaXPDqSBkYW5zIGxlIGxvb3AoKSAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIHNpZ25hbCAxMAojZGVmaW5lIGltcCA1MDArOTUwKzk1MAojZGVmaW5lIGltcDAgNTAwCiNkZWZpbmUgaW1wMTgwIDI0MDAKLyogNTAwICBtaW5pbXVtIDUwMCs5NTAgbWlsaWV1IGV0IDUwMCs5NTArOTUwICgyNDAwKSBNQVgqLwppbnQgY3B0OwoKLyogbWlzZSBlbiBzb3J0aWUgbGEgYnJvY2hlIGRlIGNvbW1hbmRlIGR1IHNlcnZvIG1vdGV1ciAqLwp2b2lkIHNldHVwKCkgCnsKICBwaW5Nb2RlKHNpZ25hbCwgT1VUUFVUKTsKICBjcHQ9MDsKfQoKCi8qIGJvdWNsZSBkZSBjb21tYW5kZSBkdSBTRVJWT19Nb3RldXIgZnLDqXF1ZW5jZSA1MEh6ICovCnZvaWQgbG9vcCgpIAp7CmlmIChjcHQmbHQ7dGVtcHMpCnsgIAogIGRpZ2l0YWxXcml0ZShzaWduYWwsIEhJR0gpOwogIGRpZ2l0YWxXcml0ZShzaWduYWwsIExPVyk7Cn0KZWxzZQp7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBISUdIKTsKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBMT1cpOwp9CmNwdCsrOwppZiAoY3B0PigyKnRlbXBzKSkKICB7CiAgICBjcHQ9MDsKfTwvcHJlPgo8IS0tIC93cDplbmxpZ2h0ZXIvY29kZWJsb2NrIC0tPjwvZGV0YWlscz4KPCEtLSAvd3A6ZGV0YWlscyAtLT4KCjwhLS0gd3A6c2VwYXJhdG9yIC0tPgo8aHIgY2xhc3M9IndwLWJsb2NrLXNlcGFyYXRvciBoYXMtYWxwaGEtY2hhbm5lbC1vcGFjaXR5Ii8+CjwhLS0gL3dwOnNlcGFyYXRvciAtLT4KCjwhLS0gd3A6aGVhZGluZyAtLT4KPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5DKysgZXQgb2JqZXQgPC9oMj4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Db2RlIGF2ZWMgdW4gVGltZXIgKENpcmN1aXQgaW50w6lncsOpIGRhbnMgbGUgTWljcm9jb250csO0bGV1ciBUV0kgc3VyIGwnYXRtZWdhMzI4cCkgZXQgIG5vdXMgYWxsb25zIGTDqWNvdXZyaXIgbCdvYmpldCBlbiBDKys8L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5EYW5zIGxhIGxpYnJhaXJpZSA8YSBocmVmPSJodHRwczovL2RvY3MuYXJkdWluby5jYy9saWJyYXJpZXMvc2Vydm8vIj5TZXJ2by5oPC9hPjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlNhY2hhbnQgcXVlIGNldCBvYmpldCBuJ2VzdCB1dGlsaXNhYmxlIHF1ZSB0dSBsZXMgYnJvY2hlcyBwb3Nzw6lkYW50IHVuIFRJTERBIH4gIGNhciBzaSBvbiByZWdhcmRlIGxhIGRvY3VtZW50YXRpb24gZGUgbCdBVE1FR0EzMjhQIHNldWwgY2VzIGJyb2NoZXMgc29udCBjb25uZWN0YWJsZSBzdXIgdW4gVGltZXIgY2FwYWJsZSBkZSBnw6lyZXIgbGVzIFRlbXBzIHNhbnMgcHJlbmRyZSBkZSByZXNzb3VyY2UgYXUgbWljcm9wcm9jZXNzZXVyIGR1IG1pY3JvY29udHLDtGxldXIuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6NH0gLS0+CjxoNCBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+YnJvY2hlIMOgIHV0aWxpc2VyIHBvdXIgbGEgUFdNPC9oND4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6Y29kZSAtLT4KPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+fjMgIH41ICB+NiAgfjkgIH4xMCAgfjExPC9jb2RlPjwvcHJlPgo8IS0tIC93cDpjb2RlIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkwnb2JqZXQgU2Vydm8oKSBldCBvdWkgbGEgb24gdmEgZmFpcmUgZHUgQysrIGV0IHV0aWxpc2VyIHVuIG9iamV0IGV0IGTDqWNvdXZyaXIgY2UgcXUnZXN0IHVuIG9iamV0ICE8L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5GcsOpcXVlbmNlIGRlIDUwSHogcGFyIGV0IG9uIHLDqGdsZSBsYSB2YWxldXIgbWluIGV0IG1heCBkZSBsJ2ltcHVsc2lvbiDDoCAxLCBsZSBwcmVtaWVyIHBhcmFtw6h0cmUgZXN0IGxhIFBJTiB1dGlsaXPDqWUuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmVubGlnaHRlci9jb2RlYmxvY2sgeyJsYW5ndWFnZSI6ImMifSAtLT4KPHByZSBjbGFzcz0iRW5saWdodGVySlNSQVciIGRhdGEtZW5saWdodGVyLWxhbmd1YWdlPSJjIiBkYXRhLWVubGlnaHRlci10aGVtZT0iIiBkYXRhLWVubGlnaHRlci1oaWdobGlnaHQ9IiIgZGF0YS1lbmxpZ2h0ZXItbGluZW51bWJlcnM9IiIgZGF0YS1lbmxpZ2h0ZXItbGluZW9mZnNldD0iIiBkYXRhLWVubGlnaHRlci10aXRsZT0iIiBkYXRhLWVubGlnaHRlci1ncm91cD0iIj4jaW5jbHVkZSAmbHQ7U2Vydm8uaD4KClNlcnZvIG1vblNlcnZvOyAgLyogQ3LDqWVyIHVuIG9iamV0IHNlcnZvICwgaW5zdGFuY2lhdGlvbiBkZSBsJ29iamV0ICwgYXBwZWwgZHUgY29uc3RydWN0ZXVyICovCgp2b2lkIHNldHVwKCkgCnsKICBtb25TZXJ2by5hdHRhY2goOSwgNTAwLCAyNDAwKTsgIC8qIGluaXRpYWxpc2F0aW9uIGRlIGwnb2JqZXQgKi8KICAvLyBQb3NpdGlvbm5lciDDoCAwwrAgKDUwMMK1cykKICBtb25TZXJ2by53cml0ZU1pY3Jvc2Vjb25kcyg1MDApOwogIAogIGRlbGF5KDEwMDApOyAgLyogQXR0ZW5kcmUgMSBzZWNvbmRlIHBvdXIgbGEgc3RhYmlsaXNhdGlvbiAqLwp9Cgp2b2lkIGxvb3AoKSAKewogIC8qIExlIHNlcnZvIHJlc3RlIMOgIDDCsAogICAgIGV0IGxlIHByb2Nlc3NldXIgbmUgZmFpdCByaWVuICwgaWwgZXN0IHRvdXQgcG91ciB2b3VzIGRhbnMgbGUgbG9vcCgpCiAgICAgUGFzIGJlc29pbiBkZSByw6lww6l0ZXIgbCdpbnN0cnVjdGlvbgogICAgIGxlIHNpZ25hbCBQV00gZXN0IGfDqXJlciBhdXRvbWF0aXF1ZW1lbnQgcGFyIGwnb2JqZXQgbW9uU2Vydm8gcXVpIGEgcHJvZ3JhbW3DqSB1biBjaXJjdWl0IGTDqWRpw6kgVGltZXIgKFRXSSkKICAgKi8KfTwvcHJlPgo8IS0tIC93cDplbmxpZ2h0ZXIvY29kZWJsb2NrIC0tPgoKPCEtLSB3cDpoZWFkaW5nIC0tPgo8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk1haW50ZW5hbnQgb24gdmEgdXRpbGlzZXIgbGEgbcOpdGhvZGUgd3JpdGUgcXVpIHBlcm1ldCBkZSB0cmFuc21ldHRyZSBsJ2FuZ2xlIGRlIGNvbnNpZ25lICBkdSBzZXJ2by1tb3RldXI8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDplbmxpZ2h0ZXIvY29kZWJsb2NrIHsibGFuZ3VhZ2UiOiJjIn0gLS0+CjxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+I2luY2x1ZGUgJmx0O1NlcnZvLmg+CgpTZXJ2byBtb25TZXJ2bzsgIC8qIENyw6llciB1biBvYmpldCBzZXJ2byAsIGluc3RhbmNpYXRpb24gZGUgbCdvYmpldCAsIGFwcGVsIGR1IGNvbnN0cnVjdGV1ciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZSBjb25zdHJ1Y3RldXIgcGFyIGTDqWZhdXQgZXN0IGFwcGVsw6kgYXV0b21hdGlxdWVtZW50ICovCnZvaWQgc2V0dXAoKSAKewogIG1vblNlcnZvLmF0dGFjaCg5LCA1MDAsIDI0MDApOyAgLyogaW5pdGlhbGlzYXRpb24gZGUgbCdvYmpldCAgbGUgcHJlbWllciBwYXJhbcOodHJlIGVzdCBvYmxpZ2F0b2lyZSAobGEgYnJvY2hlKSAqLwogIC8vIFBvc2l0aW9ubmVyIMOgIDDCsCAoNTAwwrVzKQogIG1vblNlcnZvLndyaXRlKDApOwogIAogIGRlbGF5KDEwMDApOyAgLyogQXR0ZW5kcmUgMSBzZWNvbmRlIHBvdXIgbGEgc3RhYmlsaXNhdGlvbiBldCByZXRvdXIgw6AgemVybyovCn0KCnZvaWQgbG9vcCgpIAp7CmludCBhbmdsZTsKCmZvciAoYW5nbGU9MDthbmdsZSZsdDsxODA7YW5nbGUrKykKICAgIHsKICAgIG1vblNlcnZvLndyaXRlKGFuZ2xlKTsKICAgIGRlbGF5KDEwKTsKICAgIH0KZGVsYXkoMTAwMCk7Cm1vblNlcnZvLndyaXRlKDApOwpkZWxheSgxMDAwKTsKfTwvcHJlPgo8IS0tIC93cDplbmxpZ2h0ZXIvY29kZWJsb2NrIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjV9IC0tPgo8aDUgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlF1ZSBmYWlzIGNlIGNvZGUgPzwvaDU+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RG9ubmVyIHVuIGNvZGUgdXRpbGlzYW50IGxhIGxpYnJhaXJpZSBzZXJ2by5oICwgcXVpIHLDqWFsaXNlIGxlIG3DqXRyb25vbWUgZGUgMiBzZWNvbmRlcy4gIGNvbW1lIGRhbnMgbCdleGVtcGxlIGVuIEMgc2ltcGxlICE8L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkRvbm5lciBsZXMgYXZhbnRhZ2VzIDwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPmRvY3VtZW50ZXhjZXJwdGRvY3VtZW50YXV0aG9yZG9jdW1lbnRmZWF0dXJlZF9tZWRpYWRvY3VtZW50Y29tbWVudF9zdGF0dXNkb2N1bWVudHBpbmdfc3RhdHVzZG9jdW1lbnR0ZW1wbGF0ZWRvY3VtZW50bWV0YV91YWdfY3VzdG9tX3BhZ2VfbGV2ZWxfY3NzZm9vdG5vdGVzZG9jdW1lbnRibG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRVbiBzZXJ2byBtb3RldXIgLCBwZXJtZXQgZGUgY29udHLDtGxlciB1bmUgcG9zaXRpb24gZW4gZm9uY3Rpb24gZCd1bmUgY29uc2lnbmUgLCB0csOocyBwcmF0aXF1ZSBlbiByb2JvdGlxdWUgZXQgZGFucyBkJ2F1dHJlcyBwcm9qZXRzLmRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50U2Vydm8gdmllbnQgZHUgbW90IGFzc2Vydmlzc2VtZW50IGRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50Q2FyYWN0w6hyaXN0aXF1ZXMgZHUgRlM5MGxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50Y29uICAwID0gPHI+c3QgaW50ICAgZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRMZSA8bWFyayBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDApIiBjbGFzcz0iaGFzLWlubGluZS1jb2xvciBoYXMtLWNvbG9yIj5maWwgcm91PC9tYXJrPiAgbGUgZSAgICBtYWRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50TGUgPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwKSIgY2xhc3M9Imhhcy1pbmxpbmUtY29sb3IgaGFzLWxhLWNvbG9yIj5maWwgYW48L21hcms+ICBlIGUgICBzZWRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50YSBjb25zaW5pYyBzbm91cmVmaWwgb3JhbmdlIGNzbmUgIFBXTSB1IGVyb29lZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc3VybGFsdGNhcHRpb25ocmVmaWRzaXplU2x1Z2xpbmtEZXN0aW5hdGlvblVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc3VybGFsdGNhcHRpb25WaXNpb24gcmUgZHUgZXJ2byBtb3RldXIgaHJlZmlkc2l6ZVNsdWdsaW5rRGVzdGluYXRpb25VQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50bGV2ZWxVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50PHN0cm9uZz51csOpZXMgZCdpbXB1bHNvbiBlbiAgcyA8L3N0cm9uZz5kcm9wQ2FwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3JkZXJlZHZhbHVlc1VBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc29wYWNpdHl0YWdOYW1lVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFNvbHV0aW9uIGVuIEMgLCBsYSBwbHVzIHNpbXBsZWxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdldGhlbWVoaWdobGlnaHRsaW5lbnVtYmVyc2xpbmVvZmZzZXR0aXRsZWdyb3VwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudERvbm5lciBsJ29yZ2FuaWdyYW1tZSBldCBsZSBQTCBkZSBjZSBjb2RlIGxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEV4cGxpcXVlciBjbGFpcmVtZW50IGNvbW1lbnQgZm9uY3Rpb25uZSBjZSBjb2RlIHBhciByYXBwb3J0IGF1IHNlcnZvIG1vdGV1cmRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50UmVsZXZlciBhdmVjIGxhIHNvbmRlIG51bcOpcmlxdWUgbGUgc2lnbmFsIGRlIGxhIGJyb2NoZSAxMCBkZSBsJ2FyZHVpbm8gbGV2ZWxVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RG9ubmVyIGxhIGZyw6lxdWFuY2UgZXQgbGUgUmMgZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnREb25uZXIgdW4gY29kZSBkb25uYW50IHVuIGFuZ2xlIGRlIDBsZXZlbFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRUZXN0ZXIgZXQgcmVsZXZlciBhdmVjIGxhIHNvbmRlIGxvZ2lxdWUgbGEgZnLDqXF1ZW5jZSBldCBsZSBSY2Ryb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RG9ubmVyIHVuIGNvZGUgZG9ubmFudCB1biBhbmdsZSBkZSBtb2l0acOpLmxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFRlc3RlciBldCByZWxldmVyIGF2ZWMgbGEgc29uZGUgbG9naXF1ZSBsYSBmcsOpcXVlbmNlIGV0IGxlIFJjZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnREb25uZXIgdW4gY29kZSBkb25uYW50IHVuIGFuZ2xlIE1heGltdW1sZXZlbFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRUZXN0ZXIgZXQgcmVsZXZlciBhdmVjIGxhIHNvbmRlIGxvZ2lxdWUgbGEgZnLDqXF1ZW5jZSBldCBsZSBSY2Ryb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50UsOpYWxpc2VyIHVuIGNvZGUgIm3DqXRyb25vbWUiIHF1aSBiYXNjdWxlIGxlIHNlcnZvIG1vdGV1ciBkZSBsJ2FuZ2xlIDAgw6AgbCdhbmdsZSAxODDCsCBldCBkZSAxODDCsCDDoCAwIHRvdXRlIGxlcyAyIHNlY29uZGVzICFsZXZlbFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc3Nob3dDb250ZW50c3VtbWFyeVNvbHV0aW9uVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdldGhlbWVoaWdobGlnaHRsaW5lbnVtYmVyc2xpbmVvZmZzZXR0aXRsZWdyb3VwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzb3BhY2l0eXRhZ05hbWVVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50QysrIGV0IG9iamV0IGxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudENvZGUgYXZlYyB1biBUaW1lciAoQ2lyY3VpdCBpbnTDqWdyw6kgZGFucyBsZSBNaWNyb2NvbnRyw7RsZXVyIFRXSSBzdXIgbCdhdG1lZ2EzMjhwKSBldCAgbm91cyBhbGxvbnMgZMOpY291dnJpciBsJ29iamV0IGVuIEMrK2xldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudEV0IGxhIG9uIHZhIHV0aWxpc2VyIGxlIEMrKyAoY2FyIG91aSBsZSBjb21waWxhdGV1ciBwb3VyIGFyZHVpbm8gZXN0IGcrKyksIGNhciBsJ29iamV0IFNlcnZvIGVzdCBpbnRyb2R1aXQgIWRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RGFucyBsYSBsaWJyYWlyaWUgPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmFyZHVpbm8uY2MvbGlicmFyaWVzL3NlcnZvLyI+U2Vydm8uaDwvYT5kcm9wQ2FwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFNhY2hhbnQgcXVlIGNldCBvYmpldCBuJ2VzdCB1dGlsaXNhYmxlIHF1ZSB0dSBsZXMgYnJvY2hlcyBwb3Nzw6lkYW50IHVuIFRJTERBIH4gIGNhciBzaSBvbiByZWdhcmRlIGxhIGRvY3VtZW50YXRpb24gZGUgbCdBVE1FR0EzMjhQIHNldWwgY2VzIGJyb2NoZXMgc29udCBjb25uZWN0YWJsZSBzdXIgdW4gVGltZXIgY2FwYWJsZSBkZSBnw6lyZXIgbGVzIFRlbXBzIHNhbnMgcHJlbmRyZSBkZSByZXNzb3VyY2UgYXUgbWljcm9wcm9jZXNzZXVyIGR1IG1pY3JvY29udHLDtGxldXIuZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRicm9jaGUgw6AgdXRpbGlzZXIgcG91ciBsYSBQV01sZXZlbFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnR+MyAgfjUgIH42ICB+OSAgfjEwICB+MTFVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50TCdvYmpldCBTZXJ2bygpIGV0IG91aSBsYSBvbiB2YSBmYWlyZSBkdSBDKysgZXQgdXRpbGlzZXIgdW4gb2JqZXQgZXQgZMOpY291dnJpciBjZSBxdSdlc3QgdW4gb2JqZXQgIWRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RnLDqXF1ZW5jZSBkZSA1MEh6IHBhciBldCBvbiByw6hnbGUgbGEgdmFsZXVyIG1pbiBldCBtYXggZGUgbCdpbXB1bHNpb24gw6AgMSwgbGUgcHJlbWllciBwYXJhbcOodHJlIGVzdCBsYSBQSU4gdXRpbGlzw6llLmRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50bGFuZ3VhZ2V0aGVtZWhpZ2hsaWdodGxpbmVudW1iZXJzbGluZW9mZnNldHRpdGxlZ3JvdXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50TWFpbnRlbmFudCBvbiB2YSB1dGlsaXNlciBsYSBtw6l0aG9kZSB3cml0ZSBxdWkgcGVybWV0IGRlIHRyYW5zbWV0dHJlIGwnYW5nbGUgZGUgY29uc2lnbmUgIGR1IHNlcnZvLW1vdGV1cmxldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudGxhbmd1YWdldGhlbWVoaWdobGlnaHRsaW5lbnVtYmVyc2xpbmVvZmZzZXR0aXRsZWdyb3VwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudFF1ZSBmYWlzIGNlIGNvZGUgP2xldmVsVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG9yaWdpbmFsQ29udGVudG5hbWVhdHRyaWJ1dGVzY29udGVudERvbm5lciB1biBjb2RlIHV0aWxpc2FudCBsYSBsaWJyYWlyaWUgc2Vydm8uaCAsIHF1aSByw6lhbGlzZSBsZSBtw6l0cm9ub21lIGRlIDIgc2Vjb25kZXMuICBjb21tZSBkYW5zIGwnZXhlbXBsZSBlbiBDIHNpbXBsZSAhbGV2ZWxVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50RG9ubmVyIGxlcyBhdmFudGFnZXMgZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NzdGF0ZXNhdmVkQXRzdGF0ZXNhdmVkQnlzdGF0ZXZlcnNpb24jZGVmaW5lIHRlbXBzIDEwMAp2b2lkIHRlbXBvX21zKGludCB0bXApCiAgaWYgKHRtcCAmbHQ7IDE2MDAgKQogICAgZGVsYXlNaWNyb3NlY29uZHMgKHRtcCk7IC8qIGZpbmkgKi8KICAgICAgIHRtcD10bXAtMTYwMDsKICAgICAgd2hpbGUgKHRtcCA+IDE2MDApOwogICAgICBkZWxheU1pY3Jvc2Vjb25kcyh0bXApOwogIH0gICAgICAKPGRldGFpbHMgY2xhc3M9IndwLWJsb2NrLWRldGFpbHMiPjxzdW1tYXJ5PlNvbHV0aW9uPC9zdW1tYXJ5PjwhLS0gd3A6ZW5saWdodGVyL2NvZGVibG9jayB7Imxhbmd1YWdlIjoiYyJ9IC0tPgo8cHJlIGNsYXNzPSJFbmxpZ2h0ZXJKU1JBVyIgZGF0YS1lbmxpZ2h0ZXItbGFuZ3VhZ2U9ImMiIGRhdGEtZW5saWdodGVyLXRoZW1lPSIiIGRhdGEtZW5saWdodGVyLWhpZ2hsaWdodD0iIiBkYXRhLWVubGlnaHRlci1saW5lbnVtYmVycz0iIiBkYXRhLWVubGlnaHRlci1saW5lb2Zmc2V0PSIiIGRhdGEtZW5saWdodGVyLXRpdGxlPSIiIGRhdGEtZW5saWdodGVyLWdyb3VwPSIiPi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRldmVyc2lvbmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzIEMnZXN0IGhvcnMgcHJvZ3JhbW1lICEgbWFvaXMgY2EgJ2VzdCBjb21tZSBjbGVlbGEgcXVlIGNhIGZvbmN0aW9ubmU\/LiAgT24gdmEgdXRpbGlzZXIgbGVzIHJlZ2lzdHJlZXMgcyA8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KaW50ZXJuZXRlcyBkdSBydGltZXIgLi4uICAoY2EgdXRpbGlzZSBjb21tbWxlcyByZWdpc3RyZXMgc2R1IHRpbWVyIGNvbW1lIGF2YW50IGRhbnMgbCBsJ2V4YW1wbGUgcHLDqWPDqWRlbnQpPHA+Qydlc3QgaG9ycyBwcm9ncmFtbWUgISBtYWlzIGMnZXN0IGNvbW1lIGNlbGEgcXVlIGNhIGZvbmN0aW9ubmUuICBPbiB2YSB1dGlsaXNlciBsZXMgcmVnaXN0cmVzIGludGVybmVzIGR1IHRpbWVyIC4uLiA8L3A+CmUgbW1haXMgYydlc3QgY2FjaMOpIGRhbnMgbGxhIGEgY2xhc3NlIHNlcnJ2byAocGxpdXVzIGZhY2lsZSDDoCBmYWlyZSAsY2FyIHF1ZWxxdSd1biDDoCBjb2TDqSBwb3VyIHZvdXMpIDxwPkV0IGxhIG9uIHZhIHV0aWxpc2VyIGxlIEMrKyAoY2FyIG91aSBsZSBjb21waWxhdGV1ciBwb3VyIGFyZHVpbm8gZXN0IGcrKyksIGNhciBsJ29iamV0IFNlcnZvIGVzdCBpbnRyb2R1aXQgISAoY2EgdXRpbGlzZSBsZXMgcmVnaXN0cmVzIGR1IHRpbWVyIGNvbW1lIGRhbnMgbCdleGVtcGxlIHByw6ljw6lkZW50KSBtYWlzIGMnZXN0IGNhY2jDqSBkYW5zIGxhIGNsYXNzZSBzZXJ2byAocGx1cyBmYWNpbGUgw6AgZmFpcmUgLGNhciBxdWVscXUndW4gw6AgY29kw6kgcG91ciB2b3VzKSA8L3A+CnN0YXRldmVyc2lvbmNvbnRlbnRkcm9wQ2FwY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNvcmRlcmVkdmFsdWVzVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc2FsdGNhcHRpb25pZGxpbmt1cmxocmVmc2l6ZVNsdWdsaW5rRGVzdGluYXRpb25jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2FsdGNhcHRpb25VQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzaWRsaW5rdXJsaHJlZnNpemVTbHVnbGlua0Rlc3RpbmF0aW9uPCEtLSB3cDppbWFnZSB7ImlkIjo3ODQ2LCJzaXplU2x1ZyI6ImxhcmdlIiwibGlua0Rlc3RpbmF0aW9uIjoibWVkaWEifSAtLT4KPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2staW1hZ2Ugc2l6ZS1sYXJnZSI+PGEgaHJlZj0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC8wXzE4MC5wbmciPjxpbWcgc3JjPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzBfMTgwLTEwMjR4NDM3LnBuZyIgYWx0PSIiIGNsYXNzPSJ3cC1pbWFnZS03ODQ2Ii8+PC9hPjwvZmlndXJlPgo8IS0tIC93cDppbWFnZSAtLT4KCmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzYWx0Y2FwdGlvblVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NpZGxpbmt1cmxocmVmc2l6ZVNsdWdsaW5rRGVzdGluYXRpb248IS0tIHdwOmltYWdlIHsiaWQiOjc4NDUsInNpemVTbHVnIjoibGFyZ2UiLCJsaW5rRGVzdGluYXRpb24iOiJtZWRpYSJ9IC0tPgo8ZmlndXJlIGNsYXNzPSJ3cC1ibG9jay1pbWFnZSBzaXplLWxhcmdlIj48YSBocmVmPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzE4MC5wbmciPjxpbWcgc3JjPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzE4MC0xMDI0eDQzNy5wbmciIGFsdD0iIiBjbGFzcz0id3AtaW1hZ2UtNzg0NSIvPjwvYT48L2ZpZ3VyZT4KPCEtLSAvd3A6aW1hZ2UgLS0+CgpjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwVUFHSGlkZURlc2t0b3BVQUdIaWRlTW9iVUFHSGlkZVRhYlVBR0xvZ2dlZEluVUFHTG9nZ2VkT3V0VUFHRGF5VUFHUmVzcG9uc2l2ZUNvbmRpdGlvbnNVQUdBbmltYXRpb25UeXBlVUFHQW5pbWF0aW9uVGltZVVBR0FuaW1hdGlvbkRlbGF5VUFHQW5pbWF0aW9uRWFzaW5nVUFHQW5pbWF0aW9uUmVwZWF0VUFHUG9zaXRpb25VQUdTdGlja3lMb2NhdGlvblVBR1N0aWNreVJlc3RyaWN0ZWRVQUdTdGlja3lPZmZzZXRpbm5lckJsb2Nrc0FuZ2xlIDAgZGVncsOpOjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmltYWdlIHsiaWQiOjc4NDQsInNpemVTbHVnIjoibGFyZ2UiLCJsaW5rRGVzdGluYXRpb24iOiJtZWRpYSJ9IC0tPgo8ZmlndXJlIGNsYXNzPSJ3cC1ibG9jay1pbWFnZSBzaXplLWxhcmdlIj48YSBocmVmPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzAucG5nIj48aW1nIHNyYz0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC8wLTEwMjR4NDM3LnBuZyIgYWx0PSIiIGNsYXNzPSJ3cC1pbWFnZS03ODQ0Ii8+PC9hPjwvZmlndXJlPgo8IS0tIC93cDppbWFnZSAtLT4KCmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzRnLDqXF1ZW5jZSA1MEh6IChUPTIwPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCm1zKWNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBVQUdIaWRlRGVza3RvcFVBR0hpZGVNb2JVQUdIaWRlVGFiVUFHTG9nZ2VkSW5VQUdMb2dnZWRPdXRVQUdEYXlVQUdSZXNwb25zaXZlQ29uZGl0aW9uc1VBR0FuaW1hdGlvblR5cGVVQUdBbmltYXRpb25UaW1lVUFHQW5pbWF0aW9uRGVsYXlVQUdBbmltYXRpb25FYXNpbmdVQUdBbmltYXRpb25SZXBlYXRVQUdQb3NpdGlvblVBR1N0aWNreUxvY2F0aW9uVUFHU3RpY2t5UmVzdHJpY3RlZFVBR1N0aWNreU9mZnNldGlubmVyQmxvY2tzQ29tbXV0YXRpb24gZGUgMCBkZWdyw6kgw6AgMTgwIGRlZ3LDqSA6LCAgMTgwIGRlZ3LDqXMgKDI0MDB1Uyk8cD5GcsOpcXVlbmNlIDUwSHogKFQ9MjBtcyksICAxODAgZGVncsOpcyAoMjQwMHVTKTwvcD4KPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkNvbW11dGF0aW9uIGRlIDAgZGVncsOpIMOgIDE4MCBkZWdyw6kgOjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKIFQ9NTAwdXM8cD5BbmdsZSAwIGRlZ3LDqTogVD01MDB1czwvcD4Kc3RhdGV2ZXJzaW9uc3RpbnRGUzlfTUlONTAwO2Jjb25GUzkwX01BWD0yNDAwO3ZpdmlkcmVkLWdlZXN0J2FsaW1udGF0aW9ubjVWw6A3VnguYmNrbXJybyBvdSBub2lyLGxHTkQgLCBsMCxsYSBtYXMgIUxlIDxtcmtzdHlsZT0iYmFrZ3J1ZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDApIiBjbGFzPSJoYXMtbG5lLW9sb3JoYS1sdW1pcy12aXZpZC1vYW5nLWNvbG9yIj48L21hcms+bGEgb25pZ2VuZHN2LW10dXJjb250ZW50bGEgY29uc2lnbmUgaWNpIGVzdCBlbnZvecOpIHN1ciBsZSBmaWwgb3JhbmdlIGMnZXN0IHVuZSAgUFdNICwgaW1wdWxzaW9uIGRlIDUwMCDDoCAyNDAwIG1pY3JvIHNlY29uZGVkcm9wQ2Fww6lsbGUnblN0eXBlIEZTOTB1cmxhbHRjYXB0aW9uVmlzaW9uIHBhciBHZW1pbmkgZHUgc2Vydm8gbW90ZXVyIGhyZWZpZHNpemVTbHVnbGlua0Rlc3RpbmF0aW9uRGlNSUNST1NFQ09OREVTKMK1KTpsZXZlbGNvbnRlbnQ8c3Ryb25nPiJMZSBGUzkwIHV0aWxpc2UgdW4gY2lyY3VpdCBpbnTDqWdyw6kgc3DDqWNpYWxpc8OpIGV0IGTDqWRpw6ksIHNvdXZlbnQgdW4gTkU1NDQgb3UgdW4gw6lxdWl2YWxlbnQsIHF1aSBhZ2l0IGNvbW1lIGxlIGNlcnZlYXUgYW5hbG9naXF1ZSBkdSBzZXJ2by4gQ2Ugbidlc3QgcGFzIHVuIG1pY3JvY29udHLDtGxldXIgcHJvZ3JhbW1hYmxlLCBtYWlzIHVuZSBwdWNlIGPDomJsw6llIHBvdXIgZXjDqWN1dGVyIHVuZSBzZXVsZSB0w6JjaGUgOiBsYSBjb21tYW5kZSBlbiBib3VjbGUgZmVybcOpZSBkJ3VuIG1vdGV1ciBwb3VyIGF0dGVpbmRyZSB1bmUgcG9zaXRpb24gZMOpZmluaWUgcGFyIHVuIHNpZ25hbCBQV00uIjwvc3Ryb25nPmRyb3BDYXBMZSBzaWduYWwgZGUgY29tbWFuZGUgKGZpbCBvcmFuZ2UpIGVzdCBkZSBmcsOpcXVlbmNlIDUwIEh6LiBUPTIwczwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgptY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcFVBR0hpZGVEZXNrdG9wVUFHSGlkZU1vYlVBR0hpZGVUYWJVQUdMb2dnZWRJblVBR0xvZ2dlZE91dFVBR0RheVVBR1Jlc3BvbnNpdmVDb25kaXRpb25zVUFHQW5pbWF0aW9uVHlwZVVBR0FuaW1hdGlvblRpbWVVQUdBbmltYXRpb25EZWxheVVBR0FuaW1hdGlvbkVhc2luZ1VBR0FuaW1hdGlvblJlcGVhdFVBR1Bvc2l0aW9uVUFHU3RpY2t5TG9jYXRpb25VQUdTdGlja3lSZXN0cmljdGVkVUFHU3RpY2t5T2Zmc2V0aW5uZXJCbG9ja3NsJ2ltcHVzaW9uIHZhIGRvbm5lciBsYSBjb25zaWduZSBkZSBwb3NpdGlvbiBkdSBTZXJ2byBNb3RldXIgKMOpdGF0IGhhdXQpPHA+TGUgc2lnbmFsIGRlIGNvbW1hbmRlIChmaWwgb3JhbmdlKSBlc3QgZGUgZnLDqXF1ZW5jZSA1MCBIei4gVD0yMG1zPC9wPgo8cD5sJ2ltcHVzaW9uIHZhIGRvbm5lciBsYSBjb25zaWduZSBkZSBwb3NpdGlvbiBkdSBTZXJ2byBNb3R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ldHJlIHN1cMOocmlldXIgYSAxNjAwIG1zICovCnZvaWQgdGVtcG9fbXMoaW50IHRlbXBzKQp7CiAgaWYgKHRlbXBzIDwgMTYwMCApCiAgewogICAgZGVsYXlNaWNyb3NlY29uZHMgKHRlbXBzKTsgLyogZmluaSAqLwogIH0KICBlbHNlCiAgewogICAgICBkbwogICAgICB7CiAgICAgICBkZWxheU1pY3Jvc2Vjb25kcygxNjAwKTsKICAgICAgIHRlbXBzPXRlbXBzLTE2MDA7CiAgICAgIH0KICAgICAgd2hpbGUgKHRlbXBzID4gMTYwMCk7CiAgICAgIGRlbGF5TWljcm9zZWNvbmRzKHRlbXBzKTsKICB9Cn0KLyogbWlzZSBlbiBzb3J0aWUgbGEgYnJvY2hlIGRlIGNvbW1hbmRlIGR1IHNlcnZvIG1vdGV1ciAqLwp2b2lkIHNldHVwKCkgCnsKICBwaW5Nb2RlKHNpZ25hbCwgT1VUUFVUKTsKfQoKCi8qIGJvdWNsZSBkZSBjb21tYW5kZSBkdSBTRVJWT19Nb3RldXIgZnLDqXF1ZW5jZSA1MEh6ICovCnZvaWQgbG9vcCgpIAp7ICAvKiBib3VjbGUgZGUgMjBtcyAqLwogIGRpZ2l0YWxXcml0ZShzaWduYWwsIEhJR0gpOwogIHRlbXBvX21zKGltcCk7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBMT1cpOwogIHRlbXBvX21zKDIwMDAwLWltcCk7ICAgICAgLyogMjBtcyAtaW1wICovCn1vAHckYjA1Y2ZlODYtYzlmZC00NDE0LWFmYmMtMzNjZTVlZjU3ZDg4eHcOY29yZS9saXN0LWl0ZW15eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHh5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckNzc1NTQyYTYtYmJkNC00MjI0LTgyNzUtYTQ0Yjg2ZjM3ZDI3dwxjb3JlL2hlYWRpbmd9A30DfQR9BH0EfQR9BHckMDE4NzA0MjQtNGE4Yi00MTRlLTlkZTUtZjUxNzg3OGM2MWU3eHcTZW5saWdodGVyL2NvZGVibG9ja3cAdwB3AHcAdwB3AHl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0Ad\/4RLy8gQ29uZmlndXJhdGlvbiBkdSBzZXJ2byBGUzkwIGF2ZWMgVGltZXIxIHN1ciBsYSBicm9jaGUgMTAKLy8gU2lnbmFsIDogNTBIeiAocMOpcmlvZGUgMjBtcykKLy8gSW1wdWxzaW9uIDogNTAwwrVzIMOgIDI1MDDCtXMgKHBvc2l0aW9uIDDCsCDDoCAxODDCsCkKCnZvbGF0aWxlIHVpbnQxNl90IHB1bHNlV2lkdGggPSAxNTAwOyAvLyBQb3NpdGlvbiBpbml0aWFsZSA6IDE1MDDCtXMgKDkwwrApCgp2b2lkIHNldHVwKCkgewogIC8vIENvbmZpZ3VyZXIgbGEgYnJvY2hlIDEwIChPQzFCKSBjb21tZSBzb3J0aWUKICBwaW5Nb2RlKDEwLCBPVVRQVVQpOwogIAogIC8vIETDqXNhY3RpdmVyIGxlcyBpbnRlcnJ1cHRpb25zIGdsb2JhbGVzIHBlbmRhbnQgbGEgY29uZmlndXJhdGlvbgogIGNsaSgpOwogIAogIC8vIENvbmZpZ3VyZXIgVGltZXIxIGVuIG1vZGUgRmFzdCBQV00gOC1iaXQgKG1vZGUgMTQpCiAgLy8gV0dNMTM6MSwgV0dNMTI6MSwgV0dNMTE6MSwgV0dNMTA6MCAtPiBNb2RlIDE0IChGYXN0IFBXTSwgVE9QID0gSUNSMSkKICBUQ0NSMUEgPSAwOwogIFRDQ1IxQiA9IDA7CiAgVENDUjFBIHw9ICgxIDw8IFdHTTExKTsgICAgICAgICAgICAgIC8vIE1vZGUgMTQ6IEZhc3QgUFdNCiAgVENDUjFCIHw9ICgxIDw8IFdHTTEzKSB8ICgxIDw8IFdHTTEyKTsgLy8gVE9QID0gSUNSMQogIAogIC8vIENvbmZpZ3VyZXIgbGEgc29ydGllIE9DMUIgKGJyb2NoZSAxMCkgZW4gbW9kZSBub24taW52ZXJzw6kKICBUQ0NSMUEgfD0gKDEgPDwgQ09NMUIxKTsgIC8vIENsZWFyIE9DMUIgb24gY29tcGFyZSBtYXRjaCwgc2V0IGF0IEJPVFRPTQogIAogIC8vIETDqWZpbmlyIFRPUCBwb3VyIHVuZSBmcsOpcXVlbmNlIGRlIDUwSHoKICAvLyBGcsOpcXVlbmNlID0gMTZNSHogLyAocHJlc2NhbGVyICogKDEgKyBJQ1IxKSkKICAvLyBQb3VyIDUwSHogOiAxNk1IeiAvIChwcmVzY2FsZXIgKiAoMSArIElDUjEpKSA9IDUwCiAgLy8gQXZlYyBwcmVzY2FsZXIgPSA4IDogMSArIElDUjEgPSAxNjAwMDAwMCAvICg4ICogNTApID0gNDAwMDAKICAvLyBEb25jIElDUjEgPSAzOTk5OQogIElDUjEgPSAzOTk5OTsgIC8vIFRPUCBwb3VyIDUwSHogYXZlYyBwcmVzY2FsZXIgOAogIAogIC8vIETDqWZpbmlyIGxlIHByZXNjYWxlciDDoCA4CiAgVENDUjFCIHw9ICgxIDw8IENTMTEpOyAgLy8gQ1MxMT0xLCBDUzEwPTAgLT4gUHJlc2NhbGVyIDgKICAKICAvLyBEw6lmaW5pciBsYSBsYXJnZXVyIGQnaW1wdWxzaW9uIGluaXRpYWxlCiAgLy8gT0NSMUIgPSAocHVsc2VXaWR0aCAvIDIwMDAwKSAqIChJQ1IxICsgMSkKICAvLyBQb3VyIDUwMMK1cyA6IE9DUjFCID0gKDUwMC8yMDAwMCkgKiA0MDAwMCA9IDEwMDAKICAvLyBQb3VyIDE1MDDCtXMgOiBPQ1IxQiA9ICgxNTAwLzIwMDAwKSAqIDQwMDAwID0gMzAwMAogIC8vIFBvdXIgMjUwMMK1cyA6IE9DUjFCID0gKDI1MDAvMjAwMDApICogNDAwMDAgPSA1MDAwCiAgdXBkYXRlUHVsc2VXaWR0aChwdWxzZVdpZHRoKTsKICAKICAvLyBSw6lhY3RpdmVyIGxlcyBpbnRlcnJ1cHRpb25zCiAgc2VpKCk7Cn0KCi8vIEZvbmN0aW9uIHBvdXIgbWV0dHJlIMOgIGpvdXIgbGEgcG9zaXRpb24gZHUgc2Vydm8Kdm9pZCBzZXRTZXJ2b1Bvc2l0aW9uKHVpbnQxNl90IG1pY3Jvc2Vjb25kcykgewogIC8vIExpbWl0ZXIgbGEgdmFsZXVyIGVudHJlIDUwMMK1cyBldCAyNTAwwrVzCiAgaWYgKG1pY3Jvc2Vjb25kcyA8IDUwMCkgbWljcm9zZWNvbmRzID0gNTAwOwogIGlmIChtaWNyb3NlY29uZHMgPiAyNTAwKSBtaWNyb3NlY29uZHMgPSAyNTAwOwogIAogIHB1bHNlV2lkdGggPSBtaWNyb3NlY29uZHM7CiAgdXBkYXRlUHVsc2VXaWR0aChwdWxzZVdpZHRoKTsKfQoKLy8gTWV0dHJlIMOgIGpvdXIgT0NSMUIgYXZlYyBsYSBub3V2ZWxsZSB2YWxldXIKdm9pZCB1cGRhdGVQdWxzZVdpZHRoKHVpbnQxNl90IG1pY3Jvc2Vjb25kcykgewogIC8vIENhbGN1bGVyIE9DUjFCIGVuIGZvbmN0aW9uIGRlIGxhIGxhcmdldXIgZCdpbXB1bHNpb24gc291aGFpdMOpZQogIC8vIE9DUjFCID0gKG1pY3Jvc2Vjb25kcyAvIDIwMDAwKSAqIChJQ1IxICsgMSkKICB1aW50MTZfdCBvY3JWYWx1ZSA9ICh1aW50MzJfdCltaWNyb3NlY29uZHMgKiAoSUNSMSArIDEpIC8gMjAwMDA7CiAgT0NSMUIgPSBvY3JWYWx1ZTsKfQoKdm9pZCBsb29wKCkgewogIC8vIExlIGxvb3AgbmUgZmFpdCByaWVuIGNvbW1lIGRlbWFuZMOpCiAgLy8gVm91cyBwb3V2ZXogw6l2ZW50dWVsbGVtZW50IGFqb3V0ZXIgdW4gZMOpbGFpIHBvdXIgw6ljb25vbWlzZXIgbCfDqW5lcmdpZQogIGRlbGF5KDEwKTsKfXcBYxcAMgB3JGE1NzhlNTUzLWViNmMtNDEwYS1iMWQwLWZjMDNiYzhlZWMyMXh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AsgsAdxMyMDI2LTAyLTAyVDE3OjA1OjAydxFzZXJ2by1tb3RldXItZnM5MHcHcHVibGlzaH0BfQB3BmNsb3NlZHcGY2xvc2VkdwB3AHcAdyRiY2MyMDViMi03OGI1LTQzYjAtYTBjMi04MjM4YmNiY2E4MDd4d40BPHA+VW4gc2Vydm8gbW90ZXVyICwgcGVybWV0IGRlIGNvbnRyw7RsZXIgdW5lIHBvc2l0aW9uIGVuIGZvbmN0aW9uIGQndW5lIGNvbnNpZ25lICwgdHLDqHMgcHJhdGlxdWUgZW4gcm9ib3RpcXVlIGV0IGRhbnMgZCdhdXRyZXMgcHJvamV0cy48L3A+dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckOGYyZmZmODUtOWE4ZS00ODU5LWEyNzUtNWIzNGM1ZjczNmVheHcpPHA+U2Vydm8gdmllbnQgZHUgbW90IGFzc2Vydmlzc2VtZW50IDwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRiNmY0YzJhZi0wNTE1LTQ2ZmUtYjQwYy0xNDYwZDY1NzM0YjZ4dzs8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNhcmFjdMOocmlzdGlxdWVzIGR1IEZTOTA8L2gyPncMY29yZS9oZWFkaW5nfQJ5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AeHcOY29yZS9wYXJhZ3JhcGh5eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AeHcOY29yZS9wYXJhZ3JhcGh5eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4dwpjb3JlL2ltYWdldwB3BW1lZGlheXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB4eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JGJjYTBiMmQ5LTViZTEtNDM0MC1iMDkxLThmMGJiMzgyOWZlYnh3OjxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiLz53DmNvcmUvc2VwYXJhdG9ydw1hbHBoYS1jaGFubmVsdwJocnl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyQ3ZDA4Zjk2MS1mY2NkLTRiMWYtOTlmMi04NDBlMzViNmYwOTB4d0A8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlNvbHV0aW9uIGVuIEMgLCBsYSBwbHVzIHNpbXBsZTwvaDI+dwxjb3JlL2hlYWRpbmd9Anl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AeHftBjxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogQ29kZSBwb3VyIG1hw650cmlzZXIgdW4gU0VSVk9fTU9URVVSIEZTOTAgICAgICAgICovCi8qIGVuIEMgc2ltcGxlICwgc2lnbmFsIFBXTSByw6lhbGlzw6kgZGFucyBsZSBsb29wKCkgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBzaWduYWwgMTAKI2RlZmluZSBpbXAgNTAwKzk1MCs5NTAKLyogNDAwICZsdDsgIGltcCAgJmx0OzI0MDAgKi8KLyogNTAwICBtaW5pbXVtIDUwMCs5NTAgbWlsaWV1IGV0IDUwMCs5NTArOTUwICgyNDAwKSBNQVgqLwoKCi8qIG1pc2UgZW4gc29ydGllIGxhIGJyb2NoZSBkZSBjb21tYW5kZSBkdSBzZXJ2byBtb3RldXIgKi8Kdm9pZCBzZXR1cCgpIAp7CiAgcGluTW9kZShzaWduYWwsIE9VVFBVVCk7Cn0KCgovKiBib3VjbGUgZGUgY29tbWFuZGUgZHUgU0VSVk9fTW90ZXVyIGZyw6lxdWVuY2UgNTBIeiAqLwp2b2lkIGxvb3AoKSAKewogIGRpZ2l0YWxXcml0ZShzaWduYWwsIEhJR0gpOwogIGRlbGF5TWljcm9zZWNvbmRzKGltcCk7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBMT1cpOwogIGRlbGF5TWljcm9zZWNvbmRzKDIwMDAwLWltcCk7ICAgICAgCn08L3ByZT53E2VubGlnaHRlci9jb2RlYmxvY2t3AWN3AHcAdwB3AHcAdwB5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckZDQzOTNlNWItYjEyOS00YjI5LThmNGItOTlhMjgxMzlhN2Q0eHdMPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Eb25uZXIgbCdvcmdhbmlncmFtbWUgZXQgbGUgUEwgZGUgY2UgY29kZSA8L2gzPncMY29yZS9oZWFkaW5neXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JGEyM2E4NTYxLWNlZjctNDQ1Mi04M2NhLTk5ZGI0YjdiNzFmMnh3UjxwPkV4cGxpcXVlciBjbGFpcmVtZW50IGNvbW1lbnQgZm9uY3Rpb25uZSBjZSBjb2RlIHBhciByYXBwb3J0IGF1IHNlcnZvIG1vdGV1cjwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRhNTBkNzhmNi1iMTVhLTRhZTUtOTMwZS01MTAyY2Y5MjdhY2J4d2o8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlJlbGV2ZXIgYXZlYyBsYSBzb25kZSBudW3DqXJpcXVlIGxlIHNpZ25hbCBkZSBsYSBicm9jaGUgMTAgZGUgbCdhcmR1aW5vIDwvaDM+dwxjb3JlL2hlYWRpbmd5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckZmM5MmQ3NWItMjhlMS00M2Q5LWFhYmItODAyMWM0ZWRkZTkxeHclPHA+RG9ubmVyIGxhIGZyw6lxdWFuY2UgZXQgbGUgUmMgPC9wPncOY29yZS9wYXJhZ3JhcGh5eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JGUyMTExYjY0LTNkOTItNDAyNi05YTk5LTZhNjY0ODg0YTZmN3h3RjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RG9ubmVyIHVuIGNvZGUgZG9ubmFudCB1biBhbmdsZSBkZSAwPC9oMz53DGNvcmUvaGVhZGluZ3l5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRkOWM4ODcxMS0xMzBiLTQ4MmYtOGNlMC1kOTU0ZTRhNTJmZjd4d0U8cD5UZXN0ZXIgZXQgcmVsZXZlciBhdmVjIGxhIHNvbmRlIGxvZ2lxdWUgbGEgZnLDqXF1ZW5jZSBldCBsZSBSYzwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRiN2RjZGM1Yi01NDk3LTQwNGItOTYzMS1hNTQ4NzU1NjkyZGR4d008aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkRvbm5lciB1biBjb2RlIGRvbm5hbnQgdW4gYW5nbGUgZGUgbW9pdGnDqS48L2gzPncMY29yZS9oZWFkaW5neXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDRjNzZkZjY0LTg2YmQtNDAxZS1iZGM1LTE5YTVmMDI2NDVmMnh3RTxwPlRlc3RlciBldCByZWxldmVyIGF2ZWMgbGEgc29uZGUgbG9naXF1ZSBsYSBmcsOpcXVlbmNlIGV0IGxlIFJjPC9wPncOY29yZS9wYXJhZ3JhcGh5eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDg1ZjNjZGY4LTE1NzktNGJmNC1hN2E4LTBhNjYzMWI0OGIxOHh3STxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+RG9ubmVyIHVuIGNvZGUgZG9ubmFudCB1biBhbmdsZSBNYXhpbXVtPC9oMz53DGNvcmUvaGVhZGluZ3l5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRmZmExNDljMS1mMTI0LTRlY2ItODllMy1kYTFlZTQ4Y2IyYWN4d0U8cD5UZXN0ZXIgZXQgcmVsZXZlciBhdmVjIGxhIHNvbmRlIGxvZ2lxdWUgbGEgZnLDqXF1ZW5jZSBldCBsZSBSYzwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyQ1ZjBmNzA5NS0yMGFjLTRkYzctOGQ5NC0zYzJjYjIzNDc1ZDN4d6IBPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Sw6lhbGlzZXIgdW4gY29kZSAibcOpdHJvbm9tZSIgcXVpIGJhc2N1bGUgbGUgc2Vydm8gbW90ZXVyIGRlIGwnYW5nbGUgMCDDoCBsJ2FuZ2xlIDE4MMKwIGV0IGRlIDE4MMKwIMOgIDAgdG91dGUgbGVzIDIgc2Vjb25kZXMgITwvaDI+dwxjb3JlL2hlYWRpbmd5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckZDgzNTk3MjYtMTE4My00MTA4LWE4ZGQtMjFlMDBmMjkyZTRieHdHPGRldGFpbHMgY2xhc3M9IndwLWJsb2NrLWRldGFpbHMiPjxzdW1tYXJ5PlNvbHV0aW9uPC9zdW1tYXJ5PjwvZGV0YWlscz53DGNvcmUvZGV0YWlsc3l5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckNTVhYjZhN2YtNDliMC00MWQ4LTljZDUtNDNiYjIwN2RjN2RjeHeLCTxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iZ2VuZXJpYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogQ29kZSBwb3VyIG1hw650cmlzZXIgdW4gU0VSVk9fTU9URVVSIEZTOTAgICAgICAgICovCi8qIGVuIEMgc2ltcGxlICwgc2lnbmFsIFBXTSByw6lhbGlzw6kgZGFucyBsZSBsb29wKCkgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBzaWduYWwgMTAKI2RlZmluZSBpbXAgNTAwKzk1MCs5NTAKI2RlZmluZSBpbXAwIDUwMAojZGVmaW5lIGltcDE4MCAyNDAwCiNkZWZpbmUgdGVtcHMgNDAwCi8qIDQwMCAmbHQ7ICBpbXAgICZsdDsyNDAwICovCi8qIDUwMCAgbWluaW11bSA1MDArOTUwIG1pbGlldSBldCA1MDArOTUwKzk1MCAoMjQwMCkgTUFYKi8KaW50IGNwdDsKCi8qIG1pc2UgZW4gc29ydGllIGxhIGJyb2NoZSBkZSBjb21tYW5kZSBkdSBzZXJ2byBtb3RldXIgKi8Kdm9pZCBzZXR1cCgpIAp7CiAgcGluTW9kZShzaWduYWwsIE9VVFBVVCk7CiAgY3B0PTA7Cn0KCgovKiBib3VjbGUgZGUgY29tbWFuZGUgZHUgU0VSVk9fTW90ZXVyIGZyw6lxdWVuY2UgNTBIeiAqLwp2b2lkIGxvb3AoKSAKewppZiAoY3B0Jmx0O3RlbXBzKQp7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBISUdIKTsKICBkZWxheU1pY3Jvc2Vjb25kcyhpbXAwKTsgIAogIGRpZ2l0YWxXcml0ZShzaWduYWwsIExPVyk7CiAgZGVsYXlNaWNyb3NlY29uZHMoMjAwMDAtaW1wMCk7Cn0KZWxzZQp7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBISUdIKTsKICBkZWxheU1pY3Jvc2Vjb25kcyhpbXAxODApOyAgCiAgZGlnaXRhbFdyaXRlKHNpZ25hbCwgTE9XKTsKICBkZWxheU1pY3Jvc2Vjb25kcygyMDAwMC1pbXAxODApOwp9CmNwdCsrOwppZiAoY3B0PigyKnRlbXBzKSkKICB7CiAgICBjcHQ9MDsKICB9CiAgICAgIAp9PC9wcmU+dxNlbmxpZ2h0ZXIvY29kZWJsb2NrdwB3AHcAdwB3AHcAeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDcyOWI3YmE1LTJiMzYtNDNhNy04YWM1LWU5NDYxZmM5YTk3OHh3OjxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiLz53DmNvcmUvc2VwYXJhdG9ydw1hbHBoYS1jaGFubmVsdwJocnl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRjMjIwN2MwNi0xZGE1LTQyODMtYTg1Ni00ZmFhODc5OGM2NjB4dy88aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkMrKyBldCBvYmpldCA8L2gyPncMY29yZS9oZWFkaW5nfQJ5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckMDYxMjcwOGQtY2MyYS00YjQ5LTkyOTAtNTA0ZTdmMjczNmU2eHegATxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+Q29kZSBhdmVjIHVuIFRpbWVyIChDaXJjdWl0IGludMOpZ3LDqSBkYW5zIGxlIE1pY3JvY29udHLDtGxldXIgVFdJIHN1ciBsJ2F0bWVnYTMyOHApIGV0ICBub3VzIGFsbG9ucyBkw6ljb3V2cmlyIGwnb2JqZXQgZW4gQysrPC9oMz53DGNvcmUvaGVhZGluZ30DeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDZlNzAxZjI0LTRjNmMtNDY2NS1hYjNmLTk5MjhkMThmZDQ5NXh3czxwPkV0IGxhIG9uIHZhIHV0aWxpc2VyIGxlIEMrKyAoY2FyIG91aSBsZSBjb21waWxhdGV1ciBwb3VyIGFyZHVpbm8gZXN0IGcrKyksIGNhciBsJ29iamV0IFNlcnZvIGVzdCBpbnRyb2R1aXQgITwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyQ2YzlkNDg0My03MTM0LTRjZDYtODQ3ZC04NWRlZTM1NzQ4NzF4d1c8cD5EYW5zIGxhIGxpYnJhaXJpZSA8YSBocmVmPSJodHRwczovL2RvY3MuYXJkdWluby5jYy9saWJyYXJpZXMvc2Vydm8vIj5TZXJ2by5oPC9hPjwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyQ2Yjg3MDYwNy1mMDM3LTQ0ZGYtYjc0OC01NGVmNmQ4NjkwNDN4d5cCPHA+U2FjaGFudCBxdWUgY2V0IG9iamV0IG4nZXN0IHV0aWxpc2FibGUgcXVlIHR1IGxlcyBicm9jaGVzIHBvc3PDqWRhbnQgdW4gVElMREEgfiAgY2FyIHNpIG9uIHJlZ2FyZGUgbGEgZG9jdW1lbnRhdGlvbiBkZSBsJ0FUTUVHQTMyOFAgc2V1bCBjZXMgYnJvY2hlcyBzb250IGNvbm5lY3RhYmxlIHN1ciB1biBUaW1lciBjYXBhYmxlIGRlIGfDqXJlciBsZXMgVGVtcHMgc2FucyBwcmVuZHJlIGRlIHJlc3NvdXJjZSBhdSBtaWNyb3Byb2Nlc3NldXIgZHUgbWljcm9jb250csO0bGV1ci48L3A+dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckZDE3NWMwNzUtMmM5OC00ZTVhLWJiYWItMTU5YmE5NzU2M2FjeHdAPGg0IGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5icm9jaGUgw6AgdXRpbGlzZXIgcG91ciBsYSBQV008L2g0PncMY29yZS9oZWFkaW5nfQR5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckODcxYTQ1YmItN2I5ZC00Njc4LWFjYWMtYzFjODQyYjMyYTY2eHdGPHByZSBjbGFzcz0id3AtYmxvY2stY29kZSI+PGNvZGU+fjMgIH41ICB+NiAgfjkgIH4xMCAgfjExPC9jb2RlPjwvcHJlPncJY29yZS9jb2RleXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JGIzODg1M2MyLTA2NGEtNDhhZS1hNzllLWM0YzcxZWU1YTA5Mnh3azxwPkwnb2JqZXQgU2Vydm8oKSBldCBvdWkgbGEgb24gdmEgZmFpcmUgZHUgQysrIGV0IHV0aWxpc2VyIHVuIG9iamV0IGV0IGTDqWNvdXZyaXIgY2UgcXUnZXN0IHVuIG9iamV0ICE8L3A+dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckYTgzM2QzYzQtYjlkYy00ZDhhLTlmYTItN2E4ZGExMmVmYTFkeHeAATxwPkZyw6lxdWVuY2UgZGUgNTBIeiBwYXIgZXQgb24gcsOoZ2xlIGxhIHZhbGV1ciBtaW4gZXQgbWF4IGRlIGwnaW1wdWxzaW9uIMOgIDEsIGxlIHByZW1pZXIgcGFyYW3DqHRyZSBlc3QgbGEgUElOIHV0aWxpc8OpZS48L3A+dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckYzM5NDZiOTktM2RiMS00OWQ5LWFiYWYtOGViNjIwMWJkZTg2eHfJBjxwcmUgY2xhc3M9IkVubGlnaHRlckpTUkFXIiBkYXRhLWVubGlnaHRlci1sYW5ndWFnZT0iYyIgZGF0YS1lbmxpZ2h0ZXItdGhlbWU9IiIgZGF0YS1lbmxpZ2h0ZXItaGlnaGxpZ2h0PSIiIGRhdGEtZW5saWdodGVyLWxpbmVudW1iZXJzPSIiIGRhdGEtZW5saWdodGVyLWxpbmVvZmZzZXQ9IiIgZGF0YS1lbmxpZ2h0ZXItdGl0bGU9IiIgZGF0YS1lbmxpZ2h0ZXItZ3JvdXA9IiI+I2luY2x1ZGUgJmx0O1NlcnZvLmg+CgpTZXJ2byBtb25TZXJ2bzsgIC8qIENyw6llciB1biBvYmpldCBzZXJ2byAsIGluc3RhbmNpYXRpb24gZGUgbCdvYmpldCAsIGFwcGVsIGR1IGNvbnN0cnVjdGV1ciAqLwoKdm9pZCBzZXR1cCgpIAp7CiAgbW9uU2Vydm8uYXR0YWNoKDksIDUwMCwgMjQwMCk7ICAvKiBpbml0aWFsaXNhdGlvbiBkZSBsJ29iamV0ICovCiAgLy8gUG9zaXRpb25uZXIgw6AgMMKwICg1MDDCtXMpCiAgbW9uU2Vydm8ud3JpdGVNaWNyb3NlY29uZHMoNTAwKTsKICAKICBkZWxheSgxMDAwKTsgIC8qIEF0dGVuZHJlIDEgc2Vjb25kZSBwb3VyIGxhIHN0YWJpbGlzYXRpb24gKi8KfQoKdm9pZCBsb29wKCkgCnsKICAvKiBMZSBzZXJ2byByZXN0ZSDDoCAwwrAKICAgICBldCBsZSBwcm9jZXNzZXVyIG5lIGZhaXQgcmllbiAsIGlsIGVzdCB0b3V0IHBvdXIgdm91cyBkYW5zIGxlIGxvb3AoKQogICAgIFBhcyBiZXNvaW4gZGUgcsOpcMOpdGVyIGwnaW5zdHJ1Y3Rpb24KICAgICBsZSBzaWduYWwgUFdNIGVzdCBnw6lyZXIgYXV0b21hdGlxdWVtZW50IHBhciBsJ29iamV0IG1vblNlcnZvIHF1aSBhIHByb2dyYW1tw6kgdW4gY2lyY3VpdCBkw6lkacOpIFRpbWVyIChUV0kpCiAgICovCn08L3ByZT53E2VubGlnaHRlci9jb2RlYmxvY2t36QQjaW5jbHVkZSA8U2Vydm8uaD4KClNlcnZvIG1vblNlcnZvOyAgLyogQ3LDqWVyIHVuIG9iamV0IHNlcnZvICwgaW5zdGFuY2lhdGlvbiBkZSBsJ29iamV0ICwgYXBwZWwgZHUgY29uc3RydWN0ZXVyICovCgp2b2lkIHNldHVwKCkgCnsKICBtb25TZXJ2by5hdHRhY2goOSwgNTAwLCAyNDAwKTsgIC8qIGluaXRpYWxpc2F0aW9uIGRlIGwnb2JqZXQgKi8KICAvLyBQb3NpdGlvbm5lciDDoCAwwrAgKDUwMMK1cykKICBtb25TZXJ2by53cml0ZU1pY3Jvc2Vjb25kcyg1MDApOwogIAogIGRlbGF5KDEwMDApOyAgLyogQXR0ZW5kcmUgMSBzZWNvbmRlIHBvdXIgbGEgc3RhYmlsaXNhdGlvbiAqLwp9Cgp2b2lkIGxvb3AoKSAKewogIC8qIExlIHNlcnZvIHJlc3RlIMOgIDDCsAogICAgIGV0IGxlIHByb2Nlc3NldXIgbmUgZmFpdCByaWVuICwgaWwgZXN0IHRvdXQgcG91ciB2b3VzIGRhbnMgbGUgbG9vcCgpCiAgICAgUGFzIGJlc29pbiBkZSByw6lww6l0ZXIgbCdpbnN0cnVjdGlvbgogICAgIGxlIHNpZ25hbCBQV00gZXN0IGfDqXJlciBhdXRvbWF0aXF1ZW1lbnQgcGFyIGwnb2JqZXQgbW9uU2Vydm8gcXVpIGEgcHJvZ3JhbW3DqSB1biBjaXJjdWl0IGTDqWRpw6kgVGltZXIgKFRXSSkKICAgKi8KfXcBY3cAdwB3AHcAdwB3AHl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRmMDMwMWI1OC1mY2I1LTRhMGUtYjg4Yi1hYjkwZTI5Zjg0NzV4d4wBPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5NYWludGVuYW50IG9uIHZhIHV0aWxpc2VyIGxhIG3DqXRob2RlIHdyaXRlIHF1aSBwZXJtZXQgZGUgdHJhbnNtZXR0cmUgbCdhbmdsZSBkZSBjb25zaWduZSAgZHUgc2Vydm8tbW90ZXVyPC9oMj53DGNvcmUvaGVhZGluZ30CeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDZmMDg2YjY0LWViMjMtNGM2Yi04NTAyLTlhZTM5NzE1ZGUxYnh34wY8cHJlIGNsYXNzPSJFbmxpZ2h0ZXJKU1JBVyIgZGF0YS1lbmxpZ2h0ZXItbGFuZ3VhZ2U9ImMiIGRhdGEtZW5saWdodGVyLXRoZW1lPSIiIGRhdGEtZW5saWdodGVyLWhpZ2hsaWdodD0iIiBkYXRhLWVubGlnaHRlci1saW5lbnVtYmVycz0iIiBkYXRhLWVubGlnaHRlci1saW5lb2Zmc2V0PSIiIGRhdGEtZW5saWdodGVyLXRpdGxlPSIiIGRhdGEtZW5saWdodGVyLWdyb3VwPSIiPiNpbmNsdWRlICZsdDtTZXJ2by5oPgoKU2Vydm8gbW9uU2Vydm87ICAvKiBDcsOpZXIgdW4gb2JqZXQgc2Vydm8gLCBpbnN0YW5jaWF0aW9uIGRlIGwnb2JqZXQgLCBhcHBlbCBkdSBjb25zdHJ1Y3RldXIgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGUgY29uc3RydWN0ZXVyIHBhciBkw6lmYXV0IGVzdCBhcHBlbMOpIGF1dG9tYXRpcXVlbWVudCAqLwp2b2lkIHNldHVwKCkgCnsKICBtb25TZXJ2by5hdHRhY2goOSwgNTAwLCAyNDAwKTsgIC8qIGluaXRpYWxpc2F0aW9uIGRlIGwnb2JqZXQgIGxlIHByZW1pZXIgcGFyYW3DqHRyZSBlc3Qgb2JsaWdhdG9pcmUgKGxhIGJyb2NoZSkgKi8KICAvLyBQb3NpdGlvbm5lciDDoCAwwrAgKDUwMMK1cykKICBtb25TZXJ2by53cml0ZSgwKTsKICAKICBkZWxheSgxMDAwKTsgIC8qIEF0dGVuZHJlIDEgc2Vjb25kZSBwb3VyIGxhIHN0YWJpbGlzYXRpb24gZXQgcmV0b3VyIMOgIHplcm8qLwp9Cgp2b2lkIGxvb3AoKSAKewppbnQgYW5nbGU7Cgpmb3IgKGFuZ2xlPTA7YW5nbGUmbHQ7MTgwO2FuZ2xlKyspCiAgICB7CiAgICBtb25TZXJ2by53cml0ZShhbmdsZSk7CiAgICBkZWxheSgxMCk7CiAgICB9CmRlbGF5KDEwMDApOwptb25TZXJ2by53cml0ZSgwKTsKZGVsYXkoMTAwMCk7Cn08L3ByZT53E2VubGlnaHRlci9jb2RlYmxvY2t3gAUjaW5jbHVkZSA8U2Vydm8uaD4KClNlcnZvIG1vblNlcnZvOyAgLyogQ3LDqWVyIHVuIG9iamV0IHNlcnZvICwgaW5zdGFuY2lhdGlvbiBkZSBsJ29iamV0ICwgYXBwZWwgZHUgY29uc3RydWN0ZXVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlIGNvbnN0cnVjdGV1ciBwYXIgZMOpZmF1dCBlc3QgYXBwZWzDqSBhdXRvbWF0aXF1ZW1lbnQgKi8Kdm9pZCBzZXR1cCgpIAp7CiAgbW9uU2Vydm8uYXR0YWNoKDksIDUwMCwgMjQwMCk7ICAvKiBpbml0aWFsaXNhdGlvbiBkZSBsJ29iamV0ICBsZSBwcmVtaWVyIHBhcmFtw6h0cmUgZXN0IG9ibGlnYXRvaXJlIChsYSBicm9jaGUpICovCiAgLy8gUG9zaXRpb25uZXIgw6AgMMKwICg1MDDCtXMpCiAgbW9uU2Vydm8ud3JpdGUoMCk7CiAgCiAgZGVsYXkoMTAwMCk7ICAvKiBBdHRlbmRyZSAxIHNlY29uZGUgcG91ciBsYSBzdGFiaWxpc2F0aW9uIGV0IHJldG91ciDDoCB6ZXJvKi8KfQoKdm9pZCBsb29wKCkgCnsKaW50IGFuZ2xlOwoKZm9yIChhbmdsZT0wO2FuZ2xlPDE4MDthbmdsZSsrKQogICAgewogICAgbW9uU2Vydm8ud3JpdGUoYW5nbGUpOwogICAgZGVsYXkoMTApOwogICAgfQpkZWxheSgxMDAwKTsKbW9uU2Vydm8ud3JpdGUoMCk7CmRlbGF5KDEwMDApOwp9dwFjdwB3AHcAdwB3AHcAeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JGY4ODc1ODk4LTQxZmUtNGY5MS04Mjc4LTQ4NGY0MDY5NDhjYXh3NDxoNSBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+UXVlIGZhaXMgY2UgY29kZSA\/PC9oNT53DGNvcmUvaGVhZGluZ30FeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDM3MTM1ZTc3LWY2NjktNGViZS1iYWY3LTZmMzhhY2U1MDJiZHh3nwE8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkRvbm5lciB1biBjb2RlIHV0aWxpc2FudCBsYSBsaWJyYWlyaWUgc2Vydm8uaCAsIHF1aSByw6lhbGlzZSBsZSBtw6l0cm9ub21lIGRlIDIgc2Vjb25kZXMuICBjb21tZSBkYW5zIGwnZXhlbXBsZSBlbiBDIHNpbXBsZSAhPC9oMz53DGNvcmUvaGVhZGluZ30DeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDQ4YTNiOGUyLTc4MGUtNGEyOS1hNGJiLWFhZjdhM2IxMThiMnh3HDxwPkRvbm5lciBsZXMgYXZhbnRhZ2VzIDwvcD53DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRmNDQzODI1Yi05ZmU2LTRlNGEtYmI5MS1iOTVmNWU0OTE3NDUQAHeaCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIENvZGUgcG91ciBtYcOudHJpc2VyIHVuIFNFUlZPX01PVEVVUiBGUzkwICAgICAgICAqLwovKiBlbiBDIHNpbXBsZSAsIHNpZ25hbCBQV00gcsOpYWxpc8OpIGRhbnMgbGUgbG9vcCgpICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgc2lnbmFsIDEwCiNkZWZpbmUgaW1wIDUwMCs5NTArOTUwCiNkZWZpbmUgaW1wMCA1MDAKI2RlZmluZSBpbXAxODAgMjQwMAojZGVmaW5lIHRlbXBzIDEwMAovKiA1MDAgIG1pbmltdW0gNTAwKzk1MCBtaWxpZXUgZXQgNTAwKzk1MCs5NTAgKDI0MDApIE1BWCovCmludCBjcHQ7Ci8qIHRlbXBvcmlzYXRpb24gZW4gbWljcm9zZWNvbmQgcG91dmFudCBldHJlIHN1cMOocmlldXIgYSAxNjAwIG1zICovCnZvaWQgdGVtcG9fbXMoaW50IHRtcCkKewogIGlmICh0bXAgPCAxNjAwICkKICB7CiAgICBkZWxheU1pY3Jvc2Vjb25kcyAodG1wKTsgLyogZmluaSAqLwogIH0KICBlbHNlCiAgewogICAgICBkbwogICAgICB7CiAgICAgICBkZWxheU1pY3Jvc2Vjb25kcygxNjAwKTsKICAgICAgIHRtcD10bXAtMTYwMDsKICAgICAgfQogICAgICB3aGlsZSAodG1wID4gMTYwMCk7CiAgICAgIGRlbGF5TWljcm9zZWNvbmRzKHRtcCk7CiAgfQp9CgovKiBtaXNlIGVuIHNvcnRpZSBsYSBicm9jaGUgZGUgY29tbWFuZGUgZHUgc2Vydm8gbW90ZXVyICovCnZvaWQgc2V0dXAoKSAKewogIHBpbk1vZGUoc2lnbmFsLCBPVVRQVVQpOwogIGNwdD0wOwp9CgoKLyogYm91Y2xlIGRlIGNvbW1hbmRlIGR1IFNFUlZPX01vdGV1ciBmcsOpcXVlbmNlIDUwSHogKi8Kdm9pZCBsb29wKCkgCnsKaWYgKGNwdDx0ZW1wcykKeyAgCiAgZGlnaXRhbFdyaXRlKHNpZ25hbCwgSElHSCk7CiAgdGVtcG9fbXMoaW1wMCk7ICAKICBkaWdpdGFsV3JpdGUoc2lnbmFsLCBMT1cpOwogIHRlbXBvX21zKDIwMDAwLWltcDApOwp9CmVsc2UKeyAgCiAgZGlnaXRhbFdyaXRlKHNpZ25hbCwgSElHSCk7CiAgdGVtcG9fbXMoaW1wMTgwKTsgIAogIGRpZ2l0YWxXcml0ZShzaWduYWwsIExPVyk7CiAgdGVtcG9fbXMoMjAwMDAtaW1wMTgwKTsKfQpjcHQrKzsKaWYgKGNwdD4oMip0ZW1wcykpCiAgewogICAgY3B0PTA7CiAgfSAgICAgIAp9dwFjSAB3JDNkZmFlMDhhLWY1Y2YtNGY1ZC04MGRlLTc1MjQxZWY5ZjQ0Ynh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0Ae0J52WvEXYAAfaGn1bkH3gEAdyQ1OTc3YWI5NS05MjA2LTQyNmItOWQ0OC1jN2JkODQzYzFlYWJ4dyM8dWwgY2xhc3M9IndwLWJsb2NrLWxpc3QiPgoKCgo8L3VsPncJY29yZS9saXN0eXcAeXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQB3JDA3ODhiNzBkLTZkMzktNDM4Ni04NWI3LTI3Yzg5YzZkNThlOHcKY29yZS9pbWFnZXcAfaZ6dyBodHRwczovL3dvcmtib290LmZyL2NpZWxhLzBfMTgwL3dHaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC8wXzE4MC0xMDI0eDQzNy5wbmd3Pmh0dHBzOi8vd29ya2Jvb3QuZnIvY2llbGEvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDQvMF8xODAucG5ndwVsYXJnZXcFbWVkaWF3JGJlY2QyNWIyLTBjYzAtNDNhMS1hZDVmLTMzMDk4MzUzNjA2MXh3CmNvcmUvaW1hZ2V3AHl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AfaV6dx5odHRwczovL3dvcmtib290LmZyL2NpZWxhLzE4MC93RWh0dHBzOi8vd29ya2Jvb3QuZnIvY2llbGEvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDQvMTgwLTEwMjR4NDM3LnBuZ3c8aHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC8xODAucG5ndwVsYXJnZXcFbWVkaWF3JDIzNTM5YzhlLWEwYzctNDgzZS05OTE2LWY2MzJlMTk2ZWRkOHh3CmNvcmUvaW1hZ2V3AHl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AfaR6dxxodHRwczovL3dvcmtib290LmZyL2NpZWxhLzAvd0NodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzAtMTAyNHg0MzcucG5ndzpodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0LzAucG5ndwVsYXJnZXcFbWVkaWF3JDhjYjI4OWQyLWJhZmItNDcwYy1iNzMxLWI1OWE0YmVlOGNhZXh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AdyRlMTYwYTAzNy0zNzE1LTQ4NzQtOWNjNS1kMDI3NzZkN2EyMzR4dw5jb3JlL3BhcmFncmFwaHl5eXl5eXUAeXcAfZAGfQB3BGVhc2V5dwB3A3RvcHl9AHckM2M3YjUyZjYtODUwOS00MjU4LTkzNTktNzU1MjA5YjhhYmZieHcOY29yZS9wYXJhZ3JhcGh5eXl5eXl1AHl3AH2QBn0AdwRlYXNleXcAdwN0b3B5fQDtAQB3JDFiMTA4ZDM3LTY3NDEtNGIyMy1hMDhkLTFhODAwYWM5YmVkNnckMWM1M2Y3NGQtNjMwYy00NmNlLWE5YTAtN2U0YTExYjQ5MTc4dzs8cD5jb25zdCBpbnQgRlM5MF9NSU4gPSA1MDA7CmNvbnN0IGludCBGUzkwX01BWCA9IDI0MDA7PC9wPnckN2ZhZDczMzEtNDFmOC00MTYzLWE5OGUtYmRmNjg3MjBkMjA5d5sBPHA+TGUgPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwKSIgY2xhc3M9Imhhcy1pbmxpbmUtY29sb3IgaGFzLXZpdmlkLXJlZC1jb2xvciI+ZmlsIHJvdWdlPC9tYXJrPiBlc3QgbCdhbGltZW50YXRpb24gZW4gNVYgw6AgN1YgbWF4LjwvcD53JDIyYzc1MTQ0LWNlMGEtNDhjZi04NzExLTNhZGJmNDgxOTNlZneZATxwPkxlIDxtYXJrIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMCkiIGNsYXNzPSJoYXMtaW5saW5lLWNvbG9yIGhhcy1ibGFjay1jb2xvciI+ZmlsIG1hcnJvbiBvdSBub2lyPC9tYXJrPiAsIGxlIEdORCAsIGxlIDAgLCBsYSBtYXNzZSAhPC9wPnckN2ExNDAzZGYtMDk3YS00Mzc3LTk4YjUtMjc5OTRiMzY3NmE3d6cBPHA+TGUgPG1hcmsgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwKSIgY2xhc3M9Imhhcy1pbmxpbmUtY29sb3IgaGFzLWx1bWlub3VzLXZpdmlkLW9yYW5nZS1jb2xvciI+ZmlsIG9yYW5nZTwvbWFyaz4gbGEgY29uc2lnbmUgZW4gUFdNIGR1IHNlcnZvLW1vdGV1cjwvcD53JDlmYmRkYWIyLWIwZGEtNGNkOS1iNDM2LTdjNDdiMjZiZWVkNXdsPHA+bGEgY29uc2lnbmUgaWNpIGVzdCBlbnZvecOpIHN1ciBsZSBmaWwgb3JhbmdlIGMnZXN0IHVuZSAgUFdNICwgaW1wdWxzaW9uIGRlIDUwMCDDoCAyNDAwIG1pY3JvIHNlY29uZGU8L3A+dw5jb3JlL3BhcmFncmFwaHl3JGIwY2ZiMzljLWU1ZWItNGFiYi04MWE1LWRlMGQ4N2FiMDhmMXfTAjxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLWltYWdlIHNpemUtZnVsbCI+PGEgaHJlZj0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMi9zZXJ2by1wYXJ0cy5qcGVnIj48aW1nIHNyYz0iaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMi9zZXJ2by1wYXJ0cy5qcGVnIiBhbHQ9IiIgY2xhc3M9IndwLWltYWdlLTY1MDIiLz48L2E+PGZpZ2NhcHRpb24gY2xhc3M9IndwLWVsZW1lbnQtY2FwdGlvbiI+VmlzaW9uIHLDqWVsbGUgZCd1biBTZXJ2byBtb3RldXIgdHlwZSBGUzkwPC9maWdjYXB0aW9uPjwvZmlndXJlPndFaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMi9zZXJ2by1wYXJ0cy5qcGVnd0VodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL3NlcnZvLXBhcnRzLmpwZWd9pmV3BGZ1bGx3JDY5MDEyNjNkLTBmYmItNDc2Yy05ZjU3LWZhMTJmY2JlOWRhNXfXAjxmaWd1cmUgY2xhc3M9IndwLWJsb2NrLWltYWdlIHNpemUtbGFyZ2UiPjxhIGhyZWY9Imh0dHBzOi8vd29ya2Jvb3QuZnIvY2llbGEvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDQvU2Vydm9faW50ZXJuZS5wbmciPjxpbWcgc3JjPSJodHRwczovL3dvcmtib290LmZyL2NpZWxhL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0L1NlcnZvX2ludGVybmUtMTAyNHg1NTkucG5nIiBhbHQ9IiIgY2xhc3M9IndwLWltYWdlLTc1MzIiLz48L2E+PGZpZ2NhcHRpb24gY2xhc3M9IndwLWVsZW1lbnQtY2FwdGlvbiI+VmlzaW9uIHBhciBHZW1pbmkgZHUgc2Vydm8gbW90ZXVyIDwvZmlnY2FwdGlvbj48L2ZpZ3VyZT53CmNvcmUvaW1hZ2V3T2h0dHBzOi8vd29ya2Jvb3QuZnIvY2llbGEvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDQvU2Vydm9faW50ZXJuZS0xMDI0eDU1OS5wbmd3AHdGaHR0cHM6Ly93b3JrYm9vdC5mci9jaWVsYS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC9TZXJ2b19pbnRlcm5lLnBuZ32sdXcFbGFyZ2V3BW1lZGlhdyRiYzUyYTk3NS05ZWMyLTQ0NjMtODIxYi0xZTJiOWIxZDJhZDd3XzxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PHN0cm9uZz5EdXLDqWVzIGQnaW1wdWxzaW9uIGVuIE1JQ1JPU0VDT05ERVMgKMK1cykgOjwvc3Ryb25nPjwvaDM+dwxjb3JlL2hlYWRpbmd9A3ckMWZlZmJkMDctYWEwMC00MTVkLThhNTQtYmJlNzMzOGUyOWU0d\/QCPHA+PHN0cm9uZz4iTGUgRlM5MCB1dGlsaXNlIHVuIGNpcmN1aXQgaW50w6lncsOpIHNww6ljaWFsaXPDqSBldCBkw6lkacOpLCBzb3V2ZW50IHVuIE5FNTQ0IG91IHVuIMOpcXVpdmFsZW50LCBxdWkgYWdpdCBjb21tZSBsZSBjZXJ2ZWF1IGFuYWxvZ2lxdWUgZHUgc2Vydm8uIENlIG4nZXN0IHBhcyB1biBtaWNyb2NvbnRyw7RsZXVyIHByb2dyYW1tYWJsZSwgbWFpcyB1bmUgcHVjZSBjw6JibMOpZSBwb3VyIGV4w6ljdXRlciB1bmUgc2V1bGUgdMOiY2hlIDogbGEgY29tbWFuZGUgZW4gYm91Y2xlIGZlcm3DqWUgZCd1biBtb3RldXIgcG91ciBhdHRlaW5kcmUgdW5lIHBvc2l0aW9uIGTDqWZpbmllIHBhciB1biBzaWduYWwgUFdNLiI8L3N0cm9uZz48L3A+dw5jb3JlL3BhcmFncmFwaHl3JGVmMzAwNWQwLTc2NWQtNDJiNS1hY2E0LTZiOTUyYzQyMjlhNHh3DmNvcmUvcGFyYWdyYXBoeXl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0AeHl5eXl5dQB5dwB9kAZ9AHcEZWFzZXl3AHcDdG9weX0ACanzk8IOCQEAsQNJRBgCFwQpQBgIOxpNSA\/K2qTqDQoAABgAAQACACIAEQMMAxwA9QcAGfErhdDuwg0FABcLAgoDjgGkAR25Ae3ZiYUKCgAAHgEWAAIAJgAOABZZ0xQAFAAYkQGs6KKnBo0BAACjAzu6Ed8C2QVwsQEBHhsdJSpslwGJAWlmiQFsiQFpiQGwASrvAvEBL7MCHB0gKR4dIisK9QNzlx0AAQADMxMAAQADEQECAQABDgEBAgABCAEQAR0BAgEAAQEDAwEBAgQBAQEBAQgTAAEAUgQMAQEAAQIBBAgABAYCAAEAAQEDBBMAAQBTDwECDAECAQgBAQYDAAECAQEDCRMAAQADAAcAAQECAAEAAQIBAAEDAgEBAAwBAQIIBAEEAQABDgIDAQEUAAEBAS8SAAEAAgAJAQEBAQMEAAwCEwABAQE8EgABAQoIAQsBBwEOAQgBBQE\/AQwBCwETAQ8CBQEUARABAgEBBAUBJwEEARoJABIAAQEBARHhAVEABABJAMMBAHIAmAEAlQEA6AEAOAGZDAEBIYy0++AFAwABvwEB\/AIB4dPq3AMVAAAYABkABAEMARUAHgICZTUBBQAXBA4ADwUEAQUAiwG3AQMAFgIMAAPdAQUBus3ElgISAAQ71gLRAh8ktALNAgEkBAEAAe0BFhXhAoYJHQMlG0gEDgANAJoBAgYAHwGSyPiZARkAAIcG6wEIACcEEAABhwEuqAEiAgIACgIDABcBCgL0AQAIAQZwAwABAgUCBX4BAAEBAQERkgEYtAI=\",\"updateId\":292756581}","_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-6495","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Servo Moteur FS90 - workboot<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Servo Moteur FS90 - workboot\" \/>\n<meta property=\"og:description\" content=\"Un servo moteur , permet de contr\u00f4ler une position en fonction d&rsquo;une consigne , tr\u00e8s pratique en robotique et dans d&rsquo;autres projets. Servo vient du mot asservissement Caract\u00e8ristiques du FS90 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/\" \/>\n<meta property=\"og:site_name\" content=\"workboot\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-16T14:40:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"479\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/\",\"name\":\"Servo Moteur FS90 - workboot\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/servo-parts.jpeg\",\"datePublished\":\"2026-02-02T16:05:02+00:00\",\"dateModified\":\"2026-04-16T14:40:52+00:00\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/servo-moteur-fs90\\\/#primaryimage\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/servo-parts.jpeg\",\"contentUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/servo-parts.jpeg\",\"width\":1000,\"height\":479},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"name\":\"workboot\",\"description\":\"Open Source, Open Minds \",\"publisher\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\",\"name\":\"workboot\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"contentUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"width\":1024,\"height\":950,\"caption\":\"workboot\"},\"image\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Servo Moteur FS90 - workboot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/","og_locale":"fr_FR","og_type":"article","og_title":"Servo Moteur FS90 - workboot","og_description":"Un servo moteur , permet de contr\u00f4ler une position en fonction d&rsquo;une consigne , tr\u00e8s pratique en robotique et dans d&rsquo;autres projets. Servo vient du mot asservissement Caract\u00e8ristiques du FS90 [&hellip;]","og_url":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/","og_site_name":"workboot","article_modified_time":"2026-04-16T14:40:52+00:00","og_image":[{"width":1000,"height":479,"url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg","type":"image\/jpeg"}],"twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/","url":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/","name":"Servo Moteur FS90 - workboot","isPartOf":{"@id":"https:\/\/workboot.fr\/ciela\/#website"},"primaryImageOfPage":{"@id":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/#primaryimage"},"image":{"@id":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/#primaryimage"},"thumbnailUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg","datePublished":"2026-02-02T16:05:02+00:00","dateModified":"2026-04-16T14:40:52+00:00","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/workboot.fr\/ciela\/servo-moteur-fs90\/#primaryimage","url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg","contentUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2026\/02\/servo-parts.jpeg","width":1000,"height":479},{"@type":"WebSite","@id":"https:\/\/workboot.fr\/ciela\/#website","url":"https:\/\/workboot.fr\/ciela\/","name":"workboot","description":"Open Source, Open Minds ","publisher":{"@id":"https:\/\/workboot.fr\/ciela\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/workboot.fr\/ciela\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/workboot.fr\/ciela\/#organization","name":"workboot","url":"https:\/\/workboot.fr\/ciela\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/","url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","contentUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","width":1024,"height":950,"caption":"workboot"},"image":{"@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Un servo moteur , permet de contr\u00f4ler une position en fonction d&rsquo;une consigne , tr\u00e8s pratique en robotique et dans d&rsquo;autres projets. Servo vient du mot asservissement Caract\u00e8ristiques du FS90 [&hellip;]","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/6495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=6495"}],"version-history":[{"count":57,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/6495\/revisions"}],"predecessor-version":[{"id":7857,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/6495\/revisions\/7857"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=6495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}