PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
← All changes | _dist/bfb/_out/wpbc_bfb.js +112 -54 11.8.1 → 11.9 View file →
@@ -290,16 +290,21 @@
290 290 */off(type,handler){document.removeEventListener(type,handler);}};/**
291 291 * SortableJS manager: single point for consistent DnD config.
292 292 */Core.WPBC_BFB_SortableManager=class{/**
293 293 * @param {WPBC_Form_Builder} builder - The active builder instance.
294 - * @param {{ groupName?: string, animation?: number, ghostClass?: string, chosenClass?: string, dragClass?:
295 - * string }} [opts={}] - Visual/behavior options.
294 + * @param {{ groupName?: string, animation?: number, ghostClass?: string, chosenClass?: string, dragClass?:
295 + * string, candidate_dwell_ms?: number, candidate_commit_distance?: number,
296 + * candidate_dwell_distance?: number }} [opts={}] - Visual and drag-stability options.
296 297 */constructor(builder,opts={}){this.builder=builder;const gid=this.builder?.instance_id||Math.random().toString(36).slice(2,8);this.opts={// groupName : 'form',
297 -groupName:`form-${gid}`,animation:150,ghostClass:'wpbc_bfb__drag-ghost',chosenClass:'wpbc_bfb__highlight',dragClass:'wpbc_bfb__drag-active',...opts};/** @type {Set<HTMLElement>} */this._containers=new Set();/**
298 +groupName:`form-${gid}`,animation:150,ghostClass:'wpbc_bfb__drag-ghost',chosenClass:'wpbc_bfb__highlight',dragClass:'wpbc_bfb__drag-active',candidate_dwell_ms:90,candidate_commit_distance:10,candidate_dwell_distance:2,...opts};/** @type {Set<HTMLElement>} */this._containers=new Set();/**
298 299 * Guard against lost mouseup / pointerup events.
299 300 *
300 301 * @type {boolean}
301 - */this._drag_fail_safe_bound=false;this._bind_drag_fail_safe();}/**
302 + */this._drag_fail_safe_bound=false;/**
303 + * State for the current Form Builder canvas drag.
304 + *
305 + * @type {?Object}
306 + */this._drag_state=null;this._bind_drag_fail_safe();}/**
302 307 * Cleanup drag UI state.
303 308 *
304 309 * This is a defensive cleanup for cases when Chrome or a browser extension
305 310 * loses the final mouseup / pointerup event during fallback dragging.
@@ -304,10 +309,67 @@
304 309 * This is a defensive cleanup for cases when Chrome or a browser extension
305 310 * loses the final mouseup / pointerup event during fallback dragging.
306 311 *
307 312 * @returns {void}
308 - */_cleanup_drag_ui(){this._dragState=null;this._toggle_dnd_root_flags(false);this.builder?._remove_dragging_class?.();// Remove only fallback mirrors. Do not touch real dragged elements.
309 -document.querySelectorAll('.sortable-fallback[data-drag-role], .wpbc_bfb__simple_list_fallback').forEach(el=>{if(el.parentNode){el.parentNode.removeChild(el);}});}/**
313 + */_cleanup_drag_ui(){const drag_state=this._drag_state;if(drag_state?.item){drag_state.item.classList.remove('wpbc_bfb__drop-indicator');}if(drag_state?.source_spacer?.parentNode){drag_state.source_spacer.parentNode.removeChild(drag_state.source_spacer);}this._release_canvas_geometry_locks(drag_state);this._drag_state=null;this._toggle_dnd_root_flags(false);this.builder?._remove_dragging_class?.();// Remove only fallback mirrors. Do not touch real dragged elements.
314 +document.querySelectorAll('.sortable-fallback[data-drag-role], .wpbc_bfb__simple_list_fallback').forEach(el=>{if(el.parentNode){el.parentNode.removeChild(el);}});}/**
315 + * Capture the block size of every canvas layout container before drag reflow starts.
316 + *
317 + * SortableJS temporarily moves the real node between containers. That changes CSS
318 + * `:empty` matching and can otherwise shrink an empty destination row or grow a
319 + * populated destination by the insertion-line height. The captured values are
320 + * applied only for the active drag session and never become saved form data.
321 + *
322 + * @returns {Array<Object>} Restorable geometry-lock records for visible canvas containers.
323 + */_capture_canvas_geometry_locks(){const pages_container=this.builder?.pages_container;if(!pages_container?.querySelectorAll){return[];}const lock_selector=['.wpbc_bfb__form_preview_section_container','.wpbc_bfb__row','.wpbc_bfb__column'].join(', ');const block_size_property='--wpbc-bfb-drag-locked-block-size';return Array.from(pages_container.querySelectorAll(lock_selector)).map(element=>{const block_size=element.getBoundingClientRect?.().height;if(!Number.isFinite(block_size)||block_size<=0){return null;}return{element:element,block_size:Math.round(block_size*1000)/1000,had_lock_class:element.classList?.contains('wpbc_bfb__drag-geometry-lock'),previous_block_size:element.style?.getPropertyValue?.(block_size_property)||'',previous_block_size_priority:element.style?.getPropertyPriority?.(block_size_property)||''};}).filter(Boolean);}/**
324 + * Freeze captured canvas container heights for the active SortableJS session.
325 + *
326 + * The lock is applied before global drag classes or the compact insertion marker
327 + * can change flex alignment and empty-container selectors.
328 + *
329 + * @returns {void}
330 + */_apply_canvas_geometry_locks(){const geometry_locks=this._drag_state?.geometry_locks||[];geometry_locks.forEach(geometry_lock=>{geometry_lock.element.style?.setProperty('--wpbc-bfb-drag-locked-block-size',`${geometry_lock.block_size}px`);geometry_lock.element.classList?.add('wpbc_bfb__drag-geometry-lock');});}/**
331 + * Restore all inline state used by the drag-session geometry lock.
332 + *
333 + * @param {?Object} drag_state - Drag state whose geometry records must be restored.
334 + * @returns {void}
335 + */_release_canvas_geometry_locks(drag_state){const block_size_property='--wpbc-bfb-drag-locked-block-size';const geometry_locks=drag_state?.geometry_locks||[];geometry_locks.forEach(geometry_lock=>{if(geometry_lock.previous_block_size){geometry_lock.element.style?.setProperty(block_size_property,geometry_lock.previous_block_size,geometry_lock.previous_block_size_priority);}else{geometry_lock.element.style?.removeProperty?.(block_size_property);}if(!geometry_lock.had_lock_class){geometry_lock.element.classList?.remove('wpbc_bfb__drag-geometry-lock');}});}/**
336 + * Capture the original canvas geometry before SortableJS applies its ghost class.
337 + *
338 + * The saved rectangle is later represented by a non-data spacer. This keeps the
339 + * source layout stable while the real dragged node becomes a compact insertion
340 + * indicator in another container.
341 + *
342 + * @param {Sortable.SortableEvent} evt - Sortable choose event.
343 + * @returns {void}
344 + */_prepare_drag_state(evt){if(!evt?.item||!evt?.from){this._drag_state=null;return;}const source_rect=evt.item.getBoundingClientRect();const from_palette=!!this.builder?.palette_uls?.includes?.(evt.from);this._drag_state={item:evt.item,from_palette:from_palette,source_parent:evt.from,source_next_sibling:evt.item.nextSibling,source_rect:{width:source_rect.width,height:source_rect.height},geometry_locks:this._capture_canvas_geometry_locks(),source_spacer:null,accepted_candidate:null,pending_candidate:null,pending_since:0,pending_pointer:null};}/**
345 + * Create a measured, non-data footprint at the dragged item's source position.
346 + *
347 + * The spacer intentionally does not use field or section classes, so Form Builder
348 + * serialization and usage accounting cannot treat it as saved form content.
349 + *
350 + * @returns {void}
351 + */_create_drag_source_spacer(){const drag_state=this._drag_state;if(!drag_state||drag_state.from_palette||!drag_state.item||!drag_state.source_parent||drag_state.source_spacer){return;}const spacer=document.createElement('div');const width=Math.max(1,drag_state.source_rect?.width||1);const height=Math.max(1,drag_state.source_rect?.height||1);spacer.className='wpbc_bfb__drag-source-spacer';spacer.setAttribute('aria-hidden','true');spacer.setAttribute('data-wpbc-bfb-drag-source-spacer','true');spacer.style.setProperty('--wpbc-bfb-drag-source-inline-size',`${width}px`);spacer.style.setProperty('--wpbc-bfb-drag-source-block-size',`${height}px`);const reference_node=drag_state.source_next_sibling?.parentNode===drag_state.source_parent?drag_state.source_next_sibling:null;drag_state.source_parent.insertBefore(spacer,reference_node);drag_state.source_spacer=spacer;}/**
352 + * Start the stable drag representation after SortableJS creates its off-flow mirror.
353 + *
354 + * @param {Sortable.SortableEvent} evt - Sortable start event.
355 + * @returns {void}
356 + */_start_drag(evt){if(!this._drag_state){this._prepare_drag_state(evt);}this._apply_canvas_geometry_locks();this.builder?._add_dragging_class?.();const from_palette=!!this._drag_state?.from_palette;this._toggle_dnd_root_flags(true,from_palette);this._tag_drag_mirror(evt);if(!from_palette&&evt?.item){this._create_drag_source_spacer();evt.item.classList.add('wpbc_bfb__drop-indicator');}}/**
357 + * Finish a Form Builder drag and remove transient layout helpers.
358 + *
359 + * @returns {void}
360 + */_finish_drag(){this._cleanup_drag_ui();}/**
361 + * Check whether a SortableJS canvas candidate is stable enough to accept.
362 + *
363 + * The candidate includes the destination container, related sibling, and insertion
364 + * side. A new candidate must receive real pointer movement before it can replace
365 + * the accepted position, preventing layout movement alone from causing flip-flops.
366 + *
367 + * @param {Object} evt - Sortable move event.
368 + * @param {MouseEvent|PointerEvent|TouchEvent} original_event - Original pointer event.
369 + * @returns {boolean} Whether SortableJS may move the in-flow insertion indicator.
370 + */_allow_canvas_move(evt,original_event){const{to,from}=evt||{};if(!to||!from){return true;}if(!to.closest('.wpbc_bfb__panel--preview')){return true;}const touch_event=original_event?.touches?.[0]||original_event?.changedTouches?.[0];const event_x=touch_event?.clientX??original_event?.clientX;const event_y=touch_event?.clientY??original_event?.clientY;const dragged_rect=evt.draggedRect||evt.dragged?.getBoundingClientRect?.();const pointer_x=Number.isFinite(event_x)?event_x:dragged_rect?dragged_rect.left+dragged_rect.width/2:0;const pointer_y=Number.isFinite(event_y)?event_y:dragged_rect?dragged_rect.top+dragged_rect.height/2:0;// Cross-container column changes require a deliberate move inside the new column.
371 +if(to!==from&&to.classList?.contains('wpbc_bfb__column')){const container_rect=to.getBoundingClientRect();const padding_x=Core.WPBC_BFB_Sanitize.clamp(container_rect.width*0.20,12,36);const padding_y=Core.WPBC_BFB_Sanitize.clamp(container_rect.height*0.10,6,16);const visually_empty=!to.querySelector(':scope > .wpbc_bfb__field:not(.wpbc_bfb__drop-indicator), '+':scope > .wpbc_bfb__section:not(.wpbc_bfb__drop-indicator)')||container_rect.height<64;const inner_top=container_rect.top+(visually_empty?4:padding_y);const inner_bottom=container_rect.bottom-(visually_empty?4:padding_y);const inner_left=container_rect.left+padding_x;const inner_right=container_rect.right-padding_x;if(pointer_x<=inner_left||pointer_x>=inner_right||pointer_y<=inner_top||pointer_y>=inner_bottom){return false;}}const drag_state=this._drag_state;if(!drag_state){return true;}const candidate={to:to,related:evt.related||null,will_insert_after:!!evt.willInsertAfter};const candidate_matches=(first,second)=>!!first&&!!second&&first.to===second.to&&first.related===second.related&&first.will_insert_after===second.will_insert_after;if(candidate_matches(candidate,drag_state.accepted_candidate)){evt.dragged?.classList.add('wpbc_bfb__drop-indicator');return true;}const now=window.performance?.now?.()??Date.now();if(!candidate_matches(candidate,drag_state.pending_candidate)){drag_state.pending_candidate=candidate;drag_state.pending_since=now;drag_state.pending_pointer={x:pointer_x,y:pointer_y};return false;}const pointer_distance=Math.hypot(pointer_x-drag_state.pending_pointer.x,pointer_y-drag_state.pending_pointer.y);const candidate_age=now-drag_state.pending_since;const crossed_commit_distance=pointer_distance>=this.opts.candidate_commit_distance;const completed_dwell_move=candidate_age>=this.opts.candidate_dwell_ms&&pointer_distance>=this.opts.candidate_dwell_distance;if(!crossed_commit_distance&&!completed_dwell_move){return false;}drag_state.accepted_candidate=candidate;drag_state.pending_candidate=null;drag_state.pending_since=0;drag_state.pending_pointer=null;evt.dragged?.classList.add('wpbc_bfb__drop-indicator');return true;}/**
310 372 * Bind global fail-safe listeners for drag cleanup.
311 373 *
312 374 * @returns {void}
313 375 */_bind_drag_fail_safe(){if(this._drag_fail_safe_bound){return;}this._drag_fail_safe_bound=true;const finish_drag=()=>{window.requestAnimationFrame(()=>{this._cleanup_drag_ui();});};['mouseup','pointerup','touchend','dragend'].forEach(evt_name=>{document.addEventListener(evt_name,finish_drag,true);});window.addEventListener('blur',finish_drag,true);document.addEventListener('visibilitychange',()=>{if(document.hidden){finish_drag();}},true);}/**
@@ -314,9 +376,9 @@
314 376 * Tag the drag mirror (element under cursor) with role: 'palette' | 'canvas'.
315 377 * Works with Sortable's fallback mirror (.sortable-fallback / .sortable-drag) and with your dragClass
316 378 * (.wpbc_bfb__drag-active).
317 379 */_tag_drag_mirror(evt){const fromPalette=this.builder?.palette_uls?.includes?.(evt.from);const role=fromPalette?'palette':'canvas';// Wait a tick so the mirror exists. - The window.requestAnimationFrame() method tells the browser you wish to perform an animation.
318 -requestAnimationFrame(()=>{const mirror=document.querySelector('.sortable-fallback, .sortable-drag, .'+this.opts.dragClass);if(mirror){mirror.setAttribute('data-drag-role',role);}});}_toggle_dnd_root_flags(active,from_palette=false){// set to root element of an HTML document, which is the <html>.
380 +requestAnimationFrame(()=>{const mirror=document.querySelector('.sortable-fallback, .sortable-drag, .'+this.opts.dragClass);if(mirror){mirror.setAttribute('data-drag-role',role);mirror.setAttribute('aria-hidden','true');}});}_toggle_dnd_root_flags(active,from_palette=false){// set to root element of an HTML document, which is the <html>.
319 381 const root=document.documentElement;if(active){root.classList.add('wpbc_bfb__dnd-active');if(from_palette){root.classList.add('wpbc_bfb__drag-from-palette');}}else{root.classList.remove('wpbc_bfb__dnd-active','wpbc_bfb__drag-from-palette');}}/**
320 382 * Ensure a simple vertical sortable list.
321 383 *
322 384 * This configuration is intended for inspector/sidebar lists such as:
@@ -331,14 +393,14 @@
331 393 * @param {{ handle_selector?: string, draggable_selector?: string, onUpdate?: Function }} [handlers={}] -
332 394 * Optional handlers/selectors.
333 395 * @returns {void}
334 396 */ensure_simple_list(container,handlers={}){if(!container||typeof Sortable==='undefined'){return;}if(Sortable.get?.(container)){return;}const common={animation:this.opts.animation,ghostClass:this.opts.ghostClass,chosenClass:this.opts.chosenClass,dragClass:this.opts.dragClass,forceFallback:true,// For a single scrollable sidebar list this is usually more stable.
335 -fallbackOnBody:false,fallbackTolerance:8,removeCloneOnHide:true,onStart:()=>{this.builder?._add_dragging_class?.();this._toggle_dnd_root_flags(true,false);},onEnd:()=>{setTimeout(()=>{this.builder?._remove_dragging_class?.();},50);this._toggle_dnd_root_flags(false);this._dragState=null;this._cleanup_drag_ui();}};Sortable.create(container,{...common,group:{name:this.opts.groupName,pull:false,put:false},sort:true,direction:'vertical',handle:handlers.handle_selector||'.wpbc_bfb__drag-handle',draggable:handlers.draggable_selector||'.wpbc_bfb__sortable-row',fallbackClass:'wpbc_bfb__simple_list_fallback',filter:['input','textarea','select','button','a','.wpbc_bfb__no-drag-zone','.wpbc_bfb__no-drag-zone *'].join(','),preventOnFilter:false,invertSwap:false,swapThreshold:0.30,invertedSwapThreshold:0.60,emptyInsertThreshold:8,dragoverBubble:false,scroll:true,scrollSensitivity:60,scrollSpeed:14,onUpdate:handlers.onUpdate||function(){}});this._containers.add(container);}/**
397 +fallbackOnBody:false,fallbackTolerance:8,removeCloneOnHide:true,onStart:()=>{this.builder?._add_dragging_class?.();this._toggle_dnd_root_flags(true,false);},onEnd:()=>{setTimeout(()=>{this.builder?._remove_dragging_class?.();},50);this._toggle_dnd_root_flags(false);this._cleanup_drag_ui();}};Sortable.create(container,{...common,group:{name:this.opts.groupName,pull:false,put:false},sort:true,direction:'vertical',handle:handlers.handle_selector||'.wpbc_bfb__drag-handle',draggable:handlers.draggable_selector||'.wpbc_bfb__sortable-row',fallbackClass:'wpbc_bfb__simple_list_fallback',filter:['input','textarea','select','button','a','.wpbc_bfb__no-drag-zone','.wpbc_bfb__no-drag-zone *'].join(','),preventOnFilter:false,invertSwap:false,swapThreshold:0.30,invertedSwapThreshold:0.60,emptyInsertThreshold:8,dragoverBubble:false,scroll:true,scrollSensitivity:60,scrollSpeed:14,onUpdate:handlers.onUpdate||function(){}});this._containers.add(container);}/**
336 398 * Ensure Sortable is attached to a container with role 'palette' or 'canvas'.
337 399 *
338 400 * -- Handle selectors: handle: '.section-drag-handle, .wpbc_bfb__drag-handle, .wpbc_bfb__drag-anywhere,
339 401 * [data-draggable="true"]'
340 - * -- Draggable gate: draggable: '.wpbc_bfb__field:not([data-draggable="false"]), .wpbc_bfb__section'
402 + * -- Draggable gate: draggable fields, sections, and the transient measured source spacer.
341 403 * -- Filter (overlay-safe): ignore everything in overlay except the handle -
342 404 * '.wpbc_bfb__overlay-controls
343 405 * *:not(.wpbc_bfb__drag-handle):not(.section-drag-handle):not(.wpbc_icn_drag_indicator)'
344 406 * -- No-drag wrapper: use .wpbc_bfb__no-drag-zone inside renderers for inputs/widgets.
@@ -349,15 +411,13 @@
349 411 * @param {'palette'|'canvas'} role - Behavior profile to apply.
350 412 * @param {{ onAdd?: Function }} [handlers={}] - Optional handlers.
351 413 * @returns {void}
352 414 */ensure(container,role,handlers={}){if(!container||typeof Sortable==='undefined'){return;}if(Sortable.get?.(container)){return;}const sortable_kind=handlers.sortable_kind||'';if(sortable_kind==='simple_list'){this.ensure_simple_list(container,handlers);return;}const common={animation:this.opts.animation,ghostClass:this.opts.ghostClass,chosenClass:this.opts.chosenClass,dragClass:this.opts.dragClass,// == Element under the cursor == Ensure we drag a real DOM mirror you can style via CSS (cross-browser).
353 -forceFallback:true,fallbackOnBody:true,fallbackTolerance:8,removeCloneOnHide:true,// Add body/html flags so you can style differently when dragging from palette.
354 -onStart:evt=>{this.builder?._add_dragging_class?.();const fromPalette=this.builder?.palette_uls?.includes?.(evt.from);this._toggle_dnd_root_flags(true,fromPalette);// set to root HTML document: html.wpbc_bfb__dnd-active.wpbc_bfb__drag-from-palette .
355 -this._tag_drag_mirror(evt);// Add 'data-drag-role' attribute to element under cursor.
356 -},onEnd:()=>{setTimeout(()=>{this.builder._remove_dragging_class();},50);this._toggle_dnd_root_flags(false);}};if(role==='palette'){Sortable.create(container,{...common,group:{name:this.opts.groupName,pull:'clone',put:false},sort:false});this._containers.add(container);return;}// role === 'canvas'.
357 -Sortable.create(container,{...common,group:{name:this.opts.groupName,pull:true,put:(to,from,draggedEl)=>{return draggedEl.classList.contains('wpbc_bfb__field')||draggedEl.classList.contains('wpbc_bfb__section');}},// ---------- DnD Handlers -------------- // Grab anywhere on fields that opt-in with the class or attribute. - Sections still require their dedicated handle.
358 -handle:'.section-drag-handle, .wpbc_bfb__drag-handle, .wpbc_bfb__drag-anywhere, [data-draggable="true"]',draggable:'.wpbc_bfb__field:not([data-draggable="false"]), .wpbc_bfb__section',// Per-field opt-out with [data-draggable="false"] (e.g., while editing).
359 -// ---------- Filters - No DnD ---------- // Declarative “no-drag zones”: anything inside these wrappers won’t start a drag.
415 +forceFallback:true,fallbackOnBody:true,fallbackTolerance:8,removeCloneOnHide:true,onChoose:evt=>this._prepare_drag_state(evt),onStart:evt=>this._start_drag(evt),onEnd:()=>this._finish_drag(),onMove:(evt,original_event)=>this._allow_canvas_move(evt,original_event)};if(role==='palette'){Sortable.create(container,{...common,group:{name:this.opts.groupName,pull:'clone',put:false},sort:false});this._containers.add(container);return;}// role === 'canvas'.
416 +Sortable.create(container,{...common,// Stable insertion geometry is preferable to animating hit-test targets.
417 +animation:0,group:{name:this.opts.groupName,pull:true,put:(to,from,draggedEl)=>{return draggedEl.classList.contains('wpbc_bfb__field')||draggedEl.classList.contains('wpbc_bfb__section');}},// ---------- DnD Handlers -------------- // Grab anywhere on fields that opt-in with the class or attribute. - Sections still require their dedicated handle.
418 +handle:'.section-drag-handle, .wpbc_bfb__drag-handle, .wpbc_bfb__drag-anywhere, [data-draggable="true"]',// The transient spacer participates in hit testing but never serialization.
419 +draggable:['.wpbc_bfb__field:not([data-draggable="false"])','.wpbc_bfb__section','.wpbc_bfb__drag-source-spacer'].join(', '),// ---------- Filters - No DnD ---------- // Declarative “no-drag zones”: anything inside these wrappers won’t start a drag.
360 420 filter:['.wpbc_bfb__no-drag-zone','.wpbc_bfb__no-drag-zone *','.wpbc_bfb__column-resizer',// Ignore the resizer rails during DnD (prevents edge “snap”).
361 421 // In the overlay toolbar, block everything EXCEPT the drag handle (and its icon).
362 422 '.wpbc_bfb__overlay-controls *:not(.wpbc_bfb__drag-handle):not(.section-drag-handle):not(.wpbc_icn_drag_indicator)'].join(','),preventOnFilter:false,// ---------- anti-jitter tuning ----------
363 423 direction:'vertical',// columns are vertical lists.
@@ -365,26 +425,9 @@
365 425 swapThreshold:0.65,// be less eager to swap.
366 426 invertedSwapThreshold:0.85,// require deeper overlap when inverted.
367 427 emptyInsertThreshold:24,// don’t jump into empty containers too early.
368 428 dragoverBubble:false,// keep dragover local.
369 -scroll:true,scrollSensitivity:40,scrollSpeed:10,/**
370 - * Enter/leave hysteresis for cross-column moves. Only allow dropping into `to` when the pointer is
371 - * well inside it.
372 - */onMove:(evt,originalEvent)=>{const{to,from}=evt;if(!to||!from){return true;}const in_preview_canvas=!!to.closest('.wpbc_bfb__panel--preview');if(!in_preview_canvas){return true;}// Only gate columns (not page containers), and only for cross-column moves in the same row
373 -const isColumn=to.classList?.contains('wpbc_bfb__column');if(!isColumn)return true;const fromRow=from.closest('.wpbc_bfb__row');const toRow=to.closest('.wpbc_bfb__row');if(fromRow&&toRow&&fromRow!==toRow)return true;const rect=to.getBoundingClientRect();const evtX=originalEvent.touches?.[0]?.clientX??originalEvent.clientX;const evtY=originalEvent.touches?.[0]?.clientY??originalEvent.clientY;// --- Edge fence (like you had), but clamped for tiny columns
374 -const paddingX=Core.WPBC_BFB_Sanitize.clamp(rect.width*0.20,12,36);const paddingY=Core.WPBC_BFB_Sanitize.clamp(rect.height*0.10,6,16);// Looser Y if the column is visually tiny/empty
375 -const isVisuallyEmpty=to.childElementCount===0||rect.height<64;const innerTop=rect.top+(isVisuallyEmpty?4:paddingY);const innerBottom=rect.bottom-(isVisuallyEmpty?4:paddingY);const innerLeft=rect.left+paddingX;const innerRight=rect.right-paddingX;const insideX=evtX>innerLeft&&evtX<innerRight;const insideY=evtY>innerTop&&evtY<innerBottom;if(!(insideX&&insideY))return false;// stay in current column until well inside new one
376 -// --- Sticky target commit distance: only switch if we’re clearly inside the new column
377 -const ds=this._dragState;if(ds){if(ds.stickyTo&&ds.stickyTo!==to){// require a deeper penetration to switch columns
378 -const commitX=Core.WPBC_BFB_Sanitize.clamp(rect.width*0.25,18,40);// 25% or 18–40px
379 -const commitY=Core.WPBC_BFB_Sanitize.clamp(rect.height*0.15,10,28);// 15% or 10–28px
380 -const deepInside=evtX>rect.left+commitX&&evtX<rect.right-commitX&&evtY>rect.top+commitY&&evtY<rect.bottom-commitY;if(!deepInside)return false;}// We accept the new target now.
381 -ds.stickyTo=to;ds.lastSwitchTs=performance.now();}return true;},onStart:evt=>{this.builder?._add_dragging_class?.();// Match the flags we set in common so CSS stays consistent on canvas drags too.
382 -const fromPalette=this.builder?.palette_uls?.includes?.(evt.from);this._toggle_dnd_root_flags(true,fromPalette);// set to root HTML document: html.wpbc_bfb__dnd-active.wpbc_bfb__drag-from-palette .
383 -this._tag_drag_mirror(evt);// Tag the mirror under cursor.
384 -this._dragState={stickyTo:null,lastSwitchTs:0};// per-drag state.
385 -},onEnd:()=>{setTimeout(()=>{this.builder._remove_dragging_class();},50);this._toggle_dnd_root_flags(false);// set to root HTML document without these classes: html.wpbc_bfb__dnd-active.wpbc_bfb__drag-from-palette .
386 -this._dragState=null;},// ----------------------------------------
429 +scroll:true,scrollSensitivity:40,scrollSpeed:10,// ----------------------------------------
387 430 // onAdd: handlers.onAdd || this.builder.handle_on_add.bind( this.builder )
388 431 onAdd:evt=>{if(this._on_add_section(evt)){return;}// Fallback: original handler for normal fields.
389 432 (handlers.onAdd||this.builder.handle_on_add.bind(this.builder))(evt);},onUpdate:()=>{this.builder.bus?.emit?.(Core.WPBC_BFB_Events.STRUCTURE_CHANGE,{reason:'sort-update'});}});this._containers.add(container);}/**
390 433 * Handle adding/moving sections via Sortable onAdd.
@@ -711,20 +754,31 @@
711 754 * Base class for BFB modules.
712 755 */UI.WPBC_BFB_Module=class{/** @param {WPBC_Form_Builder} builder */constructor(builder){this.builder=builder;}/** Initialize the module. */init(){}/** Cleanup the module. */destroy(){}};/**
713 756 * Central overlay/controls manager for fields/sections.
714 757 * Pure UI composition; all actions route back into the builder instance.
715 - */UI.WPBC_BFB_Overlay=class{/**
716 - * Ensure an overlay exists and is wired up on the element.
758 + */UI.WPBC_BFB_Overlay=class{/**
759 + * Synchronize every overlay settings button with the real Inspector state.
760 + *
761 + * A selected canvas item can remain selected while another right-bar panel is
762 + * visible. Combining both states prevents a stale pressed button after the
763 + * administrator switches away from the Inspector.
764 + *
765 + * @param {WPBC_Form_Builder} builder - Active Form Builder instance.
766 + * @param {HTMLButtonElement[]|NodeListOf<HTMLButtonElement>|null} [settings_buttons=null]
767 + * Optional bounded controls to reconcile during incremental rendering.
768 + * @returns {void}
769 + */static sync_settings_button_states(builder,settings_buttons=null){const pages_container=builder?.pages_container;if(!pages_container?.querySelectorAll){return;}const inspector=document.getElementById('wpbc_bfb__inspector');const inspector_is_open=!!inspector&&!inspector.hasAttribute('hidden')&&inspector.getAttribute('aria-hidden')!=='true';const selectable_query=`${Core.WPBC_BFB_DOM.SELECTORS.field}, ${Core.WPBC_BFB_DOM.SELECTORS.section}`;const buttons=settings_buttons||pages_container.querySelectorAll('.wpbc_bfb__settings-btn');Array.from(buttons).forEach(settings_button=>{const owner=settings_button.closest(selectable_query);const is_pressed=inspector_is_open&&!!owner?.classList?.contains(Core.WPBC_BFB_DOM.CLASSES.selected);settings_button.setAttribute('aria-pressed',is_pressed?'true':'false');});}/**
770 + * Ensure an overlay exists and is wired up on the element.
717 771 * @param {WPBC_Form_Builder} builder
718 772 * @param {HTMLElement} el - field or section element
719 773 */static ensure(builder,el){if(!el){return;}const isSection=el.classList.contains('wpbc_bfb__section');// let overlay = el.querySelector( Core.WPBC_BFB_DOM.SELECTORS.overlay );
720 774 let overlay=el.querySelector(`:scope > ${Core.WPBC_BFB_DOM.SELECTORS.overlay}`);if(!overlay){overlay=Core.WPBC_Form_Builder_Helper.create_element('div','wpbc_bfb__overlay-controls');el.prepend(overlay);}// Drag handle.
721 775 if(!overlay.querySelector('.wpbc_bfb__drag-handle')){const dragClass=isSection?'wpbc_bfb__drag-handle section-drag-handle':'wpbc_bfb__drag-handle';overlay.appendChild(Core.WPBC_Form_Builder_Helper.create_element('span',dragClass,'<span class="wpbc_icn_drag_indicator"></span>'));}// SETTINGS button (shown for both fields & sections).
722 -if(!overlay.querySelector('.wpbc_bfb__settings-btn')){const settings_btn=Core.WPBC_Form_Builder_Helper.create_element('button','wpbc_bfb__settings-btn','<i class="menu_icon icon-1x wpbc_icn_settings"></i>');settings_btn.type='button';settings_btn.title='Open settings';settings_btn.onclick=e=>{e.preventDefault();// Select THIS element and scroll it into view.
776 +let settings_btn=overlay.querySelector('.wpbc_bfb__settings-btn');if(!settings_btn){settings_btn=Core.WPBC_Form_Builder_Helper.create_element('button','wpbc_bfb__settings-btn','<i class="menu_icon icon-1x wpbc_icn_near_me wpbc_icn_rotate_270"></i>');settings_btn.type='button';settings_btn.title='Open settings';settings_btn.setAttribute('aria-label',settings_btn.title);settings_btn.setAttribute('aria-controls','wpbc_bfb__inspector');settings_btn.setAttribute('aria-pressed','false');settings_btn.onclick=e=>{e.preventDefault();// Select THIS element and scroll it into view.
723 777 builder.select_field(el,{scrollIntoView:true});// Auto-open Inspector from the overlay “Settings” button.
724 778 wpbc_bfb__dispatch_event_safe('wpbc_bfb:show_panel',{panel_id:'wpbc_bfb__inspector',tab_id:'wpbc_tab_inspector'});// Try to bring the inspector into view / focus first input.
725 779 const ins=document.getElementById('wpbc_bfb__inspector');if(ins){ins.scrollIntoView({behavior:'smooth',block:'nearest'});// Focus first interactive control (best-effort).
726 -setTimeout(()=>{const focusable=ins.querySelector('input,select,textarea,button,[contenteditable],[tabindex]:not([tabindex="-1"])');focusable?.focus?.();},260);}};overlay.appendChild(settings_btn);}overlay.setAttribute('role','toolbar');overlay.setAttribute('aria-label',el.classList.contains('wpbc_bfb__section')?'Section tools':'Field tools');return overlay;}};/**
780 +setTimeout(()=>{const focusable=ins.querySelector('input,select,textarea,button,[contenteditable],[tabindex]:not([tabindex="-1"])');focusable?.focus?.();},260);}};overlay.appendChild(settings_btn);}overlay.setAttribute('role','toolbar');overlay.setAttribute('aria-label',el.classList.contains('wpbc_bfb__section')?'Section tools':'Field tools');UI.WPBC_BFB_Overlay.sync_settings_button_states(builder,[settings_btn]);return overlay;}};/**
727 781 * WPBC Layout Chips helper - visual layout picker (chips), e.g., "50%/50%", to a section overlay.
728 782 *
729 783 * Renders Equal/Presets/Custom chips into a host container and wires them to apply the layout.
730 784 */UI.WPBC_BFB_Layout_Chips=class{/** Read per-column min (px) from CSS var set by the guard. */static _get_col_min_px(col){const v=getComputedStyle(col).getPropertyValue('--wpbc-col-min')||'0';const n=parseFloat(v);return Number.isFinite(n)?Math.max(0,n):0;}/**
@@ -776,15 +830,19 @@
776 830 // NEW:
777 831 if(!UI.WPBC_BFB_Layout_Chips._apply_preset_with_min_guard(builder,section_el,weights)){return;// do not toggle active if we didn't change layout
778 832 }btn.parentElement?.querySelectorAll('.wpbc_bfb__layout_chip').forEach(c=>c.classList.remove('is-active'));btn.classList.add('is-active');});return btn;}};/**
779 833 * Selection controller for fields and announcements.
780 - */UI.WPBC_BFB_Selection_Controller=class extends UI.WPBC_BFB_Module{init(){this._selected_uid=null;this.builder.select_field=this.select_field.bind(this);this.builder.get_selected_field=this.get_selected_field.bind(this);this._on_clear=this.on_clear.bind(this);// Centralized delete command used by keyboard + inspector + overlay.
834 + */UI.WPBC_BFB_Selection_Controller=class extends UI.WPBC_BFB_Module{init(){this._selected_uid=null;this.builder.select_field=this.select_field.bind(this);this.builder.get_selected_field=this.get_selected_field.bind(this);this._on_clear=this.on_clear.bind(this);this._on_panel_shown=this._sync_settings_button_states.bind(this);// Centralized delete command used by keyboard + inspector + overlay.
781 835 this.builder.delete_item=el=>{if(!el){return null;}const b=this.builder;const neighbor=b._find_neighbor_selectable?.(el)||null;el.remove();// Use local Core constants (not a global) to avoid ReferenceErrors.
782 836 b.bus?.emit?.(Core.WPBC_BFB_Events.FIELD_REMOVE,{el,id:el?.dataset?.id,uid:el?.dataset?.uid});b.usage?.update_palette_ui?.();// Notify generic structure listeners, too:
783 837 b.bus?.emit?.(Core.WPBC_BFB_Events.STRUCTURE_CHANGE,{reason:'delete',el});// Defer selection a tick so the DOM is fully settled before Inspector hydrates.
784 838 requestAnimationFrame(()=>{// This calls inspector.bind_to_field() and opens the Inspector panel.
785 839 b.select_field?.(neighbor||null,{scrollIntoView:!!neighbor});});return neighbor;};this.builder.bus.on(Core.WPBC_BFB_Events.CLEAR_SELECTION,this._on_clear);this.builder.bus.on(Core.WPBC_BFB_Events.STRUCTURE_LOADED,this._on_clear);// delegated click selection (capture ensures we win before bubbling to containers).
786 -this._on_canvas_click=this._handle_canvas_click.bind(this);this.builder.pages_container.addEventListener('click',this._on_canvas_click,true);}destroy(){this.builder.bus.off(Core.WPBC_BFB_Events.CLEAR_SELECTION,this._on_clear);if(this._on_canvas_click){this.builder.pages_container.removeEventListener('click',this._on_canvas_click,true);this._on_canvas_click=null;}}/**
840 +this._on_canvas_click=this._handle_canvas_click.bind(this);this.builder.pages_container.addEventListener('click',this._on_canvas_click,true);document.addEventListener('wpbc_bfb:panel_shown',this._on_panel_shown);this._sync_settings_button_states();}destroy(){this.builder.bus.off(Core.WPBC_BFB_Events.CLEAR_SELECTION,this._on_clear);if(this._on_canvas_click){this.builder.pages_container.removeEventListener('click',this._on_canvas_click,true);this._on_canvas_click=null;}if(this._on_panel_shown){document.removeEventListener('wpbc_bfb:panel_shown',this._on_panel_shown);this._on_panel_shown=null;}}/**
841 + * Refresh overlay button state after selection or right-bar panel changes.
842 + *
843 + * @returns {void}
844 + */_sync_settings_button_states(){UI.WPBC_BFB_Overlay.sync_settings_button_states(this.builder);}/**
787 845 * Delegated canvas click -> select closest field/section (inner beats outer).
788 846 * @private
789 847 * @param {MouseEvent} e
790 848 */_handle_canvas_click(e){const root=this.builder.pages_container;if(!root)return;// Ignore clicks on controls/handles/resizers, etc.
@@ -810,9 +868,9 @@
810 868 if(field_el&&!root.contains(field_el)){field_el=null;// treat as "no selection".
811 869 }// NEW: if we are leaving a section, clear its column highlight
812 870 if(prevEl&&prevEl!==field_el&&prevEl.classList?.contains('wpbc_bfb__section')&&UI?.WPBC_BFB_Column_Styles?.clear_selected_col_flag){UI.WPBC_BFB_Column_Styles.clear_selected_col_flag(prevEl);}// If we're leaving a field, permanently stop auto-name for it.
813 871 if(prevEl&&prevEl!==field_el&&prevEl.classList?.contains('wpbc_bfb__field')){prevEl.dataset.autoname='0';prevEl.dataset.fresh='0';}root.querySelectorAll('.is-selected').forEach(n=>{n.classList.remove('is-selected');});if(!field_el){const prev=this._selected_uid||null;this._selected_uid=null;this.builder.inspector?.clear?.();root.classList.remove('has-selection');this.builder.bus.emit(Core.WPBC_BFB_Events.CLEAR_SELECTION,{prev_uid:prev,source:'builder'});// Auto-open "Add Fields" when nothing is selected.
814 -wpbc_bfb__dispatch_event_safe('wpbc_bfb:show_panel',{panel_id:'wpbc_bfb__palette_add_new',tab_id:'wpbc_tab_library'});return;}field_el.classList.add('is-selected');this._selected_uid=field_el.getAttribute('data-uid')||null;// Fallback: ensure sections announce themselves as type="section".
872 +wpbc_bfb__dispatch_event_safe('wpbc_bfb:show_panel',{panel_id:'wpbc_bfb__palette_add_new',tab_id:'wpbc_tab_library'});this._sync_settings_button_states();return;}field_el.classList.add('is-selected');this._selected_uid=field_el.getAttribute('data-uid')||null;// Fallback: ensure sections announce themselves as type="section".
815 873 if(field_el.classList.contains('wpbc_bfb__section')&&!field_el.dataset.type){field_el.dataset.type='section';}if(scrollIntoView){field_el.scrollIntoView({behavior:'smooth',block:'center'});}this.builder.inspector?.bind_to_field?.(field_el);// Fallback: ensure inspector enhancers (incl. ValueSlider) run every bind.
816 874 try{const ins=document.getElementById('wpbc_bfb__inspector')||document.querySelector('.wpbc_bfb__inspector');if(ins){UI.InspectorEnhancers?.scan?.(ins);// runs all enhancers
817 875 UI.WPBC_BFB_ValueSlider?.init_on?.(ins);// extra belt-and-suspenders
818 876 }}catch(_){}// NEW: when selecting a section, reflect its active tab as the highlighted column.
@@ -818,9 +876,9 @@
818 876 }}catch(_){}// NEW: when selecting a section, reflect its active tab as the highlighted column.
819 877 if(field_el.classList.contains('wpbc_bfb__section')&&UI?.WPBC_BFB_Column_Styles?.set_selected_col_flag){var k=field_el.dataset&&field_el.dataset.col_styles_active_tab?field_el.dataset.col_styles_active_tab:'1';UI.WPBC_BFB_Column_Styles.set_selected_col_flag(field_el,k);}// Keep sections & fields in the same flow:
820 878 // 1) Generic hydrator for simple dataset-backed controls.
821 879 if(field_el){UI.WPBC_BFB_Inspector_Bridge._generic_hydrate_controls?.(this.builder,field_el);UI.WPBC_BFB_Inspector_Bridge._hydrate_special_controls?.(this.builder,field_el);}// Auto-open Inspector when a user selects a field/section .
822 -wpbc_bfb__dispatch_event_safe('wpbc_bfb:show_panel',{panel_id:'wpbc_bfb__inspector',tab_id:'wpbc_tab_inspector'});root.classList.add('has-selection');this.builder.bus.emit(Core.WPBC_BFB_Events.SELECT,{uid:this._selected_uid,el:field_el});const label=field_el?.querySelector('.wpbc_bfb__field-label')?.textContent||(field_el.classList.contains('wpbc_bfb__section')?'section':'')||field_el?.dataset?.id||'item';this.builder._announce('Selected '+label+'.');}/** @returns {HTMLElement|null} */get_selected_field(){if(!this._selected_uid){return null;}const esc_attr=Core.WPBC_BFB_Sanitize.esc_attr_value_for_selector(this._selected_uid);return this.builder.pages_container.querySelector(`.wpbc_bfb__field[data-uid="${esc_attr}"], .wpbc_bfb__section[data-uid="${esc_attr}"]`);}/** @param {CustomEvent} ev */on_clear(ev){const src=ev?.detail?.source??ev?.source;if(src!=='builder'){this.select_field(null);}}};/**
880 +wpbc_bfb__dispatch_event_safe('wpbc_bfb:show_panel',{panel_id:'wpbc_bfb__inspector',tab_id:'wpbc_tab_inspector'});this._sync_settings_button_states();root.classList.add('has-selection');this.builder.bus.emit(Core.WPBC_BFB_Events.SELECT,{uid:this._selected_uid,el:field_el});const label=field_el?.querySelector('.wpbc_bfb__field-label')?.textContent||(field_el.classList.contains('wpbc_bfb__section')?'section':'')||field_el?.dataset?.id||'item';this.builder._announce('Selected '+label+'.');}/** @returns {HTMLElement|null} */get_selected_field(){if(!this._selected_uid){return null;}const esc_attr=Core.WPBC_BFB_Sanitize.esc_attr_value_for_selector(this._selected_uid);return this.builder.pages_container.querySelector(`.wpbc_bfb__field[data-uid="${esc_attr}"], .wpbc_bfb__section[data-uid="${esc_attr}"]`);}/** @param {CustomEvent} ev */on_clear(ev){const src=ev?.detail?.source??ev?.source;if(src!=='builder'){this.select_field(null);}}};/**
823 881 * Bridges the builder with the Inspector and sanitizes id/name edits.
824 882 */UI.WPBC_BFB_Inspector_Bridge=class extends UI.WPBC_BFB_Module{init(){this._attach_inspector();this._bind_id_sanitizer();this._open_inspector_after_field_added();this._bind_focus_shortcuts();}_attach_inspector(){const b=this.builder;const attach=()=>{if(typeof window.WPBC_BFB_Inspector==='function'){b.inspector=new WPBC_BFB_Inspector(document.getElementById('wpbc_bfb__inspector'),b);this._bind_id_sanitizer();document.removeEventListener('wpbc_bfb_inspector_ready',attach);}};// Ensure we bind after late ready as well.
825 883 if(typeof window.WPBC_BFB_Inspector==='function'){attach();}else{b.inspector={bind_to_field(){},clear(){}};document.addEventListener('wpbc_bfb_inspector_ready',attach);setTimeout(attach,0);}}/**
826 884 * Listen for "focus" hints from the canvas and open the right group/tab.
@@ -982,17 +1040,17 @@
982 1040 String(section_data.cssclass).split(/\s+/).filter(Boolean).forEach(cls=>section.classList.add(cls));}const row=section.querySelector('.wpbc_bfb__row');// Delegate parsing + activation + application to the Column Styles service.
983 1041 try{const json=section.getAttribute('data-col_styles')||(section.dataset?section.dataset.col_styles||'':'');const arr=UI.WPBC_BFB_Column_Styles.parse_col_styles(json);UI.WPBC_BFB_Column_Styles.apply(section,arr);}catch(_e){}cols_data.forEach((col_data,index)=>{const columns_only=row.querySelectorAll(':scope > .wpbc_bfb__column');const col=columns_only[index];col.style.flexBasis=col_data.width||'100%';(col_data.items||[]).forEach(item=>{if(!item||!item.type){return;}if(item.type==='field'){const el=b.build_field(item.data);if(el){col.appendChild(el);b.trigger_field_drop_callback(el,'load');}return;}if(item.type==='section'){this.rebuild_section(item.data,col);}});});const computed=b.layout.compute_effective_bases_from_row(row,b.col_gap_percent);b.layout.apply_bases_to_row(row,computed.bases);this.init_all_nested_sortables(section);// NEW: retag UIDs first (so uniqueness checks don't exclude originals), then dedupe all keys.
984 1042 this._retag_uids_in_subtree(section);this._dedupe_subtree_strict(section);return section;}/** @param {HTMLElement} container */init_all_nested_sortables(container){const b=this.builder;if(container.classList.contains('wpbc_bfb__form_preview_section_container')){this.init_section_sortable(container);}container.querySelectorAll('.wpbc_bfb__section').forEach(section=>{section.querySelectorAll('.wpbc_bfb__column').forEach(col=>{this.init_section_sortable(col);});});}/** @param {HTMLElement} container */init_section_sortable(container){const b=this.builder;if(!container){return;}const is_column=container.classList.contains('wpbc_bfb__column');const is_top_level=container.classList.contains('wpbc_bfb__form_preview_section_container');if(!is_column&&!is_top_level){return;}b.init_sortable?.(container);}};/**
985 1043 * Serialization and deserialization of pages/sections/fields.
986 - */UI.WPBC_BFB_Structure_IO=class extends UI.WPBC_BFB_Module{init(){this.builder.get_structure=()=>this.serialize();this.builder.load_saved_structure=(s,opts)=>this.deserialize(s,opts);}/**
987 - * Normalize option values when a field explicitly disables separate values.
988 - *
989 - * Older Builder versions persisted an unchecked value_differs toggle as an
990 - * empty string. Treat that explicit legacy value as false, while retaining
991 - * the schema default when the property is genuinely absent.
992 - *
993 - * @param {Object} field_data Serialized field data.
994 - * @returns {Object} Normalized serialized field data.
1044 + */UI.WPBC_BFB_Structure_IO=class extends UI.WPBC_BFB_Module{init(){this.builder.get_structure=()=>this.serialize();this.builder.load_saved_structure=(s,opts)=>this.deserialize(s,opts);}/**
1045 + * Normalize option values when a field explicitly disables separate values.
1046 + *
1047 + * Older Builder versions persisted an unchecked value_differs toggle as an
1048 + * empty string. Treat that explicit legacy value as false, while retaining
1049 + * the schema default when the property is genuinely absent.
1050 + *
1051 + * @param {Object} field_data Serialized field data.
1052 + * @returns {Object} Normalized serialized field data.
995 1053 */_normalize_field_option_values(field_data){const has_value_differs=Object.prototype.hasOwnProperty.call(field_data,'value_differs');if(!has_value_differs){return field_data;}const value_differs=Core.WPBC_BFB_Sanitize.coerce_boolean(field_data.value_differs,false);field_data.value_differs=value_differs;if(!value_differs&&Array.isArray(field_data.options)){field_data.options=field_data.options.map(option_record=>{if(!option_record||typeof option_record!=='object'){return option_record;}return Object.assign({},option_record,{value:String(option_record.label==null?'':option_record.label)});});}return field_data;}/** @returns {Array} */serialize(){const b=this.builder;this._normalize_ids();this._normalize_names();const pages=[];b.pages_container.querySelectorAll('.wpbc_bfb__panel--preview').forEach((page_el,page_index)=>{const container=page_el.querySelector('.wpbc_bfb__form_preview_section_container');const content=[];if(!container){pages.push({page:page_index+1,content});return;}container.querySelectorAll(':scope > *').forEach(child=>{if(child.classList.contains('wpbc_bfb__section')){content.push({type:'section',data:this.serialize_section(child)});return;}if(child.classList.contains('wpbc_bfb__field')){if(child.classList.contains('is-invalid')){return;}const f_data=this._normalize_field_option_values(Core.WPBC_Form_Builder_Helper.get_all_data_attributes(child));// Drop ephemeral/editor-only flags
996 1054 ['uid','fresh','autoname','was_loaded','name_user_touched'].forEach(k=>{if(k in f_data)delete f_data[k];});content.push({type:'field',data:f_data});}});pages.push({page:page_index+1,content});});return pages;}/**
997 1055 * @param {HTMLElement} section_el
998 1056 * @returns {{id:string,label:string,html_id:string,cssclass:string,col_styles:string,columns:Array}}
@@ -1090,9 +1148,9 @@
1090 1148 * @param {HTMLElement} root
1091 1149 */UI.apply_post_render=function(root){if(!root){return;}try{UI.WPBC_BFB_ValueSlider?.init_on?.(root);}catch(e){/* noop */}try{var T=UI.WPBC_BFB_Toggle_Normalizer;if(T&&typeof T.upgrade_checkboxes_in==='function'){T.upgrade_checkboxes_in(root);}}catch(e){w._wpbc?.dev?.error?.('apply_post_render.toggle',e);}// Accessibility: keep aria-checked in sync for all toggles inside root.
1092 1150 try{root.querySelectorAll('.wpbc_ui__toggle input[type="checkbox"]').forEach(function(cb){if(cb.__wpbc_aria_hooked){return;}cb.__wpbc_aria_hooked=true;cb.setAttribute('aria-checked',cb.checked?'true':'false');// Delegate ‘change’ just once per render – native delegation still works fine for your logic.
1093 1151 cb.addEventListener('change',()=>{cb.setAttribute('aria-checked',cb.checked?'true':'false');},{passive:true});});}catch(e){w._wpbc?.dev?.error?.('apply_post_render.aria',e);}};UI.InspectorEnhancers=UI.InspectorEnhancers||function(){var regs=[];function register(name,selector,init,destroy){regs.push({name,selector,init,destroy});}function scan(root){if(!root)return;regs.forEach(function(r){root.querySelectorAll(r.selector).forEach(function(node){node.__wpbc_eh=node.__wpbc_eh||{};if(node.__wpbc_eh[r.name])return;try{r.init&&r.init(node,root);node.__wpbc_eh[r.name]=true;}catch(_e){}});});}function destroy(root){if(!root)return;regs.forEach(function(r){root.querySelectorAll(r.selector).forEach(function(node){try{r.destroy&&r.destroy(node,root);}catch(_e){}if(node.__wpbc_eh)delete node.__wpbc_eh[r.name];});});}return{register,scan,destroy};}();UI.WPBC_BFB_ValueSlider={init_on(root){var groups=(root.nodeType===1?[root]:[]).concat([].slice.call(root.querySelectorAll?.('[data-len-group]')||[]));groups.forEach(function(g){if(!g.matches||!g.matches('[data-len-group]'))return;if(g.__wpbc_len_wired)return;var number=g.querySelector('[data-len-value]');var range=g.querySelector('[data-len-range]');var unit=g.querySelector('[data-len-unit]');if(!number||!range)return;// Mirror constraints if missing on the range.
1094 -['min','max','step'].forEach(function(a){if(!range.hasAttribute(a)&&number.hasAttribute(a)){range.setAttribute(a,number.getAttribute(a));}});function sync_range_from_number(){if(range.value!==number.value){range.value=number.value;}}function dispatch_input(el){try{el.dispatchEvent(new Event('input',{bubbles:true}));}catch(_e){}}function dispatch_change(el){try{el.dispatchEvent(new Event('change',{bubbles:true}));}catch(_e){}}// Throttle range->number syncing (time-based).
1152 +['min','max','step'].forEach(function(a){if(!range.hasAttribute(a)&&number.hasAttribute(a)){range.setAttribute(a,number.getAttribute(a));}});function sync_range_from_number(){if(g.hasAttribute('data-len-allow-empty')&&''===number.value){var empty_range_value=range.min||'0';if(range.value!==empty_range_value){range.value=empty_range_value;}return;}if(range.value!==number.value){range.value=number.value;}}function dispatch_input(el){try{el.dispatchEvent(new Event('input',{bubbles:true}));}catch(_e){}}function dispatch_change(el){try{el.dispatchEvent(new Event('change',{bubbles:true}));}catch(_e){}}// Throttle range->number syncing (time-based).
1095 1153 var timer_id=0;var pending_val=null;var pending_change=false;var last_flush_ts=0;// Change this to tune speed: 50..120 ms is a good range.
1096 1154 var min_interval_ms=parseInt(g.dataset.lenThrottle||UI.VALUE_SLIDER_THROTTLE_MS,10);min_interval_ms=Number.isFinite(min_interval_ms)?Math.max(0,min_interval_ms):120;function flush_range_to_number(){timer_id=0;if(pending_val==null){return;}var next=String(pending_val);pending_val=null;if(number.value!==next){number.value=next;// IMPORTANT: only 'input' while dragging.
1097 1155 dispatch_input(number);}if(pending_change){pending_change=false;dispatch_change(number);}last_flush_ts=Date.now();}function schedule_range_to_number(val,emit_change){pending_val=val;if(emit_change){pending_change=true;}// If commit requested, flush immediately.
1098 1156 if(pending_change){if(timer_id){clearTimeout(timer_id);timer_id=0;}flush_range_to_number();return;}var now=Date.now();var delta=now-last_flush_ts;// If enough time passed, flush immediately; else schedule.
@@ -1310,9 +1368,9 @@
1310 1368 * @param {string} title_text
1311 1369 * @returns {HTMLElement}
1312 1370 */function build_header(inspector_ui,title_fallback,schema_for_type){inspector_ui=inspector_ui||{};schema_for_type=schema_for_type||{};var variant=inspector_ui.header_variant||'minimal';var headerActions=inspector_ui.header_actions||schema_for_type.header_actions||['deselect','scrollto','move-up','move-down','duplicate','delete'];var title=inspector_ui.title||title_fallback||'';var description=inspector_ui.description||'';// helper to create a button for either header style
1313 1371 function actionBtn(act,minimal){if(minimal){return el('button',{type:'button','class':'button-link','data-action':act},'');}// toolbar variant (rich)
1314 -var iconMap={'deselect':'wpbc_icn_remove_done','scrollto':'wpbc_icn_ads_click filter_center_focus','move-up':'wpbc_icn_arrow_upward','move-down':'wpbc_icn_arrow_downward','duplicate':'wpbc_icn_content_copy','delete':'wpbc_icn_delete_outline'};var classes='button button-secondary wpbc_ui_control wpbc_ui_button';if(act==='delete')classes+=' wpbc_ui_button_danger button-link-delete';var btn=el('button',{type:'button','class':classes,'data-action':act,'aria-label':act.replace(/-/g,' ')});if(act==='delete'){btn.appendChild(el('span',{'class':'in-button-text'},'Delete'));btn.appendChild(document.createTextNode(' '));// minor spacing before icon
1372 +var iconMap={'deselect':'wpbc_icn_near_me_disabled','scrollto':'wpbc_icn_ads_click filter_center_focus','move-up':'wpbc_icn_arrow_upward','move-down':'wpbc_icn_arrow_downward','duplicate':'wpbc_icn_content_copy','delete':'wpbc_icn_delete_outline'};var classes='button button-secondary wpbc_ui_control wpbc_ui_button';if(act==='delete')classes+=' wpbc_ui_button_danger button-link-delete';var btn=el('button',{type:'button','class':classes,'data-action':act,'aria-label':act.replace(/-/g,' ')});if(act==='delete'){btn.appendChild(el('span',{'class':'in-button-text'},'Delete'));btn.appendChild(document.createTextNode(' '));// minor spacing before icon
1315 1373 }btn.appendChild(el('i',{'class':'menu_icon icon-1x '+(iconMap[act]||'')}));return btn;}// === minimal header (existing look; default) ===
1316 1374 if(variant!=='toolbar'){var header=el('header',{'class':'wpbc_bfb__inspector__header'});header.appendChild(el('h3',null,title||''));var actions=el('div',{'class':'wpbc_bfb__inspector__header_actions'});headerActions.forEach(function(act){actions.appendChild(actionBtn(act,/*minimal*/true));});header.appendChild(actions);return header;}// === toolbar header (rich title/desc + grouped buttons) ===
1317 1375 var root=el('div',{'class':'wpbc_bfb__inspector__head'});var wrap=el('div',{'class':'header_container'});var left=el('div',{'class':'header_title_content'});var h3=el('h3',{'class':'title'},title||'');left.appendChild(h3);if(description){left.appendChild(el('div',{'class':'desc'},description));}var right=el('div',{'class':'actions wpbc_ajx_toolbar wpbc_no_borders'});var uiC=el('div',{'class':'ui_container ui_container_small'});var uiG=el('div',{'class':'ui_group'});// Split into visual groups: first 2, next 2, then the rest.
1318 1376 var g1=el('div',{'class':'ui_element'});var g2=el('div',{'class':'ui_element'});var g3=el('div',{'class':'ui_element'});headerActions.slice(0,2).forEach(function(act){g1.appendChild(actionBtn(act,false));});headerActions.slice(2,4).forEach(function(act){g2.appendChild(actionBtn(act,false));});headerActions.slice(4).forEach(function(act){g3.appendChild(actionBtn(act,false));});uiG.appendChild(g1);uiG.appendChild(g2);uiG.appendChild(g3);uiC.appendChild(uiG);right.appendChild(uiC);wrap.appendChild(left);wrap.appendChild(right);root.appendChild(wrap);return root;}function factory_render(panel_el,schema_for_type,data,opts){if(!panel_el)return panel_el;schema_for_type=schema_for_type||{};var props_schema=schema_for_type.schema&&schema_for_type.schema.props?schema_for_type.schema.props:{};var inspector_ui=schema_for_type.inspector_ui||{};var groups=inspector_ui.groups||[];var header_actions=inspector_ui.header_actions||schema_for_type.header_actions||[];var title_text=opts&&opts.title||inspector_ui.title||schema_for_type.label||data&&data.label||'';// Prepare rendering context for slots/value_from, etc.
@@ -1350,5 +1408,5 @@
1350 1408 */_set_panel_section_cols(sectionEl){try{// Prefer the already-registered value_from helper if present.
1351 1409 var compute=w.wpbc_bfb_inspector_factory_value_from&&w.wpbc_bfb_inspector_factory_value_from.compute_section_columns;var cols=1;if(typeof compute==='function'){cols=compute({el:sectionEl})||1;}else{// Fallback: compute directly from the DOM.
1352 1410 var row=sectionEl&&sectionEl.querySelector(':scope > .wpbc_bfb__row');cols=row?row.querySelectorAll(':scope > .wpbc_bfb__column').length||1:1;if(cols<1)cols=1;if(cols>4)cols=4;}this.panel.setAttribute('data-bfb-section-cols',String(cols));}catch(_){}}_create_fallback_panel(){const p=document.createElement('div');p.id='wpbc_bfb__inspector';p.className='wpbc_bfb__inspector';document.body.appendChild(p);return/** @type {HTMLDivElement} */p;}}// Export class + ready signal.
1353 1411 w.WPBC_BFB_Inspector=WPBC_BFB_Inspector;document.dispatchEvent(new Event('wpbc_bfb_inspector_ready'));})(window);
1354 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYmZiL19vdXQvd3BiY19iZmIuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJVSSIsIldQQkNfQkZCX1Nhbml0aXplIiwiZXNjX2NzcyIsInMiLCJDU1MiLCJlc2NhcGUiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yIiwidiIsInNhbml0aXplX2h0bWxfaWQiLCJ0cmltIiwidGVzdCIsInNhbml0aXplX2h0bWxfbmFtZSIsImVzY2FwZV9odG1sIiwiZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRvX3Rva2VuIiwidG9fa2ViYWIiLCJ0b0xvd2VyQ2FzZSIsImlzX3RydXRoeSIsImNvZXJjZV9ib29sZWFuIiwiZGVmIiwicGFyc2VfcGVyY2VudCIsImZhbGxiYWNrX3ZhbHVlIiwibiIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsImVzY2FwZV9mb3JfYXR0cl9xdW90ZWQiLCJlc2NhcGVfZm9yX3Nob3J0Y29kZSIsInNhZmVfanNvbl9wYXJzZSIsImZhbGxiYWNrIiwiSlNPTiIsInBhcnNlIiwiXyIsInN0cmluZ2lmeV9kYXRhX3ZhbHVlIiwic3RyaW5naWZ5IiwiY29uc29sZSIsImVycm9yIiwic2FuaXRpemVfY3NzX2xlbiIsIm0iLCJtYXRjaCIsInNhbml0aXplX2hleF9jb2xvciIsIldQQkNfQkZCX0lkU2VydmljZSIsImNvbnN0cnVjdG9yIiwicGFnZXNfY29udGFpbmVyIiwiZW5zdXJlX3VuaXF1ZV9maWVsZF9pZCIsImJhc2VJZCIsImN1cnJlbnRFbCIsImJhc2UiLCJpZCIsImVzYyIsImVzY1VpZCIsIm5vdFNlbGYiLCJkYXRhc2V0IiwidWlkIiwicXVlcnlTZWxlY3RvciIsImZvdW5kIiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsImVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSIsIm5hbWUiLCJzZWxlY3RvciIsImNsYXNoZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwic2V0X2ZpZWxkX2lkIiwiZmllbGRfZWwiLCJuZXdJZFJhdyIsInJlbmRlclByZXZpZXciLCJkZXNpcmVkIiwidW5pcXVlIiwic2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX25hbWUiLCJuZXdOYW1lUmF3IiwicmF3IiwiZ2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX2h0bWxfaWQiLCJuZXdIdG1sSWRSYXciLCJyZW1vdmVBdHRyaWJ1dGUiLCJodG1sSWQiLCJjbGFzaEluQ2FudmFzIiwiZG9tQ2xhc2giLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZG9tQ2xhc2hJc1NlbGYiLCJjb250YWlucyIsIldQQkNfQkZCX0xheW91dFNlcnZpY2UiLCJvcHRzIiwiY29sX2dhcF9wZXJjZW50IiwiY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3ciLCJyb3dfZWwiLCJnYXBfcGVyY2VudCIsImNvbHMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjb2wiLCJzdHlsZSIsImZsZXhCYXNpcyIsInAiLCJOYU4iLCJzdW1fcmF3IiwicmVkdWNlIiwiYSIsImIiLCJncCIsInRvdGFsX2dhcHMiLCJhdmFpbGFibGUiLCJzY2FsZSIsImJhc2VzIiwiYXBwbHlfYmFzZXNfdG9fcm93IiwiZm9yRWFjaCIsImkiLCJzZXRfZXF1YWxfYmFzZXMiLCJlYWNoIiwiZmlsbCIsImFwcGx5X2xheW91dF9wcmVzZXQiLCJzZWN0aW9uT3JSb3ciLCJ3ZWlnaHRzIiwicm93IiwiY2xhc3NMaXN0IiwiaXNBcnJheSIsInN1bSIsImJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMiLCJmb3JtYXRfcHJlc2V0X2xhYmVsIiwicm91bmQiLCJqb2luIiwicGFyc2Vfd2VpZ2h0cyIsImlucHV0Iiwic3BsaXQiLCJmaWx0ZXIiLCJXUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSIsInBhbGV0dGVfdWxzIiwicGFyc2VfdXNhZ2VfbGltaXQiLCJJbmZpbml0eSIsInBhcnNlSW50IiwiY291bnRfdXNhZ2VfYnlfa2V5IiwidXNlZCIsImFsbCIsImVsIiwia2V5IiwidXNhZ2Vfa2V5IiwidHlwZSIsImdldF9saW1pdF9mb3Jfa2V5Iiwicm9vdHMiLCJhbGxQYWxldHRlRmllbGRzIiwiZmxhdE1hcCIsInIiLCJsaW1pdCIsInVzYWdlbnVtYmVyIiwidXBkYXRlX3BhbGV0dGVfdWkiLCJ1c2FnZSIsInBhbGV0dGVzIiwicGFsIiwicGFuZWxfZmllbGQiLCJwYWxldHRlSWQiLCJ1c2FnZUtleSIsInJhd19saW1pdCIsInBlckVsTGltaXQiLCJnbG9iYWxMaW1pdCIsImN1cnJlbnQiLCJkaXNhYmxlIiwicG9pbnRlckV2ZW50cyIsIm9wYWNpdHkiLCJjb3VudF9mb3Jfa2V5IiwibGltaXRfZm9yX2tleSIsInJlbWFpbmluZ19mb3Jfa2V5IiwiY2FuX2FkZCIsImRlbHRhIiwicmVtIiwiZ2F0ZV9vcl9hbGVydCIsImxhYmVsIiwiYWxlcnQiLCJpc191c2FnZV9vayIsIldQQkNfQkZCX0V2ZW50cyIsIk9iamVjdCIsImZyZWV6ZSIsIlNFTEVDVCIsIkNMRUFSX1NFTEVDVElPTiIsIkZJRUxEX0FERCIsIkZJRUxEX1JFTU9WRSIsIlNUUlVDVFVSRV9DSEFOR0UiLCJTVFJVQ1RVUkVfTE9BREVEIiwiV1BCQ19CRkJfRXZlbnRCdXMiLCJzY29wZV9lbCIsImVtaXQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwib24iLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJXUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIiLCJidWlsZGVyIiwiZ2lkIiwiaW5zdGFuY2VfaWQiLCJncm91cE5hbWUiLCJhbmltYXRpb24iLCJnaG9zdENsYXNzIiwiY2hvc2VuQ2xhc3MiLCJkcmFnQ2xhc3MiLCJfY29udGFpbmVycyIsIlNldCIsIl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCIsIl9iaW5kX2RyYWdfZmFpbF9zYWZlIiwiX2NsZWFudXBfZHJhZ191aSIsIl9kcmFnU3RhdGUiLCJfdG9nZ2xlX2RuZF9yb290X2ZsYWdzIiwiX3JlbW92ZV9kcmFnZ2luZ19jbGFzcyIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImZpbmlzaF9kcmFnIiwid2luZG93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXZ0X25hbWUiLCJoaWRkZW4iLCJfdGFnX2RyYWdfbWlycm9yIiwiZXZ0IiwiZnJvbVBhbGV0dGUiLCJpbmNsdWRlcyIsInJvbGUiLCJtaXJyb3IiLCJhY3RpdmUiLCJmcm9tX3BhbGV0dGUiLCJyb290IiwiZG9jdW1lbnRFbGVtZW50IiwiYWRkIiwicmVtb3ZlIiwiZW5zdXJlX3NpbXBsZV9saXN0IiwiY29udGFpbmVyIiwiaGFuZGxlcnMiLCJTb3J0YWJsZSIsImdldCIsImNvbW1vbiIsImZvcmNlRmFsbGJhY2siLCJmYWxsYmFja09uQm9keSIsImZhbGxiYWNrVG9sZXJhbmNlIiwicmVtb3ZlQ2xvbmVPbkhpZGUiLCJvblN0YXJ0IiwiX2FkZF9kcmFnZ2luZ19jbGFzcyIsIm9uRW5kIiwic2V0VGltZW91dCIsImNyZWF0ZSIsImdyb3VwIiwicHVsbCIsInB1dCIsInNvcnQiLCJkaXJlY3Rpb24iLCJoYW5kbGUiLCJoYW5kbGVfc2VsZWN0b3IiLCJkcmFnZ2FibGUiLCJkcmFnZ2FibGVfc2VsZWN0b3IiLCJmYWxsYmFja0NsYXNzIiwicHJldmVudE9uRmlsdGVyIiwiaW52ZXJ0U3dhcCIsInN3YXBUaHJlc2hvbGQiLCJpbnZlcnRlZFN3YXBUaHJlc2hvbGQiLCJlbXB0eUluc2VydFRocmVzaG9sZCIsImRyYWdvdmVyQnViYmxlIiwic2Nyb2xsIiwic2Nyb2xsU2Vuc2l0aXZpdHkiLCJzY3JvbGxTcGVlZCIsIm9uVXBkYXRlIiwiZW5zdXJlIiwic29ydGFibGVfa2luZCIsInRvIiwiZHJhZ2dlZEVsIiwib25Nb3ZlIiwib3JpZ2luYWxFdmVudCIsImluX3ByZXZpZXdfY2FudmFzIiwiY2xvc2VzdCIsImlzQ29sdW1uIiwiZnJvbVJvdyIsInRvUm93IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImV2dFgiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImV2dFkiLCJjbGllbnRZIiwicGFkZGluZ1giLCJ3aWR0aCIsInBhZGRpbmdZIiwiaGVpZ2h0IiwiaXNWaXN1YWxseUVtcHR5IiwiY2hpbGRFbGVtZW50Q291bnQiLCJpbm5lclRvcCIsInRvcCIsImlubmVyQm90dG9tIiwiYm90dG9tIiwiaW5uZXJMZWZ0IiwibGVmdCIsImlubmVyUmlnaHQiLCJyaWdodCIsImluc2lkZVgiLCJpbnNpZGVZIiwiZHMiLCJzdGlja3lUbyIsImNvbW1pdFgiLCJjb21taXRZIiwiZGVlcEluc2lkZSIsImxhc3RTd2l0Y2hUcyIsInBlcmZvcm1hbmNlIiwibm93Iiwib25BZGQiLCJfb25fYWRkX3NlY3Rpb24iLCJoYW5kbGVfb25fYWRkIiwiYmluZCIsImJ1cyIsInJlYXNvbiIsIml0ZW0iLCJkYXRhIiwiV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyIiwiZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMiLCJpc1NlY3Rpb24iLCJhZGRfb3ZlcmxheV90b29sYmFyIiwicGFnZXNfc2VjdGlvbnMiLCJpbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzIiwiY29sdW1ucyIsInNlbGVjdF9maWVsZCIsImFkZF9zZWN0aW9uIiwic2VjdGlvbiIsImxhc3RFbGVtZW50Q2hpbGQiLCJuZXdJbmRleCIsImNoaWxkcmVuIiwicmVmIiwiaW5zZXJ0QmVmb3JlIiwiZGVzdHJveUFsbCIsImluc3QiLCJkZXN0cm95IiwiY2xlYXIiLCJXUEJDX0JGQl9ET00iLCJTRUxFQ1RPUlMiLCJwYWdlUGFuZWwiLCJmaWVsZCIsInZhbGlkRmllbGQiLCJjb2x1bW4iLCJvdmVybGF5IiwiQ0xBU1NFUyIsInNlbGVjdGVkIiwiQVRUUiIsImNyZWF0ZV9lbGVtZW50IiwidGFnIiwiY2xhc3NfbmFtZSIsImlubmVyX2h0bWwiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaW5uZXJIVE1MIiwic2V0X2RhdGFfYXR0cmlidXRlcyIsImRhdGFfb2JqIiwiZW50cmllcyIsInZhbCIsInZhbHVlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJzdGFydHNXaXRoIiwiZSIsImhhc0V4cGxpY2l0TGFiZWwiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInJlbmRlcl9maWVsZF9pbm5lcl9odG1sIiwiZmllbGRfZGF0YSIsImhhc0xhYmVsIiwiaXNfcmVxdWlyZWQiLCJyZXF1aXJlZCIsIndyYXBwZXIiLCJzcGFuTGFiZWwiLCJ0ZXh0Q29udGVudCIsImFwcGVuZENoaWxkIiwic3BhblR5cGUiLCJkZWJvdW5jZSIsImZuIiwid2FpdCIsInQiLCJkZWJvdW5jZWQiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJXUEJDX0JGQl9GaWVsZF9SZW5kZXJlcl9SZWdpc3RyeSIsIk1hcCIsInJlZ2lzdGVyIiwiQ2xhc3NSZWYiLCJzZXQiLCJXUEJDX0JGQl9GaWVsZF9CYXNlIiwiZ2V0X2RlZmF1bHRzIiwiaHRtbF9pZCIsInBsYWNlaG9sZGVyIiwibWlubGVuZ3RoIiwibWF4bGVuZ3RoIiwicGF0dGVybiIsImNzc2NsYXNzIiwiaGVscCIsIm5vcm1hbGl6ZV9kYXRhIiwiZCIsImRlZmF1bHRzIiwib3V0IiwiayIsImdldF90ZW1wbGF0ZSIsInRlbXBsYXRlX2lkIiwid3AiLCJ0ZW1wbGF0ZSIsImRvbUlkIiwiX19iZmJfdHBsX2NhY2hlX21hcCIsImNvbXBpbGVyIiwicmVuZGVyIiwiY3R4IiwiY29tcGlsZSIsInNhbml0IiwidGl0bGUiLCJvbl9maWVsZF9kcm9wIiwibWV0YSIsImNvbnRleHQiLCJkZWZzIiwidW5kZWZpbmVkIiwiaGFzVmFsdWUiLCJkZWZhdWx0VmFsIiwiU3RydWN0dXJlIiwidXBkYXRlX2ZpZWxkX3Byb3AiLCJfaW5uZXIiLCJfZSIsImZyZXNoIiwiYXV0b25hbWUiLCJ3YXNfbG9hZGVkIiwiaGFzQXR0cmlidXRlIiwiUyIsInVuaXEiLCJuYW1lX3VzZXJfdG91Y2hlZCIsIm5hbWVfZnJvbV9sYWJlbCIsIm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwiLCJsYWJlbFZhbCIsImFsbG93QXV0byIsInVzZXJUb3VjaGVkIiwiaXNMb2FkZWQiLCJpbnMiLCJuYW1lQ3RybCIsIldQQkNfQkZCX1NlbGVjdF9CYXNlIiwib3B0aW9uX3Jvd190ZW1wbGF0ZV9pZCIsImtpbmQiLCJfX3Jvb3Rfd2lyZWQiLCJfX3Jvb3Rfbm9kZSIsInVpIiwibGlzdCIsImhvbGRlciIsInRvZ2dsZSIsImFkZF9idG4iLCJkcmFnX2hhbmRsZSIsIm11bHRpcGxlX2NoayIsImRlZmF1bHRfdGV4dCIsInBsYWNlaG9sZGVyX2lucHV0IiwicGxhY2Vob2xkZXJfbm90ZSIsInNpemVfaW5wdXQiLCJtZW51X3Jvb3QiLCJtZW51X3RvZ2dsZSIsIm1lbnVfYWN0aW9uIiwidmFsdWVfZGlmZmVyc19jaGsiLCJidWlsZF92YWx1ZV9mcm9tX2xhYmVsIiwiZGlmZmVycyIsImlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCIsInBhbmVsIiwiY2hrIiwiY2hlY2tlZCIsInN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkiLCJyb3dzIiwibGJsX2luIiwidmFsX2luIiwiZGlzcGxheSIsImhhc0NhY2hlIiwiY2FjaGVkX3ZhbHVlIiwidXNlckVkaXRlZCIsInZhbHVlX3VzZXJfdG91Y2hlZCIsImxibCIsIm1pcnJvcmVkIiwiaXNfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsIm1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZCIsImluaXRfcm93X2ZyZXNoX2ZsYWdzIiwibXVsdGlwbGUiLCJzaXplIiwiZGVmYXVsdF92YWx1ZSIsIm9wdGlvbnMiLCJtaW5fd2lkdGgiLCJzZXRQcm9wZXJ0eSIsInRwbCIsIl93cGJjIiwiZGV2IiwiV1BCQ19CRkJfT3ZlcmxheSIsImlzX2Ryb3AiLCJvIiwicGgiLCJkZmx0IiwiZ2V0X3BhbmVsX3Jvb3QiLCJnZXRfbGlzdCIsImdldF9ob2xkZXIiLCJtYWtlX3VpZCIsImFwcGVuZF9yb3ciLCJpZHgiLCJyb3dkIiwiYXNzaWduIiwiaW5kZXgiLCJ0cGxfaWQiLCJodG1sIiwid3JhcCIsIm5vZGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInZhbEluIiwibGJsSW4iLCJjbG9zZV9kcm9wZG93biIsImFuY2hvcl9lbCIsImluc2VydF9hZnRlciIsIm5ld19ub2RlIiwicmVmX25vZGUiLCJuZXh0U2libGluZyIsImNvbW1pdF9vcHRpb25zIiwic2VsIiwicHVzaCIsIkV2ZW50Iiwic3luY19kZWZhdWx0X3ZhbHVlX2xvY2siLCJzeW5jX3BsYWNlaG9sZGVyX2xvY2siLCJfX3NlbGVjdGJhc2VfZmllbGQiLCJlbnN1cmVfc29ydGFibGUiLCJleGlzdGluZyIsIndwYmNfYmZiX2FwaSIsImdldF9idWlsZGVyIiwid3BiY19iZmIiLCJzb3J0YWJsZSIsInNvcnRhYmxlX2luaXQiLCJyZWJ1aWxkX2lmX2VtcHR5IiwiaGFzX3Jvd19kZWZhdWx0cyIsImNoZWNrcyIsImlzX211bHRpcGxlX2VuYWJsZWQiLCJoYXNfdGV4dF9kZWZhdWx0X3ZhbHVlIiwiZHYiLCJub3RlIiwibG9jayIsImRpc2FibGVkIiwiaXNNdWx0aXBsZSIsInBsYWNlaG9sZGVyUm93Iiwic2l6ZUlucHV0Iiwic2l6ZVJvdyIsImVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQiLCJjbGlja2VkIiwia2VwdCIsImoiLCJib290c3RyYXBfcGFuZWwiLCJzZWxlY3RiYXNlX2Jvb3RzdHJhcHBlZCIsIndpcmVfb25jZSIsIl9fc2VsZWN0YmFzZV93aXJlZCIsIm9uX3JlYWR5X29yX3JlbmRlciIsImV2Iiwid2lyZV9yb290X2xpc3RlbmVycyIsImlzQ29ubmVjdGVkIiwic2VsZWN0YmFzZV9yb290X3dpcmVkIiwiZ2V0X3BhbmVsIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3Rpb24iLCJwcmV2X2NvdW50IiwiaXNfbGFiZWxfb3JfdmFsdWUiLCJpc190b2dnbGUiLCJpc19tdWx0aXBsZSIsIm1hdGNoZXMiLCJpc19kZWZhdWx0X3RleHQiLCJpc192YWx1ZV9kaWZmZXJzIiwiaXNfbXVsdGkiLCJfcHVsc2VfdGltZXJzIiwiX3B1bHNlX21ldGEiLCJQVUxTRV9USFJPVFRMRV9NUyIsIlBVTFNFX0RFQk9VTkNFX01TIiwiU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyIsIlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyIsImNhbmNlbF9wdWxzZSIsImRlbGV0ZSIsInRva2VuIiwiY29sb3Jfc2V0IiwicmVtb3ZlUHJvcGVydHkiLCJkZWJvdW5jZV9pZCIsIl9yZXN0YXJ0X2Nzc19hbmltYXRpb24iLCJjbHMiLCJvZmZzZXRXaWR0aCIsInB1bHNlX29uY2UiLCJkdXJfbXMiLCJtcyIsInB1bHNlX3NlcXVlbmNlIiwidGltZXMiLCJvbl9tcyIsIm9mZl9tcyIsImhleF9jb2xvciIsImJvZHkiLCJjb3VudCIsIkRhdGUiLCJ0aHJvdHRsZV9tcyIsImxhc3RfdHMiLCJoYXZlX2NvbG9yIiwidGljayIsIm0yIiwibTMiLCJwdWxzZV9xdWVyeV9kZWJvdW5jZWQiLCJyb290X29yX3NlbGVjdG9yIiwid2FpdF9tcyIsImMiLCJjb2xvciIsImRlZl9tcyIsInB1bHNlX3F1ZXJ5IiwicHVsc2Vfc2VxdWVuY2Vfc3Ryb25nIiwiV1BCQ19CRkJfTW9kdWxlIiwiaW5pdCIsInByZXBlbmQiLCJzZXR0aW5nc19idG4iLCJvbmNsaWNrIiwic2Nyb2xsSW50b1ZpZXciLCJ3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSIsInBhbmVsX2lkIiwidGFiX2lkIiwiYmVoYXZpb3IiLCJibG9jayIsImZvY3VzYWJsZSIsImZvY3VzIiwiV1BCQ19CRkJfTGF5b3V0X0NoaXBzIiwiX2dldF9jb2xfbWluX3B4IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJfZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4iLCJlZmYiLCJsYXlvdXQiLCJhdmFpbFBjdCIsInJvd1B4IiwiYXZhaWxQeCIsIm1pblBjdCIsIm1pblB4Iiwic3VtTWluIiwid1N1bSIsInRhcmdldFBjdCIsImxvY2tlZCIsImxvY2tlZFN1bSIsInJlbWFpbmluZyIsImZyZWVJZHgiLCJmcmVlVGFyZ2V0U3VtIiwicmVzdWx0IiwiX2FwcGx5X3ByZXNldF93aXRoX21pbl9ndWFyZCIsInNlY3Rpb25fZWwiLCJmaXR0ZWQiLCJfYW5ub3VuY2UiLCJyZW5kZXJfZm9yX3NlY3Rpb24iLCJob3N0X2VsIiwiX21ha2VfY2hpcCIsInByZXNldHMiLCJjdXN0b21CdG4iLCJleGFtcGxlIiwidGV4dCIsInByb21wdCIsImJ0biIsInZpcyIsImJhciIsImZsZXgiLCJ0b0ZpeGVkIiwidHh0IiwicGFyZW50RWxlbWVudCIsIldQQkNfQkZCX1NlbGVjdGlvbl9Db250cm9sbGVyIiwiX3NlbGVjdGVkX3VpZCIsImdldF9zZWxlY3RlZF9maWVsZCIsIl9vbl9jbGVhciIsIm9uX2NsZWFyIiwiZGVsZXRlX2l0ZW0iLCJuZWlnaGJvciIsIl9maW5kX25laWdoYm9yX3NlbGVjdGFibGUiLCJfb25fY2FudmFzX2NsaWNrIiwiX2hhbmRsZV9jYW52YXNfY2xpY2siLCJJR05PUkUiLCJoaXQiLCJwcmVzZWxlY3RfdGFiX2tleSIsImluZGV4T2YiLCJzZWMiLCJjb2xfc3R5bGVzX2FjdGl2ZV90YWIiLCJXUEJDX0JGQl9Db2x1bW5fU3R5bGVzIiwic2V0X3NlbGVjdGVkX2NvbF9mbGFnIiwidGFicyIsIndwYmNfdWlfdGFicyIsInNldF9hY3RpdmUiLCJ0YWJfa2V5IiwicHJldkVsIiwiY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWciLCJwcmV2IiwiaW5zcGVjdG9yIiwicHJldl91aWQiLCJzb3VyY2UiLCJiaW5kX3RvX2ZpZWxkIiwiSW5zcGVjdG9yRW5oYW5jZXJzIiwic2NhbiIsIldQQkNfQkZCX1ZhbHVlU2xpZGVyIiwiaW5pdF9vbiIsIldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UiLCJfZ2VuZXJpY19oeWRyYXRlX2NvbnRyb2xzIiwiX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scyIsImVzY19hdHRyIiwic3JjIiwiX2F0dGFjaF9pbnNwZWN0b3IiLCJfYmluZF9pZF9zYW5pdGl6ZXIiLCJfb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQiLCJfYmluZF9mb2N1c19zaG9ydGN1dHMiLCJhdHRhY2giLCJXUEJDX0JGQl9JbnNwZWN0b3IiLCJvbl9mb2N1cyIsImdycF9rZXkiLCJzbG90IiwiZ3JvdXBfd3JhcCIsImhlYWRlcl9idG4iLCJfb25faW5zcGVjdG9yX2ZvY3VzIiwic2V0VmFsIiwiY3RybCIsIlNLSVAiLCJzY2hlbWFzIiwiV1BCQ19CRkJfU2NoZW1hcyIsInR5cGVLZXkiLCJzY2hlbWFFbnRyeSIsInByb3BzU2NoZW1hIiwic2NoZW1hIiwicHJvcHMiLCJoYXNPd24iLCJGdW5jdGlvbiIsImdldERlZmF1bHQiLCJkZWZhdWx0IiwiaW5zcGVjdG9yS2V5IiwiZGwiLCJ2YWx1ZV9mcm9tIiwidmFsdWVGcm9tIiwiaGFzUmF3IiwiZGVmVmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50IiwiX193cGJjX2JmYl9pZF9zYW5pdGl6ZXJfYm91bmQiLCJFViIsImVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSIsIl9fd3BiY19iZmJfc2NfZGVib3VuY2Vfc3RhdGUiLCJ0aW1lcl9pZCIsInBlbmRpbmdfcGF5bG9hZCIsImNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCIsInN0IiwiYnVzX2VtaXRfY2hhbmdlIiwiZXh0cmEiLCJidXNfZW1pdF9jaGFuZ2VfZGVib3VuY2VkIiwicGF5bG9hZCIsInByZXZpZXdfbW9kZSIsInJlbmRlcl9wcmV2aWV3IiwiYXBwbGllZCIsImJlZm9yZSIsInNhbml0aXplZCIsInNlbFN0YXJ0Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxFbmQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5leHQiLCJkZXNpcmVkQXJyIiwiQm9vbGVhbiIsImRlc2lyZWRTZXQiLCJpc0NvcmUiLCJiZWZvcmVDbGFzc2VzIiwiY3VzdG9tQmVmb3JlIiwiaGFzIiwibWlzc2luZyIsImFmdGVyQ2xhc3NlcyIsImNoYW5nZWQiLCJzb21lIiwicGhhc2UiLCJhdXRvQWN0aXZlIiwidG9nZ2xlQXR0cmlidXRlIiwiaTE4biIsImF1dG9fZnJvbV9sYWJlbCIsInNlbGZMb2NrZWQiLCJuZXh0VmFsIiwiaXNfZ2VuX2tleSIsInZpc3VhbEtleXMiLCJpc19sZW5fZ3JvdXBfY3RybCIsIldQQkNfQkZCX0tleWJvYXJkX0NvbnRyb2xsZXIiLCJfb25fa2V5Iiwib25fa2V5IiwiaXNfdHlwaW5nIiwiX2lzX3R5cGluZ19hbnl3aGVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJkaXIiLCJtb3ZlX2l0ZW0iLCJhY3RpdmVFbGVtZW50IiwidGFnTmFtZSIsImlzQ29udGVudEVkaXRhYmxlIiwiV1BCQ19CRkJfUmVzaXplX0NvbnRyb2xsZXIiLCJpbml0X3Jlc2l6ZV9oYW5kbGVyIiwiaGFuZGxlX3Jlc2l6ZSIsImJ1dHRvbiIsInJlc2l6ZXIiLCJjdXJyZW50VGFyZ2V0IiwibGVmdF9jb2wiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicmlnaHRfY29sIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibGVmdF9pbmRleCIsInJpZ2h0X2luZGV4Iiwic3RhcnRfeCIsImxlZnRfc3RhcnRfcHgiLCJyaWdodF9zdGFydF9weCIsInBhaXJfcHgiLCJjb21wdXRlZCIsInBhaXJfYXZhaWwiLCJwY3RUb1B4IiwicGN0IiwiZ2VuZXJpY01pblBjdCIsImdlbmVyaWNNaW5QeCIsImxlZnRNaW5QeCIsInJpZ2h0TWluUHgiLCJwcmV2X3VzZXJfc2VsZWN0IiwidXNlclNlbGVjdCIsImN1cnNvciIsIm9uX21vdXNlX21vdmUiLCJkZWx0YV9weCIsIm5ld0xlZnRQeCIsIm5ld1JpZ2h0UHgiLCJuZXdMZWZ0UGN0IiwibmV3QmFzZXMiLCJvbl9tb3VzZV91cCIsIm5vcm1hbGl6ZWQiLCJXUEJDX0JGQl9QYWdlc19TZWN0aW9ucyIsImFkZF9wYWdlIiwicmVidWlsZF9zZWN0aW9uIiwic2VjdGlvbl9kYXRhIiwiaW5pdF9zZWN0aW9uX3NvcnRhYmxlIiwiX3JldGFnX3VpZHNfaW5fc3VidHJlZSIsIm5vZGVzIiwicHJlZml4IiwiX3VpZF9jb3VudGVyIiwiX21ha2VfdW5pcXVlIiwidGFrZW4iLCJzdGVtIiwiX2RlZHVwZV9zdWJ0cmVlX3N0cmljdCIsInRha2VuRGF0YUlkIiwidGFrZW5EYXRhTmFtZSIsInRha2VuSHRtbElkIiwidGFrZW5Eb21JZCIsImRpZCIsImRuYW0iLCJoaWQiLCJpc0ZpZWxkIiwiY29tYmluZWRUYWtlbiIsImNhbmRpZGF0ZSIsImh0bWxGb3IiLCJfbWFrZV9hZGRfY29sdW1uc19jb250cm9sIiwicGFnZV9lbCIsInNlY3Rpb25fY29udGFpbmVyIiwiaW5zZXJ0X3BvcyIsImNvbnRlbnQiLCJjbG9uZSIsImNsb25lTm9kZSIsImluc2VydCIsInBhZ2VfY291bnRlciIsImNvbnRyb2xzX2h0bWwiLCJyZW5kZXJfd3BfdGVtcGxhdGUiLCJwYWdlX251bWJlciIsInNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UiLCJjb250cm9sc19ob3N0X3RvcCIsImN0cmxfdG9wIiwiY29udHJvbHNfaG9zdF9ib3R0b20iLCJhZnRlciIsImN0cmxfYm90dG9tIiwic2VjdGlvbl9jb3VudGVyIiwiaW5pdF9zb3J0YWJsZSIsImNvbHNfZGF0YSIsImNvbF9zdHlsZXMiLCJqc29uIiwiYXJyIiwicGFyc2VfY29sX3N0eWxlcyIsImNvbF9kYXRhIiwiY29sdW1uc19vbmx5IiwiaXRlbXMiLCJidWlsZF9maWVsZCIsInRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayIsImlzX2NvbHVtbiIsImlzX3RvcF9sZXZlbCIsIldQQkNfQkZCX1N0cnVjdHVyZV9JTyIsImdldF9zdHJ1Y3R1cmUiLCJzZXJpYWxpemUiLCJsb2FkX3NhdmVkX3N0cnVjdHVyZSIsImRlc2VyaWFsaXplIiwiX25vcm1hbGl6ZV9maWVsZF9vcHRpb25fdmFsdWVzIiwiaGFzX3ZhbHVlX2RpZmZlcnMiLCJ2YWx1ZV9kaWZmZXJzIiwib3B0aW9uX3JlY29yZCIsIl9ub3JtYWxpemVfaWRzIiwiX25vcm1hbGl6ZV9uYW1lcyIsInBhZ2VzIiwicGFnZV9pbmRleCIsInBhZ2UiLCJjaGlsZCIsInNlcmlhbGl6ZV9zZWN0aW9uIiwiZl9kYXRhIiwiY29sX3N0eWxlc19yYXciLCJjb2xDb3VudCIsInBhcnNlZCIsInN0cnVjdHVyZSIsImRlZmVySWZUeXBpbmciLCJfaXNfdHlwaW5nX2luX2luc3BlY3RvciIsIl9kZWZlcl90aW1lciIsInBhZ2VfZGF0YSIsIndhbnQiLCJXUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQiLCJfb25fZmllbGRfYWRkIiwiX29uX2ZpZWxkX3JlbW92ZSIsIl9vbl9zdHJ1Y3R1cmVfbG9hZGVkIiwiX29uX3N0cnVjdHVyZV9jaGFuZ2UiLCJfb25fd2luZG93X3Jlc2l6ZSIsIl9wZW5kaW5nX3Jvd3MiLCJfcGVuZGluZ19hbGwiLCJfcmFmX2lkIiwicGFzc2l2ZSIsIl9zY2hlZHVsZV9yZWZyZXNoX2FsbCIsInNyY19lbCIsIl9zY2hlZHVsZV9yZWZyZXNoX3JvdyIsIl9raWNrX3JhZiIsInJlZnJlc2hfYWxsIiwicmVmcmVzaF9yb3ciLCJhcHBseV9jb2xfbWluIiwicHgiLCJtaW5XaWR0aCIsImFicyIsImNvbF9lbCIsIm1heF9weCIsImNvbFJlY3QiLCJlbmRzV2l0aCIsInBhcnNlX2xlbl9weCIsImNzIiwiZm9udFNpemUiLCJXUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplciIsInVwZ3JhZGVfY2hlY2tib3hlc19pbiIsInJvb3RfZWwiLCJpbnB1dHMiLCJpbnB1dF9pZCIsImdlbmVyYXRlX3VuaXF1ZV9pZCIsImxhYmVsX3RleHQiLCJyZXNvbHZlX2xhYmVsX3RleHQiLCJpY29uX2xhYmVsIiwidGV4dF9sYWJlbCIsImNyZWF0ZVRleHROb2RlIiwicmVwbGFjZWQiLCJ0cnlfcmVwbGFjZV9rbm93bl9yb3ciLCJhc3NvYyIsImNzc19lc2NhcGUiLCJuZWFyX2xhYmVsIiwiaWwiLCJ0MiIsImFyaWEiLCJjdHJsX3dyYXAiLCJmaXJzdENoaWxkIiwiaWNvbl9sYmwiLCJ0ZXh0X2xibCIsImFwcGx5X3Bvc3RfcmVuZGVyIiwiVCIsImNiIiwiX193cGJjX2FyaWFfaG9va2VkIiwicmVncyIsIl9fd3BiY19laCIsImdyb3VwcyIsIm5vZGVUeXBlIiwiY29uY2F0IiwiZyIsIl9fd3BiY19sZW5fd2lyZWQiLCJudW1iZXIiLCJyYW5nZSIsInVuaXQiLCJzeW5jX3JhbmdlX2Zyb21fbnVtYmVyIiwiZGlzcGF0Y2hfaW5wdXQiLCJkaXNwYXRjaF9jaGFuZ2UiLCJwZW5kaW5nX3ZhbCIsInBlbmRpbmdfY2hhbmdlIiwibGFzdF9mbHVzaF90cyIsIm1pbl9pbnRlcnZhbF9tcyIsImxlblRocm90dGxlIiwiZmx1c2hfcmFuZ2VfdG9fbnVtYmVyIiwic2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyIiwiZW1pdF9jaGFuZ2UiLCJvbl9udW1iZXJfaW5wdXQiLCJvbl9udW1iZXJfY2hhbmdlIiwib25fcmFuZ2VfaW5wdXQiLCJvbl9yYW5nZV9jaGFuZ2UiLCJkZXN0cm95X29uIiwiX3Jvb3QiLCJwYXRjaEluc3BlY3RvckVuaGFuY2VycyIsImFwcGx5UGF0Y2giLCJJbnNwZWN0b3IiLCJfX3dwYmNfZW5oYW5jZXJzX3BhdGNoZWQiLCJvcmlnIiwiaW5zRWwiLCJvbmNlIiwid3BiY19iZmJfX2Rpc3BhdGNoX3Nob3dfcGFuZWwiLCJldmVudF9kZXRhaWwiLCJXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMiLCJ0b3BfdGFic19uYXYiLCJhZHZhbmNlZF90YWJfd3JhcCIsImFkdmFuY2VkX3BhbmVsIiwibXV0YXRpb25fb2JzZXJ2ZXIiLCJsYXN0X21vZGUiLCJzeW5jX3JpZ2h0YmFyX21vZGUiLCJoYW5kbGVfY2xpY2siLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImF0dHJpYnV0ZUZpbHRlciIsImdldF9hY3RpdmVfdG9wX3RhYl9pZCIsImFjdGl2ZV90YWJfaWQiLCJhY3RpdmVfbGluayIsImJ1aWxkZXJfcGFuZWwiLCJpc19lbGVtZW50X3Zpc2libGUiLCJ2aXNpYmlsaXR5IiwiaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUiLCJzaG93X2FkdmFuY2VkX3Rvb2xzX3RhYiIsImhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiIiwiaXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlIiwib3Blbl9hZHZhbmNlZF90b29sc19wYW5lbCIsIm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwiLCJpc19hZHZhbmNlZF9tb2RlIiwiZXZlbnQiLCJ0aGlzX29iaiIsInJlYWR5U3RhdGUiLCJfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fIiwiY29uZmlybSIsImlzX2ZpZWxkIiwiTW9kYWxfQ29uZmlybV9EZWxldGUiLCJvcGVuIiwiZHVwbGljYXRlX2l0ZW0iLCJXUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyIsInJ1biIsIndhcm4iLCJFcnJvciIsIndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzIiwid3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSIsImF0dHJzIiwia2V5cyIsImRrIiwiYnVpbGRfdG9nZ2xlX3JvdyIsImlucHV0X2VsIiwiZ2V0X2luaXRpYWxfdmFsdWUiLCJwcm9wc19zY2hlbWEiLCJjb2VyY2VfYnlfdHlwZSIsImlzTmFOIiwibm9ybWFsaXplX3NlbGVjdF9vcHRpb25zIiwicGFyc2VfbGVuIiwiZmFsbGJhY2tfdW5pdCIsImNsYW1wX251bSIsImluaXRfY29sb3Jpc19waWNrZXJzIiwiQ29sb3JpcyIsImFscGhhIiwiZm9ybWF0IiwidGhlbWVNb2RlIiwiYnVpbGRfcmFuZ2VfbnVtYmVyX3JvdyIsImxhYmVsX2VsIiwic3RlcCIsIm51bSIsImJ1aWxkX2xlbl9jb21wb3VuZF9yb3ciLCJjb250cm9sIiwiZGVmX3N0ciIsImZhbGxiYWNrX3UiLCJ1bml0cyIsInNsaWRlcl9tYXAiLCJzbGlkZXIiLCJpbmxpbmUiLCJ1Iiwib3B0IiwidGFiaW5kZXgiLCJ3aXJlX2xlbl9ncm91cCIsImZpbmRfZ3JvdXAiLCJ3cml0ZXIiLCJib3VuZHNfYnlfdW5pdCIsImJ1aWxkX2NvbnRyb2wiLCJwcm9wX21ldGEiLCJjbGFzc2VzIiwic2xvdF9yb3ciLCJob3N0X2F0dHJzIiwic2xvdF9ob3N0Iiwic2xvdF9mbiIsIm9wdF9lbCIsInJuX2lkIiwicm5fdmFsIiwiYnVpbGRfZ3JvdXAiLCJpc19vcGVuIiwiZmllbGRzIiwiYXNBcnJheSIsIngiLCJ2YWx1ZXMiLCJjb250cm9scyIsImJ1aWxkX2hlYWRlciIsImluc3BlY3Rvcl91aSIsInRpdGxlX2ZhbGxiYWNrIiwic2NoZW1hX2Zvcl90eXBlIiwidmFyaWFudCIsImhlYWRlcl92YXJpYW50IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlcl9hY3Rpb25zIiwiZGVzY3JpcHRpb24iLCJhY3Rpb25CdG4iLCJhY3QiLCJtaW5pbWFsIiwiaWNvbk1hcCIsImhlYWRlciIsImFjdGlvbnMiLCJoMyIsInVpQyIsInVpRyIsImcxIiwiZzIiLCJnMyIsImZhY3RvcnlfcmVuZGVyIiwicGFuZWxfZWwiLCJ0aXRsZV90ZXh0IiwiV1BCQ19CRkJfSW5zcGVjdG9yX0ZhY3RvcnkiLCJzbG90X2xheW91dF9jaGlwcyIsImhvc3QiLCJMIiwibGF5b3V0X2NoaXBzIiwidmFsdWVfZnJvbV9jb21wdXRlX3NlY3Rpb25fY29sdW1ucyIsImNvbXB1dGVfc2VjdGlvbl9jb2x1bW5zIiwiX2NyZWF0ZV9mYWxsYmFja19wYW5lbCIsInNlbGVjdGVkX2VsIiwiX3JlbmRlcl90aW1lciIsIl9vbl9kZWxlZ2F0ZWRfaW5wdXQiLCJfYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50IiwiX29uX2RlbGVnYXRlZF9jaGFuZ2UiLCJfb25fZGVsZWdhdGVkX2NsaWNrIiwiX3Bvc3RfcmVuZGVyX3VpIiwidl9pbnQiLCJjbGFtcGVkIiwic2V0X3NlY3Rpb25fY29sdW1ucyIsIl9uZWVkc19yZXJlbmRlciIsIl9zY2hlZHVsZV9yZW5kZXJfcHJlc2VydmluZ19mb2N1cyIsImRlbGF5IiwiYWN0aXZlS2V5IiwicHJldl9zY3JvbGwiLCJzY3JvbGxUb3AiLCJfZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4iLCJfc2V0X3BhbmVsX3NlY3Rpb25fY29scyIsIkZhY3RvcnkiLCJlbnRyeSIsImhhc1Nsb3RIb3N0IiwiaGFzQ2hpcHMiLCJlbnN1cmVIb3N0IiwiaCIsImxhYiIsImN0bCIsIl9nZXRfdHBsIiwiZ2VuZXJpY190cGwiLCJtZXJnZWQiLCJtc2ciLCJkaXYiLCJzZWN0aW9uRWwiLCJjb21wdXRlIl0sInNvdXJjZXMiOlsiYmZiLWNvcmUuanMiLCJiZmItZmllbGRzLmpzIiwiYmZiLXVpLmpzIiwiYmZiLXN5bmMtY29kZS10b29scy10YWIuanMiLCJiZmItaW5zcGVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA9PSBGaWxlICAvaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvX291dC9jb3JlL2JmYi1jb3JlLmpzID09IHwgMjAyNS0wOS0xMCAxNTo0N1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdyApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKCB3LldQQkNfQkZCX0NvcmUgPSB3LldQQkNfQkZCX0NvcmUgfHwge30gKTtcclxuXHRjb25zdCBVSSAgID0gKCBDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSApO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb3JlIHNhbml0aXplL2VzY2FwZS9ub3JtYWxpemUgaGVscGVycy5cclxuXHQgKiBBbGwgbWV0aG9kcyB1c2Ugc25ha2VfY2FzZTsgY2FtZWxDYXNlIGFsaWFzZXMgYXJlIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1Nhbml0aXplID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIHRleHQgZm9yIHNhZmUgdXNlIGluIENTUyBzZWxlY3RvcnMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gcyAtIHJhdyBzZWxlY3RvciBmcmFnbWVudFxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY19jc3Mocykge1xyXG5cdFx0XHRyZXR1cm4gKHcuQ1NTICYmIHcuQ1NTLmVzY2FwZSkgPyB3LkNTUy5lc2NhcGUoIFN0cmluZyggcyApICkgOiBTdHJpbmcoIHMgKS5yZXBsYWNlKCAvKFteXFx3LV0pL2csICdcXFxcJDEnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgYSB2YWx1ZSBmb3IgYXR0cmlidXRlIHNlbGVjdG9ycywgZS5nLiBbZGF0YS1pZD1cIjx2YWx1ZT5cIl0uXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3Rvcih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxcXC9nLCAnXFxcXFxcXFwnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICdcXFxcXCInIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xcbi9nLCAnXFxcXEEgJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXF0vZywgJ1xcXFxdJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2FuaXRpemUgaW50byBhIGJyb2FkbHkgY29tcGF0aWJsZSBIVE1MIGlkOiBsZXR0ZXJzLCBkaWdpdHMsIC0gXyA6IC4gOyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2h0bWxfaWQodikge1xyXG5cdFx0XHRsZXQgcyA9ICh2ID09IG51bGwgPyAnJyA6IFN0cmluZyggdiApKS50cmltKCk7XHJcblx0XHRcdHMgICAgID0gc1xyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxzKy9nLCAnLScgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15BLVphLXowLTlcXC1fXFw6Ll0vZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggLy0rL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9eWy1fLjpdK3xbLV8uOl0rJC9nLCAnJyApO1xyXG5cdFx0XHRpZiAoICFzICkgcmV0dXJuICdmaWVsZCc7XHJcblx0XHRcdGlmICggIS9eW0EtWmEtel0vLnRlc3QoIHMgKSApIHMgPSAnZi0nICsgcztcclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBpbnRvIGEgc2FmZSBIVE1MIG5hbWUgdG9rZW46IGxldHRlcnMsIGRpZ2l0cywgXyAtXHJcblx0XHQgKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXI7IG5vIGRvdHMvYnJhY2tldHMvc3BhY2VzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9odG1sX25hbWUodikge1xyXG5cclxuXHRcdFx0bGV0IHMgPSAodiA9PSBudWxsID8gJycgOiBTdHJpbmcoIHYgKSkudHJpbSgpO1xyXG5cclxuXHRcdFx0cyA9IHMucmVwbGFjZSggL1xccysvZywgJ18nICkucmVwbGFjZSggL1teQS1aYS16MC05Xy1dL2csICdfJyApLnJlcGxhY2UoIC9fKy9nLCAnXycgKTtcclxuXHJcblx0XHRcdGlmICggISBzICkge1xyXG5cdFx0XHRcdHMgPSAnZmllbGQnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggISAvXltBLVphLXpdLy50ZXN0KCBzICkgKSB7XHJcblx0XHRcdFx0cyA9ICdmXycgKyBzO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGZvciBIVE1MIHRleHQvYXR0cmlidXRlcyAobm90IFVSTHMpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfaHRtbCh2KSB7XHJcblx0XHRcdGlmICggdiA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2IClcclxuXHRcdFx0XHQucmVwbGFjZSggLyYvZywgJyZhbXA7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cIi9nLCAnJnF1b3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8nL2csICcmIzAzOTsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLzwvZywgJyZsdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLz4vZywgJyZndDsnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgbWluaW1hbCBzZXQgZm9yIGF0dHJpYnV0ZS1zYWZldHkgd2l0aG91dCBzbHVnZ2luZy5cclxuXHRcdCAqIEtlZXBzIG9yaWdpbmFsIGh1bWFuIHRleHQ7IGVzY2FwZXMgJiwgPCwgPiwgXCIgYW5kICcgb25seS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyKHMpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggcyA9PSBudWxsID8gJycgOiBzIClcclxuXHRcdFx0XHQucmVwbGFjZSggLyYvZywgJyZhbXA7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC88L2csICcmbHQ7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8+L2csICcmZ3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cIi9nLCAnJnF1b3Q7JyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC8nL2csICcmIzM5OycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgc3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzcyBsaXN0LlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9jc3NfY2xhc3NsaXN0KHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKS5yZXBsYWNlKCAvW15cXHdcXC0gXSsvZywgJyAnICkucmVwbGFjZSggL1xccysvZywgJyAnICkudHJpbSgpO1xyXG5cdFx0fVxyXG4vLyA9PSBORVcgPT1cclxuXHRcdC8qKlxyXG5cdFx0ICogVHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgaW50byBhIGNvbnNlcnZhdGl2ZSBcInRva2VuXCIgKHVuZGVyc2NvcmVzLCBoeXBoZW5zIGFsbG93ZWQpLlxyXG5cdFx0ICogVXNlZnVsIGZvciBzaG9ydGNvZGUgdG9rZW5zLCBpZHMgaW4gcGxhaW4gdGV4dCwgZXRjLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB0b190b2tlbih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKVxyXG5cdFx0XHRcdC50cmltKClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xccysvZywgJ18nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teQS1aYS16MC05X1xcLV0vZywgJycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbnZlcnQgdG8ga2ViYWItY2FzZSAobGV0dGVycywgZGlnaXRzLCBoeXBoZW5zKS5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgdG9fa2ViYWIodikge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ID8/ICcnIClcclxuXHRcdFx0XHQudHJpbSgpXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bX1xcc10rL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bXkEtWmEtejAtOS1dL2csICcnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLy0rL2csICctJyApXHJcblx0XHRcdFx0LnRvTG93ZXJDYXNlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnV0aHkgbm9ybWFsaXphdGlvbiBmb3IgZm9ybS1saWtlIGlucHV0czogdHJ1ZSwgJ3RydWUnLCAxLCAnMScsICd5ZXMnLCAnb24nLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgaXNfdHJ1dGh5KHYpIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkgcmV0dXJuIHY7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIHMgPT09ICd0cnVlJyB8fCBzID09PSAnMScgfHwgcyA9PT0gJ3llcycgfHwgcyA9PT0gJ29uJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvZXJjZSB0byBib29sZWFuIHdpdGggYW4gb3B0aW9uYWwgZGVmYXVsdCBmb3IgZW1wdHkgdmFsdWVzLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZj1mYWxzZV1cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgY29lcmNlX2Jvb2xlYW4odiwgZGVmID0gZmFsc2UpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgfHwgdiA9PT0gJycgKSByZXR1cm4gZGVmO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5pc190cnV0aHkoIHYgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIGEgXCJwZXJjZW50LWxpa2VcIiB2YWx1ZSAoJzMzJ3wnMzMlJ3wzMykgd2l0aCBmYWxsYmFjay5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxudWxsfHVuZGVmaW5lZH0gdlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IGZhbGxiYWNrX3ZhbHVlXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcGFyc2VfcGVyY2VudCh2LCBmYWxsYmFja192YWx1ZSkge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsbGJhY2tfdmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiApLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMucmVwbGFjZSggLyUvZywgJycgKSApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogZmFsbGJhY2tfdmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGFtcCBhIG51bWJlciB0byB0aGUgW21pbiwgbWF4XSByYW5nZS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWluXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbWF4XHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgY2xhbXAobiwgbWluLCBtYXgpIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIG4gKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGEgdmFsdWUgZm9yIGluY2x1c2lvbiBpbnNpZGUgYSBxdW90ZWQgSFRNTCBhdHRyaWJ1dGUgKGRvdWJsZSBxdW90ZXMpLlxyXG5cdFx0ICogUmVwbGFjZXMgbmV3bGluZXMgd2l0aCBzcGFjZXMgYW5kIGRvdWJsZSBxdW90ZXMgd2l0aCBzaW5nbGUgcXVvdGVzLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfZm9yX2F0dHJfcXVvdGVkKHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm4gJyc7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKS5yZXBsYWNlKCAvXFxyP1xcbi9nLCAnICcgKS5yZXBsYWNlKCAvXCIvZywgJ1xcJycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBmb3Igc2hvcnRjb2RlLWxpa2UgdG9rZW5zIHdoZXJlIGRvdWJsZSBxdW90ZXMgYW5kIG5ld2xpbmVzIHNob3VsZCBiZSBuZXV0cmFsaXplZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjYXBlX2Zvcl9zaG9ydGNvZGUodikge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ID8/ICcnICkucmVwbGFjZSggL1wiL2csICdcXFxcXCInICkucmVwbGFjZSggL1xccj9cXG4vZywgJyAnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBKU09OLnBhcnNlIHdpdGggZmFsbGJhY2sgKG5vIHRocm93KS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gW2ZhbGxiYWNrPW51bGxdXHJcblx0XHQgKiBAcmV0dXJucyB7YW55fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FmZV9qc29uX3BhcnNlKHMsIGZhbGxiYWNrID0gbnVsbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKCBzICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxsYmFjaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU3RyaW5naWZ5IGRhdGEtKiBhdHRyaWJ1dGUgdmFsdWUgc2FmZWx5IChvYmplY3RzIC0+IEpTT04sIG90aGVycyAtPiBTdHJpbmcpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzdHJpbmdpZnlfZGF0YV92YWx1ZSh2KSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSggdiApO1xyXG5cdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1dQQkM6IHN0cmluZ2lmeV9kYXRhX3ZhbHVlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCB2ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0Ly8gU3RyaWN0IHZhbHVlIGd1YXJkcyBmb3IgQ1NTIGxlbmd0aHMgYW5kIGhleCBjb2xvcnMgKGRlZmVuc2UtaW4tZGVwdGgpLlxyXG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBhIENTUyBsZW5ndGguIEFsbG93czogcHgsICUsIHJlbSwgZW0gKGxvd2VyL3VwcGVyKS5cclxuXHRcdCAqIFJldHVybnMgZmFsbGJhY2sgaWYgaW52YWxpZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrPScxMDAlJ11cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9jc3NfbGVuKHYsIGZhbGxiYWNrID0gJzEwMCUnKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdGNvbnN0IG0gPSBzLm1hdGNoKCAvXigtP1xcZCsoPzpcXC5cXGQrKT8pKHB4fCV8cmVtfGVtKSQvaSApO1xyXG5cdFx0XHRyZXR1cm4gbSA/IG1bMF0gOiBTdHJpbmcoIGZhbGxiYWNrICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBhIGhleCBjb2xvci4gQWxsb3dzICNyZ2Igb3IgI3JyZ2diYiAoY2FzZS1pbnNlbnNpdGl2ZSkuXHJcblx0XHQgKiBSZXR1cm5zIGZhbGxiYWNrIGlmIGludmFsaWQuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IFtmYWxsYmFjaz0nI2UwZTBlMCddXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FuaXRpemVfaGV4X2NvbG9yKHYsIGZhbGxiYWNrID0gJyNlMGUwZTAnKSB7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHYgPz8gJycgKS50cmltKCk7XHJcblx0XHRcdHJldHVybiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggcyApID8gcyA6IFN0cmluZyggZmFsbGJhY2sgKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXUEJDIElEIC8gTmFtZSBzZXJ2aWNlLiBHZW5lcmF0ZXMsIHNhbml0aXplcywgYW5kIGVuc3VyZXMgdW5pcXVlbmVzcyBmb3IgZmllbGQgaWRzL25hbWVzL2h0bWxfaWRzIHdpdGhpbiB0aGVcclxuXHQgKiBjYW52YXMuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9JZFNlcnZpY2UgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29uc3RydWN0b3IuIFNldCByb290IGNvbnRhaW5lciBvZiB0aGUgZm9ybSBwYWdlcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYWdlc19jb250YWluZXIgLSBSb290IGNvbnRhaW5lciBvZiB0aGUgZm9ybSBwYWdlcy5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIHBhZ2VzX2NvbnRhaW5lciApIHtcclxuXHRcdFx0dGhpcy5wYWdlc19jb250YWluZXIgPSBwYWdlc19jb250YWluZXI7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYSB1bmlxdWUgKippbnRlcm5hbCoqIGZpZWxkIGlkIChzdG9yZWQgaW4gZGF0YS1pZCkgd2l0aGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBTdGFydHMgZnJvbSBhIGRlc2lyZWQgaWQgKGFscmVhZHkgc2FuaXRpemVkIG9yIG5vdCkgYW5kIGFwcGVuZHMgc3VmZml4ZXMgaWYgbmVlZGVkLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlSWQgLSBEZXNpcmVkIGlkLlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIGlkLlxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfdW5pcXVlX2ZpZWxkX2lkKGJhc2VJZCwgY3VycmVudEVsID0gbnVsbCkge1xyXG5cdFx0XHRjb25zdCBiYXNlICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkKCBiYXNlSWQgKTtcclxuXHRcdFx0bGV0IGlkICAgICAgICA9IGJhc2UgfHwgJ2ZpZWxkJztcclxuXHRcdFx0Y29uc3QgZXNjICAgICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHRjb25zdCBlc2NVaWQgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IG5vdFNlbGYgPSBjdXJyZW50RWw/LmRhdGFzZXQ/LnVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCBjdXJyZW50RWwuZGF0YXNldC51aWQgKX1cIl0pYCA6ICcnO1xyXG5cdFx0XHR3aGlsZSAoIHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGQke25vdFNlbGZ9W2RhdGEtaWQ9XCIke2VzYyhpZCl9XCJdLCAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fc2VjdGlvbiR7bm90U2VsZn1bZGF0YS1pZD1cIiR7ZXNjKGlkKX1cIl1gXHJcblx0XHRcdCkgKSB7XHJcblx0XHRcdFx0Ly8gRXhjbHVkZXMgc2VsZiBieSBkYXRhLXVpZCAuXHJcblx0XHRcdFx0Y29uc3QgZm91bmQgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtaWQ9XCIke2VzYyggaWQgKX1cIl0sIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uW2RhdGEtaWQ9XCIke2VzYyggaWQgKX1cIl1gICk7XHJcblx0XHRcdFx0aWYgKCBmb3VuZCAmJiBjdXJyZW50RWwgJiYgZm91bmQgPT09IGN1cnJlbnRFbCApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZCA9IGAke2Jhc2UgfHwgJ2ZpZWxkJ30tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA1ICl9YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYSB1bmlxdWUgSFRNTCBuYW1lIGFjcm9zcyB0aGUgZm9ybS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSAtIERlc2lyZWQgYmFzZSBuYW1lICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBjdXJyZW50RWwgLSBJZiBwcm92aWRlZCwgaWdub3JlIGNvbmZsaWN0cyB3aXRoIHRoaXMgZWxlbWVudC5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaXF1ZSBuYW1lLlxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoYmFzZSwgY3VycmVudEVsID0gbnVsbCkge1xyXG5cdFx0XHRsZXQgbmFtZSAgICAgID0gYmFzZSB8fCAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Ly8gRXhjbHVkZSB0aGUgY3VycmVudCBmaWVsZCAqYW5kIGFueSBET00gbWlycm9ycyBvZiBpdCogKHNhbWUgZGF0YS11aWQpXHJcblx0XHRcdGNvbnN0IHVpZCAgICAgPSBjdXJyZW50RWw/LmRhdGFzZXQ/LnVpZDtcclxuXHRcdFx0Y29uc3Qgbm90U2VsZiA9IHVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCB1aWQgKX1cIl0pYCA6ICcnO1xyXG5cdFx0XHR3aGlsZSAoIHRydWUgKSB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkJHtub3RTZWxmfVtkYXRhLW5hbWU9XCIke2VzYyggbmFtZSApfVwiXWA7XHJcblx0XHRcdFx0Y29uc3QgY2xhc2hlcyAgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKSB8fCBbXTtcclxuXHRcdFx0XHRpZiAoIGNsYXNoZXMubGVuZ3RoID09PSAwICkgYnJlYWs7ICAgICAgICAgICAvLyBub2JvZHkgZWxzZSB1c2VzIHRoaXMgbmFtZVxyXG5cdFx0XHRcdGNvbnN0IG0gPSBuYW1lLm1hdGNoKCAvLShcXGQrKSQvICk7XHJcblx0XHRcdFx0bmFtZSAgICA9IG0gPyBuYW1lLnJlcGxhY2UoIC8tXFxkKyQvLCAnLScgKyAoTnVtYmVyKCBtWzFdICkgKyAxKSApIDogYCR7YmFzZX0tMmA7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5hbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBJTlRFUk5BTCBpZCAoZGF0YS1pZCkgb24gYW4gZWxlbWVudC4gRW5zdXJlcyB1bmlxdWVuZXNzIGFuZCBvcHRpb25hbGx5IGFza3MgY2FsbGVyIHRvIHJlZnJlc2hcclxuXHRcdCAqIHByZXZpZXcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZmllbGRfZWwgLSBGaWVsZCBlbGVtZW50IGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3SWRSYXcgLSBEZXNpcmVkIGlkICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IEFwcGxpZWQgdW5pcXVlIGlkLlxyXG5cdFx0ICovXHJcblx0XHRzZXRfZmllbGRfaWQoIGZpZWxkX2VsLCBuZXdJZFJhdywgcmVuZGVyUHJldmlldyA9IGZhbHNlICkge1xyXG5cdFx0XHRjb25zdCBkZXNpcmVkID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX2lkKCBuZXdJZFJhdyApO1xyXG5cdFx0XHRjb25zdCB1bmlxdWUgID0gdGhpcy5lbnN1cmVfdW5pcXVlX2ZpZWxkX2lkKCBkZXNpcmVkLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRmaWVsZF9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgdW5pcXVlICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBSRVFVSVJFRCBIVE1MIG5hbWUgKGRhdGEtbmFtZSkuIEVuc3VyZXMgc2FuaXRpemVkICsgdW5pcXVlIHBlciBmb3JtLlxyXG5cdFx0ICogRmFsbHMgYmFjayB0byBzYW5pdGl6ZWQgaW50ZXJuYWwgaWQgaWYgdXNlciBwcm92aWRlcyBlbXB0eSB2YWx1ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBmaWVsZF9lbCAtIEZpZWxkIGVsZW1lbnQgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lUmF3IC0gRGVzaXJlZCBuYW1lICh1bi9zYW5pdGl6ZWQpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IEFwcGxpZWQgdW5pcXVlIG5hbWUuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9uYW1lKCBmaWVsZF9lbCwgbmV3TmFtZVJhdywgcmVuZGVyUHJldmlldyA9IGZhbHNlICkge1xyXG5cdFx0XHRjb25zdCByYXcgID0gKG5ld05hbWVSYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCBuZXdOYW1lUmF3ICkpLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgYmFzZSA9IHJhd1xyXG5cdFx0XHRcdD8gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIHJhdyApXHJcblx0XHRcdFx0OiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggZmllbGRfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnZmllbGQnICk7XHJcblxyXG5cdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZmllbGRfZWwgKTtcclxuXHRcdFx0ZmllbGRfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcXVlICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZmllbGQncyBPUFRJT05BTCBwdWJsaWMgSFRNTCBpZCAoZGF0YS1odG1sX2lkKS4gRW1wdHkgdmFsdWUgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxyXG5cdFx0ICogRW5zdXJlcyBzYW5pdGl6YXRpb24gKyB1bmlxdWVuZXNzIGFtb25nIG90aGVyIGRlY2xhcmVkIEhUTUwgaWRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGZpZWxkX2VsIC0gRmllbGQgZWxlbWVudCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld0h0bWxJZFJhdyAtIERlc2lyZWQgaHRtbF9pZCAob3B0aW9uYWwpLlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbcmVuZGVyUHJldmlldz1mYWxzZV0gLSBDYWxsZXIgY2FuIGRlY2lkZSB0byByZS1yZW5kZXIgcHJldmlldy5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhcHBsaWVkIGh0bWxfaWQgb3IgZW1wdHkgc3RyaW5nIGlmIHJlbW92ZWQuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9odG1sX2lkKCBmaWVsZF9lbCwgbmV3SHRtbElkUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IHJhdyA9IChuZXdIdG1sSWRSYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCBuZXdIdG1sSWRSYXcgKSkudHJpbSgpO1xyXG5cclxuXHRcdFx0aWYgKCByYXcgPT09ICcnICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsLnJlbW92ZUF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKTtcclxuXHRcdFx0XHRpZiAoIHJlbmRlclByZXZpZXcgKSB7XHJcblx0XHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRlc2lyZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIHJhdyApO1xyXG5cdFx0XHRsZXQgaHRtbElkICAgID0gZGVzaXJlZDtcclxuXHRcdFx0Y29uc3QgZXNjICAgICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHRjb25zdCBlc2NVaWQgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblxyXG5cdFx0XHR3aGlsZSAoIHRydWUgKSB7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHVpZCAgICAgPSBmaWVsZF9lbD8uZGF0YXNldD8udWlkO1xyXG5cdFx0XHRcdGNvbnN0IG5vdFNlbGYgPSB1aWQgPyBgOm5vdChbZGF0YS11aWQ9XCIke2VzY1VpZCggdWlkICl9XCJdKWAgOiAnJztcclxuXHJcblx0XHRcdFx0Y29uc3QgY2xhc2hJbkNhbnZhcyA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZCR7bm90U2VsZn1bZGF0YS1odG1sX2lkPVwiJHtlc2MoIGh0bWxJZCApfVwiXSxgICtcclxuXHRcdFx0XHRcdGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fc2VjdGlvbiR7bm90U2VsZn1bZGF0YS1odG1sX2lkPVwiJHtlc2MoIGh0bWxJZCApfVwiXWBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGNvbnN0IGRvbUNsYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGh0bWxJZCApO1xyXG5cclxuXHRcdFx0XHQvLyBBbGxvdyB3aGVuIHRoZSBvbmx5IFwiY2xhc2hcIiBpcyBpbnNpZGUgdGhpcyBzYW1lIGZpZWxkIChlLmcuLCB0aGUgaW5wdXQgeW91IGp1c3QgcmVuZGVyZWQpXHJcblx0XHRcdFx0Y29uc3QgZG9tQ2xhc2hJc1NlbGYgPSBkb21DbGFzaCA9PT0gZmllbGRfZWwgfHwgKGRvbUNsYXNoICYmIGZpZWxkX2VsLmNvbnRhaW5zKCBkb21DbGFzaCApKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhY2xhc2hJbkNhbnZhcyAmJiAoIWRvbUNsYXNoIHx8IGRvbUNsYXNoSXNTZWxmKSApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgbSA9IGh0bWxJZC5tYXRjaCggLy0oXFxkKykkLyApO1xyXG5cdFx0XHRcdGh0bWxJZCAgPSBtID8gaHRtbElkLnJlcGxhY2UoIC8tXFxkKyQvLCAnLScgKyAoTnVtYmVyKCBtWzFdICkgKyAxKSApIDogYCR7ZGVzaXJlZH0tMmA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZpZWxkX2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcsIGh0bWxJZCApO1xyXG5cdFx0XHRpZiAoIHJlbmRlclByZXZpZXcgKSB7XHJcblx0XHRcdFx0Ly8gQ2FsbGVyIGRlY2lkZXMgaWYgLyB3aGVuIHRvIHJlbmRlci5cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaHRtbElkO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgTGF5b3V0IHNlcnZpY2UuIEVuY2Fwc3VsYXRlcyBjb2x1bW4gd2lkdGggbWF0aCB3aXRoIGdhcCBoYW5kbGluZywgcHJlc2V0cywgYW5kIHV0aWxpdGllcy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0xheW91dFNlcnZpY2UgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29uc3RydWN0b3IuIFNldCBvcHRpb25zIHdpdGggZ2FwIGJldHdlZW4gY29sdW1ucyAoJSkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHt7IGNvbF9nYXBfcGVyY2VudD86IG51bWJlciB9fSBbb3B0c10gLSBPcHRpb25zIHdpdGggZ2FwIGJldHdlZW4gY29sdW1ucyAoJSkuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKCBvcHRzID0ge30gKSB7XHJcblx0XHRcdHRoaXMuY29sX2dhcF9wZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKCArb3B0cy5jb2xfZ2FwX3BlcmNlbnQgKSA/ICtvcHRzLmNvbF9nYXBfcGVyY2VudCA6IDM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb21wdXRlIG5vcm1hbGl6ZWQgZmxleC1iYXNpcyB2YWx1ZXMgZm9yIGEgcm93LCByZXNwZWN0aW5nIGNvbHVtbiBnYXBzLlxyXG5cdFx0ICogUmV0dXJucyBiYXNlcyB0aGF0IHN1bSB0byBhdmFpbGFibGUgPSAxMDAgLSAobi0xKSpnYXAuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93X2VsIC0gUm93IGVsZW1lbnQgY29udGFpbmluZyAud3BiY19iZmJfX2NvbHVtbiBjaGlsZHJlbi5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQgYmV0d2VlbiBjb2x1bW5zLlxyXG5cdFx0ICogQHJldHVybnMge3thdmFpbGFibGU6bnVtYmVyLGJhc2VzOm51bWJlcltdfX0gQXZhaWxhYmxlIHNwYWNlIGFuZCBiYXNpcyB2YWx1ZXMuXHJcblx0XHQgKi9cclxuXHRcdGNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdhcF9wZXJjZW50ID0gdGhpcy5jb2xfZ2FwX3BlcmNlbnQgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdGNvbnN0IHJhdyA9IGNvbHMubWFwKCAoIGNvbCApID0+IHtcclxuXHRcdFx0XHRjb25zdCB3ID0gY29sLnN0eWxlLmZsZXhCYXNpcyB8fCAnJztcclxuXHRcdFx0XHRjb25zdCBwID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5wYXJzZV9wZXJjZW50KCB3LCBOYU4gKTtcclxuXHRcdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBwICkgPyBwIDogKDEwMCAvIG4pO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRjb25zdCBzdW1fcmF3ICAgID0gcmF3LnJlZHVjZSggKCBhLCBiICkgPT4gYSArIGIsIDAgKSB8fCAxMDA7XHJcblx0XHRcdGNvbnN0IGdwICAgICAgICAgPSBOdW1iZXIuaXNGaW5pdGUoICtnYXBfcGVyY2VudCApID8gK2dhcF9wZXJjZW50IDogMztcclxuXHRcdFx0Y29uc3QgdG90YWxfZ2FwcyA9IE1hdGgubWF4KCAwLCBuIC0gMSApICogZ3A7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZSAgPSBNYXRoLm1heCggMCwgMTAwIC0gdG90YWxfZ2FwcyApO1xyXG5cdFx0XHRjb25zdCBzY2FsZSAgICAgID0gYXZhaWxhYmxlIC8gc3VtX3JhdztcclxuXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0YXZhaWxhYmxlLFxyXG5cdFx0XHRcdGJhc2VzOiByYXcubWFwKCAoIHAgKSA9PiBNYXRoLm1heCggMCwgcCAqIHNjYWxlICkgKVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQXBwbHkgY29tcHV0ZWQgYmFzZXMgdG8gdGhlIHJvdydzIGNvbHVtbnMgKHNldHMgZmxleC1iYXNpcyAlKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IGJhc2VzIC0gQXJyYXkgb2YgYmFzaXMgdmFsdWVzIChwZXJjZW50IG9mIGZ1bGwgMTAwKS5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRhcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgYmFzZXMgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb2xzLmZvckVhY2goICggY29sLCBpICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHAgICAgICAgICAgICAgPSBiYXNlc1tpXSA/PyAwO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtwfSVgO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBEaXN0cmlidXRlIGNvbHVtbnMgZXZlbmx5LCByZXNwZWN0aW5nIGdhcC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2VxdWFsX2Jhc2VzKCByb3dfZWwsIGdhcF9wZXJjZW50ID0gdGhpcy5jb2xfZ2FwX3BlcmNlbnQgKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgICAgICAgPSBBcnJheS5mcm9tKCByb3dfZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgICAgICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCB0b3RhbF9nYXBzID0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncDtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IE1hdGgubWF4KCAwLCAxMDAgLSB0b3RhbF9nYXBzICk7XHJcblx0XHRcdGNvbnN0IGVhY2ggICAgICAgPSBhdmFpbGFibGUgLyBuO1xyXG5cdFx0XHR0aGlzLmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBBcnJheSggbiApLmZpbGwoIGVhY2ggKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQXBwbHkgYSBwcmVzZXQgb2YgcmVsYXRpdmUgd2VpZ2h0cyB0byBhIHJvdy9zZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25PclJvdyAtIC53cGJjX2JmYl9fc2VjdGlvbiBvciBpdHMgY2hpbGQgLndwYmNfYmZiX19yb3cuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcltdfSB3ZWlnaHRzIC0gUmVsYXRpdmUgd2VpZ2h0cyAoZS5nLiwgWzEsMywxXSkuXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gW2dhcF9wZXJjZW50PXRoaXMuY29sX2dhcF9wZXJjZW50XSAtIEdhcCBwZXJjZW50LlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25PclJvdywgd2VpZ2h0cywgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbk9yUm93Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3JvdycgKVxyXG5cdFx0XHRcdD8gc2VjdGlvbk9yUm93XHJcblx0XHRcdFx0OiBzZWN0aW9uT3JSb3c/LnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHJcblx0XHRcdGlmICggISByb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb2xzID0gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSB8fCBbXSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdGlmICggISBBcnJheS5pc0FycmF5KCB3ZWlnaHRzICkgfHwgd2VpZ2h0cy5sZW5ndGggIT09IG4gKSB7XHJcblx0XHRcdFx0dGhpcy5zZXRfZXF1YWxfYmFzZXMoIHJvdywgZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHN1bSAgICAgICA9IHdlaWdodHMucmVkdWNlKCAoIGEsIGIgKSA9PiBhICsgTWF0aC5tYXgoIDAsIE51bWJlciggYiApIHx8IDAgKSwgMCApIHx8IDE7XHJcblx0XHRcdGNvbnN0IGdwICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgPSBNYXRoLm1heCggMCwgMTAwIC0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncCApO1xyXG5cdFx0XHRjb25zdCBiYXNlcyAgICAgPSB3ZWlnaHRzLm1hcCggKCB3ICkgPT4gTWF0aC5tYXgoIDAsIChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSAqIGF2YWlsYWJsZSApICk7XHJcblxyXG5cdFx0XHR0aGlzLmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93LCBiYXNlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVpbGQgcHJlc2V0IHdlaWdodCBsaXN0cyBmb3IgYSBnaXZlbiBjb2x1bW4gY291bnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG4gLSBDb2x1bW4gY291bnQuXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyW11bXX0gTGlzdCBvZiB3ZWlnaHQgYXJyYXlzLlxyXG5cdFx0ICovXHJcblx0XHRidWlsZF9wcmVzZXRzX2Zvcl9jb2x1bW5zKCBuICkge1xyXG5cdFx0XHRzd2l0Y2ggKCBuICkge1xyXG5cdFx0XHRcdGNhc2UgMTpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSBdIF07XHJcblx0XHRcdFx0Y2FzZSAyOlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxLCAyIF0sIFsgMiwgMSBdLCBbIDEsIDMgXSwgWyAzLCAxIF0gXTtcclxuXHRcdFx0XHRjYXNlIDM6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBbIDEsIDMsIDEgXSwgWyAxLCAyLCAxIF0sIFsgMiwgMSwgMSBdLCBbIDEsIDEsIDIgXSBdO1xyXG5cdFx0XHRcdGNhc2UgNDpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSwgMiwgMiwgMSBdLCBbIDIsIDEsIDEsIDEgXSwgWyAxLCAxLCAxLCAyIF0gXTtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgQXJyYXkoIG4gKS5maWxsKCAxICkgXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRm9ybWF0IGEgaHVtYW4tcmVhZGFibGUgbGFiZWwgbGlrZSBcIjUwJS8yNSUvMjUlXCIgZnJvbSB3ZWlnaHRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHMgLSBXZWlnaHQgbGlzdC5cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IExhYmVsIHN0cmluZy5cclxuXHRcdCAqL1xyXG5cdFx0Zm9ybWF0X3ByZXNldF9sYWJlbCggd2VpZ2h0cyApIHtcclxuXHRcdFx0Y29uc3Qgc3VtID0gd2VpZ2h0cy5yZWR1Y2UoICggYSwgYiApID0+IGEgKyAoTnVtYmVyKCBiICkgfHwgMCksIDAgKSB8fCAxO1xyXG5cdFx0XHRyZXR1cm4gd2VpZ2h0cy5tYXAoICggdyApID0+IE1hdGgucm91bmQoICgoTnVtYmVyKCB3ICkgfHwgMCkgLyBzdW0pICogMTAwICkgKS5qb2luKCAnJS8nICkgKyAnJSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBQYXJzZSBjb21tYS9zcGFjZSBzZXBhcmF0ZWQgd2VpZ2h0cyBpbnRvIG51bWJlcnMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVXNlciBpbnB1dCBsaWtlIFwiMjAsNjAsMjBcIi5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJbXX0gUGFyc2VkIHdlaWdodHMuXHJcblx0XHQgKi9cclxuXHRcdHBhcnNlX3dlaWdodHMoIGlucHV0ICkge1xyXG5cdFx0XHRpZiAoICEgaW5wdXQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0IClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teXFxkLC5cXHNdL2csICcnIClcclxuXHRcdFx0XHQuc3BsaXQoIC9bXFxzLF0rLyApXHJcblx0XHRcdFx0Lm1hcCggKCBzICkgPT4gcGFyc2VGbG9hdCggcyApIClcclxuXHRcdFx0XHQuZmlsdGVyKCAoIG4gKSA9PiBOdW1iZXIuaXNGaW5pdGUoIG4gKSAmJiBuID49IDAgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBXUEJDIFVzYWdlIExpbWl0IHNlcnZpY2UuXHJcblx0ICogQ291bnRzIGZpZWxkIHVzYWdlIGJ5IGtleSwgY29tcGFyZXMgdG8gcGFsZXR0ZSBsaW1pdHMsIGFuZCB1cGRhdGVzIHBhbGV0dGUgVUkuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IHBhZ2VzX2NvbnRhaW5lciBhbmQgcGFsZXR0ZV91bC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYWdlc19jb250YWluZXIgLSBDYW52YXMgcm9vdCB0aGF0IGhvbGRzIHBsYWNlZCBmaWVsZHMuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50W118bnVsbH0gcGFsZXR0ZV91bHM/OiAgIFBhbGV0dGVzIFVMIHdpdGggLndwYmNfYmZiX19maWVsZCBpdGVtcyAobWF5IGJlIG51bGwpLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvcihwYWdlc19jb250YWluZXIsIHBhbGV0dGVfdWxzKSB7XHJcblx0XHRcdHRoaXMucGFnZXNfY29udGFpbmVyID0gcGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHQvLyBOb3JtYWxpemUgdG8gYW4gYXJyYXk7IHdl4oCZbGwgc3RpbGwgYmUgcm9idXN0IGlmIG5vbmUgcHJvdmlkZWQuXHJcblx0XHRcdHRoaXMucGFsZXR0ZV91bHMgICAgID0gQXJyYXkuaXNBcnJheSggcGFsZXR0ZV91bHMgKSA/IHBhbGV0dGVfdWxzIDogKHBhbGV0dGVfdWxzID8gWyBwYWxldHRlX3VscyBdIDogW10pO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIHVzYWdlIGxpbWl0IGZyb20gcmF3IGRhdGFzZXQgdmFsdWUuIE1pc3NpbmcvaW52YWxpZCAtPiBJbmZpbml0eS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHJhdyAtIFJhdyBhdHRyaWJ1dGUgdmFsdWUuXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBMaW1pdCBudW1iZXIgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBwYXJzZV91c2FnZV9saW1pdCggcmF3ICkge1xyXG5cdFx0XHRpZiAoIHJhdyA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VJbnQoIHJhdywgMTAgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiA6IEluZmluaXR5O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ291bnQgaG93IG1hbnkgaW5zdGFuY2VzIGV4aXN0IHBlciB1c2FnZV9rZXkgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gTWFwIG9mIHVzYWdlX2tleSAtPiBjb3VudC5cclxuXHRcdCAqL1xyXG5cdFx0Y291bnRfdXNhZ2VfYnlfa2V5KCkge1xyXG5cdFx0XHRjb25zdCB1c2VkID0ge307XHJcblx0XHRcdGNvbnN0IGFsbCAgPSB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApIHx8IFtdO1xyXG5cdFx0XHRhbGwuZm9yRWFjaCggKCBlbCApID0+IHtcclxuXHRcdFx0XHRjb25zdCBrZXkgPSBlbC5kYXRhc2V0LnVzYWdlX2tleSB8fCBlbC5kYXRhc2V0LnR5cGUgfHwgZWwuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRpZiAoICEga2V5ICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR1c2VkW2tleV0gPSAodXNlZFtrZXldIHx8IDApICsgMTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRyZXR1cm4gdXNlZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybiBwYWxldHRlIGxpbWl0IGZvciBhIGdpdmVuIHVzYWdlIGtleSAoaWQgb2YgdGhlIHBhbGV0dGUgaXRlbSkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleS5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9IExpbWl0IHZhbHVlIG9yIEluZmluaXR5LlxyXG5cdFx0ICovXHJcblx0XHRnZXRfbGltaXRfZm9yX2tleShrZXkpIHtcclxuXHRcdFx0aWYgKCAhIGtleSApIHtcclxuXHRcdFx0XHRyZXR1cm4gSW5maW5pdHk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gUXVlcnkgYWNyb3NzIGFsbCBwYWxldHRlcyBwcmVzZW50IG5vdyAoc3RvcmVkICsgYW55IG5ld2x5IGFkZGVkIGluIERPTSkuXHJcblx0XHRcdGNvbnN0IHJvb3RzICAgICAgICAgICAgPSB0aGlzLnBhbGV0dGVfdWxzPy5sZW5ndGggPyB0aGlzLnBhbGV0dGVfdWxzIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWxfZmllbGRfdHlwZXNfX3VsJyApO1xyXG5cdFx0XHRjb25zdCBhbGxQYWxldHRlRmllbGRzID0gQXJyYXkuZnJvbSggcm9vdHMgKS5mbGF0TWFwKCByID0+IEFycmF5LmZyb20oIHIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZmllbGQnICkgKSApO1xyXG5cdFx0XHRsZXQgbGltaXQgICAgICAgICAgICAgID0gSW5maW5pdHk7XHJcblxyXG5cdFx0XHRhbGxQYWxldHRlRmllbGRzLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHVzYWdlX2tleSA9IGVsLmRhdGFzZXQudXNhZ2Vfa2V5IHx8IGVsLmRhdGFzZXQuaWQ7XHJcblx0XHRcdFx0aWYgKCBlbC5kYXRhc2V0LmlkID09PSBrZXkgfHwgdXNhZ2Vfa2V5ID09PSBrZXkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBuID0gQ29yZS5XUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZS5wYXJzZV91c2FnZV9saW1pdCggZWwuZGF0YXNldC51c2FnZW51bWJlciApO1xyXG5cdFx0XHRcdFx0Ly8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBmaW5pdGUgbGltaXQgKHNhZmVzdCBpZiBwYWxldHRlcyBkaXNhZ3JlZSkuXHJcblx0XHRcdFx0XHRpZiAoIG4gPCBsaW1pdCApIHtcclxuXHRcdFx0XHRcdFx0bGltaXQgPSBuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGxpbWl0O1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERpc2FibGUvZW5hYmxlIHBhbGV0dGUgaXRlbXMgYmFzZWQgb24gY3VycmVudCB1c2FnZSBjb3VudHMgYW5kIGxpbWl0cy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0dXBkYXRlX3BhbGV0dGVfdWkoKSB7XHJcblx0XHRcdC8vIEFsd2F5cyBjb21wdXRlIHVzYWdlIGZyb20gdGhlIGNhbnZhczpcclxuXHRcdFx0Y29uc3QgdXNhZ2UgPSB0aGlzLmNvdW50X3VzYWdlX2J5X2tleSgpO1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIGFsbCBwYWxldHRlcyBjdXJyZW50bHkgaW4gRE9NIChub3QganVzdCB0aGUgaW5pdGlhbGx5IGNhcHR1cmVkIG9uZXMpXHJcblx0XHRcdGNvbnN0IHBhbGV0dGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWxfZmllbGRfdHlwZXNfX3VsJyApO1xyXG5cclxuXHRcdFx0cGFsZXR0ZXMuZm9yRWFjaCggKHBhbCkgPT4ge1xyXG5cdFx0XHRcdHBhbC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19maWVsZCcgKS5mb3JFYWNoKCAocGFuZWxfZmllbGQpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHBhbGV0dGVJZCAgID0gcGFuZWxfZmllbGQuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRcdGNvbnN0IHVzYWdlS2V5ICAgID0gcGFuZWxfZmllbGQuZGF0YXNldC51c2FnZV9rZXkgfHwgcGFsZXR0ZUlkO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3X2xpbWl0ICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LnVzYWdlbnVtYmVyO1xyXG5cdFx0XHRcdFx0Y29uc3QgcGVyRWxMaW1pdCAgPSBDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlLnBhcnNlX3VzYWdlX2xpbWl0KCByYXdfbGltaXQgKTtcclxuXHRcdFx0XHRcdC8vIEVmZmVjdGl2ZSBsaW1pdCBhY3Jvc3MgYWxsIHBhbGV0dGVzIGlzIHRoZSBnbG9iYWwgbGltaXQgZm9yIHRoaXMga2V5LlxyXG5cdFx0XHRcdFx0Y29uc3QgZ2xvYmFsTGltaXQgPSB0aGlzLmdldF9saW1pdF9mb3Jfa2V5KCB1c2FnZUtleSApO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGltaXQgICAgICAgPSBOdW1iZXIuaXNGaW5pdGUoIGdsb2JhbExpbWl0ICkgPyBnbG9iYWxMaW1pdCA6IHBlckVsTGltaXQ7IC8vIHByZWZlciBnbG9iYWwgbWluXHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudCA9IHVzYWdlW3VzYWdlS2V5XSB8fCAwO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGlzYWJsZSA9IE51bWJlci5pc0Zpbml0ZSggbGltaXQgKSAmJiBjdXJyZW50ID49IGxpbWl0O1xyXG5cclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkaXNhYmxlID8gJ25vbmUnIDogJyc7XHJcblx0XHRcdFx0XHRwYW5lbF9maWVsZC5zdHlsZS5vcGFjaXR5ICAgICAgID0gZGlzYWJsZSA/ICcwLjQnIDogJyc7XHJcblx0XHRcdFx0XHRwYW5lbF9maWVsZC5zZXRBdHRyaWJ1dGUoICdhcmlhLWRpc2FibGVkJywgZGlzYWJsZSA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdGlmICggZGlzYWJsZSApIHtcclxuXHRcdFx0XHRcdFx0cGFuZWxfZmllbGQuc2V0QXR0cmlidXRlKCAndGFiaW5kZXgnLCAnLTEnICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9maWVsZC5yZW1vdmVBdHRyaWJ1dGUoICd0YWJpbmRleCcgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm4gaG93IG1hbnkgdmFsaWQgaW5zdGFuY2VzIHdpdGggdGhpcyB1c2FnZSBrZXkgZXhpc3QgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gQ291bnQgb2YgZXhpc3Rpbmcgbm9uLWludmFsaWQgaW5zdGFuY2VzLlxyXG5cdFx0ICovXHJcblx0XHRjb3VudF9mb3Jfa2V5KCBrZXkgKSB7XHJcblx0XHRcdGlmICggISBrZXkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICggdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtdXNhZ2Vfa2V5PVwiJHtDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3Rvcigga2V5ICl9XCJdOm5vdCguaXMtaW52YWxpZCksIFxyXG4gICAgICAgICAgICAgICAgIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZFtkYXRhLXR5cGU9XCIke0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCBrZXkgKX1cIl06bm90KC5pcy1pbnZhbGlkKWBcclxuXHRcdFx0KSB8fCBbXSApLmxlbmd0aDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEFsaWFzIGZvciBsaW1pdCBsb29rdXAgKHJlYWRhYmlsaXR5KS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gTGltaXQgdmFsdWUgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdGxpbWl0X2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0X2xpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmVtYWluaW5nIHNsb3RzIGZvciB0aGlzIGtleSAoSW5maW5pdHkgaWYgdW5saW1pdGVkKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gUmVtYWluaW5nIGNvdW50ICg+PSAwKSBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0cmVtYWluaW5nX2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0Y29uc3QgbGltaXQgPSB0aGlzLmxpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0XHRpZiAoIGxpbWl0ID09PSBJbmZpbml0eSApIHtcclxuXHRcdFx0XHRyZXR1cm4gSW5maW5pdHk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdXNlZCA9IHRoaXMuY291bnRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdHJldHVybiBNYXRoLm1heCggMCwgbGltaXQgLSB1c2VkICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnVlIGlmIHlvdSBjYW4gYWRkIGBkZWx0YWAgbW9yZSBpdGVtcyBmb3IgdGhpcyBrZXkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGE9MV0gLSBIb3cgbWFueSBpdGVtcyB5b3UgaW50ZW5kIHRvIGFkZC5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFkZGluZyBpcyBhbGxvd2VkLlxyXG5cdFx0ICovXHJcblx0XHRjYW5fYWRkKCBrZXksIGRlbHRhID0gMSApIHtcclxuXHRcdFx0Y29uc3QgcmVtID0gdGhpcy5yZW1haW5pbmdfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdHJldHVybiAoIHJlbSA9PT0gSW5maW5pdHkgKSA/IHRydWUgOiAoIHJlbSA+PSBkZWx0YSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVUktZmFjaW5nIGdhdGU6IGFsZXJ0IHdoZW4gZXhjZWVkZWQuIFJldHVybnMgYm9vbGVhbiBhbGxvd2VkL2Jsb2NrZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEBwYXJhbSB7e2xhYmVsPzogc3RyaW5nLCBkZWx0YT86IG51bWJlcn19IFtvcHRzPXt9XSAtIE9wdGlvbmFsIFVJIGluZm8uXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbGxvd2VkLCBmYWxzZSBpZiBibG9ja2VkLlxyXG5cdFx0ICovXHJcblx0XHRnYXRlX29yX2FsZXJ0KCBrZXksIHsgbGFiZWwgPSBrZXksIGRlbHRhID0gMSB9ID0ge30gKSB7XHJcblx0XHRcdGlmICggdGhpcy5jYW5fYWRkKCBrZXksIGRlbHRhICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgbGltaXQgPSB0aGlzLmxpbWl0X2Zvcl9rZXkoIGtleSApO1xyXG5cdFx0XHRhbGVydCggYE9ubHkgJHtsaW1pdH0gaW5zdGFuY2Uke2xpbWl0ID4gMSA/ICdzJyA6ICcnfSBvZiBcIiR7bGFiZWx9XCIgYWxsb3dlZC5gICk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJhY2t3YXJkLWNvbXBhdGlibGUgYWxpYXMgdXNlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLiAgLSBDaGVjayB3aGV0aGVyIGFub3RoZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW5cclxuXHRcdCAqIHVzYWdlIGtleSBjYW4gYmUgYWRkZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVzYWdlIGtleSBvZiBhIHBhbGV0dGUgaXRlbS5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFkZGluZyBvbmUgbW9yZSBpcyBhbGxvd2VkLlxyXG5cdFx0ICovXHJcblx0XHRpc191c2FnZV9vaygga2V5ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jYW5fYWRkKCBrZXksIDEgKTtcclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RhbnQgZXZlbnQgbmFtZXMgZm9yIHRoZSBidWlsZGVyLlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRXZlbnRzID0gT2JqZWN0LmZyZWV6ZSh7XHJcblx0XHRTRUxFQ1QgICAgICAgICAgICA6ICd3cGJjOmJmYjpzZWxlY3QnLFxyXG5cdFx0Q0xFQVJfU0VMRUNUSU9OICAgOiAnd3BiYzpiZmI6Y2xlYXItc2VsZWN0aW9uJyxcclxuXHRcdEZJRUxEX0FERCAgICAgICAgIDogJ3dwYmM6YmZiOmZpZWxkOmFkZCcsXHJcblx0XHRGSUVMRF9SRU1PVkUgICAgICA6ICd3cGJjOmJmYjpmaWVsZDpyZW1vdmUnLFxyXG5cdFx0U1RSVUNUVVJFX0NIQU5HRSAgOiAnd3BiYzpiZmI6c3RydWN0dXJlOmNoYW5nZScsXHJcblx0XHRTVFJVQ1RVUkVfTE9BREVEICA6ICd3cGJjOmJmYjpzdHJ1Y3R1cmU6bG9hZGVkJ1xyXG5cdH0pO1xyXG5cclxuXHQvKipcclxuXHQgKiBMaWdodHdlaWdodCBldmVudCBidXMgdGhhdCBlbWl0cyB0byBib3RoIHRoZSBwYWdlcyBjb250YWluZXIgYW5kIGRvY3VtZW50LlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRXZlbnRCdXMgPSAgY2xhc3Mge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzY29wZV9lbCAtIEVsZW1lbnQgdG8gZGlzcGF0Y2ggYnViYmxlZCBldmVudHMgZnJvbS5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIHNjb3BlX2VsICkge1xyXG5cdFx0XHR0aGlzLnNjb3BlX2VsID0gc2NvcGVfZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbWl0IGEgRE9NIEN1c3RvbUV2ZW50IHdpdGggcGF5bG9hZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUgKHVzZSBDb3JlLldQQkNfQkZCX0V2ZW50cy4gd2hlbiBwb3NzaWJsZSkuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gW2RldGFpbD17fV0gLSBBcmJpdHJhcnkgc2VyaWFsaXphYmxlIHBheWxvYWQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0ZW1pdCggdHlwZSwgZGV0YWlsID0ge30gKSB7XHJcblx0XHRcdGlmICggISB0aGlzLnNjb3BlX2VsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNjb3BlX2VsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggdHlwZSwgeyBkZXRhaWw6IHsgLi4uZGV0YWlsIH0sIGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQgb24gZG9jdW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBFdmVudCB0eXBlLlxyXG5cdFx0ICogQHBhcmFtIHsoZXY6Q3VzdG9tRXZlbnQpPT52b2lkfSBoYW5kbGVyIC0gSGFuZGxlciBmdW5jdGlvbi5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvbiggdHlwZSwgaGFuZGxlciApIHtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlciApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCBvbiBkb2N1bWVudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUuXHJcblx0XHQgKiBAcGFyYW0geyhldjpDdXN0b21FdmVudCk9PnZvaWR9IGhhbmRsZXIgLSBIYW5kbGVyIGZ1bmN0aW9uLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdG9mZiggdHlwZSwgaGFuZGxlciApIHtcclxuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlciApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNvcnRhYmxlSlMgbWFuYWdlcjogc2luZ2xlIHBvaW50IGZvciBjb25zaXN0ZW50IERuRCBjb25maWcuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIgPSBjbGFzcyAge1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAtIFRoZSBhY3RpdmUgYnVpbGRlciBpbnN0YW5jZS5cclxuXHRcdCAqIEBwYXJhbSB7eyBncm91cE5hbWU/OiBzdHJpbmcsIGFuaW1hdGlvbj86IG51bWJlciwgZ2hvc3RDbGFzcz86IHN0cmluZywgY2hvc2VuQ2xhc3M/OiBzdHJpbmcsIGRyYWdDbGFzcz86XHJcblx0XHQgKiAgICAgc3RyaW5nIH19IFtvcHRzPXt9XSAtIFZpc3VhbC9iZWhhdmlvciBvcHRpb25zLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvciggYnVpbGRlciwgb3B0cyA9IHt9ICkge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0XHRjb25zdCBnaWQgPSB0aGlzLmJ1aWxkZXI/Lmluc3RhbmNlX2lkIHx8IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dGhpcy5vcHRzID0ge1xyXG5cdFx0XHRcdC8vIGdyb3VwTmFtZSAgOiAnZm9ybScsXHJcblx0XHRcdFx0Z3JvdXBOYW1lOiBgZm9ybS0ke2dpZH1gLFxyXG5cdFx0XHRcdGFuaW1hdGlvbiAgOiAxNTAsXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6ICd3cGJjX2JmYl9fZHJhZy1naG9zdCcsXHJcblx0XHRcdFx0Y2hvc2VuQ2xhc3M6ICd3cGJjX2JmYl9faGlnaGxpZ2h0JyxcclxuXHRcdFx0XHRkcmFnQ2xhc3MgIDogJ3dwYmNfYmZiX19kcmFnLWFjdGl2ZScsXHJcblx0XHRcdFx0Li4ub3B0c1xyXG5cdFx0XHR9O1xyXG5cdFx0XHQvKiogQHR5cGUge1NldDxIVE1MRWxlbWVudD59ICovXHJcblx0XHRcdHRoaXMuX2NvbnRhaW5lcnMgPSBuZXcgU2V0KCk7XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogR3VhcmQgYWdhaW5zdCBsb3N0IG1vdXNldXAgLyBwb2ludGVydXAgZXZlbnRzLlxyXG5cdFx0XHQgKlxyXG5cdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMuX2RyYWdfZmFpbF9zYWZlX2JvdW5kID0gZmFsc2U7XHJcblxyXG5cdFx0XHR0aGlzLl9iaW5kX2RyYWdfZmFpbF9zYWZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGVhbnVwIGRyYWcgVUkgc3RhdGUuXHJcblx0XHQgKlxyXG5cdFx0ICogVGhpcyBpcyBhIGRlZmVuc2l2ZSBjbGVhbnVwIGZvciBjYXNlcyB3aGVuIENocm9tZSBvciBhIGJyb3dzZXIgZXh0ZW5zaW9uXHJcblx0XHQgKiBsb3NlcyB0aGUgZmluYWwgbW91c2V1cCAvIHBvaW50ZXJ1cCBldmVudCBkdXJpbmcgZmFsbGJhY2sgZHJhZ2dpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdF9jbGVhbnVwX2RyYWdfdWkoKSB7XHJcblx0XHRcdHRoaXMuX2RyYWdTdGF0ZSA9IG51bGw7XHJcblx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggZmFsc2UgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBvbmx5IGZhbGxiYWNrIG1pcnJvcnMuIERvIG5vdCB0b3VjaCByZWFsIGRyYWdnZWQgZWxlbWVudHMuXHJcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcuc29ydGFibGUtZmFsbGJhY2tbZGF0YS1kcmFnLXJvbGVdLCAud3BiY19iZmJfX3NpbXBsZV9saXN0X2ZhbGxiYWNrJyApXHJcblx0XHRcdFx0XHQuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCaW5kIGdsb2JhbCBmYWlsLXNhZmUgbGlzdGVuZXJzIGZvciBkcmFnIGNsZWFudXAuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdF9iaW5kX2RyYWdfZmFpbF9zYWZlKCkge1xyXG5cdFx0XHRpZiAoIHRoaXMuX2RyYWdfZmFpbF9zYWZlX2JvdW5kICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fZHJhZ19mYWlsX3NhZmVfYm91bmQgPSB0cnVlO1xyXG5cclxuXHRcdFx0Y29uc3QgZmluaXNoX2RyYWcgPSAoKSA9PiB7XHJcblx0XHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5fY2xlYW51cF9kcmFnX3VpKCk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0WyAnbW91c2V1cCcsICdwb2ludGVydXAnLCAndG91Y2hlbmQnLCAnZHJhZ2VuZCcgXS5mb3JFYWNoKCAoZXZ0X25hbWUpID0+IHtcclxuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBldnRfbmFtZSwgZmluaXNoX2RyYWcsIHRydWUgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdibHVyJywgZmluaXNoX2RyYWcsIHRydWUgKTtcclxuXHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdFx0J3Zpc2liaWxpdHljaGFuZ2UnLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGlmICggZG9jdW1lbnQuaGlkZGVuICkge1xyXG5cdFx0XHRcdFx0XHRmaW5pc2hfZHJhZygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogVGFnIHRoZSBkcmFnIG1pcnJvciAoZWxlbWVudCB1bmRlciBjdXJzb3IpIHdpdGggcm9sZTogJ3BhbGV0dGUnIHwgJ2NhbnZhcycuXHJcblx0XHQgKiBXb3JrcyB3aXRoIFNvcnRhYmxlJ3MgZmFsbGJhY2sgbWlycm9yICguc29ydGFibGUtZmFsbGJhY2sgLyAuc29ydGFibGUtZHJhZykgYW5kIHdpdGggeW91ciBkcmFnQ2xhc3NcclxuXHRcdCAqICgud3BiY19iZmJfX2RyYWctYWN0aXZlKS5cclxuXHRcdCAqL1xyXG5cdFx0X3RhZ19kcmFnX21pcnJvciggZXZ0ICkge1xyXG5cdFx0XHRjb25zdCBmcm9tUGFsZXR0ZSA9IHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICk7XHJcblx0XHRcdGNvbnN0IHJvbGUgICAgICAgID0gZnJvbVBhbGV0dGUgPyAncGFsZXR0ZScgOiAnY2FudmFzJztcclxuXHRcdFx0Ly8gV2FpdCBhIHRpY2sgc28gdGhlIG1pcnJvciBleGlzdHMuICAtIFRoZSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgbWV0aG9kIHRlbGxzIHRoZSBicm93c2VyIHlvdSB3aXNoIHRvIHBlcmZvcm0gYW4gYW5pbWF0aW9uLlxyXG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBtaXJyb3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLnNvcnRhYmxlLWZhbGxiYWNrLCAuc29ydGFibGUtZHJhZywgLicgKyB0aGlzLm9wdHMuZHJhZ0NsYXNzICk7XHJcblx0XHRcdFx0aWYgKCBtaXJyb3IgKSB7XHJcblx0XHRcdFx0XHRtaXJyb3Iuc2V0QXR0cmlidXRlKCAnZGF0YS1kcmFnLXJvbGUnLCByb2xlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggYWN0aXZlLCBmcm9tX3BhbGV0dGUgPSBmYWxzZSApIHtcclxuXHJcblx0XHRcdC8vIHNldCB0byByb290IGVsZW1lbnQgb2YgYW4gSFRNTCBkb2N1bWVudCwgd2hpY2ggaXMgdGhlIDxodG1sPi5cclxuXHRcdFx0Y29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHRcdFx0aWYgKCBhY3RpdmUgKSB7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2RuZC1hY3RpdmUnICk7XHJcblx0XHRcdFx0aWYgKCBmcm9tX3BhbGV0dGUgKSB7XHJcblx0XHRcdFx0XHRyb290LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJvb3QuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19kbmQtYWN0aXZlJywgJ3dwYmNfYmZiX19kcmFnLWZyb20tcGFsZXR0ZScgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHNpbXBsZSB2ZXJ0aWNhbCBzb3J0YWJsZSBsaXN0LlxyXG5cdFx0ICpcclxuXHRcdCAqIFRoaXMgY29uZmlndXJhdGlvbiBpcyBpbnRlbmRlZCBmb3IgaW5zcGVjdG9yL3NpZGViYXIgbGlzdHMgc3VjaCBhczpcclxuXHRcdCAqIC0gZHJvcGRvd24gY2hvaWNlc1xyXG5cdFx0ICogLSByYWRpbyBvcHRpb25zXHJcblx0XHQgKiAtIGNoZWNrYm94IG9wdGlvbnNcclxuXHRcdCAqXHJcblx0XHQgKiBJdCBpcyBpbnRlbnRpb25hbGx5IG11Y2ggc2ltcGxlciB0aGFuIHRoZSBjYW52YXMgRG5EIGNvbmZpZyBhbmQgZG9lcyBub3RcclxuXHRcdCAqIHVzZSB0aGUgY29sdW1uIGVkZ2UtZmVuY2UgLyBzdGlja3ktdGFyZ2V0IGxvZ2ljLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFNvcnRhYmxlIGxpc3QgY29udGFpbmVyLlxyXG5cdFx0ICogQHBhcmFtIHt7IGhhbmRsZV9zZWxlY3Rvcj86IHN0cmluZywgZHJhZ2dhYmxlX3NlbGVjdG9yPzogc3RyaW5nLCBvblVwZGF0ZT86IEZ1bmN0aW9uIH19IFtoYW5kbGVycz17fV0gLVxyXG5cdFx0ICogICAgIE9wdGlvbmFsIGhhbmRsZXJzL3NlbGVjdG9ycy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmVfc2ltcGxlX2xpc3QoIGNvbnRhaW5lciwgaGFuZGxlcnMgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIGNvbnRhaW5lciB8fCB0eXBlb2YgU29ydGFibGUgPT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIFNvcnRhYmxlLmdldD8uKCBjb250YWluZXIgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbW1vbiA9IHtcclxuXHRcdFx0XHRhbmltYXRpb24gICAgICAgIDogdGhpcy5vcHRzLmFuaW1hdGlvbixcclxuXHRcdFx0XHRnaG9zdENsYXNzICAgICAgIDogdGhpcy5vcHRzLmdob3N0Q2xhc3MsXHJcblx0XHRcdFx0Y2hvc2VuQ2xhc3MgICAgICA6IHRoaXMub3B0cy5jaG9zZW5DbGFzcyxcclxuXHRcdFx0XHRkcmFnQ2xhc3MgICAgICAgIDogdGhpcy5vcHRzLmRyYWdDbGFzcyxcclxuXHRcdFx0XHRmb3JjZUZhbGxiYWNrICAgIDogdHJ1ZSxcclxuXHRcdFx0XHQvLyBGb3IgYSBzaW5nbGUgc2Nyb2xsYWJsZSBzaWRlYmFyIGxpc3QgdGhpcyBpcyB1c3VhbGx5IG1vcmUgc3RhYmxlLlxyXG5cdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiBmYWxzZSxcclxuXHRcdFx0XHRmYWxsYmFja1RvbGVyYW5jZTogOCxcclxuXHRcdFx0XHRyZW1vdmVDbG9uZU9uSGlkZTogdHJ1ZSxcclxuXHRcdFx0XHRvblN0YXJ0ICAgICAgICAgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fYWRkX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZmFsc2UgKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG9uRW5kICAgICAgICAgICAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYnVpbGRlcj8uX3JlbW92ZV9kcmFnZ2luZ19jbGFzcz8uKCk7XHJcblx0XHRcdFx0XHR9LCA1MCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0dGhpcy5fZHJhZ1N0YXRlID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuX2NsZWFudXBfZHJhZ191aSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdFNvcnRhYmxlLmNyZWF0ZShcclxuXHRcdFx0XHRjb250YWluZXIsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Li4uY29tbW9uLFxyXG5cdFx0XHRcdFx0Z3JvdXAgICAgICAgICAgICAgICAgICA6IHsgbmFtZTogdGhpcy5vcHRzLmdyb3VwTmFtZSwgcHVsbDogZmFsc2UsIHB1dDogZmFsc2UgfSxcclxuXHRcdFx0XHRcdHNvcnQgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0ZGlyZWN0aW9uICAgICAgICAgICAgICA6ICd2ZXJ0aWNhbCcsXHJcblx0XHRcdFx0XHRoYW5kbGUgICAgICAgICAgICAgICAgIDogaGFuZGxlcnMuaGFuZGxlX3NlbGVjdG9yIHx8ICcud3BiY19iZmJfX2RyYWctaGFuZGxlJyxcclxuXHRcdFx0XHRcdGRyYWdnYWJsZSAgICAgICAgICAgICAgOiBoYW5kbGVycy5kcmFnZ2FibGVfc2VsZWN0b3IgfHwgJy53cGJjX2JmYl9fc29ydGFibGUtcm93JyxcclxuXHRcdFx0XHRcdGZhbGxiYWNrQ2xhc3MgICAgICAgICAgOiAnd3BiY19iZmJfX3NpbXBsZV9saXN0X2ZhbGxiYWNrJyxcclxuXHRcdFx0XHRcdGZpbHRlciAgICAgICAgICAgICAgICAgOiBbXHJcblx0XHRcdFx0XHRcdCdpbnB1dCcsXHJcblx0XHRcdFx0XHRcdCd0ZXh0YXJlYScsXHJcblx0XHRcdFx0XHRcdCdzZWxlY3QnLFxyXG5cdFx0XHRcdFx0XHQnYnV0dG9uJyxcclxuXHRcdFx0XHRcdFx0J2EnLFxyXG5cdFx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUnLFxyXG5cdFx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUgKidcclxuXHRcdFx0XHRcdF0uam9pbiggJywnICksXHJcblx0XHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRpbnZlcnRTd2FwICAgICAgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRzd2FwVGhyZXNob2xkICAgICAgICAgIDogMC4zMCxcclxuXHRcdFx0XHRcdGludmVydGVkU3dhcFRocmVzaG9sZCAgOiAwLjYwLFxyXG5cdFx0XHRcdFx0ZW1wdHlJbnNlcnRUaHJlc2hvbGQgICA6IDgsXHJcblx0XHRcdFx0XHRkcmFnb3ZlckJ1YmJsZSAgICAgICAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRzY3JvbGwgICAgICAgICAgICAgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdHNjcm9sbFNlbnNpdGl2aXR5ICAgICAgOiA2MCxcclxuXHRcdFx0XHRcdHNjcm9sbFNwZWVkICAgICAgICAgICAgOiAxNCxcclxuXHRcdFx0XHRcdG9uVXBkYXRlICAgICAgICAgICAgICAgOiBoYW5kbGVycy5vblVwZGF0ZSB8fCBmdW5jdGlvbiAoKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMuX2NvbnRhaW5lcnMuYWRkKCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgU29ydGFibGUgaXMgYXR0YWNoZWQgdG8gYSBjb250YWluZXIgd2l0aCByb2xlICdwYWxldHRlJyBvciAnY2FudmFzJy5cclxuXHRcdCAqXHJcblx0XHQgKiAgLS0gSGFuZGxlIHNlbGVjdG9yczogaGFuZGxlOiAgJy5zZWN0aW9uLWRyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctYW55d2hlcmUsXHJcblx0XHQgKiBbZGF0YS1kcmFnZ2FibGU9XCJ0cnVlXCJdJ1xyXG5cdFx0ICogIC0tIERyYWdnYWJsZSBnYXRlOiBkcmFnZ2FibGU6ICcud3BiY19iZmJfX2ZpZWxkOm5vdChbZGF0YS1kcmFnZ2FibGU9XCJmYWxzZVwiXSksIC53cGJjX2JmYl9fc2VjdGlvbidcclxuXHRcdCAqICAtLSBGaWx0ZXIgKG92ZXJsYXktc2FmZSk6ICAgICBpZ25vcmUgZXZlcnl0aGluZyBpbiBvdmVybGF5IGV4Y2VwdCB0aGUgaGFuZGxlIC1cclxuXHRcdCAqICcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHNcclxuXHRcdCAqICo6bm90KC53cGJjX2JmYl9fZHJhZy1oYW5kbGUpOm5vdCguc2VjdGlvbi1kcmFnLWhhbmRsZSk6bm90KC53cGJjX2ljbl9kcmFnX2luZGljYXRvciknXHJcblx0XHQgKiAgLS0gTm8tZHJhZyB3cmFwcGVyOiAgICAgICAgICAgdXNlIC53cGJjX2JmYl9fbm8tZHJhZy16b25lIGluc2lkZSByZW5kZXJlcnMgZm9yIGlucHV0cy93aWRnZXRzLlxyXG5cdFx0ICogIC0tIEZvY3VzIGd1YXJkIChvcHRpb25hbCk6ICAgIGZsaXAgW2RhdGEtZHJhZ2dhYmxlXSBvbiBmb2N1c2luL2ZvY3Vzb3V0IHRvIHByZXZlbnQgYWNjaWRlbnRhbCBkcmFncyB3aGlsZVxyXG5cdFx0ICogdHlwaW5nLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFRoZSBlbGVtZW50IHRvIGVuaGFuY2Ugd2l0aCBTb3J0YWJsZS5cclxuXHRcdCAqIEBwYXJhbSB7J3BhbGV0dGUnfCdjYW52YXMnfSByb2xlIC0gQmVoYXZpb3IgcHJvZmlsZSB0byBhcHBseS5cclxuXHRcdCAqIEBwYXJhbSB7eyBvbkFkZD86IEZ1bmN0aW9uIH19IFtoYW5kbGVycz17fV0gLSBPcHRpb25hbCBoYW5kbGVycy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmUoIGNvbnRhaW5lciwgcm9sZSwgaGFuZGxlcnMgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIGNvbnRhaW5lciB8fCB0eXBlb2YgU29ydGFibGUgPT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIFNvcnRhYmxlLmdldD8uKCBjb250YWluZXIgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHNvcnRhYmxlX2tpbmQgPSBoYW5kbGVycy5zb3J0YWJsZV9raW5kIHx8ICcnO1xyXG5cclxuXHRcdFx0aWYgKCBzb3J0YWJsZV9raW5kID09PSAnc2ltcGxlX2xpc3QnICkge1xyXG5cdFx0XHRcdHRoaXMuZW5zdXJlX3NpbXBsZV9saXN0KCBjb250YWluZXIsIGhhbmRsZXJzICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb21tb24gPSB7XHJcblx0XHRcdFx0YW5pbWF0aW9uICA6IHRoaXMub3B0cy5hbmltYXRpb24sXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6IHRoaXMub3B0cy5naG9zdENsYXNzLFxyXG5cdFx0XHRcdGNob3NlbkNsYXNzOiB0aGlzLm9wdHMuY2hvc2VuQ2xhc3MsXHJcblx0XHRcdFx0ZHJhZ0NsYXNzICA6IHRoaXMub3B0cy5kcmFnQ2xhc3MsXHJcblx0XHRcdFx0Ly8gPT0gRWxlbWVudCB1bmRlciB0aGUgY3Vyc29yICA9PSBFbnN1cmUgd2UgZHJhZyBhIHJlYWwgRE9NIG1pcnJvciB5b3UgY2FuIHN0eWxlIHZpYSBDU1MgKGNyb3NzLWJyb3dzZXIpLlxyXG5cdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlOiA4LFxyXG5cdFx0XHRcdHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxyXG5cdFx0XHRcdC8vIEFkZCBib2R5L2h0bWwgZmxhZ3Mgc28geW91IGNhbiBzdHlsZSBkaWZmZXJlbnRseSB3aGVuIGRyYWdnaW5nIGZyb20gcGFsZXR0ZS5cclxuXHRcdFx0XHRvblN0YXJ0OiAoZXZ0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/Ll9hZGRfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZyb21QYWxldHRlID0gdGhpcy5idWlsZGVyPy5wYWxldHRlX3Vscz8uaW5jbHVkZXM/LiggZXZ0LmZyb20gKTtcclxuXHRcdFx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZnJvbVBhbGV0dGUgKTsgIC8vIHNldCB0byByb290IEhUTUwgZG9jdW1lbnQ6IGh0bWwud3BiY19iZmJfX2RuZC1hY3RpdmUud3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlIC5cclxuXHJcblx0XHRcdFx0XHR0aGlzLl90YWdfZHJhZ19taXJyb3IoIGV2dCApOyAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgJ2RhdGEtZHJhZy1yb2xlJyBhdHRyaWJ1dGUgdG8gIGVsZW1lbnQgdW5kZXIgY3Vyc29yLlxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25FbmQgIDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLmJ1aWxkZXIuX3JlbW92ZV9kcmFnZ2luZ19jbGFzcygpOyB9LCA1MCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBmYWxzZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmICggcm9sZSA9PT0gJ3BhbGV0dGUnICkge1xyXG5cdFx0XHRcdFNvcnRhYmxlLmNyZWF0ZSggY29udGFpbmVyLCB7XHJcblx0XHRcdFx0XHQuLi5jb21tb24sXHJcblx0XHRcdFx0XHRncm91cCAgIDogeyBuYW1lOiB0aGlzLm9wdHMuZ3JvdXBOYW1lLCBwdWxsOiAnY2xvbmUnLCBwdXQ6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHRzb3J0ICAgIDogZmFsc2VcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0dGhpcy5fY29udGFpbmVycy5hZGQoIGNvbnRhaW5lciApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gcm9sZSA9PT0gJ2NhbnZhcycuXHJcblx0XHRcdFNvcnRhYmxlLmNyZWF0ZSggY29udGFpbmVyLCB7XHJcblx0XHRcdFx0Li4uY29tbW9uLFxyXG5cdFx0XHRcdGdyb3VwICAgIDoge1xyXG5cdFx0XHRcdFx0bmFtZTogdGhpcy5vcHRzLmdyb3VwTmFtZSxcclxuXHRcdFx0XHRcdHB1bGw6IHRydWUsXHJcblx0XHRcdFx0XHRwdXQgOiAodG8sIGZyb20sIGRyYWdnZWRFbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZHJhZ2dlZEVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdCAgIGRyYWdnZWRFbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0gRG5EIEhhbmRsZXJzIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgIC8vIEdyYWIgYW55d2hlcmUgb24gZmllbGRzIHRoYXQgb3B0LWluIHdpdGggdGhlIGNsYXNzIG9yIGF0dHJpYnV0ZS4gIC0gU2VjdGlvbnMgc3RpbGwgcmVxdWlyZSB0aGVpciBkZWRpY2F0ZWQgaGFuZGxlLlxyXG5cdFx0XHRcdGhhbmRsZSAgIDogJy5zZWN0aW9uLWRyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctYW55d2hlcmUsIFtkYXRhLWRyYWdnYWJsZT1cInRydWVcIl0nLFxyXG5cdFx0XHRcdGRyYWdnYWJsZTogJy53cGJjX2JmYl9fZmllbGQ6bm90KFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdKSwgLndwYmNfYmZiX19zZWN0aW9uJywgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXItZmllbGQgb3B0LW91dCB3aXRoIFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdIChlLmcuLCB3aGlsZSBlZGl0aW5nKS5cclxuXHRcdFx0XHQvLyAtLS0tLS0tLS0tIEZpbHRlcnMgLSBObyBEbkQgLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAvLyBEZWNsYXJhdGl2ZSDigJxuby1kcmFnIHpvbmVz4oCdOiBhbnl0aGluZyBpbnNpZGUgdGhlc2Ugd3JhcHBlcnMgd29u4oCZdCBzdGFydCBhIGRyYWcuXHJcblx0XHRcdFx0ZmlsdGVyOiBbXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19uby1kcmFnLXpvbmUnLFxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fbm8tZHJhZy16b25lIConLFxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fY29sdW1uLXJlc2l6ZXInLCAgLy8gSWdub3JlIHRoZSByZXNpemVyIHJhaWxzIGR1cmluZyBEbkQgKHByZXZlbnRzIGVkZ2Ug4oCcc25hcOKAnSkuXHJcblx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgb3ZlcmxheSB0b29sYmFyLCBibG9jayBldmVyeXRoaW5nIEVYQ0VQVCB0aGUgZHJhZyBoYW5kbGUgKGFuZCBpdHMgaWNvbikuXHJcblx0XHRcdFx0XHQnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzICo6bm90KC53cGJjX2JmYl9fZHJhZy1oYW5kbGUpOm5vdCguc2VjdGlvbi1kcmFnLWhhbmRsZSk6bm90KC53cGJjX2ljbl9kcmFnX2luZGljYXRvciknXHJcblx0XHRcdFx0XS5qb2luKCAnLCcgKSxcclxuXHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgIDogZmFsc2UsXHJcblx0XHRcdFx0XHQvLyAtLS0tLS0tLS0tIGFudGktaml0dGVyIHR1bmluZyAtLS0tLS0tLS0tXHJcblx0XHRcdFx0ZGlyZWN0aW9uICAgICAgICAgICAgOiAndmVydGljYWwnLCAgICAgICAgICAgLy8gY29sdW1ucyBhcmUgdmVydGljYWwgbGlzdHMuXHJcblx0XHRcdFx0aW52ZXJ0U3dhcCAgICAgICAgICAgOiB0cnVlLCAgICAgICAgICAgICAgICAgLy8gdXNlIHN3YXAgb24gaW52ZXJ0ZWQgb3ZlcmxhcC5cclxuXHRcdFx0XHRzd2FwVGhyZXNob2xkICAgICAgICA6IDAuNjUsICAgICAgICAgICAgICAgICAvLyBiZSBsZXNzIGVhZ2VyIHRvIHN3YXAuXHJcblx0XHRcdFx0aW52ZXJ0ZWRTd2FwVGhyZXNob2xkOiAwLjg1LCAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBkZWVwZXIgb3ZlcmxhcCB3aGVuIGludmVydGVkLlxyXG5cdFx0XHRcdGVtcHR5SW5zZXJ0VGhyZXNob2xkIDogMjQsICAgICAgICAgICAgICAgICAgIC8vIGRvbuKAmXQganVtcCBpbnRvIGVtcHR5IGNvbnRhaW5lcnMgdG9vIGVhcmx5LlxyXG5cdFx0XHRcdGRyYWdvdmVyQnViYmxlICAgICAgIDogZmFsc2UsICAgICAgICAgICAgICAgIC8vIGtlZXAgZHJhZ292ZXIgbG9jYWwuXHJcblx0XHRcdFx0c2Nyb2xsICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdHNjcm9sbFNlbnNpdGl2aXR5ICAgIDogNDAsXHJcblx0XHRcdFx0c2Nyb2xsU3BlZWQgICAgICAgICAgOiAxMCxcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBFbnRlci9sZWF2ZSBoeXN0ZXJlc2lzIGZvciBjcm9zcy1jb2x1bW4gbW92ZXMuICAgIE9ubHkgYWxsb3cgZHJvcHBpbmcgaW50byBgdG9gIHdoZW4gdGhlIHBvaW50ZXIgaXNcclxuXHRcdFx0XHQgKiB3ZWxsIGluc2lkZSBpdC5cclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRvbk1vdmU6IChldnQsIG9yaWdpbmFsRXZlbnQpID0+IHtcclxuXHJcblx0XHRcdFx0XHRjb25zdCB7IHRvLCBmcm9tIH0gPSBldnQ7XHJcblx0XHRcdFx0XHRpZiAoICEgdG8gfHwgISBmcm9tICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBpbl9wcmV2aWV3X2NhbnZhcyA9ICEhIHRvLmNsb3Nlc3QoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhIGluX3ByZXZpZXdfY2FudmFzICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBPbmx5IGdhdGUgY29sdW1ucyAobm90IHBhZ2UgY29udGFpbmVycyksIGFuZCBvbmx5IGZvciBjcm9zcy1jb2x1bW4gbW92ZXMgaW4gdGhlIHNhbWUgcm93XHJcblx0XHRcdFx0XHRjb25zdCBpc0NvbHVtbiA9IHRvLmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaXNDb2x1bW4gKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBmcm9tUm93ID0gZnJvbS5jbG9zZXN0KCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0XHRjb25zdCB0b1JvdyAgID0gdG8uY2xvc2VzdCggJy53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRcdFx0aWYgKCBmcm9tUm93ICYmIHRvUm93ICYmIGZyb21Sb3cgIT09IHRvUm93ICkgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcmVjdCA9IHRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZXZ0WCA9IChvcmlnaW5hbEV2ZW50LnRvdWNoZXM/LlswXT8uY2xpZW50WCkgPz8gb3JpZ2luYWxFdmVudC5jbGllbnRYO1xyXG5cdFx0XHRcdFx0Y29uc3QgZXZ0WSA9IChvcmlnaW5hbEV2ZW50LnRvdWNoZXM/LlswXT8uY2xpZW50WSkgPz8gb3JpZ2luYWxFdmVudC5jbGllbnRZO1xyXG5cclxuXHRcdFx0XHRcdC8vIC0tLSBFZGdlIGZlbmNlIChsaWtlIHlvdSBoYWQpLCBidXQgY2xhbXBlZCBmb3IgdGlueSBjb2x1bW5zXHJcblx0XHRcdFx0XHRjb25zdCBwYWRkaW5nWCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3Qud2lkdGggKiAwLjIwLCAxMiwgMzYgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHBhZGRpbmdZID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggcmVjdC5oZWlnaHQgKiAwLjEwLCA2LCAxNiApO1xyXG5cclxuXHRcdFx0XHRcdC8vIExvb3NlciBZIGlmIHRoZSBjb2x1bW4gaXMgdmlzdWFsbHkgdGlueS9lbXB0eVxyXG5cdFx0XHRcdFx0Y29uc3QgaXNWaXN1YWxseUVtcHR5ID0gdG8uY2hpbGRFbGVtZW50Q291bnQgPT09IDAgfHwgcmVjdC5oZWlnaHQgPCA2NDtcclxuXHRcdFx0XHRcdGNvbnN0IGlubmVyVG9wICAgICAgICA9IHJlY3QudG9wICsgKGlzVmlzdWFsbHlFbXB0eSA/IDQgOiBwYWRkaW5nWSk7XHJcblx0XHRcdFx0XHRjb25zdCBpbm5lckJvdHRvbSAgICAgPSByZWN0LmJvdHRvbSAtIChpc1Zpc3VhbGx5RW1wdHkgPyA0IDogcGFkZGluZ1kpO1xyXG5cdFx0XHRcdFx0Y29uc3QgaW5uZXJMZWZ0ICAgICAgID0gcmVjdC5sZWZ0ICsgcGFkZGluZ1g7XHJcblx0XHRcdFx0XHRjb25zdCBpbm5lclJpZ2h0ICAgICAgPSByZWN0LnJpZ2h0IC0gcGFkZGluZ1g7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zaWRlWCA9IGV2dFggPiBpbm5lckxlZnQgJiYgZXZ0WCA8IGlubmVyUmlnaHQ7XHJcblx0XHRcdFx0XHRjb25zdCBpbnNpZGVZID0gZXZ0WSA+IGlubmVyVG9wICYmIGV2dFkgPCBpbm5lckJvdHRvbTtcclxuXHRcdFx0XHRcdGlmICggIShpbnNpZGVYICYmIGluc2lkZVkpICkgcmV0dXJuIGZhbHNlOyAgIC8vIHN0YXkgaW4gY3VycmVudCBjb2x1bW4gdW50aWwgd2VsbCBpbnNpZGUgbmV3IG9uZVxyXG5cclxuXHRcdFx0XHRcdC8vIC0tLSBTdGlja3kgdGFyZ2V0IGNvbW1pdCBkaXN0YW5jZTogb25seSBzd2l0Y2ggaWYgd2XigJlyZSBjbGVhcmx5IGluc2lkZSB0aGUgbmV3IGNvbHVtblxyXG5cdFx0XHRcdFx0Y29uc3QgZHMgPSB0aGlzLl9kcmFnU3RhdGU7XHJcblx0XHRcdFx0XHRpZiAoIGRzICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIGRzLnN0aWNreVRvICYmIGRzLnN0aWNreVRvICE9PSB0byApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyByZXF1aXJlIGEgZGVlcGVyIHBlbmV0cmF0aW9uIHRvIHN3aXRjaCBjb2x1bW5zXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29tbWl0WCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3Qud2lkdGggKiAwLjI1LCAxOCwgNDAgKTsgICAvLyAyNSUgb3IgMTjigJM0MHB4XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29tbWl0WSA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY2xhbXAoIHJlY3QuaGVpZ2h0ICogMC4xNSwgMTAsIDI4ICk7ICAvLyAxNSUgb3IgMTDigJMyOHB4XHJcblxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlZXBJbnNpZGUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIChldnRYID4gcmVjdC5sZWZ0ICsgY29tbWl0WCAmJiBldnRYIDwgcmVjdC5yaWdodCAtIGNvbW1pdFgpICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKGV2dFkgPiByZWN0LnRvcCArIGNvbW1pdFkgJiYgZXZ0WSA8IHJlY3QuYm90dG9tIC0gY29tbWl0WSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggIWRlZXBJbnNpZGUgKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gV2UgYWNjZXB0IHRoZSBuZXcgdGFyZ2V0IG5vdy5cclxuXHRcdFx0XHRcdFx0ZHMuc3RpY2t5VG8gICAgID0gdG87XHJcblx0XHRcdFx0XHRcdGRzLmxhc3RTd2l0Y2hUcyA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25TdGFydDogKGV2dCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fYWRkX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdC8vIE1hdGNoIHRoZSBmbGFncyB3ZSBzZXQgaW4gY29tbW9uIHNvIENTUyBzdGF5cyBjb25zaXN0ZW50IG9uIGNhbnZhcyBkcmFncyB0b28uXHJcblx0XHRcdFx0XHRjb25zdCBmcm9tUGFsZXR0ZSA9IHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIHRydWUsIGZyb21QYWxldHRlICk7ICAgICAgICAgIC8vIHNldCB0byByb290IEhUTUwgZG9jdW1lbnQ6IGh0bWwud3BiY19iZmJfX2RuZC1hY3RpdmUud3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlIC5cclxuXHRcdFx0XHRcdHRoaXMuX3RhZ19kcmFnX21pcnJvciggZXZ0ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWcgdGhlIG1pcnJvciB1bmRlciBjdXJzb3IuXHJcblx0XHRcdFx0XHR0aGlzLl9kcmFnU3RhdGUgPSB7IHN0aWNreVRvOiBudWxsLCBsYXN0U3dpdGNoVHM6IDAgfTsgICAgLy8gcGVyLWRyYWcgc3RhdGUuXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvbkVuZCAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuYnVpbGRlci5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzKCk7IH0sIDUwICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIGZhbHNlICk7ICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gcm9vdCBIVE1MIGRvY3VtZW50IHdpdGhvdXQgdGhlc2UgY2xhc3NlczogaHRtbC53cGJjX2JmYl9fZG5kLWFjdGl2ZS53cGJjX2JmYl9fZHJhZy1mcm9tLXBhbGV0dGUgLlxyXG5cdFx0XHRcdFx0dGhpcy5fZHJhZ1N0YXRlID0gbnVsbDtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0XHQvLyBvbkFkZDogaGFuZGxlcnMub25BZGQgfHwgdGhpcy5idWlsZGVyLmhhbmRsZV9vbl9hZGQuYmluZCggdGhpcy5idWlsZGVyIClcclxuXHRcdFx0XHRvbkFkZDogKGV2dCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLl9vbl9hZGRfc2VjdGlvbiggZXZ0ICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBvcmlnaW5hbCBoYW5kbGVyIGZvciBub3JtYWwgZmllbGRzLlxyXG5cdFx0XHRcdFx0KGhhbmRsZXJzLm9uQWRkIHx8IHRoaXMuYnVpbGRlci5oYW5kbGVfb25fYWRkLmJpbmQoIHRoaXMuYnVpbGRlciApKSggZXZ0ICk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvblVwZGF0ZTogKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TVFJVQ1RVUkVfQ0hBTkdFLCB7IHJlYXNvbjogJ3NvcnQtdXBkYXRlJyB9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzLmFkZCggY29udGFpbmVyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIYW5kbGUgYWRkaW5nL21vdmluZyBzZWN0aW9ucyB2aWEgU29ydGFibGUgb25BZGQuXHJcblx0XHQgKiBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZCAoaS5lLiwgaXQgd2FzIGEgc2VjdGlvbiksIGZhbHNlIHRvIGxldCB0aGUgZGVmYXVsdCBmaWVsZCBoYW5kbGVyIHJ1bi5cclxuXHRcdCAqXHJcblx0XHQgKiAtIFBhbGV0dGUgLT4gY2FudmFzOiByZW1vdmUgdGhlIHBsYWNlaG9sZGVyIGNsb25lIGFuZCBidWlsZCBhIGZyZXNoIHNlY3Rpb24gdmlhIGFkZF9zZWN0aW9uKClcclxuXHRcdCAqIC0gQ2FudmFzIC0+IGNhbnZhczoga2VlcCB0aGUgbW92ZWQgRE9NIChhbmQgaXRzIGNoaWxkcmVuKSwganVzdCByZS13aXJlIG92ZXJsYXlzL3NvcnRhYmxlcy9tZXRhZGF0YVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7U29ydGFibGUuU29ydGFibGVFdmVudH0gZXZ0XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0X29uX2FkZF9zZWN0aW9uKGV2dCkge1xyXG5cclxuXHRcdFx0Y29uc3QgaXRlbSA9IGV2dC5pdGVtO1xyXG5cdFx0XHRpZiAoICEgaXRlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElkZW50aWZ5IHNlY3Rpb25zIGJvdGggZnJvbSBwYWxldHRlIGl0ZW1zIChsaSBjbG9uZXMpIGFuZCByZWFsIGNhbnZhcyBub2Rlcy5cclxuXHRcdFx0Y29uc3QgZGF0YSAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGl0ZW0gKTtcclxuXHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCAoZGF0YT8udHlwZSB8fCBpdGVtLmRhdGFzZXQ/LnR5cGUpID09PSAnc2VjdGlvbic7XHJcblxyXG5cdFx0XHRpZiAoICEgaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZnJvbVBhbGV0dGUgPSB0aGlzLmJ1aWxkZXI/LnBhbGV0dGVfdWxzPy5pbmNsdWRlcz8uKCBldnQuZnJvbSApID09PSB0cnVlO1xyXG5cclxuXHRcdFx0aWYgKCAhIGZyb21QYWxldHRlICkge1xyXG5cdFx0XHRcdC8vIENhbnZhcyAtPiBjYW52YXMgbW92ZTogRE8gTk9UIHJlYnVpbGQvcmVtb3ZlOyBwcmVzZXJ2ZSBjaGlsZHJlbi5cclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhcj8uKCBpdGVtICk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgb3ZlcmxheSBleGlzdHNcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnM/LmluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXM/LiggaXRlbSApOyAvLyBlbnN1cmUgaW5uZXIgc29ydGFibGVzXHJcblxyXG5cdFx0XHRcdC8vIEVuc3VyZSBtZXRhZGF0YSBwcmVzZW50L3VwZGF0ZWRcclxuXHRcdFx0XHRpdGVtLmRhdGFzZXQudHlwZSAgICA9ICdzZWN0aW9uJztcclxuXHRcdFx0XHRjb25zdCBjb2xzICAgICAgICAgICA9IGl0ZW0ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93ID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDE7XHJcblx0XHRcdFx0aXRlbS5kYXRhc2V0LmNvbHVtbnMgPSBTdHJpbmcoIGNvbHMgKTtcclxuXHJcblx0XHRcdFx0Ly8gU2VsZWN0ICYgbm90aWZ5IHN1YnNjcmliZXJzIChsYXlvdXQvbWluIGd1YXJkcywgZXRjLilcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIGl0ZW0gKTtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzPy5lbWl0Py4oIENvcmUuV1BCQ19CRkJfRXZlbnRzLlNUUlVDVFVSRV9DSEFOR0UsIHsgZWw6IGl0ZW0sIHJlYXNvbjogJ3NlY3Rpb24tbW92ZScgfSApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci51c2FnZT8udXBkYXRlX3BhbGV0dGVfdWk/LigpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBoYW5kbGVkLlxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBQYWxldHRlIC0+IGNhbnZhczogYnVpbGQgYSBicmFuZC1uZXcgc2VjdGlvbiB1c2luZyB0aGUgc2FtZSBwYXRoIGFzIHRoZSBkcm9wZG93bi9tZW51XHJcblx0XHRcdGNvbnN0IHRvICAgPSBldnQudG8/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fY29sdW1uLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKSB8fCBldnQudG87XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBwYXJzZUludCggZGF0YT8uY29sdW1ucyB8fCBpdGVtLmRhdGFzZXQuY29sdW1ucyB8fCAxLCAxMCApIHx8IDE7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgdGhlIHBhbGV0dGUgY2xvbmUgcGxhY2Vob2xkZXIuXHJcblx0XHRcdGl0ZW0ucGFyZW50Tm9kZSAmJiBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGl0ZW0gKTtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSB0aGUgcmVhbCBzZWN0aW9uLlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnMuYWRkX3NlY3Rpb24oIHRvLCBjb2xzICk7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnQgYXQgdGhlIHByZWNpc2UgZHJvcCBpbmRleC5cclxuXHRcdFx0Y29uc3Qgc2VjdGlvbiA9IHRvLmxhc3RFbGVtZW50Q2hpbGQ7IC8vIGFkZF9zZWN0aW9uIGFwcGVuZHMgdG8gZW5kLlxyXG5cdFx0XHRpZiAoIGV2dC5uZXdJbmRleCAhPSBudWxsICYmIGV2dC5uZXdJbmRleCA8IHRvLmNoaWxkcmVuLmxlbmd0aCAtIDEgKSB7XHJcblx0XHRcdFx0Y29uc3QgcmVmID0gdG8uY2hpbGRyZW5bZXZ0Lm5ld0luZGV4XSB8fCBudWxsO1xyXG5cdFx0XHRcdHRvLmluc2VydEJlZm9yZSggc2VjdGlvbiwgcmVmICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmFsaXplOiBvdmVybGF5LCBzZWxlY3Rpb24sIGV2ZW50cywgdXNhZ2UgcmVmcmVzaC5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXI/Liggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIHNlY3Rpb24gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5GSUVMRF9BREQsIHtcclxuXHRcdFx0XHRlbCA6IHNlY3Rpb24sXHJcblx0XHRcdFx0aWQgOiBzZWN0aW9uLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0dWlkOiBzZWN0aW9uLmRhdGFzZXQudWlkXHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLnVzYWdlPy51cGRhdGVfcGFsZXR0ZV91aT8uKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlc3Ryb3kgYWxsIFNvcnRhYmxlIGluc3RhbmNlcyBjcmVhdGVkIGJ5IHRoaXMgbWFuYWdlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0ZGVzdHJveUFsbCgpIHtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5mb3JFYWNoKCAoIGVsICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGluc3QgPSBTb3J0YWJsZS5nZXQ/LiggZWwgKTtcclxuXHRcdFx0XHRpZiAoIGluc3QgKSB7XHJcblx0XHRcdFx0XHRpbnN0LmRlc3Ryb3koKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNtYWxsIERPTSBjb250cmFjdCBhbmQgcmVuZGVyZXIgaGVscGVyXHJcblx0ICpcclxuXHQgKiBAdHlwZSB7UmVhZG9ubHk8e1xyXG5cdCAqICAgICAgICAgICAgICAgICAgU0VMRUNUT1JTOiB7cGFnZVBhbmVsOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIHZhbGlkRmllbGQ6IHN0cmluZywgc2VjdGlvbjogc3RyaW5nLCBjb2x1bW46XHJcblx0ICogICAgIHN0cmluZywgcm93OiBzdHJpbmcsIG92ZXJsYXk6IHN0cmluZ30sIENMQVNTRVM6IHtzZWxlY3RlZDogc3RyaW5nfSwgQVRUUjoge2lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaHRtbElkOlxyXG5cdCAqICAgICBzdHJpbmcsIHVzYWdlS2V5OiBzdHJpbmcsIHVpZDogc3RyaW5nfX1cclxuXHQgKiAgICAgICAgPn1cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0RPTSA9IE9iamVjdC5mcmVlemUoIHtcclxuXHRcdFNFTEVDVE9SUzoge1xyXG5cdFx0XHRwYWdlUGFuZWwgOiAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldycsXHJcblx0XHRcdGZpZWxkICAgICA6ICcud3BiY19iZmJfX2ZpZWxkJyxcclxuXHRcdFx0dmFsaWRGaWVsZDogJy53cGJjX2JmYl9fZmllbGQ6bm90KC5pcy1pbnZhbGlkKScsXHJcblx0XHRcdHNlY3Rpb24gICA6ICcud3BiY19iZmJfX3NlY3Rpb24nLFxyXG5cdFx0XHRjb2x1bW4gICAgOiAnLndwYmNfYmZiX19jb2x1bW4nLFxyXG5cdFx0XHRyb3cgICAgICAgOiAnLndwYmNfYmZiX19yb3cnLFxyXG5cdFx0XHRvdmVybGF5ICAgOiAnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJ1xyXG5cdFx0fSxcclxuXHRcdENMQVNTRVMgIDoge1xyXG5cdFx0XHRzZWxlY3RlZDogJ2lzLXNlbGVjdGVkJ1xyXG5cdFx0fSxcclxuXHRcdEFUVFIgICAgIDoge1xyXG5cdFx0XHRpZCAgICAgIDogJ2RhdGEtaWQnLFxyXG5cdFx0XHRuYW1lICAgIDogJ2RhdGEtbmFtZScsXHJcblx0XHRcdGh0bWxJZCAgOiAnZGF0YS1odG1sX2lkJyxcclxuXHRcdFx0dXNhZ2VLZXk6ICdkYXRhLXVzYWdlX2tleScsXHJcblx0XHRcdHVpZCAgICAgOiAnZGF0YS11aWQnXHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHRDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhbiBIVE1MIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIEhUTUwgdGFnIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXNzX25hbWU9JyddIC0gT3B0aW9uYWwgQ1NTIGNsYXNzIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2lubmVyX2h0bWw9JyddIC0gT3B0aW9uYWwgaW5uZXJIVE1MLlxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fSBDcmVhdGVkIGVsZW1lbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjcmVhdGVfZWxlbWVudCggdGFnLCBjbGFzc19uYW1lID0gJycsIGlubmVyX2h0bWwgPSAnJyApIHtcclxuXHRcdFx0Y29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKTtcclxuXHRcdFx0aWYgKCBjbGFzc19uYW1lICkge1xyXG5cdFx0XHRcdGVsLmNsYXNzTmFtZSA9IGNsYXNzX25hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbm5lcl9odG1sICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGlubmVyX2h0bWw7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGVsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IG11bHRpcGxlIGBkYXRhLSpgIGF0dHJpYnV0ZXMgb24gYSBnaXZlbiBlbGVtZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gVGFyZ2V0IGVsZW1lbnQuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YV9vYmogLSBLZXktdmFsdWUgcGFpcnMgZm9yIGRhdGEgYXR0cmlidXRlcy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2V0X2RhdGFfYXR0cmlidXRlcyggZWwsIGRhdGFfb2JqICkge1xyXG5cdFx0XHRPYmplY3QuZW50cmllcyggZGF0YV9vYmogKS5mb3JFYWNoKCAoIFsga2V5LCB2YWwgXSApID0+IHtcclxuXHRcdFx0XHQvLyBQcmV2aW91c2x5OiAyMDI1LTA5LTAxIDE3OjA5OlxyXG5cdFx0XHRcdC8vIGNvbnN0IHZhbHVlID0gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KCB2YWwgKSA6IHZhbDtcclxuXHRcdFx0XHQvL05ldzpcclxuXHRcdFx0XHRsZXQgdmFsdWU7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCB2YWwgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgdmFsdWUgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFsbCBgZGF0YS0qYCBhdHRyaWJ1dGVzIGZyb20gYW4gZWxlbWVudCBhbmQgcGFyc2UgSlNPTiB3aGVyZSBwb3NzaWJsZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIEVsZW1lbnQgdG8gZXh0cmFjdCBkYXRhIGZyb20uXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fSBQYXJzZWQga2V5LXZhbHVlIG1hcCBvZiBkYXRhIGF0dHJpYnV0ZXMuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcclxuXHJcblx0XHRcdGlmICggISBlbCB8fCAhIGVsLmF0dHJpYnV0ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LmZyb20oIGVsLmF0dHJpYnV0ZXMgKS5mb3JFYWNoKFxyXG5cdFx0XHRcdCggYXR0ciApID0+IHtcclxuXHRcdFx0XHRcdGlmICggYXR0ci5uYW1lLnN0YXJ0c1dpdGgoICdkYXRhLScgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYXR0ci5uYW1lLnJlcGxhY2UoIC9eZGF0YS0vLCAnJyApO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IEpTT04ucGFyc2UoIGF0dHIudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YVtrZXldID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIE9ubHkgZGVmYXVsdCB0aGUgbGFiZWwgaWYgaXQncyB0cnVseSBhYnNlbnQgKHVuZGVmaW5lZC9udWxsKSwgbm90IHdoZW4gaXQncyBhbiBlbXB0eSBzdHJpbmcuXHJcblx0XHRcdGNvbnN0IGhhc0V4cGxpY2l0TGFiZWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKTtcclxuXHRcdFx0aWYgKCAhIGhhc0V4cGxpY2l0TGFiZWwgJiYgZGF0YS5pZCApIHtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGF0YS5pZC5jaGFyQXQoIDAgKS50b1VwcGVyQ2FzZSgpICsgZGF0YS5pZC5zbGljZSggMSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlbmRlciBhIHNpbXBsZSBsYWJlbCArIHR5cGUgcHJldmlldyAodXNlZCBmb3IgdW5rbm93biBvciBmYWxsYmFjayBmaWVsZHMpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZF9kYXRhIC0gRmllbGQgZGF0YSBvYmplY3QuXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIGNvbnRlbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZmllbGRfZGF0YSApIHtcclxuXHRcdFx0Ly8gTWFrZSB0aGUgZmFsbGJhY2sgcHJldmlldyByZXNwZWN0IGFuIGVtcHR5IGxhYmVsLlxyXG5cdFx0XHRjb25zdCBoYXNMYWJlbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ2xhYmVsJyApO1xyXG5cdFx0XHRjb25zdCBsYWJlbCAgICA9IGhhc0xhYmVsID8gU3RyaW5nKCBmaWVsZF9kYXRhLmxhYmVsICkgOiBTdHJpbmcoIGZpZWxkX2RhdGEuaWQgfHwgJyhubyBsYWJlbCknICk7XHJcblxyXG5cdFx0XHRjb25zdCB0eXBlICAgICAgICA9IFN0cmluZyggZmllbGRfZGF0YS50eXBlIHx8ICd1bmtub3duJyApO1xyXG5cdFx0XHRjb25zdCBpc19yZXF1aXJlZCA9IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IHRydWUgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJ3RydWUnIHx8IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IDEgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuTGFiZWwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTtcclxuXHRcdFx0c3BhbkxhYmVsLmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19maWVsZC1sYWJlbCc7XHJcblx0XHRcdHNwYW5MYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsICsgKGlzX3JlcXVpcmVkID8gJyAqJyA6ICcnKTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhbkxhYmVsICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuVHlwZSAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRzcGFuVHlwZS5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fZmllbGQtdHlwZSc7XHJcblx0XHRcdHNwYW5UeXBlLnRleHRDb250ZW50ID0gdHlwZTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhblR5cGUgKTtcclxuXHJcblx0XHRcdHJldHVybiB3cmFwcGVyLmlubmVySFRNTDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlYm91bmNlIGEgZnVuY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBGdW5jdGlvbiB0byBkZWJvdW5jZS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IC0gRGVsYXkgaW4gbXMuXHJcblx0XHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IERlYm91bmNlZCBmdW5jdGlvbi5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGRlYm91bmNlKCBmbiwgd2FpdCA9IDEyMCApIHtcclxuXHRcdFx0bGV0IHQgPSBudWxsO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVib3VuY2VkKCAuLi5hcmdzICkge1xyXG5cdFx0XHRcdGlmICggdCApIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggdCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0ID0gc2V0VGltZW91dCggKCkgPT4gZm4uYXBwbHkoIHRoaXMsIGFyZ3MgKSwgd2FpdCApO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvLyBSZW5kZXJlciByZWdpc3RyeS4gQWxsb3dzIGxhdGUgcmVnaXN0cmF0aW9uIGFuZCBhdm9pZHMgdGlnaHQgY291cGxpbmcgdG8gYSBnbG9iYWwgbWFwLlxyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnkgPSAoZnVuY3Rpb24gKCkge1xyXG5cdFx0Y29uc3QgbWFwID0gbmV3IE1hcCgpO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVnaXN0ZXIoIHR5cGUsIENsYXNzUmVmICkge1xyXG5cdFx0XHRcdG1hcC5zZXQoIFN0cmluZyggdHlwZSApLCBDbGFzc1JlZiApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXQoIHR5cGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1hcC5nZXQoIFN0cmluZyggdHlwZSApICk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSkoKTtcclxuXHJcbn0oIHdpbmRvdyApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWZpZWxkcy5qcyA9PSB8IDIwMjUtMDktMTAgMTU6NDdcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAoIHcgKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvLyBTaW5nbGUgZ2xvYmFsIG5hbWVzcGFjZSAoaWRlbXBvdGVudCAmIGxvYWQtb3JkZXIgc2FmZSkuXHJcblx0Y29uc3QgQ29yZSA9ICggdy5XUEJDX0JGQl9Db3JlID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9ICk7XHJcblx0Y29uc3QgVUkgICA9ICggQ29yZS5VSSA9IENvcmUuVUkgfHwge30gKTtcclxuXHJcblx0LyoqXHJcblx0ICogQmFzZSBjbGFzcyBmb3IgZmllbGQgcmVuZGVyZXJzIChzdGF0aWMtb25seSBjb250cmFjdCkuXHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqIENvbnRyYWN0IGV4cG9zZWQgdG8gdGhlIGJ1aWxkZXIgKHN0YXRpYyBtZXRob2RzIG9uIHRoZSBDTEFTUyBpdHNlbGYpOlxyXG5cdCAqICAgLSByZW5kZXIoZWwsIGRhdGEsIGN0eCkgICAgICAgICAgICAgIC8vIFJFUVVJUkVEXHJcblx0ICogICAtIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpICAgICAgLy8gT1BUSU9OQUwgKGRlZmF1bHQgcHJvdmlkZWQpXHJcblx0ICpcclxuXHQgKiBIZWxwZXJzIGZvciBzdWJjbGFzc2VzOlxyXG5cdCAqICAgLSBnZXRfZGVmYXVsdHMoKSAgICAgLT4gcGVyLWZpZWxkIGRlZmF1bHRzIChNVVNUIG92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHNldCB0eXBlL2xhYmVsKVxyXG5cdCAqICAgLSBub3JtYWxpemVfZGF0YShkKSAgLT4gc2hhbGxvdyBtZXJnZSB3aXRoIGRlZmF1bHRzXHJcblx0ICogICAtIGdldF90ZW1wbGF0ZShpZCkgICAtPiBwZXItaWQgY2FjaGVkIHdwLnRlbXBsYXRlIGNvbXBpbGVyXHJcblx0ICpcclxuXHQgKiBTdWJjbGFzcyB1c2FnZTpcclxuXHQgKiAgIGNsYXNzIFdQQkNfQkZCX0ZpZWxkX1RleHQgZXh0ZW5kcyBDb3JlLldQQkNfQkZCX0ZpZWxkX0Jhc2UgeyBzdGF0aWMgZ2V0X2RlZmF1bHRzKCl7IC4uLiB9IH1cclxuXHQgKiAgIFdQQkNfQkZCX0ZpZWxkX1RleHQudGVtcGxhdGVfaWQgPSAnd3BiYy1iZmItZmllbGQtdGV4dCc7XHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfQmFzZSA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlZmF1bHQgZmllbGQgZGF0YSAoZ2VuZXJpYyBiYXNlbGluZSkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIE1VU1Qgb3ZlcnJpZGUgdG8gcHJvdmlkZSB7IHR5cGUsIGxhYmVsIH0gYXBwcm9wcmlhdGUgZm9yIHRoZSBmaWVsZC5cclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgOiAnZmllbGQnLFxyXG5cdFx0XHRcdGxhYmVsICAgICAgIDogJ0ZpZWxkJyxcclxuXHRcdFx0XHRuYW1lICAgICAgICA6ICdmaWVsZCcsXHJcblx0XHRcdFx0aHRtbF9pZCAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciA6ICcnLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bWlubGVuZ3RoICAgOiAnJyxcclxuXHRcdFx0XHRtYXhsZW5ndGggICA6ICcnLFxyXG5cdFx0XHRcdHBhdHRlcm4gICAgIDogJycsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgOiAnJyxcclxuXHRcdFx0XHRoZWxwICAgICAgICA6ICcnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaGFsbG93LW1lcmdlIGluY29taW5nIGRhdGEgd2l0aCBkZWZhdWx0cy5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbm9ybWFsaXplX2RhdGEoIGRhdGEgKSB7XHJcblx0XHRcdHZhciBkICAgICAgICA9IGRhdGEgfHwge307XHJcblx0XHRcdHZhciBkZWZhdWx0cyA9IHRoaXMuZ2V0X2RlZmF1bHRzKCk7XHJcblx0XHRcdHZhciBvdXQgICAgICA9IHt9O1xyXG5cdFx0XHR2YXIgaztcclxuXHJcblx0XHRcdGZvciAoIGsgaW4gZGVmYXVsdHMgKSB7XHJcblx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRlZmF1bHRzLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkZWZhdWx0c1trXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggayBpbiBkICkge1xyXG5cdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkW2tdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb3V0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29tcGlsZSBhbmQgY2FjaGUgYSB3cC50ZW1wbGF0ZSBieSBpZCAocGVyLWlkIGNhY2hlKS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZV9pZFxyXG5cdFx0ICogQHJldHVybnMge0Z1bmN0aW9ufG51bGx9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfdGVtcGxhdGUodGVtcGxhdGVfaWQpIHtcclxuXHJcblx0XHRcdC8vIEFjY2VwdCBlaXRoZXIgXCJ3cGJjLWJmYi1maWVsZC10ZXh0XCIgb3IgXCJ0bXBsLXdwYmMtYmZiLWZpZWxkLXRleHRcIi5cclxuXHRcdFx0aWYgKCAhIHRlbXBsYXRlX2lkIHx8ICEgd2luZG93LndwIHx8ICEgd3AudGVtcGxhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZG9tSWQgPSB0ZW1wbGF0ZV9pZC5zdGFydHNXaXRoKCAndG1wbC0nICkgPyB0ZW1wbGF0ZV9pZCA6ICgndG1wbC0nICsgdGVtcGxhdGVfaWQpO1xyXG5cdFx0XHRpZiAoICEgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGRvbUlkICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggISBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXAgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5vcm1hbGl6ZSBpZCBmb3IgdGhlIGNvbXBpbGVyICYgY2FjaGUuIC8vIHdwLnRlbXBsYXRlIGV4cGVjdHMgaWQgV0lUSE9VVCB0aGUgXCJ0bXBsLVwiIHByZWZpeCAhXHJcblx0XHRcdGNvbnN0IGtleSA9IHRlbXBsYXRlX2lkLnJlcGxhY2UoIC9edG1wbC0vLCAnJyApO1xyXG5cdFx0XHRpZiAoIENvcmUuX19iZmJfdHBsX2NhY2hlX21hcFtrZXldICkge1xyXG5cdFx0XHRcdHJldHVybiBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXBba2V5XTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29tcGlsZXIgPSB3cC50ZW1wbGF0ZSgga2V5ICk7ICAgICAvLyA8LS0gbm9ybWFsaXplZCBpZCBoZXJlXHJcblx0XHRcdGlmICggY29tcGlsZXIgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwW2tleV0gPSBjb21waWxlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGNvbXBpbGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUkVRVUlSRUQ6IHJlbmRlciBwcmV2aWV3IGludG8gaG9zdCBlbGVtZW50IChmdWxsIHJlZHJhdzsgaWRlbXBvdGVudCkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIHNob3VsZCBzZXQgc3RhdGljIGB0ZW1wbGF0ZV9pZGAgdG8gYSB2YWxpZCB3cC50ZW1wbGF0ZSBpZC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICAgICBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3ttb2RlPzpzdHJpbmcsYnVpbGRlcj86YW55LHRwbD86RnVuY3Rpb24sc2FuaXQ/OmFueX19IGN0eFxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXIoIGVsLCBkYXRhLCBjdHggKSB7XHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBjb21waWxlID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0dmFyIGQgICAgICAgPSB0aGlzLm5vcm1hbGl6ZV9kYXRhKCBkYXRhICk7XHJcblxyXG5cdFx0XHR2YXIgcyA9IChjdHggJiYgY3R4LnNhbml0KSA/IGN0eC5zYW5pdCA6IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHQvLyBTYW5pdGl6ZSBjcml0aWNhbCBhdHRyaWJ1dGVzIGJlZm9yZSB0ZW1wbGF0aW5nLlxyXG5cdFx0XHRpZiAoIHMgKSB7XHJcblx0XHRcdFx0ZC5odG1sX2lkID0gZC5odG1sX2lkID8gcy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGQuaHRtbF9pZCApICkgOiAnJztcclxuXHRcdFx0XHRkLm5hbWUgICAgPSBzLnNhbml0aXplX2h0bWxfbmFtZSggU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICkgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkLmh0bWxfaWQgPSBkLmh0bWxfaWQgPyBTdHJpbmcoIGQuaHRtbF9pZCApIDogJyc7XHJcblx0XHRcdFx0ZC5uYW1lICAgID0gU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZhbGwgYmFjayB0byBnZW5lcmljIHByZXZpZXcgaWYgdGVtcGxhdGUgbm90IGF2YWlsYWJsZS5cclxuXHRcdFx0aWYgKCBjb21waWxlICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGNvbXBpbGUoIGQgKTtcclxuXHJcblx0XHRcdFx0Ly8gQWZ0ZXIgcmVuZGVyLCBzZXQgYXR0cmlidXRlIHZhbHVlcyB2aWEgRE9NIHNvIHF1b3Rlcy9uZXdsaW5lcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXHJcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0aWYgKCBpbnB1dCApIHtcclxuXHRcdFx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgaW5wdXQuc2V0QXR0cmlidXRlKCAncGxhY2Vob2xkZXInLCBTdHJpbmcoIGQucGxhY2Vob2xkZXIgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBkLnRpdGxlICE9IG51bGwgKSBpbnB1dC5zZXRBdHRyaWJ1dGUoICd0aXRsZScsIFN0cmluZyggZC50aXRsZSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5yZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbC5kYXRhc2V0LnR5cGUgPSBkLnR5cGUgfHwgJ2ZpZWxkJztcclxuXHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIChkLmxhYmVsICE9IG51bGwgPyBTdHJpbmcoIGQubGFiZWwgKSA6ICcnKSApOyAvLyBhbGxvdyBcIlwiLlxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9QVElPTkFMIGhvb2sgZXhlY3V0ZWQgYWZ0ZXIgZmllbGQgaXMgZHJvcHBlZC9sb2FkZWQvcHJldmlldy5cclxuXHRcdCAqIERlZmF1bHQgZXh0ZW5kZWQ6XHJcblx0XHQgKiAtIE9uIGZpcnN0IGRyb3A6IHN0YW1wIGRlZmF1bHQgbGFiZWwgKGV4aXN0aW5nIGJlaGF2aW9yKSBhbmQgbWFyayBmaWVsZCBhcyBcImZyZXNoXCIgZm9yIGF1dG8tbmFtZS5cclxuXHRcdCAqIC0gT24gbG9hZDogbWFyayBhcyBsb2FkZWQgc28gbGF0ZXIgbGFiZWwgZWRpdHMgZG8gbm90IHJlbmFtZSB0aGUgc2F2ZWQgbmFtZS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHJcblx0XHRcdGNvbnN0IGNvbnRleHQgPSAobWV0YSAmJiBtZXRhLmNvbnRleHQpID8gU3RyaW5nKCBtZXRhLmNvbnRleHQgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gTkVXOiBTZWVkIGRlZmF1bHQgXCJoZWxwXCIgKGFuZCBrZWVwIGl0IGluIFN0cnVjdHVyZSkgZm9yIGFsbCBmaWVsZCBwYWNrcyB0aGF0IGRlZmluZSBpdC5cclxuXHRcdFx0Ly8gVGhpcyBmaXhlcyB0aGUgbWlzbWF0Y2ggd2hlcmU6XHJcblx0XHRcdC8vICAgLSBVSSBzaG93cyBkZWZhdWx0IGhlbHAgdmlhIG5vcm1hbGl6ZV9kYXRhKCkgLyB0ZW1wbGF0ZXNcclxuXHRcdFx0Ly8gICAtIGJ1dCBnZXRfc3RydWN0dXJlKCkgLyBleHBvcnRlcnMgc2VlIGBoZWxwYCBhcyB1bmRlZmluZWQvZW1wdHkuXHJcblx0XHRcdC8vXHJcblx0XHRcdC8vIEJlaGF2aW9yOlxyXG5cdFx0XHQvLyAgIC0gUnVucyBPTkxZIG9uIGluaXRpYWwgZHJvcCAoY29udGV4dCA9PT0gJ2Ryb3AnKS5cclxuXHRcdFx0Ly8gICAtIElmIGdldF9kZWZhdWx0cygpIGV4cG9zZXMgYSBub24tZW1wdHkgXCJoZWxwXCIsIGFuZCBkYXRhLmhlbHAgaXNcclxuXHRcdFx0Ly8gICAgIG1pc3NpbmcgLyBudWxsIC8gZW1wdHkgc3RyaW5nIC0+IHdlIHBlcnNpc3QgdGhlIGRlZmF1bHQgaW50byBgZGF0YWBcclxuXHRcdFx0Ly8gICAgIGFuZCBub3RpZnkgU3RydWN0dXJlIHNvIGV4cG9ydHMgc2VlIGl0LlxyXG5cdFx0XHQvLyAgIC0gT24gXCJsb2FkXCIgd2UgZG8gbm90aGluZywgc28gZXhpc3RpbmcgZm9ybXMgd2hlcmUgdXNlciAqY2xlYXJlZCpcclxuXHRcdFx0Ly8gICAgIGhlbHAgd2lsbCBub3QgYmUgb3ZlcnJpZGRlbi5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0aWYgKCBjb250ZXh0ID09PSAnZHJvcCcgJiYgZGF0YSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVmcyA9ICh0eXBlb2YgdGhpcy5nZXRfZGVmYXVsdHMgPT09ICdmdW5jdGlvbicpID8gdGhpcy5nZXRfZGVmYXVsdHMoKSA6IG51bGw7XHJcblx0XHRcdFx0XHRpZiAoIGRlZnMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkZWZzLCAnaGVscCcgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudCAgICA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGF0YSwgJ2hlbHAnICkgPyBkYXRhLmhlbHAgOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGhhc1ZhbHVlICAgPSAoY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnQgIT09IG51bGwgJiYgU3RyaW5nKCBjdXJyZW50ICkgIT09ICcnKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbCA9IGRlZnMuaGVscDtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggISBoYXNWYWx1ZSAmJiBkZWZhdWx0VmFsICE9IG51bGwgJiYgU3RyaW5nKCBkZWZhdWx0VmFsICkgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIDEpIHBlcnNpc3QgaW50byBkYXRhIG9iamVjdCAodXNlZCBieSBTdHJ1Y3R1cmUpLlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaGVscCA9IGRlZmF1bHRWYWw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIDIpIG1pcnJvciBpbnRvIGRhdGFzZXQgKGZvciBhbnkgRE9NLWJhc2VkIGNvbnN1bWVycykuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVsLmRhdGFzZXQuaGVscCA9IFN0cmluZyggZGVmYXVsdFZhbCApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIDMpIG5vdGlmeSBTdHJ1Y3R1cmUgLyBsaXN0ZW5lcnMgKGlmIGF2YWlsYWJsZSkuXHJcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZWwsICdoZWxwJywgZGVmYXVsdFZhbCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5kaXNwYXRjaEV2ZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSwgZGV0YWlsIDogeyBrZXk6ICdoZWxwJywgdmFsdWU6IGRlZmF1bHRWYWwgfSB9IClcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfaW5uZXIgKSB7fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRcdGlmICggY29udGV4dCA9PT0gJ2Ryb3AnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKSApIHtcclxuXHRcdFx0XHRjb25zdCBkZWZzID0gdGhpcy5nZXRfZGVmYXVsdHMoKTtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGVmcy5sYWJlbCB8fCAnRmllbGQnO1xyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCBkYXRhLmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gTWFyayBwcm92ZW5hbmNlIGZsYWdzLlxyXG5cdFx0XHRpZiAoIGNvbnRleHQgPT09ICdkcm9wJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMSc7ICAgLy8gY2FuIGF1dG8tbmFtZSBvbiBmaXJzdCBsYWJlbCBlZGl0LlxyXG5cdFx0XHRcdGVsLmRhdGFzZXQuYXV0b25hbWUgICA9ICcxJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lndhc19sb2FkZWQgPSAnMCc7XHJcblx0XHRcdFx0Ly8gU2VlZCBhIHByb3Zpc2lvbmFsIHVuaXF1ZSBuYW1lIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBiID0gbWV0YT8uYnVpbGRlcjtcclxuXHRcdFx0XHRcdGlmICggYj8uaWQgJiYgKCFlbC5oYXNBdHRyaWJ1dGUoICdkYXRhLW5hbWUnICkgfHwgIWVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IFMgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gUy5zYW5pdGl6ZV9odG1sX25hbWUoIGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgZGF0YT8uaWQgfHwgZGF0YT8udHlwZSB8fCAnZmllbGQnICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZWwgKTtcclxuXHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID0gJzAnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQgPT09ICdsb2FkJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMCc7XHJcblx0XHRcdFx0ZWwuZGF0YXNldC5hdXRvbmFtZSAgID0gJzAnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQud2FzX2xvYWRlZCA9ICcxJzsgICAvLyBuZXZlciByZW5hbWUgbmFtZXMgZm9yIGxvYWRlZCBmaWVsZHMuXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0gQXV0byBSZW5hbWUgXCJGcmVzaFwiIGZpZWxkLCAgb24gZW50ZXJpbmcgdGhlIG5ldyBMYWJlbCAtLS1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhIGNvbnNlcnZhdGl2ZSBmaWVsZCBcIm5hbWVcIiBmcm9tIGEgaHVtYW4gbGFiZWwuXHJcblx0XHQgKiBVc2VzIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFzIHNhbml0aXplX2h0bWxfbmFtZSAobGV0dGVycy9kaWdpdHMvXy0gYW5kIGxlYWRpbmcgbGV0dGVyKS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG5hbWVfZnJvbV9sYWJlbChsYWJlbCkge1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIFN0cmluZyggbGFiZWwgPz8gJycgKSApO1xyXG5cdFx0XHRyZXR1cm4gcy50b0xvd2VyQ2FzZSgpIHx8ICdmaWVsZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBdXRvLWZpbGwgZGF0YS1uYW1lIGZyb20gbGFiZWwgT05MWSBmb3IgZnJlc2hseSBkcm9wcGVkIGZpZWxkcyB0aGF0IHdlcmUgbm90IGVkaXRlZCB5ZXQuXHJcblx0XHQgKiAtIE5ldmVyIHJ1bnMgZm9yIHNlY3Rpb25zLlxyXG5cdFx0ICogLSBOZXZlciBydW5zIGZvciBsb2FkZWQvZXhpc3RpbmcgZmllbGRzLlxyXG5cdFx0ICogLSBTdG9wcyBhcyBzb29uIGFzIHVzZXIgZWRpdHMgdGhlIE5hbWUgbWFudWFsbHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgIC0gLndwYmNfYmZiX19maWVsZCBlbGVtZW50XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxWYWxcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoYnVpbGRlciwgZWwsIGxhYmVsVmFsKSB7XHJcblx0XHRcdGlmICggIWJ1aWxkZXIgfHwgIWVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgYWxsb3dBdXRvID0gZWwuZGF0YXNldC5hdXRvbmFtZSA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgdXNlclRvdWNoZWQgPSBlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblx0XHRcdGNvbnN0IGlzTG9hZGVkICAgID0gZWwuZGF0YXNldC53YXNfbG9hZGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRpZiAoICFhbGxvd0F1dG8gfHwgdXNlclRvdWNoZWQgfHwgaXNMb2FkZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBPbmx5IG92ZXJyaWRlIHBsYWNlaG9sZGVyLXkgbmFtZXNcclxuXHRcdFx0Y29uc3QgUyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHRjb25zdCBiYXNlICAgPSB0aGlzLm5hbWVfZnJvbV9sYWJlbCggbGFiZWxWYWwgKTtcclxuXHRcdFx0Y29uc3QgdW5pcXVlID0gYnVpbGRlci5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScsIHVuaXF1ZSApO1xyXG5cclxuXHRcdFx0Y29uc3QgaW5zICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdGlmICggbmFtZUN0cmwgJiYgJ3ZhbHVlJyBpbiBuYW1lQ3RybCAmJiBuYW1lQ3RybC52YWx1ZSAhPT0gdW5pcXVlICkgbmFtZUN0cmwudmFsdWUgPSB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZWxlY3RfQmFzZSAoc2hhcmVkIGJhc2UgZm9yIHNlbGVjdC1saWtlIHBhY2tzKVxyXG5cdCAqXHJcblx0ICogQHR5cGUge0NvcmUuV1BCQ19CRkJfU2VsZWN0X0Jhc2V9XHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZSA9IGNsYXNzIGV4dGVuZHMgQ29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlIHtcclxuXHJcblx0XHRzdGF0aWMgdGVtcGxhdGVfaWQgICAgICAgICAgICA9IG51bGw7ICAgICAgICAgICAgICAgICAvLyBtYWluIHByZXZpZXcgdGVtcGxhdGUgaWRcclxuXHRcdHN0YXRpYyBvcHRpb25fcm93X3RlbXBsYXRlX2lkID0gJ3dwYmMtYmZiLWluc3BlY3Rvci1zZWxlY3Qtb3B0aW9uLXJvdyc7IC8vIHJvdyB0cGwgaWRcclxuXHRcdHN0YXRpYyBraW5kICAgICAgICAgICAgICAgICAgID0gJ3NlbGVjdCc7XHJcblx0XHRzdGF0aWMgX19yb290X3dpcmVkICAgICAgICAgICA9IGZhbHNlO1xyXG5cdFx0c3RhdGljIF9fcm9vdF9ub2RlICAgICAgICAgICAgPSBudWxsO1xyXG5cclxuXHRcdC8vIFNpbmdsZSBzb3VyY2Ugb2Ygc2VsZWN0b3JzIHVzZWQgYnkgdGhlIGluc3BlY3RvciBVSS5cclxuXHRcdHN0YXRpYyB1aSA9IHtcclxuXHRcdFx0bGlzdCAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19saXN0JyxcclxuXHRcdFx0aG9sZGVyIDogJy53cGJjX2JmYl9fb3B0aW9uc19zdGF0ZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJvcHRpb25zXCJdJyxcclxuXHRcdFx0cm93ICAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19yb3cnLFxyXG5cdFx0XHRsYWJlbCAgOiAnLndwYmNfYmZiX19vcHQtbGFiZWwnLFxyXG5cdFx0XHR2YWx1ZSAgOiAnLndwYmNfYmZiX19vcHQtdmFsdWUnLFxyXG5cdFx0XHR0b2dnbGUgOiAnLndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyxcclxuXHRcdFx0YWRkX2J0bjogJy5qcy1hZGQtb3B0aW9uJyxcclxuXHJcblx0XHRcdGRyYWdfaGFuZGxlICAgICAgOiAnLndwYmNfYmZiX19kcmFnLWhhbmRsZScsXHJcblx0XHRcdG11bHRpcGxlX2NoayAgICAgOiAnLmpzLW9wdC1tdWx0aXBsZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJtdWx0aXBsZVwiXScsXHJcblx0XHRcdGRlZmF1bHRfdGV4dCAgICAgOiAnLmpzLWRlZmF1bHQtdmFsdWVbZGF0YS1pbnNwZWN0b3Ita2V5PVwiZGVmYXVsdF92YWx1ZVwiXScsXHJcblx0XHRcdHBsYWNlaG9sZGVyX2lucHV0OiAnLmpzLXBsYWNlaG9sZGVyW2RhdGEtaW5zcGVjdG9yLWtleT1cInBsYWNlaG9sZGVyXCJdJyxcclxuXHRcdFx0cGxhY2Vob2xkZXJfbm90ZSA6ICcuanMtcGxhY2Vob2xkZXItbm90ZScsXHJcblx0XHRcdHNpemVfaW5wdXQgICAgICAgOiAnLmluc3BlY3Rvcl9faW5wdXRbZGF0YS1pbnNwZWN0b3Ita2V5PVwic2l6ZVwiXScsXHJcblxyXG5cdFx0XHQvLyBEcm9wZG93biBtZW51IGludGVncmF0aW9uLlxyXG5cdFx0XHRtZW51X3Jvb3QgIDogJy53cGJjX3VpX2VsX19kcm9wZG93bicsXHJcblx0XHRcdG1lbnVfdG9nZ2xlOiAnW2RhdGEtdG9nZ2xlPVwid3BiY19kcm9wZG93blwiXScsXHJcblx0XHRcdG1lbnVfYWN0aW9uOiAnLnVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uW2RhdGEtYWN0aW9uXScsXHJcblx0XHRcdC8vIFZhbHVlLWRpZmZlcnMgdG9nZ2xlLlxyXG5cdFx0XHR2YWx1ZV9kaWZmZXJzX2NoazogJy5qcy12YWx1ZS1kaWZmZXJzW2RhdGEtaW5zcGVjdG9yLWtleT1cInZhbHVlX2RpZmZlcnNcIl0nLFxyXG5cdFx0fTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIG9wdGlvbiB2YWx1ZSBmcm9tIGxhYmVsLlxyXG5cdFx0ICogLSBJZiBgZGlmZmVycyA9PT0gdHJ1ZWAgLT4gZ2VuZXJhdGUgdG9rZW4gKHNsdWctbGlrZSBtYWNoaW5lIHZhbHVlKS5cclxuXHRcdCAqIC0gSWYgYGRpZmZlcnMgPT09IGZhbHNlYCAtPiBrZWVwIGh1bWFuIHRleHQ7IGVzY2FwZSBvbmx5IGRhbmdlcm91cyBjaGFycy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBkaWZmZXJzXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgYnVpbGRfdmFsdWVfZnJvbV9sYWJlbChsYWJlbCwgZGlmZmVycykge1xyXG5cdFx0XHRjb25zdCBTID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0aWYgKCBkaWZmZXJzICkge1xyXG5cdFx0XHRcdHJldHVybiAoUyAmJiB0eXBlb2YgUy50b190b2tlbiA9PT0gJ2Z1bmN0aW9uJylcclxuXHRcdFx0XHRcdD8gUy50b190b2tlbiggU3RyaW5nKCBsYWJlbCB8fCAnJyApIClcclxuXHRcdFx0XHRcdDogU3RyaW5nKCBsYWJlbCB8fCAnJyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIC9cXHMrL2csICdfJyApLnJlcGxhY2UoIC9bXlxcdy1dL2csICcnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IGtlZXAgaHVtYW4gdGV4dDsgdGVtcGxhdGUgd2lsbCBlc2NhcGUgc2FmZWx5LlxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBsYWJlbCA9PSBudWxsID8gJycgOiBsYWJlbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSXMgdGhlIOKAnHZhbHVlIGRpZmZlcnMgZnJvbSBsYWJlbOKAnSB0b2dnbGUgZW5hYmxlZD9cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZV9kaWZmZXJzX2NoayApO1xyXG5cdFx0XHRyZXR1cm4gISEoY2hrICYmIGNoay5jaGVja2VkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSB2aXNpYmlsaXR5L2VuYWJsZWQgc3RhdGUgb2YgVmFsdWUgaW5wdXRzIGJhc2VkIG9uIHRoZSB0b2dnbGUuXHJcblx0XHQgKiBXaGVuIGRpc2FibGVkIC0+IGhpZGUgVmFsdWUgaW5wdXRzIGFuZCBrZWVwIHRoZW0gbWlycm9yZWQgZnJvbSBMYWJlbC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCByb3dzICAgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICkgfHwgW107XHJcblxyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IHIgICAgICA9IHJvd3NbaV07XHJcblx0XHRcdFx0Y29uc3QgbGJsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmxhYmVsICk7XHJcblx0XHRcdFx0Y29uc3QgdmFsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdFx0aWYgKCAhdmFsX2luICkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICggZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdC8vIFJlLWVuYWJsZSAmIHNob3cgdmFsdWUgaW5wdXRcclxuXHRcdFx0XHRcdHZhbF9pbi5yZW1vdmVBdHRyaWJ1dGUoICdkaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRcdHZhbF9pbi5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIGNhY2hlZCBjdXN0b20gdmFsdWUgYW5kIHRoZSByb3cgd2Fzbid0IGVkaXRlZCB3aGlsZSBPRkYsIHJlc3RvcmUgaXRcclxuXHRcdFx0XHRcdGNvbnN0IGhhc0NhY2hlICAgPSAhIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZTtcclxuXHRcdFx0XHRcdGNvbnN0IHVzZXJFZGl0ZWQgPSByLmRhdGFzZXQudmFsdWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBoYXNDYWNoZSAmJiAhdXNlckVkaXRlZCApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWhhc0NhY2hlICkge1xyXG5cdFx0XHRcdFx0XHQvLyBObyBjYWNoZTogaWYgdmFsdWUgaXMganVzdCBhIG1pcnJvcmVkIGxhYmVsLCBvZmZlciBhIHRva2VuaXplZCBkZWZhdWx0XHJcblx0XHRcdFx0XHRcdGNvbnN0IGxibCAgICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG1pcnJvcmVkID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBsYmwsIC8qZGlmZmVycz0qL2ZhbHNlICk7XHJcblx0XHRcdFx0XHRcdGlmICggdmFsX2luLnZhbHVlID09PSBtaXJyb3JlZCApIHtcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIE9OIC0+IE9GRjogY2FjaGUgb25jZSwgdGhlbiBtaXJyb3JcclxuXHRcdFx0XHRcdGlmICggIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlID0gdmFsX2luLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgbGJsICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovZmFsc2UgKTtcclxuXHJcblx0XHRcdFx0XHR2YWxfaW4uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHR2YWxfaW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdC8vIE5PVEU6IGRvIE5PVCBtYXJrIGFzIHVzZXJfdG91Y2hlZCBoZXJlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJuIHdoZXRoZXIgdGhpcyByb3figJlzIHZhbHVlIGhhcyBiZWVuIGVkaXRlZCBieSB1c2VyLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQocm93KSB7XHJcblx0XHRcdHJldHVybiByb3c/LmRhdGFzZXQ/LnZhbHVlX3VzZXJfdG91Y2hlZCA9PT0gJzEnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogTWFyayB0aGlzIHJvd+KAmXMgdmFsdWUgYXMgZWRpdGVkIGJ5IHVzZXIuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZChyb3cpIHtcclxuXHRcdFx0aWYgKCByb3cgKSByb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJbml0aWFsaXplIOKAnGZyZXNobmVzc+KAnSBmbGFncyBvbiBhIHJvdyAodmFsdWUgdW50b3VjaGVkKS5cclxuXHRcdCAqIENhbGwgb24gY3JlYXRpb24vYXBwZW5kIG9mIHJvd3MuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGluaXRfcm93X2ZyZXNoX2ZsYWdzKHJvdykge1xyXG5cdFx0XHRpZiAoIHJvdyApIHtcclxuXHRcdFx0XHRpZiAoICFyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgKSB7XHJcblx0XHRcdFx0XHRyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkZWZhdWx0cyAocGFja3MgY2FuIG92ZXJyaWRlKSAtLS0tXHJcblx0XHRzdGF0aWMgZ2V0X2RlZmF1bHRzKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICA6IHRoaXMua2luZCxcclxuXHRcdFx0XHRsYWJlbCAgICAgICAgOiAnU2VsZWN0JyxcclxuXHRcdFx0XHRuYW1lICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRodG1sX2lkICAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciAgOiAnLS0tIFNlbGVjdCAtLS0nLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdG11bHRpcGxlICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdHNpemUgICAgICAgICA6IG51bGwsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgIDogJycsXHJcblx0XHRcdFx0aGVscCAgICAgICAgIDogJycsXHJcblx0XHRcdFx0ZGVmYXVsdF92YWx1ZTogJycsXHJcblx0XHRcdFx0b3B0aW9ucyAgICAgIDogW1xyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAxJywgdmFsdWU6ICdPcHRpb24gMScsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAyJywgdmFsdWU6ICdPcHRpb24gMicsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAzJywgdmFsdWU6ICdPcHRpb24gMycsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiA0JywgdmFsdWU6ICdPcHRpb24gNCcsIHNlbGVjdGVkOiBmYWxzZSB9XHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRtaW5fd2lkdGggICAgOiAnMjQwcHgnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBwcmV2aWV3IHJlbmRlciAoaWRlbXBvdGVudCkgLS0tLVxyXG5cdFx0c3RhdGljIHJlbmRlcihlbCwgZGF0YSwgY3R4KSB7XHJcblx0XHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgZCA9IHRoaXMubm9ybWFsaXplX2RhdGEoIGRhdGEgKTtcclxuXHJcblx0XHRcdGlmICggZC5taW5fd2lkdGggIT0gbnVsbCApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lm1pbl93aWR0aCA9IFN0cmluZyggZC5taW5fd2lkdGggKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtY29sLW1pbicsIFN0cmluZyggZC5taW5fd2lkdGggKSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGQuaHRtbF9pZCAhPSBudWxsICkgZWwuZGF0YXNldC5odG1sX2lkID0gU3RyaW5nKCBkLmh0bWxfaWQgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBkLmNzc2NsYXNzICE9IG51bGwgKSBlbC5kYXRhc2V0LmNzc2NsYXNzID0gU3RyaW5nKCBkLmNzc2NsYXNzIHx8ICcnICk7XHJcblx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgZWwuZGF0YXNldC5wbGFjZWhvbGRlciA9IFN0cmluZyggZC5wbGFjZWhvbGRlciB8fCAnJyApO1xyXG5cclxuXHRcdFx0Y29uc3QgdHBsID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdHBsICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+VGVtcGxhdGUgbm90IGZvdW5kOiAnICsgdGhpcy50ZW1wbGF0ZV9pZCArICcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gdHBsKCBkICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdHdpbmRvdy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnU2VsZWN0X0Jhc2UucmVuZGVyJywgZSApO1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+RXJyb3IgcmVuZGVyaW5nIGZpZWxkIHByZXZpZXcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsLmRhdGFzZXQudHlwZSA9IGQudHlwZSB8fCB0aGlzLmtpbmQ7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCAoZC5sYWJlbCAhPSBudWxsID8gU3RyaW5nKCBkLmxhYmVsICkgOiAnJykgKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Q29yZS5VST8uV1BCQ19CRkJfT3ZlcmxheT8uZW5zdXJlPy4oIGN0eD8uYnVpbGRlciwgZWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggIWVsLmRhdGFzZXQub3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KCBkLm9wdGlvbnMgKSAmJiBkLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRlbC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggZC5vcHRpb25zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkcm9wIHNlZWRpbmcgKG9wdGlvbnMgKyBwbGFjZWhvbGRlcikgLS0tLVxyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRzdXBlci5vbl9maWVsZF9kcm9wPy4oIGRhdGEsIGVsLCBtZXRhICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBpc19kcm9wID0gKG1ldGEgJiYgbWV0YS5jb250ZXh0ID09PSAnZHJvcCcpO1xyXG5cclxuXHRcdFx0aWYgKCBpc19kcm9wICkge1xyXG5cdFx0XHRcdGlmICggIUFycmF5LmlzQXJyYXkoIGRhdGEub3B0aW9ucyApIHx8ICFkYXRhLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgb3B0cyAgID0gKHRoaXMuZ2V0X2RlZmF1bHRzKCkub3B0aW9ucyB8fCBbXSkubWFwKCAobykgPT4gKHtcclxuXHRcdFx0XHRcdFx0bGFiZWwgICA6IG8ubGFiZWwsXHJcblx0XHRcdFx0XHRcdHZhbHVlICAgOiBvLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogISFvLnNlbGVjdGVkXHJcblx0XHRcdFx0XHR9KSApO1xyXG5cdFx0XHRcdFx0ZGF0YS5vcHRpb25zID0gb3B0cztcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFzZXQub3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KCBvcHRzICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdvcHRpb25zJyxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvcHRzXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0XHRcdFx0Q29yZS5TdHJ1Y3R1cmU/LnVwZGF0ZV9maWVsZF9wcm9wPy4oIGVsLCAnb3B0aW9ucycsIG9wdHMgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgcGggPSAoZGF0YS5wbGFjZWhvbGRlciA/PyAnJykudG9TdHJpbmcoKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAhcGggKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkZmx0ICAgICAgID0gdGhpcy5nZXRfZGVmYXVsdHMoKS5wbGFjZWhvbGRlciB8fCAnLS0tIFNlbGVjdCAtLS0nO1xyXG5cdFx0XHRcdFx0ZGF0YS5wbGFjZWhvbGRlciA9IGRmbHQ7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0LnBsYWNlaG9sZGVyID0gU3RyaW5nKCBkZmx0ICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdwbGFjZWhvbGRlcicsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZGZsdFxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSApICk7XHJcblx0XHRcdFx0XHRcdENvcmUuU3RydWN0dXJlPy51cGRhdGVfZmllbGRfcHJvcD8uKCBlbCwgJ3BsYWNlaG9sZGVyJywgZGZsdCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyBJbnNwZWN0b3IgaGVscGVycyAoc25ha2VfY2FzZSlcclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0c3RhdGljIGdldF9wYW5lbF9yb290KGVsKSB7XHJcblx0XHRcdHJldHVybiBlbD8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApIHx8IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGdldF9saXN0KHBhbmVsKSB7XHJcblx0XHRcdHJldHVybiBwYW5lbCA/IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGlzdCApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgZ2V0X2hvbGRlcihwYW5lbCkge1xyXG5cdFx0XHRyZXR1cm4gcGFuZWwgPyBwYW5lbC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmhvbGRlciApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgbWFrZV91aWQoKSB7XHJcblx0XHRcdHJldHVybiAnd3BiY19pbnNfYXV0b19vcHRfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDEwICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGFwcGVuZF9yb3cocGFuZWwsIGRhdGEpIHtcclxuXHRcdFx0Y29uc3QgbGlzdCA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBpZHggID0gbGlzdC5jaGlsZHJlbi5sZW5ndGg7XHJcblx0XHRcdGNvbnN0IHJvd2QgPSBPYmplY3QuYXNzaWduKCB7IGxhYmVsOiAnJywgdmFsdWU6ICcnLCBzZWxlY3RlZDogZmFsc2UsIGluZGV4OiBpZHggfSwgKGRhdGEgfHwge30pICk7XHJcblx0XHRcdGlmICggIXJvd2QudWlkICkgcm93ZC51aWQgPSB0aGlzLm1ha2VfdWlkKCk7XHJcblxyXG5cdFx0XHRjb25zdCB0cGxfaWQgPSB0aGlzLm9wdGlvbl9yb3dfdGVtcGxhdGVfaWQ7XHJcblx0XHRcdGNvbnN0IHRwbCAgICA9ICh3aW5kb3cud3AgJiYgd3AudGVtcGxhdGUpID8gd3AudGVtcGxhdGUoIHRwbF9pZCApIDogbnVsbDtcclxuXHRcdFx0Y29uc3QgaHRtbCAgID0gdHBsID8gdHBsKCByb3dkICkgOiBudWxsO1xyXG5cclxuXHRcdFx0Ly8gSW4gYXBwZW5kX3JvdygpIC0+IGZhbGxiYWNrIEhUTUwuXHJcblx0XHRcdGNvbnN0IHdyYXAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0d3JhcC5pbm5lckhUTUwgPSBodG1sIHx8IChcclxuXHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHRpb25zX3Jvd1wiIGRhdGEtaW5kZXg9XCInICsgKHJvd2QuaW5kZXggfHwgMCkgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2JmYl9fZHJhZy1oYW5kbGVcIj48c3BhbiBjbGFzcz1cIndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yXCI+PC9zcGFuPjwvc3Bhbj4nICtcclxuXHRcdFx0XHRcdCc8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtbGFiZWxcIiBwbGFjZWhvbGRlcj1cIkxhYmVsXCIgdmFsdWU9XCInICsgKHJvd2QubGFiZWwgfHwgJycpICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwid3BiY19iZmJfX29wdC12YWx1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiB2YWx1ZT1cIicgKyAocm93ZC52YWx1ZSB8fCAnJykgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWRcIj4nICtcclxuXHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrIGluc3BlY3Rvcl9faW5wdXRcIiBpZD1cIicgKyByb3dkLnVpZCArICdcIiByb2xlPVwic3dpdGNoXCIgJyArIChyb3dkLnNlbGVjdGVkID8gJ2NoZWNrZWQgYXJpYS1jaGVja2VkPVwidHJ1ZVwiJyA6ICdhcmlhLWNoZWNrZWQ9XCJmYWxzZVwiJykgKyAnPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvbl9yYWRpb1wiIGZvcj1cIicgKyByb3dkLnVpZCArICdcIj48L2xhYmVsPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfbGFiZWxcIiBmb3I9XCInICsgcm93ZC51aWQgKyAnXCI+RGVmYXVsdDwvbGFiZWw+JyArXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdC8vIDMtZG90IGRyb3Bkb3duICh1c2VzIGV4aXN0aW5nIHBsdWdpbiBkcm9wZG93biBKUykuXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfdWlfZWwgd3BiY191aV9lbF9jb250YWluZXIgd3BiY191aV9lbF9fZHJvcGRvd25cIj4nICtcclxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBkYXRhLXRvZ2dsZT1cIndwYmNfZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fbW9yZV92ZXJ0XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHQnPHVsIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudVwiIHJvbGU9XCJtZW51XCIgc3R5bGU9XCJyaWdodDowcHg7IGxlZnQ6YXV0bztcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzxhIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25cIiBkYXRhLWFjdGlvbj1cImFkZF9hZnRlclwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0FkZCBOZXcnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fYWRkX2NpcmNsZVwiPjwvaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8L2E+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJkdXBsaWNhdGVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdEdXBsaWNhdGUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fY29udGVudF9jb3B5XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzwvYT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9saT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpIGNsYXNzPVwiZGl2aWRlclwiPjwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJyZW1vdmVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdSZW1vdmUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fZGVsZXRlX291dGxpbmVcIj48L2k+JyArXHJcblx0XHRcdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2xpPicgK1xyXG5cdFx0XHRcdFx0XHQnPC91bD4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHQnPC9kaXY+J1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Y29uc3Qgbm9kZSA9IHdyYXAuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdCBpZiAoISBub2RlKSB7XHJcblx0XHRcdFx0IHJldHVybjtcclxuXHRcdFx0IH1cclxuXHRcdFx0Ly8gcHJlLWhpZGUgVmFsdWUgaW5wdXQgaWYgdG9nZ2xlIGlzIE9GRiAqKmJlZm9yZSoqIGFwcGVuZGluZy5cclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCB2YWxJbiAgID0gbm9kZS5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdGNvbnN0IGxibEluICAgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGFiZWwgKTtcclxuXHJcblx0XHRcdGlmICggIWRpZmZlcnMgJiYgdmFsSW4gKSB7XHJcblx0XHRcdFx0aWYgKCAhdmFsSW4uZGF0YXNldC5jYWNoZWRfdmFsdWUgKSB7XHJcblx0XHRcdFx0XHR2YWxJbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IHZhbEluLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGxibEluICkgdmFsSW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibEluLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdHZhbEluLnNldEF0dHJpYnV0ZSggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdHZhbEluLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHR0aGlzLmluaXRfcm93X2ZyZXNoX2ZsYWdzKCBub2RlICk7XHJcblx0XHRcdGxpc3QuYXBwZW5kQ2hpbGQoIG5vZGUgKTtcclxuXHJcblx0XHRcdC8vIEtlZXAgeW91ciBleGlzdGluZyBwb3N0LWFwcGVuZCBzeW5jIGFzIGEgc2FmZXR5IG5ldFxyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNsb3NlX2Ryb3Bkb3duKGFuY2hvcl9lbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciByb290ID0gYW5jaG9yX2VsPy5jbG9zZXN0Py4oIHRoaXMudWkubWVudV9yb290ICk7XHJcblx0XHRcdFx0aWYgKCByb290ICkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgeW91ciBkcm9wZG93biB0b2dnbGVyIHRvZ2dsZXMgYSBjbGFzcyBsaWtlICdvcGVuJywgY2xvc2UgaXQuXHJcblx0XHRcdFx0XHRyb290LmNsYXNzTGlzdC5yZW1vdmUoICdvcGVuJyApO1xyXG5cdFx0XHRcdFx0Ly8gT3IgaWYgaXQgcmVsaWVzIG9uIGFyaWEtZXhwYW5kZWQgb24gdGhlIHRvZ2dsZS5cclxuXHRcdFx0XHRcdHZhciB0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLm1lbnVfdG9nZ2xlICk7XHJcblx0XHRcdFx0XHRpZiAoIHQgKSB7XHJcblx0XHRcdFx0XHRcdHQuc2V0QXR0cmlidXRlKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkgeyB9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGluc2VydF9hZnRlcihuZXdfbm9kZSwgcmVmX25vZGUpIHtcclxuXHRcdFx0aWYgKCByZWZfbm9kZT8ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRpZiAoIHJlZl9ub2RlLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRcdFx0cmVmX25vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5ld19ub2RlLCByZWZfbm9kZS5uZXh0U2libGluZyApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWZfbm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKCBuZXdfbm9kZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBjb21taXRfb3B0aW9ucyhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBsaXN0ICAgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCBob2xkZXIgPSB0aGlzLmdldF9ob2xkZXIoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgfHwgIWhvbGRlciApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGRpZmZlcnMgPSB0aGlzLmlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCggcGFuZWwgKTtcclxuXHJcblx0XHRcdGNvbnN0IHJvd3MgICAgPSBsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRjb25zdCByICAgICAgPSByb3dzW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxibF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS5sYWJlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHZhbF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZSApO1xyXG5cdFx0XHRcdGNvbnN0IGNoayAgICA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS50b2dnbGUgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbGJsID0gKGxibF9pbiAmJiBsYmxfaW4udmFsdWUpIHx8ICcnO1xyXG5cdFx0XHRcdGxldCB2YWwgICA9ICh2YWxfaW4gJiYgdmFsX2luLnZhbHVlKSB8fCAnJztcclxuXHJcblx0XHRcdFx0Ly8gSWYgc2luZ2xlLWlucHV0IG1vZGUgLT4gaGFyZCBtaXJyb3IgdG8gbGFiZWwuXHJcblx0XHRcdFx0aWYgKCAhIGRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHQvLyBzaW5nbGUtaW5wdXQgbW9kZTogbWlycm9yIExhYmVsLCBtaW5pbWFsIGVzY2FwaW5nIChubyBzbHVnKS5cclxuXHRcdFx0XHRcdHZhbCA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsLCAvKmRpZmZlcnM9Ki9mYWxzZSApO1xyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHZhbDsgICAvLyBrZWVwIGhpZGRlbiBpbnB1dCBpbiBzeW5jIGZvciBhbnkgcHJldmlld3MvZGVidWcuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBzZWwgPSAhIShjaGsgJiYgY2hrLmNoZWNrZWQpO1xyXG5cdFx0XHRcdG9wdGlvbnMucHVzaCggeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdHBhbmVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDoge1xyXG5cdFx0XHRcdFx0XHRrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnNcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cclxuXHRcdFx0Ly8gTWlycm9yIHRvIHRoZSBzZWxlY3RlZCBmaWVsZCBlbGVtZW50IHNvIGNhbnZhcy9leHBvcnQgc2VlcyBjdXJyZW50IG9wdGlvbnMgaW1tZWRpYXRlbHkuXHJcblx0XHRcdGNvbnN0IGZpZWxkID0gcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkXHJcblx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZmllbGQuaXMtc2VsZWN0ZWQsIC53cGJjX2JmYl9fZmllbGQtLXNlbGVjdGVkJyApO1xyXG5cdFx0XHRpZiAoIGZpZWxkICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZmllbGQsICdvcHRpb25zJywgb3B0aW9ucyApO1xyXG5cdFx0XHRcdGZpZWxkLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDogeyBrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnMgfVxyXG5cdFx0XHRcdH0gKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdHN0YXRpYyBlbnN1cmVfc29ydGFibGUocGFuZWwpIHtcclxuXHJcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoICEgbGlzdCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB3aW5kb3cuU29ydGFibGU/LmdldD8uKCBsaXN0ICk7XHJcblx0XHRcdFx0aWYgKCBleGlzdGluZyApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1aWxkZXIgPSB3aW5kb3cud3BiY19iZmJfYXBpPy5nZXRfYnVpbGRlcj8uKCkgfHwgd2luZG93LndwYmNfYmZiIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdC8vIFByZWZlciB0aGUgc2hhcmVkIFNvcnRhYmxlIG1hbmFnZXIgc28gdGhlIHNpZGViYXIgbGlzdCB1c2VzXHJcblx0XHRcdFx0Ly8gdGhlIGRlZGljYXRlZCBcInNpbXBsZV9saXN0XCIgY29uZmlnIGluc3RlYWQgb2YgdGhlIGNhbnZhcyBjb25maWcuXHJcblx0XHRcdFx0aWYgKCBidWlsZGVyICYmIGJ1aWxkZXIuc29ydGFibGUgJiYgdHlwZW9mIGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlID09PSAnZnVuY3Rpb24nICkge1xyXG5cclxuXHRcdFx0XHRcdGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlKFxyXG5cdFx0XHRcdFx0XHRsaXN0LFxyXG5cdFx0XHRcdFx0XHQnY2FudmFzJyxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRhYmxlX2tpbmQgICAgIDogJ3NpbXBsZV9saXN0JyxcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVfc2VsZWN0b3IgICA6IHRoaXMudWkuZHJhZ19oYW5kbGUsXHJcblx0XHRcdFx0XHRcdFx0ZHJhZ2dhYmxlX3NlbGVjdG9yOiB0aGlzLnVpLnJvdyxcclxuXHRcdFx0XHRcdFx0XHRvblVwZGF0ZSAgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB3aW5kb3cuU29ydGFibGU/LmNyZWF0ZSApIHtcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrIGlmIGJ1aWxkZXIgaXMgbm90IHJlYWR5IGZvciBzb21lIHJlYXNvbi5cclxuXHRcdFx0XHRcdHdpbmRvdy5Tb3J0YWJsZS5jcmVhdGUoXHJcblx0XHRcdFx0XHRcdGxpc3QsXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGUgICAgICAgICAgIDogdGhpcy51aS5kcmFnX2hhbmRsZSxcclxuXHRcdFx0XHRcdFx0XHRkcmFnZ2FibGUgICAgICAgIDogdGhpcy51aS5yb3csXHJcblx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uICAgICAgICA6IDEyMCxcclxuXHRcdFx0XHRcdFx0XHRmb3JjZUZhbGxiYWNrICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRmYWxsYmFja09uQm9keSAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0ZmFsbGJhY2tUb2xlcmFuY2U6IDgsXHJcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ2xvbmVPbkhpZGU6IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0b25VcGRhdGUgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGlzdC5kYXRhc2V0LnNvcnRhYmxlX2luaXQgPSAnMSc7XHJcblxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3aW5kb3cuX3dwYmM/LmRldj8uZXJyb3I/LiggJ1NlbGVjdF9CYXNlLmVuc3VyZV9zb3J0YWJsZScsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyByZWJ1aWxkX2lmX2VtcHR5KHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGxpc3QgICA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IGhvbGRlciA9IHRoaXMuZ2V0X2hvbGRlciggcGFuZWwgKTtcclxuXHRcdFx0aWYgKCAhbGlzdCB8fCAhaG9sZGVyIHx8IGxpc3QuY2hpbGRyZW4ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0bGV0IGRhdGEgPSBbXTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRkYXRhID0gSlNPTi5wYXJzZSggaG9sZGVyLnZhbHVlIHx8ICdbXScgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0ZGF0YSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICFBcnJheS5pc0FycmF5KCBkYXRhICkgfHwgIWRhdGEubGVuZ3RoICkge1xyXG5cdFx0XHRcdGRhdGEgPSAodGhpcy5nZXRfZGVmYXVsdHMoKS5vcHRpb25zIHx8IFtdKS5zbGljZSggMCApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggZGF0YSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwge1xyXG5cdFx0XHRcdFx0bGFiZWwgICA6IGRhdGFbaV0/LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdFx0dmFsdWUgICA6IGRhdGFbaV0/LnZhbHVlIHx8ICcnLFxyXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhZGF0YVtpXT8uc2VsZWN0ZWQsXHJcblx0XHRcdFx0XHRpbmRleCAgIDogaSxcclxuXHRcdFx0XHRcdHVpZCAgICAgOiB0aGlzLm1ha2VfdWlkKClcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc19yb3dfZGVmYXVsdHMocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXS5jaGVja2VkICkgcmV0dXJuIHRydWU7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaXNfbXVsdGlwbGVfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0cmV0dXJuICEhKGNoayAmJiBjaGsuY2hlY2tlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc190ZXh0X2RlZmF1bHRfdmFsdWUocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZHYgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0cmV0dXJuICEhKGR2ICYmIFN0cmluZyggZHYudmFsdWUgfHwgJycgKS50cmltKCkubGVuZ3RoKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgc3luY19kZWZhdWx0X3ZhbHVlX2xvY2socGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgaW5wdXQgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0Y29uc3Qgbm90ZSAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggJy5qcy1kZWZhdWx0LXZhbHVlLW5vdGUnICk7XHJcblx0XHRcdGlmICggIWlucHV0ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgbG9jayAgICAgPSB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICk7XHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlucHV0LnJlbW92ZUF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkgbm90ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHN5bmNfcGxhY2Vob2xkZXJfbG9jayhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBpbnB1dCA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnBsYWNlaG9sZGVyX2lucHV0ICk7XHJcblx0XHRcdGNvbnN0IG5vdGUgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkucGxhY2Vob2xkZXJfbm90ZSApO1xyXG5cclxuXHRcdFx0Ly8gTkVXOiBjb21wdXRlIG11bHRpcGxlIGFuZCB0b2dnbGUgcm93IHZpc2liaWxpdHlcclxuXHRcdFx0Y29uc3QgaXNNdWx0aXBsZSAgICAgPSB0aGlzLmlzX211bHRpcGxlX2VuYWJsZWQoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyUm93ID0gaW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZUlucHV0ICAgICAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5zaXplX2lucHV0ICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZVJvdyAgICAgICAgPSBzaXplSW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIFNob3cgcGxhY2Vob2xkZXIgb25seSBmb3Igc2luZ2xlLXNlbGVjdDsgc2hvdyBzaXplIG9ubHkgZm9yIG11bHRpcGxlXHJcblx0XHRcdGlmICggcGxhY2Vob2xkZXJSb3cgKSBwbGFjZWhvbGRlclJvdy5zdHlsZS5kaXNwbGF5ID0gaXNNdWx0aXBsZSA/ICdub25lJyA6ICcnO1xyXG5cdFx0XHRpZiAoIHNpemVSb3cgKSBzaXplUm93LnN0eWxlLmRpc3BsYXkgPSBpc011bHRpcGxlID8gJycgOiAnbm9uZSc7XHJcblxyXG5cdFx0XHQvLyBFeGlzdGluZyBiZWhhdmlvciAoa2VlcCBhcy1pcylcclxuXHRcdFx0aWYgKCAhaW5wdXQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsb2NrID0gaXNNdWx0aXBsZSB8fCB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICkgfHwgdGhpcy5oYXNfdGV4dF9kZWZhdWx0X3ZhbHVlKCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoIG5vdGUgJiYgIW5vdGUuaWQgKSBub3RlLmlkID0gJ3dwYmNfcGxhY2Vob2xkZXJfbm90ZV8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgMTAgKTtcclxuXHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIHtcclxuXHRcdFx0XHRcdG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kZXNjcmliZWRieScsIG5vdGUuaWQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aW5wdXQucmVtb3ZlQXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoICdhcmlhLWRlc2NyaWJlZGJ5JyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBlbmZvcmNlX3NpbmdsZV9kZWZhdWx0KHBhbmVsLCBjbGlja2VkKSB7XHJcblx0XHRcdGlmICggdGhpcy5pc19tdWx0aXBsZV9lbmFibGVkKCBwYW5lbCApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0aWYgKCBjbGlja2VkICYmIGNsaWNrZWQuY2hlY2tlZCApIHtcclxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXSAhPT0gY2xpY2tlZCApIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tpXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3NbaV0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjbGlja2VkLnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IGtlcHQgPSBmYWxzZTtcclxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgY2hlY2tzLmxlbmd0aDsgaisrICkgaWYgKCBjaGVja3Nbal0uY2hlY2tlZCApIHtcclxuXHRcdFx0XHRpZiAoICFrZXB0ICkge1xyXG5cdFx0XHRcdFx0a2VwdCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tqXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3Nbal0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBvbmUtdGltZSBib290c3RyYXAgb2YgYSBwYW5lbCAtLS0tXHJcblx0XHRzdGF0aWMgYm9vdHN0cmFwX3BhbmVsKHBhbmVsKSB7XHJcblx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoICFwYW5lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19vcHRpb25zX2VkaXRvcicgKSApIHJldHVybjsgLy8gb25seSBzZWxlY3QtbGlrZSBVSXNcclxuXHRcdFx0aWYgKCBwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID09PSAnMScgKSB7XHJcblx0XHRcdFx0dGhpcy5lbnN1cmVfc29ydGFibGUoIHBhbmVsICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnJlYnVpbGRfaWZfZW1wdHkoIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuZW5zdXJlX3NvcnRhYmxlKCBwYW5lbCApO1xyXG5cdFx0XHRwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID0gJzEnO1xyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIGhvb2sgaW50byBpbnNwZWN0b3IgbGlmZWN5Y2xlIChmaXJlcyBPTkNFKSAtLS0tXHJcblx0XHRzdGF0aWMgd2lyZV9vbmNlKCkge1xyXG5cdFx0XHRpZiAoIENvcmUuX19zZWxlY3RiYXNlX3dpcmVkICkgcmV0dXJuO1xyXG5cdFx0XHRDb3JlLl9fc2VsZWN0YmFzZV93aXJlZCA9IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCBvbl9yZWFkeV9vcl9yZW5kZXIgPSAoZXYpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGV2Py5kZXRhaWw/LnBhbmVsO1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gZXY/LmRldGFpbD8uZWwgfHwgZXY/LmRldGFpbD8uZmllbGQgfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoICFwYW5lbCApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGZpZWxkICkgcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkID0gZmllbGQ7XHJcblx0XHRcdFx0dGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGluc3BlY3RvciByb290IHdhcyByZW1vdW50ZWQsIGVuc3VyZSByb290IGxpc3RlbmVycyBhcmUgKHJlKWJvdW5kLlxyXG5cdFx0XHRcdHRoaXMud2lyZV9yb290X2xpc3RlbmVycygpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlbmRlcicsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cclxuXHRcdFx0dGhpcy53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHdpcmVfcm9vdF9saXN0ZW5lcnMoKSB7XHJcblxyXG5cdFx0XHQvLyBJZiBhbHJlYWR5IHdpcmVkIEFORCB0aGUgc3RvcmVkIHJvb3QgaXMgc3RpbGwgaW4gdGhlIERPTSwgYmFpbCBvdXQuXHJcblx0XHRcdGlmICggdGhpcy5fX3Jvb3Rfd2lyZWQgJiYgdGhpcy5fX3Jvb3Rfbm9kZT8uaXNDb25uZWN0ZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICFyb290ICkge1xyXG5cdFx0XHRcdC8vIFJvb3QgbWlzc2luZyAoZS5nLiwgU1BBIHJlLXJlbmRlcikg4oCUIGNsZWFyIGZsYWdzIHNvIHdlIGNhbiB3aXJlIGxhdGVyLlxyXG5cdFx0XHRcdHRoaXMuX19yb290X3dpcmVkID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgPSBudWxsO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgICAgICAgICAgICAgICAgICA9IHJvb3Q7XHJcblx0XHRcdHRoaXMuX19yb290X3dpcmVkICAgICAgICAgICAgICAgICAgPSB0cnVlO1xyXG5cdFx0XHRyb290LmRhdGFzZXQuc2VsZWN0YmFzZV9yb290X3dpcmVkID0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgZ2V0X3BhbmVsID0gKHRhcmdldCkgPT5cclxuXHRcdFx0XHR0YXJnZXQ/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ib2R5JyApIHx8XHJcblx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIENsaWNrIGhhbmRsZXJzOiBhZGQgLyBkZWxldGUgLyBkdXBsaWNhdGVcclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHR0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdWkgPSB0aGlzLnVpO1xyXG5cclxuXHRcdFx0XHQvLyBFeGlzdGluZyBcIkFkZCBvcHRpb25cIiBidXR0b24gKHRvcCB0b29sYmFyKVxyXG5cdFx0XHRcdGNvbnN0IGFkZCA9IGUudGFyZ2V0LmNsb3Nlc3Q/LiggdWkuYWRkX2J0biApO1xyXG5cdFx0XHRcdGlmICggYWRkICkge1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogJycsIHZhbHVlOiAnJywgc2VsZWN0ZWQ6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEcm9wZG93biBtZW51IGFjdGlvbnMuXHJcblx0XHRcdFx0Y29uc3QgbWVudV9hY3Rpb24gPSBlLnRhcmdldC5jbG9zZXN0Py4oIHVpLm1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0aWYgKCBtZW51X2FjdGlvbiApIHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uID0gKG1lbnVfYWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aW9uJyApIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ICAgID0gbWVudV9hY3Rpb24uY2xvc2VzdD8uKCB1aS5yb3cgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICdhZGRfYWZ0ZXInID09PSBhY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdC8vIEFkZCBlbXB0eSByb3cgYWZ0ZXIgY3VycmVudFxyXG5cdFx0XHRcdFx0XHRjb25zdCBwcmV2X2NvdW50ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKT8uY2hpbGRyZW4ubGVuZ3RoIHx8IDA7XHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kX3JvdyggcGFuZWwsIHsgbGFiZWw6ICcnLCB2YWx1ZTogJycsIHNlbGVjdGVkOiBmYWxzZSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIE1vdmUgdGhlIG5ld2x5IGFkZGVkIGxhc3Qgcm93IGp1c3QgYWZ0ZXIgY3VycmVudCByb3cgdG8gcHJlc2VydmUgXCJhZGQgYWZ0ZXJcIlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBsaXN0ICYmIGxpc3QubGFzdEVsZW1lbnRDaGlsZCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgIT09IHJvdyApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmluc2VydF9hZnRlciggbGlzdC5sYXN0RWxlbWVudENoaWxkLCByb3cgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAnZHVwbGljYXRlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBsYmwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLmxhYmVsICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB2YWwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzZWwgPSAhISgocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnRvZ2dsZSApIHx8IHt9KS5jaGVja2VkKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsLCB1aWQ6IHRoaXMubWFrZV91aWQoKSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIFBsYWNlIHRoZSBuZXcgcm93IHJpZ2h0IGFmdGVyIHRoZSBjdXJyZW50LlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggbGlzdCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgJiYgbGlzdC5sYXN0RWxlbWVudENoaWxkICE9PSByb3cgKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pbnNlcnRfYWZ0ZXIoIGxpc3QubGFzdEVsZW1lbnRDaGlsZCwgcm93ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy5lbmZvcmNlX3NpbmdsZV9kZWZhdWx0KCBwYW5lbCwgbnVsbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAncmVtb3ZlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHJvdyAmJiByb3cucGFyZW50Tm9kZSApIHJvdy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByb3cgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5KCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHJcblx0XHRcdC8vIElucHV0IGRlbGVnYXRpb24uXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoICEgcGFuZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHVpICAgICAgICAgICAgICAgID0gdGhpcy51aTtcclxuXHRcdFx0XHRjb25zdCBpc19sYWJlbF9vcl92YWx1ZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LWxhYmVsJyApIHx8IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSAgICAgICAgID0gZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX211bHRpcGxlICAgICAgID0gZS50YXJnZXQubWF0Y2hlcz8uKCB1aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0XHRjb25zdCBpc19kZWZhdWx0X3RleHQgICA9IGUudGFyZ2V0Lm1hdGNoZXM/LiggdWkuZGVmYXVsdF90ZXh0ICk7XHJcblx0XHRcdFx0Y29uc3QgaXNfdmFsdWVfZGlmZmVycyAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLnZhbHVlX2RpZmZlcnNfY2hrICk7XHJcblxyXG5cdFx0XHRcdC8vIEhhbmRsZSBcInZhbHVlIGRpZmZlcnNcIiB0b2dnbGUgbGl2ZVxyXG5cdFx0XHRcdGlmICggaXNfdmFsdWVfZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUcmFjayB3aGVuIHRoZSB1c2VyIGVkaXRzIFZBTFVFIGV4cGxpY2l0bHlcclxuXHRcdFx0XHRpZiAoIGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ID0gZS50YXJnZXQuY2xvc2VzdCggdGhpcy51aS5yb3cgKTtcclxuXHRcdFx0XHRcdHRoaXMubWFya19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKTtcclxuXHRcdFx0XHRcdC8vIEtlZXAgdGhlIGNhY2hlIHVwZGF0ZWQgc28gdG9nZ2xpbmcgT0ZGL09OIGxhdGVyIHJlc3RvcmVzIHRoZSBsYXRlc3QgY3VzdG9tIHZhbHVlXHJcblx0XHRcdFx0XHRlLnRhcmdldC5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IGUudGFyZ2V0LnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXV0by1maWxsIFZBTFVFIGZyb20gTEFCRUwgaWYgdmFsdWUgaXMgZnJlc2ggKGFuZCBkaWZmZXJzIGlzIE9OKTsgaWYgZGlmZmVycyBpcyBPRkYsIHdlIG1pcnJvciBhbnl3YXkgaW4gY29tbWl0XHJcblx0XHRcdFx0aWYgKCBlLnRhcmdldC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX29wdC1sYWJlbCcgKSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJvdyAgICAgPSBlLnRhcmdldC5jbG9zZXN0KCB1aS5yb3cgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbF9pbiAgPSByb3c/LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICk7XHJcblx0XHRcdFx0XHRjb25zdCBkaWZmZXJzID0gdGhpcy5pc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQoIHBhbmVsICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggIWRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IG1pcnJvciBodW1hbiBsYWJlbCB3aXRoIG1pbmltYWwgZXNjYXBpbmdcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGUudGFyZ2V0LnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhdGhpcy5pc19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKSApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBzZXBhcmF0ZS12YWx1ZSBtb2RlLCBvbmx5IHdoaWxlIGZyZXNoXHJcblx0XHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBlLnRhcmdldC52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0aWYgKCBpc19sYWJlbF9vcl92YWx1ZSB8fCBpc190b2dnbGUgfHwgaXNfbXVsdGlwbGUgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSApIGUudGFyZ2V0LnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsIGUudGFyZ2V0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSB8fCBpc19tdWx0aXBsZSApIHRoaXMuZW5mb3JjZV9zaW5nbGVfZGVmYXVsdCggcGFuZWwsIGlzX3RvZ2dsZSA/IGUudGFyZ2V0IDogbnVsbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggaXNfZGVmYXVsdF90ZXh0ICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgaG9sZGVyID0gdGhpcy5nZXRfaG9sZGVyKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0aWYgKCBob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblxyXG5cdFx0XHQvLyBDaGFuZ2UgZGVsZWdhdGlvblxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCB1aSAgICAgICAgPSB0aGlzLnVpO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXNlbGVjdGVkLWNoaycgKTtcclxuXHRcdFx0XHRjb25zdCBpc19tdWx0aSAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLm11bHRpcGxlX2NoayApO1xyXG5cdFx0XHRcdGlmICggIWlzX3RvZ2dsZSAmJiAhaXNfbXVsdGkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmICggaXNfdG9nZ2xlICkgZS50YXJnZXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgZS50YXJnZXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR0aGlzLmVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQoIHBhbmVsLCBpc190b2dnbGUgPyBlLnRhcmdldCA6IG51bGwgKTtcclxuXHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHR9LCB0cnVlICk7XHJcblxyXG5cdFx0XHQvLyBMYXp5IGJvb3RzdHJhcFxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWVudGVyJywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoIHBhbmVsICYmIGUudGFyZ2V0Py5jbG9zZXN0Py4oIHRoaXMudWkubGlzdCApICkgdGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZG93bicsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSBnZXRfcGFuZWwoIGUudGFyZ2V0ICk7XHJcblx0XHRcdFx0aWYgKCBwYW5lbCAmJiBlLnRhcmdldD8uY2xvc2VzdD8uKCB0aGlzLnVpLmRyYWdfaGFuZGxlICkgKSB0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHR0cnkgeyBDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfb25jZSgpOyB9IGNhdGNoIChfKSB7fVxyXG5cdC8vIFRyeSBpbW1lZGlhdGVseSAoaWYgcm9vdCBpcyBhbHJlYWR5IGluIERPTSksIHRoZW4gYWdhaW4gb24gRE9NQ29udGVudExvYWRlZC5cclxuXHRDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfcm9vdF9saXN0ZW5lcnMoKTtcclxuXHJcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHsgQ29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZS53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7ICB9KTtcclxuXHJcbn0oIHdpbmRvdyApKTsiLCIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPT0gRmlsZSAgL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL19vdXQvY29yZS9iZmItdWkuanMgPT0gfCAyMDI1LTA5LTEwIDE1OjQ3XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSk7XHJcblx0Y29uc3QgVUkgICA9IChDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSk7XHJcblxyXG5cdC8vIC0tLSBIaWdobGlnaHQgRWxlbWVudCwgIGxpa2UgR2VuZXJhdG9yIGJybiAgLSAgVGlueSBVSSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFVJLl9wdWxzZV90aW1lcnMgPSBVSS5fcHVsc2VfdGltZXJzIHx8IG5ldyBNYXAoKTsgLy8gZWwgLT4gdGltZXJfaWRcclxuXHRVSS5fcHVsc2VfbWV0YSAgID0gVUkuX3B1bHNlX21ldGEgICB8fCBuZXcgTWFwKCk7IC8vIGVsIC0+IHsgdG9rZW4sIGxhc3RfdHMsIGRlYm91bmNlX2lkLCBjb2xvcl9zZXQgfVxyXG5cdC8vIFB1bHNlIHR1bmluZyAobWlsbGlzZWNvbmRzKS5cclxuXHRVSS5QVUxTRV9USFJPVFRMRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDUwMDtcclxuXHRVSS5QVUxTRV9ERUJPVU5DRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX0RFQk9VTkNFX01TICkgPyBVSS5QVUxTRV9ERUJPVU5DRV9NUyA6IDc1MDtcclxuXHJcblx0Ly8gRGVib3VuY2UgU1RSVUNUVVJFX0NIQU5HRSBmb3IgY29udGludW91cyBpbnNwZWN0b3IgY29udHJvbHMgKHNsaWRlcnMgLyBzY3J1YmJpbmcpLlxyXG5cdC8vIFR1bmU6IDE4MC4uMzUwIGlzIHVzdWFsbHkgYSBzd2VldCBzcG90LlxyXG5cdFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAxODA7XHJcblx0Ly8gQ2hhbmdlIHRoaXMgdG8gdHVuZSBzcGVlZDogNTAuLjEyMCBtcyBpcyBhIGdvb2QgcmFuZ2UuIENhbiBiZSBjb25maWd1cmVkIGluIDxkaXYgZGF0YS1sZW4tZ3JvdXAgZGF0YS1sZW4tdGhyb3R0bGU9XCIxODBcIj4uLi48L2Rpdj4uXHJcblx0VUkuVkFMVUVfU0xJREVSX1RIUk9UVExFX01TID0gTnVtYmVyLmlzRmluaXRlKCBVSS5WQUxVRV9TTElERVJfVEhST1RUTEVfTVMgKSA/IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHJcblx0LyoqXHJcblx0ICogQ2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIHNlcXVlbmNlIGZvciBhbiBlbGVtZW50LlxyXG5cdCAqIFVzZXMgdG9rZW4gaW52YWxpZGF0aW9uIHNvIGFscmVhZHktc2NoZWR1bGVkIGNhbGxiYWNrcyBiZWNvbWUgbm8tb3BzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHQgKi9cclxuXHRVSS5jYW5jZWxfcHVsc2UgPSBmdW5jdGlvbiAoZWwpIHtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCggVUkuX3B1bHNlX3RpbWVycy5nZXQoIGVsICkgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFVJLl9wdWxzZV90aW1lcnMuZGVsZXRlKCBlbCApO1xyXG5cclxuXHRcdHZhciBtZXRhID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0bWV0YS50b2tlbiA9IChOdW1iZXIuaXNGaW5pdGUoIG1ldGEudG9rZW4gKSA/IG1ldGEudG9rZW4gOiAwKSArIDE7XHJcblx0XHRtZXRhLmNvbG9yX3NldCA9IGZhbHNlO1xyXG5cdFx0dHJ5IHsgZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnLCAnd3BiY19iZmJfX2hpZ2hsaWdodC1wdWxzZScgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0dHJ5IHsgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRVSS5fcHVsc2VfbWV0YS5zZXQoIGVsLCBtZXRhICk7XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IDA7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9yY2UtcmVzdGFydCBhIENTUyBhbmltYXRpb24gb24gYSBjbGFzcy5cclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjbHNcclxuXHQgKi9cclxuXHRVSS5fcmVzdGFydF9jc3NfYW5pbWF0aW9uID0gZnVuY3Rpb24gKGVsLCBjbHMpIHtcclxuXHRcdGlmICggISBlbCApIHsgcmV0dXJuOyB9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdC8vIEZvcmNlIHJlZmxvdyBzbyB0aGUgbmV4dCBhZGQoKSByZXRyaWdnZXJzIHRoZSBrZXlmcmFtZXMuXHJcblx0XHR2b2lkIGVsLm9mZnNldFdpZHRoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZWwuY2xhc3NMaXN0LmFkZCggY2xzICk7XHJcblx0XHR9IGNhdGNoICggXyApIHt9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRTaW5nbGUgcHVsc2UgKGJhY2stY29tcGF0KS5cclxuXHRcdEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHRAcGFyYW0ge251bWJlcn0gZHVyX21zXHJcblx0ICovXHJcblx0VUkucHVsc2Vfb25jZSA9IGZ1bmN0aW9uIChlbCwgZHVyX21zKSB7XHJcblx0XHRpZiAoICEgZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGNscyA9ICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJztcclxuXHRcdHZhciBtcyAgPSBOdW1iZXIuaXNGaW5pdGUoIGR1cl9tcyApID8gZHVyX21zIDogNzAwO1xyXG5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHR2YXIgbWV0YSAgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdFVJLl9yZXN0YXJ0X2Nzc19hbmltYXRpb24oIGVsLCBjbHMgKTtcclxuXHRcdHZhciB0ID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQvLyBpZ25vcmUgaWYgYSBuZXdlciBwdWxzZSBzdGFydGVkLlxyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHR9LCBtcyApO1xyXG5cdFx0VUkuX3B1bHNlX3RpbWVycy5zZXQoIGVsLCB0ICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRNdWx0aS1ibGluayBzZXF1ZW5jZSB3aXRoIG9wdGlvbmFsIHBlci1jYWxsIGNvbG9yIG92ZXJyaWRlLlxyXG5cdFx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbdGltZXM9M11cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbb25fbXM9MjgwXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFtvZmZfbXM9MTgwXVxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtoZXhfY29sb3JdIE9wdGlvbmFsIENTUyBjb2xvciAoZS5nLiAnI2ZmNGQ0Zicgb3IgJ3JnYiguLi4pJykuXHJcblx0ICovXHJcblx0VUkucHVsc2Vfc2VxdWVuY2UgPSBmdW5jdGlvbiAoZWwsIHRpbWVzLCBvbl9tcywgb2ZmX21zLCBoZXhfY29sb3IpIHtcclxuXHRcdGlmICggIWVsIHx8ICFkLmJvZHkuY29udGFpbnMoIGVsICkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHZhciBjbHMgICA9ICd3cGJjX2JmYl9faGlnaGxpZ2h0LXB1bHNlJztcclxuXHRcdHZhciBjb3VudCA9IE51bWJlci5pc0Zpbml0ZSggdGltZXMgKSA/IHRpbWVzIDogMjtcclxuXHRcdHZhciBvbiAgICA9IE51bWJlci5pc0Zpbml0ZSggb25fbXMgKSA/IG9uX21zIDogMjgwO1xyXG5cdFx0dmFyIG9mZiAgID0gTnVtYmVyLmlzRmluaXRlKCBvZmZfbXMgKSA/IG9mZl9tcyA6IDE4MDtcclxuXHJcblx0XHQvLyBUaHJvdHRsZTogYXZvaWQgcmVmbG93IHNwYW0gaWYgY2FsbGVkIHJlcGVhdGVkbHkgd2hpbGUgdHlwaW5nL2RyYWdnaW5nLlxyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgbm93ICA9IERhdGUubm93KCk7XHJcblx0XHR2YXIgdGhyb3R0bGVfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBtZXRhLmxhc3RfdHMgKSAmJiAobm93IC0gbWV0YS5sYXN0X3RzKSA8IHRocm90dGxlX21zICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRtZXRhLmxhc3RfdHMgPSBub3c7XHJcblxyXG5cdFx0Ly8gY2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIGFuZCByZXNldCBjbGFzcyAodG9rZW4gaW52YWxpZGF0aW9uKS5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHQvLyBuZXcgdG9rZW4gZm9yIHRoaXMgcnVuXHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cclxuXHRcdHZhciBoYXZlX2NvbG9yID0gISFoZXhfY29sb3IgJiYgdHlwZW9mIGhleF9jb2xvciA9PT0gJ3N0cmluZyc7XHJcblx0XHRpZiAoIGhhdmVfY29sb3IgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJywgaGV4X2NvbG9yICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0bWV0YS5jb2xvcl9zZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdHZhciBpID0gMDtcclxuXHRcdChmdW5jdGlvbiB0aWNrKCkge1xyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHtcclxuXHRcdFx0XHQvLyBjYW5jZWxlZC9yZXBsYWNlZFxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGkgPj0gY291bnQgKSB7XHJcblx0XHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHRcdFx0aWYgKCBoYXZlX2NvbG9yICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0VUkuX3Jlc3RhcnRfY3NzX2FuaW1hdGlvbiggZWwsIGNscyApO1xyXG5cdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgICAgIC8vIE9OIC0+IE9GRlxyXG5cdFx0XHRcdHZhciBtMiA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0XHRpZiAoIG0yLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoIGNscyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgLy8gT0ZGIGdhcCAtPiBuZXh0XHJcblx0XHRcdFx0XHR2YXIgbTMgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHRcdFx0XHRpZiAoIG0zLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0XHRpKys7XHJcblx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0fSwgb2ZmICkgKTtcclxuXHRcdFx0fSwgb24gKSApO1xyXG5cdFx0fSkoKTtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRGVib3VuY2VkIHF1ZXJ5ICsgcHVsc2UuXHJcblx0ICogVXNlZnVsIGZvciBgaW5wdXRgIGV2ZW50cyAoc2xpZGVycyAvIHR5cGluZykgdG8gYXZvaWQgZm9yY2VkIHJlZmxvdyBzcGFtLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IHJvb3Rfb3Jfc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge251bWJlcn0gd2FpdF9tc1xyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHQgKiBAcGFyYW0ge251bWJlcn0gW2JdXHJcblx0ICogQHBhcmFtIHtudW1iZXJ9IFtjXVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY29sb3JdXHJcblx0ICovXHJcblx0VUkucHVsc2VfcXVlcnlfZGVib3VuY2VkID0gZnVuY3Rpb24gKHJvb3Rfb3Jfc2VsZWN0b3IsIHNlbGVjdG9yLCB3YWl0X21zLCBhLCBiLCBjLCBjb2xvcikge1xyXG5cdFx0dmFyIHJvb3QgPSAodHlwZW9mIHJvb3Rfb3Jfc2VsZWN0b3IgPT09ICdzdHJpbmcnKSA/IGQgOiAocm9vdF9vcl9zZWxlY3RvciB8fCBkKTtcclxuXHRcdHZhciBzZWwgID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyByb290X29yX3NlbGVjdG9yIDogc2VsZWN0b3I7XHJcblx0XHRpZiAoICFzZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHJcblx0XHR2YXIgZGVmX21zID0gTnVtYmVyLmlzRmluaXRlKCBVSS5QVUxTRV9ERUJPVU5DRV9NUyApID8gVUkuUFVMU0VfREVCT1VOQ0VfTVMgOiAxMjA7XHJcblx0XHR2YXIgbXMgICAgID0gTnVtYmVyLmlzRmluaXRlKCB3YWl0X21zICkgPyB3YWl0X21zIDogZGVmX21zO1xyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0VUkucHVsc2Vfc2VxdWVuY2UoIGVsLCBhLCBiLCBjLCBjb2xvciApO1xyXG5cdFx0fSwgbXMgKTtcclxuXHRcdFVJLl9wdWxzZV9tZXRhLnNldCggZWwsIG1ldGEgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRcdFF1ZXJ5ICsgcHVsc2U6XHJcblx0XHQoQkMpIElmIG9ubHkgM3JkIGFyZyBpcyBhIG51bWJlciBhbmQgbm8gNHRoLzV0aCAtPiBzaW5nbGUgbG9uZyBwdWxzZS5cclxuXHRcdE90aGVyd2lzZSAtPiBzdHJvbmcgc2VxdWVuY2UgKGRlZmF1bHRzIDPDlzI4MC8xODApLlxyXG5cdFx0T3B0aW9uYWwgNnRoIGFyZzogY29sb3IuXHJcblx0XHRAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gcm9vdF9vcl9zZWxlY3RvclxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYl1cclxuXHJcblx0XHRAcGFyYW0ge251bWJlcn0gW2NdXHJcblxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtjb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9xdWVyeSA9IGZ1bmN0aW9uIChyb290X29yX3NlbGVjdG9yLCBzZWxlY3RvciwgYSwgYiwgYywgY29sb3IpIHtcclxuXHRcdHZhciByb290ID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyBkIDogKHJvb3Rfb3Jfc2VsZWN0b3IgfHwgZCk7XHJcblx0XHR2YXIgc2VsICA9ICh0eXBlb2Ygcm9vdF9vcl9zZWxlY3RvciA9PT0gJ3N0cmluZycpID8gcm9vdF9vcl9zZWxlY3RvciA6IHNlbGVjdG9yO1xyXG5cdFx0aWYgKCAhc2VsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG4vLyBCYWNrLWNvbXBhdDogVUkucHVsc2VRdWVyeShyb290LCBzZWwsIGR1cl9tcylcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBhICkgJiYgYiA9PT0gdW5kZWZpbmVkICYmIGMgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0cmV0dXJuIFVJLnB1bHNlX29uY2UoIGVsLCBhICk7XHJcblx0XHR9XHJcbi8vIE5ldzogc2VxdWVuY2U7IHBhcmFtcyBvcHRpb25hbDsgc3VwcG9ydHMgb3B0aW9uYWwgY29sb3IuXHJcblx0XHRVSS5wdWxzZV9zZXF1ZW5jZSggZWwsIGEsIGIsIGMsIGNvbG9yICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0Q29udmVuaWVuY2UgaGVscGVyIChzbmFrZV9jYXNlKSB0byBjYWxsIGEgc3Ryb25nIHB1bHNlIHdpdGggb3B0aW9ucy5cclxuXHJcblx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHJcblx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG5cclxuXHRAcGFyYW0ge251bWJlcn0gW29wdHMudGltZXM9M11cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9uX21zPTI4MF1cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9mZl9tcz0xODBdXHJcblxyXG5cdEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9zZXF1ZW5jZV9zdHJvbmcgPSBmdW5jdGlvbiAoZWwsIG9wdHMpIHtcclxuXHRcdG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cdFx0VUkucHVsc2Vfc2VxdWVuY2UoXHJcblx0XHRcdGVsLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMudGltZXMgKSA/IG9wdHMudGltZXMgOiAzLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMub25fbXMgKSA/IG9wdHMub25fbXMgOiAyODAsXHJcblx0XHRcdE51bWJlci5pc0Zpbml0ZSggb3B0cy5vZmZfbXMgKSA/IG9wdHMub2ZmX21zIDogMTgwLFxyXG5cdFx0XHRvcHRzLmNvbG9yXHJcblx0XHQpO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBCYXNlIGNsYXNzIGZvciBCRkIgbW9kdWxlcy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Nb2R1bGUgPSBjbGFzcyB7XHJcblx0XHQvKiogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAqL1xyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBDbGVhbnVwIHRoZSBtb2R1bGUuICovXHJcblx0XHRkZXN0cm95KCkge1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENlbnRyYWwgb3ZlcmxheS9jb250cm9scyBtYW5hZ2VyIGZvciBmaWVsZHMvc2VjdGlvbnMuXHJcblx0ICogUHVyZSBVSSBjb21wb3NpdGlvbjsgYWxsIGFjdGlvbnMgcm91dGUgYmFjayBpbnRvIHRoZSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX092ZXJsYXkgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFbnN1cmUgYW4gb3ZlcmxheSBleGlzdHMgYW5kIGlzIHdpcmVkIHVwIG9uIHRoZSBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgLSBmaWVsZCBvciBzZWN0aW9uIGVsZW1lbnRcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVuc3VyZShidWlsZGVyLCBlbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzU2VjdGlvbiA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cclxuXHRcdFx0Ly8gbGV0IG92ZXJsYXkgPSBlbC5xdWVyeVNlbGVjdG9yKCBDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMub3ZlcmxheSApO1xyXG5cdFx0XHRsZXQgb3ZlcmxheSA9IGVsLnF1ZXJ5U2VsZWN0b3IoIGA6c2NvcGUgPiAke0NvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy5vdmVybGF5fWAgKTtcclxuXHRcdFx0aWYgKCAhb3ZlcmxheSApIHtcclxuXHRcdFx0XHRvdmVybGF5ID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX292ZXJsYXktY29udHJvbHMnICk7XHJcblx0XHRcdFx0ZWwucHJlcGVuZCggb3ZlcmxheSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEcmFnIGhhbmRsZS5cclxuXHRcdFx0aWYgKCAhb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19kcmFnLWhhbmRsZScgKSApIHtcclxuXHRcdFx0XHRjb25zdCBkcmFnQ2xhc3MgPSBpc1NlY3Rpb24gPyAnd3BiY19iZmJfX2RyYWctaGFuZGxlIHNlY3Rpb24tZHJhZy1oYW5kbGUnIDogJ3dwYmNfYmZiX19kcmFnLWhhbmRsZSc7XHJcblx0XHRcdFx0b3ZlcmxheS5hcHBlbmRDaGlsZChcclxuXHRcdFx0XHRcdENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnc3BhbicsIGRyYWdDbGFzcywgJzxzcGFuIGNsYXNzPVwid3BiY19pY25fZHJhZ19pbmRpY2F0b3JcIj48L3NwYW4+JyApXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU0VUVElOR1MgYnV0dG9uIChzaG93biBmb3IgYm90aCBmaWVsZHMgJiBzZWN0aW9ucykuXHJcblx0XHRcdGlmICggIW92ZXJsYXkucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fc2V0dGluZ3MtYnRuJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IHNldHRpbmdzX2J0biAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdidXR0b24nLCAnd3BiY19iZmJfX3NldHRpbmdzLWJ0bicsICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3NldHRpbmdzXCI+PC9pPicgKTtcclxuXHRcdFx0XHRzZXR0aW5nc19idG4udHlwZSAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRcdHNldHRpbmdzX2J0bi50aXRsZSAgID0gJ09wZW4gc2V0dGluZ3MnO1xyXG5cdFx0XHRcdHNldHRpbmdzX2J0bi5vbmNsaWNrID0gKGUpID0+IHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdC8vIFNlbGVjdCBUSElTIGVsZW1lbnQgYW5kIHNjcm9sbCBpdCBpbnRvIHZpZXcuXHJcblx0XHRcdFx0XHRidWlsZGVyLnNlbGVjdF9maWVsZCggZWwsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEF1dG8tb3BlbiBJbnNwZWN0b3IgZnJvbSB0aGUgb3ZlcmxheSDigJxTZXR0aW5nc+KAnSBidXR0b24uXHJcblx0XHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2luc3BlY3RvcidcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHQvLyBUcnkgdG8gYnJpbmcgdGhlIGluc3BlY3RvciBpbnRvIHZpZXcgLyBmb2N1cyBmaXJzdCBpbnB1dC5cclxuXHRcdFx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGlmICggaW5zICkge1xyXG5cdFx0XHRcdFx0XHRpbnMuc2Nyb2xsSW50b1ZpZXcoIHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0gKTtcclxuXHRcdFx0XHRcdFx0Ly8gRm9jdXMgZmlyc3QgaW50ZXJhY3RpdmUgY29udHJvbCAoYmVzdC1lZmZvcnQpLlxyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZm9jdXNhYmxlID0gaW5zLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLFtjb250ZW50ZWRpdGFibGVdLFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScgKTtcclxuXHRcdFx0XHRcdFx0XHRmb2N1c2FibGU/LmZvY3VzPy4oKTtcclxuXHRcdFx0XHRcdFx0fSwgMjYwICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0b3ZlcmxheS5hcHBlbmRDaGlsZCggc2V0dGluZ3NfYnRuICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG92ZXJsYXkuc2V0QXR0cmlidXRlKCAncm9sZScsICd0b29sYmFyJyApO1xyXG5cdFx0XHRvdmVybGF5LnNldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnLCBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSA/ICdTZWN0aW9uIHRvb2xzJyA6ICdGaWVsZCB0b29scycgKTtcclxuXHJcblx0XHRcdHJldHVybiBvdmVybGF5O1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgTGF5b3V0IENoaXBzIGhlbHBlciAtIHZpc3VhbCBsYXlvdXQgcGlja2VyIChjaGlwcyksIGUuZy4sIFwiNTAlLzUwJVwiLCB0byBhIHNlY3Rpb24gb3ZlcmxheS5cclxuXHQgKlxyXG5cdCAqIFJlbmRlcnMgRXF1YWwvUHJlc2V0cy9DdXN0b20gY2hpcHMgaW50byBhIGhvc3QgY29udGFpbmVyIGFuZCB3aXJlcyB0aGVtIHRvIGFwcGx5IHRoZSBsYXlvdXQuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzID0gY2xhc3Mge1xyXG5cclxuXHRcdC8qKiBSZWFkIHBlci1jb2x1bW4gbWluIChweCkgZnJvbSBDU1MgdmFyIHNldCBieSB0aGUgZ3VhcmQuICovXHJcblx0XHRzdGF0aWMgX2dldF9jb2xfbWluX3B4KGNvbCkge1xyXG5cdFx0XHRjb25zdCB2ID0gZ2V0Q29tcHV0ZWRTdHlsZSggY29sICkuZ2V0UHJvcGVydHlWYWx1ZSggJy0td3BiYy1jb2wtbWluJyApIHx8ICcwJztcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gTWF0aC5tYXgoIDAsIG4gKSA6IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUdXJuIHJhdyB3ZWlnaHRzIChlLmcuIFsxLDFdLCBbMiwxLDFdKSBpbnRvIGVmZmVjdGl2ZSBcImF2YWlsYWJsZS0lXCIgYmFzZXMgdGhhdFxyXG5cdFx0ICogKGEpIHN1bSB0byB0aGUgcm93J3MgYXZhaWxhYmxlICUsIGFuZCAoYikgbWVldCBldmVyeSBjb2x1bW4ncyBtaW4gcHguXHJcblx0XHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGJhc2VzIChudW1iZXJzKSBvciBudWxsIGlmIGltcG9zc2libGUgdG8gc2F0aXNmeSBtaW5zLlxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluKGJ1aWxkZXIsIHJvdywgd2VpZ2h0cykge1xyXG5cdFx0XHRjb25zdCBjb2xzID0gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApO1xyXG5cdFx0XHRjb25zdCBuICAgID0gY29scy5sZW5ndGg7XHJcblx0XHRcdGlmICggIW4gKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0aWYgKCAhQXJyYXkuaXNBcnJheSggd2VpZ2h0cyApIHx8IHdlaWdodHMubGVuZ3RoICE9PSBuICkgcmV0dXJuIG51bGw7XHJcblxyXG5cdFx0XHQvLyBhdmFpbGFibGUgJSBhZnRlciBnYXBzIChmcm9tIExheW91dFNlcnZpY2UpXHJcblx0XHRcdGNvbnN0IGdwICAgICAgID0gYnVpbGRlci5jb2xfZ2FwX3BlcmNlbnQ7XHJcblx0XHRcdGNvbnN0IGVmZiAgICAgID0gYnVpbGRlci5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvdywgZ3AgKTtcclxuXHRcdFx0Y29uc3QgYXZhaWxQY3QgPSBlZmYuYXZhaWxhYmxlOyAgICAgICAgICAgICAgIC8vIGUuZy4gOTQgaWYgMiBjb2xzIGFuZCAzJSBnYXBcclxuXHRcdFx0Y29uc3Qgcm93UHggICAgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcblx0XHRcdGNvbnN0IGF2YWlsUHggID0gcm93UHggKiAoYXZhaWxQY3QgLyAxMDApO1xyXG5cclxuXHRcdFx0Ly8gY29sbGVjdCBtaW5pbWEgaW4gJSBvZiBcImF2YWlsYWJsZVwiXHJcblx0XHRcdGNvbnN0IG1pblBjdCA9IGNvbHMubWFwKCAoYykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1pblB4ID0gVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9nZXRfY29sX21pbl9weCggYyApO1xyXG5cdFx0XHRcdGlmICggYXZhaWxQeCA8PSAwICkgcmV0dXJuIDA7XHJcblx0XHRcdFx0cmV0dXJuIChtaW5QeCAvIGF2YWlsUHgpICogYXZhaWxQY3Q7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdC8vIElmIG1pbnMgYWxvbmUgZG9uJ3QgZml0LCBiYWlsLlxyXG5cdFx0XHRjb25zdCBzdW1NaW4gPSBtaW5QY3QucmVkdWNlKCAoYSwgYikgPT4gYSArIGIsIDAgKTtcclxuXHRcdFx0aWYgKCBzdW1NaW4gPiBhdmFpbFBjdCAtIDFlLTYgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIGltcG9zc2libGUgdG8gcmVzcGVjdCBtaW5zOyBkb24ndCBhcHBseSBwcmVzZXRcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVGFyZ2V0IHBlcmNlbnRhZ2VzIGZyb20gd2VpZ2h0cywgbm9ybWFsaXplZCB0byBhdmFpbFBjdC5cclxuXHRcdFx0Y29uc3Qgd1N1bSAgICAgID0gd2VpZ2h0cy5yZWR1Y2UoIChhLCB3KSA9PiBhICsgKE51bWJlciggdyApIHx8IDApLCAwICkgfHwgbjtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0UGN0ID0gd2VpZ2h0cy5tYXAoICh3KSA9PiAoKE51bWJlciggdyApIHx8IDApIC8gd1N1bSkgKiBhdmFpbFBjdCApO1xyXG5cclxuXHRcdFx0Ly8gTG9jayBjb2x1bW5zIHRoYXQgd291bGQgYmUgYmVsb3cgbWluLCB0aGVuIGRpc3RyaWJ1dGUgdGhlIHJlbWFpbmRlclxyXG5cdFx0XHQvLyBhY3Jvc3MgdGhlIHJlbWFpbmluZyBjb2x1bW5zIHByb3BvcnRpb25hbGx5IHRvIHRoZWlyIHRhcmdldFBjdC5cclxuXHRcdFx0Y29uc3QgbG9ja2VkICA9IG5ldyBBcnJheSggbiApLmZpbGwoIGZhbHNlICk7XHJcblx0XHRcdGxldCBsb2NrZWRTdW0gPSAwO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCB0YXJnZXRQY3RbaV0gPCBtaW5QY3RbaV0gKSB7XHJcblx0XHRcdFx0XHRsb2NrZWRbaV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0bG9ja2VkU3VtICs9IG1pblBjdFtpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCByZW1haW5pbmcgICAgID0gYXZhaWxQY3QgLSBsb2NrZWRTdW07XHJcblx0XHRcdGNvbnN0IGZyZWVJZHggICAgID0gW107XHJcblx0XHRcdGxldCBmcmVlVGFyZ2V0U3VtID0gMDtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgbjsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggIWxvY2tlZFtpXSApIHtcclxuXHRcdFx0XHRcdGZyZWVJZHgucHVzaCggaSApO1xyXG5cdFx0XHRcdFx0ZnJlZVRhcmdldFN1bSArPSB0YXJnZXRQY3RbaV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoIG4gKS5maWxsKCAwICk7XHJcblx0XHRcdC8vIFNlZWQgbG9ja2VkIHdpdGggdGhlaXIgbWluaW1hLlxyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCBsb2NrZWRbaV0gKSByZXN1bHRbaV0gPSBtaW5QY3RbaV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZnJlZUlkeC5sZW5ndGggPT09IDAgKSB7XHJcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyBsb2NrZWQgZXhhY3RseSBhdCBtaW47IGFueSBsZWZ0b3ZlciAoc2hvdWxkbid0IGhhcHBlbilcclxuXHRcdFx0XHQvLyB3b3VsZCBiZSBpZ25vcmVkIHRvIGtlZXAgc2ltcGxpY2l0eSBhbmQgc3RhYmlsaXR5LlxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggcmVtYWluaW5nIDw9IDAgKSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBsZWZ0IHRvIGRpc3RyaWJ1dGU7IGtlZXAgZXhhY3RseSBtaW5zIG9uIGxvY2tlZCxcclxuXHRcdFx0XHQvLyBub3RoaW5nIGZvciBmcmVlIChkZWdlbmVyYXRlIGJ1dCBjb25zaXN0ZW50KVxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZnJlZVRhcmdldFN1bSA8PSAwICkge1xyXG5cdFx0XHRcdC8vIGRpc3RyaWJ1dGUgZXF1YWxseSBhbW9uZyBmcmVlIGNvbHVtbnNcclxuXHRcdFx0XHRjb25zdCBlYWNoID0gcmVtYWluaW5nIC8gZnJlZUlkeC5sZW5ndGg7XHJcblx0XHRcdFx0ZnJlZUlkeC5mb3JFYWNoKCAoaSkgPT4gKHJlc3VsdFtpXSA9IGVhY2gpICk7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRGlzdHJpYnV0ZSByZW1haW5pbmcgcHJvcG9ydGlvbmFsbHkgdG8gZnJlZSBjb2x1bW5zJyB0YXJnZXRQY3RcclxuXHRcdFx0ZnJlZUlkeC5mb3JFYWNoKCAoaSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IHJlbWFpbmluZyAqICh0YXJnZXRQY3RbaV0gLyBmcmVlVGFyZ2V0U3VtKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBBcHBseSBhIHByZXNldCBidXQgZ3VhcmQgaXQgYnkgbWluaW1hOyByZXR1cm5zIHRydWUgaWYgYXBwbGllZCwgZmFsc2UgaWYgc2tpcHBlZC4gKi9cclxuXHRcdHN0YXRpYyBfYXBwbHlfcHJlc2V0X3dpdGhfbWluX2d1YXJkKGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdGlmICggIXJvdyApIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGNvbnN0IGZpdHRlZCA9IFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4oIGJ1aWxkZXIsIHJvdywgd2VpZ2h0cyApO1xyXG5cdFx0XHRpZiAoICFmaXR0ZWQgKSB7XHJcblx0XHRcdFx0YnVpbGRlcj8uX2Fubm91bmNlPy4oICdOb3QgZW5vdWdoIHNwYWNlIGZvciB0aGlzIGxheW91dCBiZWNhdXNlIG9mIGZpZWxkc+KAmSBtaW5pbXVtIHdpZHRocy4nICk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBgZml0dGVkYCBhbHJlYWR5IHN1bXMgdG8gdGhlIHJvd+KAmXMgYXZhaWxhYmxlICUsIHNvIHdlIGNhbiBhcHBseSBiYXNlcyBkaXJlY3RseS5cclxuXHRcdFx0YnVpbGRlci5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGZpdHRlZCApO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBhbmQgYXBwZW5kIGxheW91dCBjaGlwcyBmb3IgYSBzZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXIgLSBUaGUgZm9ybSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbl9lbCAtIFRoZSAud3BiY19iZmJfX3NlY3Rpb24gZWxlbWVudC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGhvc3RfZWwgLSBDb250YWluZXIgd2hlcmUgY2hpcHMgc2hvdWxkIGJlIHJlbmRlcmVkLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXJfZm9yX3NlY3Rpb24oYnVpbGRlciwgc2VjdGlvbl9lbCwgaG9zdF9lbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhYnVpbGRlciB8fCAhc2VjdGlvbl9lbCB8fCAhaG9zdF9lbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJvdyA9IHNlY3Rpb25fZWwucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb2xzID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMTtcclxuXHJcblx0XHRcdC8vIENsZWFyIGhvc3QuXHJcblx0XHRcdGhvc3RfZWwuaW5uZXJIVE1MID0gJyc7XHJcblxyXG5cdFx0XHQvLyBFcXVhbCBjaGlwLlxyXG5cdFx0XHRob3N0X2VsLmFwcGVuZENoaWxkKFxyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fbWFrZV9jaGlwKCBidWlsZGVyLCBzZWN0aW9uX2VsLCBBcnJheSggY29scyApLmZpbGwoIDEgKSwgJ0VxdWFsJyApXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyBQcmVzZXRzIGJhc2VkIG9uIGNvbHVtbiBjb3VudC5cclxuXHRcdFx0Y29uc3QgcHJlc2V0cyA9IGJ1aWxkZXIubGF5b3V0LmJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMoIGNvbHMgKTtcclxuXHRcdFx0cHJlc2V0cy5mb3JFYWNoKCAod2VpZ2h0cykgPT4ge1xyXG5cdFx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoXHJcblx0XHRcdFx0XHRVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX21ha2VfY2hpcCggYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cywgbnVsbCApXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gQ3VzdG9tIGNoaXAuXHJcblx0XHRcdGNvbnN0IGN1c3RvbUJ0biAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdidXR0b24nICk7XHJcblx0XHRcdGN1c3RvbUJ0bi50eXBlICAgICAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRjdXN0b21CdG4uY2xhc3NOYW1lICAgPSAnd3BiY19iZmJfX2xheW91dF9jaGlwJztcclxuXHRcdFx0Y3VzdG9tQnRuLnRleHRDb250ZW50ID0gJ0N1c3RvbeKApic7XHJcblx0XHRcdGN1c3RvbUJ0bi50aXRsZSAgICAgICA9IGBFbnRlciAke2NvbHN9IHBlcmNlbnRhZ2VzYDtcclxuXHRcdFx0Y3VzdG9tQnRuLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsICgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBleGFtcGxlID0gKGNvbHMgPT09IDIpID8gJzUwLDUwJyA6IChjb2xzID09PSAzID8gJzIwLDYwLDIwJyA6ICcyNSwyNSwyNSwyNScpO1xyXG5cdFx0XHRcdGNvbnN0IHRleHQgICAgPSBwcm9tcHQoIGBFbnRlciAke2NvbHN9IHBlcmNlbnRhZ2VzIChjb21tYSBvciBzcGFjZSBzZXBhcmF0ZWQpOmAsIGV4YW1wbGUgKTtcclxuXHRcdFx0XHRpZiAoIHRleHQgPT0gbnVsbCApIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCB3ZWlnaHRzID0gYnVpbGRlci5sYXlvdXQucGFyc2Vfd2VpZ2h0cyggdGV4dCApO1xyXG5cdFx0XHRcdGlmICggd2VpZ2h0cy5sZW5ndGggIT09IGNvbHMgKSB7XHJcblx0XHRcdFx0XHRhbGVydCggYFBsZWFzZSBlbnRlciBleGFjdGx5ICR7Y29sc30gbnVtYmVycy5gICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIE9MRDpcclxuXHRcdFx0XHQvLyBidWlsZGVyLmxheW91dC5hcHBseV9sYXlvdXRfcHJlc2V0KCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBidWlsZGVyLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cdFx0XHRcdC8vIEd1YXJkZWQgYXBwbHk6LlxyXG5cdFx0XHRcdGlmICggIVVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fYXBwbHlfcHJlc2V0X3dpdGhfbWluX2d1YXJkKCBidWlsZGVyLCBzZWN0aW9uX2VsLCB3ZWlnaHRzICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGhvc3RfZWwucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fbGF5b3V0X2NoaXAnICkuZm9yRWFjaCggYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1hY3RpdmUnICkgKTtcclxuXHRcdFx0XHRjdXN0b21CdG4uY2xhc3NMaXN0LmFkZCggJ2lzLWFjdGl2ZScgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRob3N0X2VsLmFwcGVuZENoaWxkKCBjdXN0b21CdG4gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhIHNpbmdsZSBsYXlvdXQgY2hpcCBidXR0b24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXJcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHNcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bGx9IGxhYmVsXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEJ1dHRvbkVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfbWFrZV9jaGlwKGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMsIGxhYmVsID0gbnVsbCkge1xyXG5cclxuXHRcdFx0Y29uc3QgYnRuICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdidXR0b24nICk7XHJcblx0XHRcdGJ0bi50eXBlICAgICAgPSAnYnV0dG9uJztcclxuXHRcdFx0YnRuLmNsYXNzTmFtZSA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAnO1xyXG5cclxuXHRcdFx0Y29uc3QgdGl0bGUgPSBsYWJlbCB8fCBidWlsZGVyLmxheW91dC5mb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICk7XHJcblx0XHRcdGJ0bi50aXRsZSAgID0gdGl0bGU7XHJcblxyXG5cdFx0XHQvLyBWaXN1YWwgbWluaWF0dXJlLlxyXG5cdFx0XHRjb25zdCB2aXMgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0dmlzLmNsYXNzTmFtZSA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAtdmlzJztcclxuXHRcdFx0Y29uc3Qgc3VtICAgICA9IHdlaWdodHMucmVkdWNlKCAoYSwgYikgPT4gYSArIChOdW1iZXIoIGIgKSB8fCAwKSwgMCApIHx8IDE7XHJcblx0XHRcdHdlaWdodHMuZm9yRWFjaCggKHcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBiYXIgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRcdGJhci5zdHlsZS5mbGV4ID0gYDAgMCBjYWxjKCAkeygoTnVtYmVyKCB3ICkgfHwgMCkgLyBzdW0gKiAxMDApLnRvRml4ZWQoIDMgKX0lIC0gMS41cHggKWA7XHJcblx0XHRcdFx0dmlzLmFwcGVuZENoaWxkKCBiYXIgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRidG4uYXBwZW5kQ2hpbGQoIHZpcyApO1xyXG5cclxuXHRcdFx0Y29uc3QgdHh0ICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7XHJcblx0XHRcdHR4dC5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAtbGFiZWwnO1xyXG5cdFx0XHR0eHQudGV4dENvbnRlbnQgPSBsYWJlbCB8fCBidWlsZGVyLmxheW91dC5mb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICk7XHJcblx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggdHh0ICk7XHJcblxyXG5cdFx0XHRidG4uYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHRcdC8vIE9MRDpcclxuXHRcdFx0XHQvLyBidWlsZGVyLmxheW91dC5hcHBseV9sYXlvdXRfcHJlc2V0KCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBidWlsZGVyLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cclxuXHRcdFx0XHQvLyBORVc6XHJcblx0XHRcdFx0aWYgKCAhVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjsgLy8gZG8gbm90IHRvZ2dsZSBhY3RpdmUgaWYgd2UgZGlkbid0IGNoYW5nZSBsYXlvdXRcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJ0bi5wYXJlbnRFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19sYXlvdXRfY2hpcCcgKS5mb3JFYWNoKCBjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLWFjdGl2ZScgKSApO1xyXG5cdFx0XHRcdGJ0bi5jbGFzc0xpc3QuYWRkKCAnaXMtYWN0aXZlJyApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gYnRuO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlbGVjdGlvbiBjb250cm9sbGVyIGZvciBmaWVsZHMgYW5kIGFubm91bmNlbWVudHMuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfU2VsZWN0aW9uX0NvbnRyb2xsZXIgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0aW5pdCgpIHtcclxuXHJcblx0XHRcdHRoaXMuX3NlbGVjdGVkX3VpZCAgICAgICAgICAgICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkICAgICAgID0gdGhpcy5zZWxlY3RfZmllbGQuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuZ2V0X3NlbGVjdGVkX2ZpZWxkID0gdGhpcy5nZXRfc2VsZWN0ZWRfZmllbGQuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl9jbGVhciAgICAgICAgICAgICAgICAgID0gdGhpcy5vbl9jbGVhci5iaW5kKCB0aGlzICk7XHJcblxyXG5cdFx0XHQvLyBDZW50cmFsaXplZCBkZWxldGUgY29tbWFuZCB1c2VkIGJ5IGtleWJvYXJkICsgaW5zcGVjdG9yICsgb3ZlcmxheS5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmRlbGV0ZV9pdGVtID0gKGVsKSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYiAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdFx0Y29uc3QgbmVpZ2hib3IgPSBiLl9maW5kX25laWdoYm9yX3NlbGVjdGFibGU/LiggZWwgKSB8fCBudWxsO1xyXG5cdFx0XHRcdGVsLnJlbW92ZSgpO1xyXG5cdFx0XHRcdC8vIFVzZSBsb2NhbCBDb3JlIGNvbnN0YW50cyAobm90IGEgZ2xvYmFsKSB0byBhdm9pZCBSZWZlcmVuY2VFcnJvcnMuXHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuRklFTERfUkVNT1ZFLCB7IGVsLCBpZDogZWw/LmRhdGFzZXQ/LmlkLCB1aWQ6IGVsPy5kYXRhc2V0Py51aWQgfSApO1xyXG5cdFx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0XHQvLyBOb3RpZnkgZ2VuZXJpYyBzdHJ1Y3R1cmUgbGlzdGVuZXJzLCB0b286XHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0NIQU5HRSwgeyByZWFzb246ICdkZWxldGUnLCBlbCB9ICk7XHJcblx0XHRcdFx0Ly8gRGVmZXIgc2VsZWN0aW9uIGEgdGljayBzbyB0aGUgRE9NIGlzIGZ1bGx5IHNldHRsZWQgYmVmb3JlIEluc3BlY3RvciBoeWRyYXRlcy5cclxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRcdC8vIFRoaXMgY2FsbHMgaW5zcGVjdG9yLmJpbmRfdG9fZmllbGQoKSBhbmQgb3BlbnMgdGhlIEluc3BlY3RvciBwYW5lbC5cclxuXHRcdFx0XHRcdGIuc2VsZWN0X2ZpZWxkPy4oIG5laWdoYm9yIHx8IG51bGwsIHsgc2Nyb2xsSW50b1ZpZXc6ICEhbmVpZ2hib3IgfSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gbmVpZ2hib3I7XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub24oIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5vbiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0Ly8gZGVsZWdhdGVkIGNsaWNrIHNlbGVjdGlvbiAoY2FwdHVyZSBlbnN1cmVzIHdlIHdpbiBiZWZvcmUgYnViYmxpbmcgdG8gY29udGFpbmVycykuXHJcblx0XHRcdHRoaXMuX29uX2NhbnZhc19jbGljayA9IHRoaXMuX2hhbmRsZV9jYW52YXNfY2xpY2suYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2NhbnZhc19jbGljaywgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub2ZmKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5DTEVBUl9TRUxFQ1RJT04sIHRoaXMuX29uX2NsZWFyICk7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX29uX2NhbnZhc19jbGljayApIHtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2NhbnZhc19jbGljaywgdHJ1ZSApO1xyXG5cdFx0XHRcdHRoaXMuX29uX2NhbnZhc19jbGljayA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlbGVnYXRlZCBjYW52YXMgY2xpY2sgLT4gc2VsZWN0IGNsb3Nlc3QgZmllbGQvc2VjdGlvbiAoaW5uZXIgYmVhdHMgb3V0ZXIpLlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7TW91c2VFdmVudH0gZVxyXG5cdFx0ICovXHJcblx0XHRfaGFuZGxlX2NhbnZhc19jbGljayhlKSB7XHJcblx0XHRcdGNvbnN0IHJvb3QgPSB0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHRpZiAoICFyb290ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gSWdub3JlIGNsaWNrcyBvbiBjb250cm9scy9oYW5kbGVzL3Jlc2l6ZXJzLCBldGMuXHJcblx0XHRcdGNvbnN0IElHTk9SRSA9IFtcclxuXHRcdFx0XHQnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19sYXlvdXRfcGlja2VyJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19kcmFnLWhhbmRsZScsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtcmVtb3ZlLWJ0bicsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtbW92ZS11cCcsXHJcblx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQtbW92ZS1kb3duJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19jb2x1bW4tcmVzaXplcidcclxuXHRcdFx0XS5qb2luKCAnLCcgKTtcclxuXHJcblx0XHRcdGlmICggZS50YXJnZXQuY2xvc2VzdCggSUdOT1JFICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuOyAvLyBsZXQgdGhvc2UgY29udHJvbHMgZG8gdGhlaXIgb3duIHRoaW5nLlxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGaW5kIHRoZSBjbG9zZXN0IHNlbGVjdGFibGUgKGZpZWxkIE9SIHNlY3Rpb24pIGZyb20gdGhlIGNsaWNrIHRhcmdldC5cclxuXHRcdFx0bGV0IGhpdCA9IGUudGFyZ2V0LmNsb3Nlc3Q/LihcclxuXHRcdFx0XHRgJHtDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMudmFsaWRGaWVsZH0sICR7Q29yZS5XUEJDX0JGQl9ET00uU0VMRUNUT1JTLnNlY3Rpb259LCAud3BiY19iZmJfX2NvbHVtbmBcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmICggIWhpdCB8fCAhcm9vdC5jb250YWlucyggaGl0ICkgKSB7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RfZmllbGQoIG51bGwgKTsgICAgICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiBvbiBibGFuayBjbGljay5cclxuXHRcdFx0XHRyZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgc3BhY2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogaWYgdXNlciBjbGlja2VkIGEgQ09MVU1OIC0+IHJlbWVtYmVyIHRhYiBrZXkgb24gaXRzIFNFQ1RJT04sIGJ1dCBzdGlsbCBzZWxlY3QgdGhlIHNlY3Rpb24uXHJcblx0XHRcdGxldCBwcmVzZWxlY3RfdGFiX2tleSA9IG51bGw7XHJcblx0XHRcdGlmICggaGl0LmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgKSB7XHJcblx0XHRcdFx0Y29uc3Qgcm93ICA9IGhpdC5jbG9zZXN0KCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0Y29uc3QgY29scyA9IHJvdyA/IEFycmF5LmZyb20oIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19jb2x1bW4nICkgKSA6IFtdO1xyXG5cdFx0XHRcdGNvbnN0IGlkeCAgPSBNYXRoLm1heCggMCwgY29scy5pbmRleE9mKCBoaXQgKSApO1xyXG5cdFx0XHRcdGNvbnN0IHNlYyAgPSBoaXQuY2xvc2VzdCggJy53cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0XHRpZiAoIHNlYyApIHtcclxuXHRcdFx0XHRcdHByZXNlbGVjdF90YWJfa2V5ID0gU3RyaW5nKCBpZHggKyAxICk7ICAgICAgICAgICAgICAvLyB0YWJzIGFyZSAxLWJhc2VkIGluIHVpLWNvbHVtbi1zdHlsZXMuanNcclxuXHRcdFx0XHRcdC8vIEhpbnQgZm9yIHRoZSByZW5kZXJlciAoaXQgcmVhZHMgdGhpcyBCRUZPUkUgcmVuZGVyaW5nIGFuZCByZXN0b3JlcyB0aGUgdGFiKS5cclxuXHRcdFx0XHRcdHNlYy5kYXRhc2V0LmNvbF9zdHlsZXNfYWN0aXZlX3RhYiA9IHByZXNlbGVjdF90YWJfa2V5O1xyXG5cdFx0XHRcdFx0Ly8gcHJvbW90ZSBzZWxlY3Rpb24gdG8gdGhlIHNlY3Rpb24gKHNhbWUgVVggYXMgYmVmb3JlKS5cclxuXHRcdFx0XHRcdGhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNlYztcclxuXHRcdFx0XHRcdC8vIE5FVzogdmlzdWFsbHkgbWFyayB3aGljaCBjb2x1bW4gaXMgYmVpbmcgZWRpdGVkXHJcblx0XHRcdFx0XHRpZiAoIFVJICYmIFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMgJiYgVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcgKSB7XHJcblx0XHRcdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuc2V0X3NlbGVjdGVkX2NvbF9mbGFnKCBzZWMsIHByZXNlbGVjdF90YWJfa2V5ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZWxlY3QgYW5kIHN0b3AgYnViYmxpbmcgc28gb3V0ZXIgY29udGFpbmVycyBkb27igJl0IHJlc2VsZWN0IGEgcGFyZW50LlxyXG5cdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggaGl0ICk7XHJcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHQvLyBBbHNvIHNldCB0aGUgdGFiIGFmdGVyIHRoZSBpbnNwZWN0b3IgcmVuZGVycyAod29ya3MgZXZlbiBpZiBpdCB3YXMgYWxyZWFkeSBvcGVuKS5cclxuXHRcdFx0aWYgKCBwcmVzZWxlY3RfdGFiX2tleSApIHtcclxuXHRcdFx0XHQod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBzZXRUaW1lb3V0KSggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5zICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdGFicyA9IGlucyAmJiBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwiY29sdW1uX3N0eWxlc1wiXSBbZGF0YS13cGJjLXRhYnNdJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRhYnMgJiYgd2luZG93LndwYmNfdWlfdGFicyAmJiB0eXBlb2Ygd2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSggdGFicywgcHJlc2VsZWN0X3RhYl9rZXkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIDAgKTtcclxuXHJcblx0XHRcdFx0Ly8gUG9saXRlbHkgYXNrIHRoZSBJbnNwZWN0b3IgdG8gZm9jdXMvb3BlbiB0aGUgXCJDb2x1bW4gU3R5bGVzXCIgZ3JvdXAgYW5kIHRhYi5cclxuXHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdCd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRncm91cCAgOiAnY29sdW1uX3N0eWxlcycsXHJcblx0XHRcdFx0XHRcdHRhYl9rZXk6IHByZXNlbGVjdF90YWJfa2V5XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNlbGVjdCBhIGZpZWxkIGVsZW1lbnQgb3IgY2xlYXIgc2VsZWN0aW9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8bnVsbH0gZmllbGRfZWxcclxuXHRcdCAqIEBwYXJhbSB7e3Njcm9sbEludG9WaWV3PzogYm9vbGVhbn19IFtvcHRzID0ge31dXHJcblx0XHQgKi9cclxuXHRcdHNlbGVjdF9maWVsZChmaWVsZF9lbCwgeyBzY3JvbGxJbnRvVmlldyA9IGZhbHNlIH0gPSB7fSkge1xyXG5cdFx0XHRjb25zdCByb290ICAgPSB0aGlzLmJ1aWxkZXIucGFnZXNfY29udGFpbmVyO1xyXG5cdFx0XHRjb25zdCBwcmV2RWwgPSB0aGlzLmdldF9zZWxlY3RlZF9maWVsZD8uKCkgfHwgbnVsbDsgICAvLyB0aGUgb25lIHdl4oCZcmUgbGVhdmluZy5cclxuXHJcblx0XHRcdC8vIElnbm9yZSBlbGVtZW50cyBub3QgaW4gdGhlIGNhbnZhcy5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbCAmJiAhcm9vdC5jb250YWlucyggZmllbGRfZWwgKSApIHtcclxuXHRcdFx0XHRmaWVsZF9lbCA9IG51bGw7IC8vIHRyZWF0IGFzIFwibm8gc2VsZWN0aW9uXCIuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogaWYgd2UgYXJlIGxlYXZpbmcgYSBzZWN0aW9uLCBjbGVhciBpdHMgY29sdW1uIGhpZ2hsaWdodFxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0cHJldkVsICYmIHByZXZFbCAhPT0gZmllbGRfZWwgJiZcclxuXHRcdFx0XHRwcmV2RWwuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmXHJcblx0XHRcdFx0VUk/LldQQkNfQkZCX0NvbHVtbl9TdHlsZXM/LmNsZWFyX3NlbGVjdGVkX2NvbF9mbGFnXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWcoIHByZXZFbCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiB3ZSdyZSBsZWF2aW5nIGEgZmllbGQsIHBlcm1hbmVudGx5IHN0b3AgYXV0by1uYW1lIGZvciBpdC5cclxuXHRcdFx0aWYgKCBwcmV2RWwgJiYgcHJldkVsICE9PSBmaWVsZF9lbCAmJiBwcmV2RWwuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRwcmV2RWwuZGF0YXNldC5hdXRvbmFtZSA9ICcwJztcclxuXHRcdFx0XHRwcmV2RWwuZGF0YXNldC5mcmVzaCAgICA9ICcwJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLmlzLXNlbGVjdGVkJyApLmZvckVhY2goIChuKSA9PiB7XHJcblx0XHRcdFx0bi5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtc2VsZWN0ZWQnICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aWYgKCAhZmllbGRfZWwgKSB7XHJcblx0XHRcdFx0Y29uc3QgcHJldiAgICAgICAgID0gdGhpcy5fc2VsZWN0ZWRfdWlkIHx8IG51bGw7XHJcblx0XHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkID0gbnVsbDtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuaW5zcGVjdG9yPy5jbGVhcj8uKCk7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QucmVtb3ZlKCAnaGFzLXNlbGVjdGlvbicgKTtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzLmVtaXQoIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgeyBwcmV2X3VpZDogcHJldiwgc291cmNlOiAnYnVpbGRlcicgfSApO1xyXG5cclxuXHRcdFx0XHQvLyBBdXRvLW9wZW4gXCJBZGQgRmllbGRzXCIgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19wYWxldHRlX2FkZF9uZXcnLFxyXG5cdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2xpYnJhcnknXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZpZWxkX2VsLmNsYXNzTGlzdC5hZGQoICdpcy1zZWxlY3RlZCcgKTtcclxuXHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkID0gZmllbGRfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS11aWQnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBlbnN1cmUgc2VjdGlvbnMgYW5ub3VuY2UgdGhlbXNlbHZlcyBhcyB0eXBlPVwic2VjdGlvblwiLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmICFmaWVsZF9lbC5kYXRhc2V0LnR5cGUgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwuZGF0YXNldC50eXBlID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNjcm9sbEludG9WaWV3ICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsLnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5zcGVjdG9yPy5iaW5kX3RvX2ZpZWxkPy4oIGZpZWxkX2VsICk7XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjazogZW5zdXJlIGluc3BlY3RvciBlbmhhbmNlcnMgKGluY2wuIFZhbHVlU2xpZGVyKSBydW4gZXZlcnkgYmluZC5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InIClcclxuXHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRpZiAoIGlucyApIHtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2Vycz8uc2Nhbj8uKCBpbnMgKTsgICAgICAgICAgICAgIC8vIHJ1bnMgYWxsIGVuaGFuY2Vyc1xyXG5cdFx0XHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXI/LmluaXRfb24/LiggaW5zICk7ICAgICAgICAgLy8gZXh0cmEgYmVsdC1hbmQtc3VzcGVuZGVyc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogd2hlbiBzZWxlY3RpbmcgYSBzZWN0aW9uLCByZWZsZWN0IGl0cyBhY3RpdmUgdGFiIGFzIHRoZSBoaWdobGlnaHRlZCBjb2x1bW4uXHJcblx0XHRcdGlmICggZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiZcclxuXHRcdFx0XHRVST8uV1BCQ19CRkJfQ29sdW1uX1N0eWxlcz8uc2V0X3NlbGVjdGVkX2NvbF9mbGFnICkge1xyXG5cdFx0XHRcdHZhciBrID0gKGZpZWxkX2VsLmRhdGFzZXQgJiYgZmllbGRfZWwuZGF0YXNldC5jb2xfc3R5bGVzX2FjdGl2ZV90YWIpXHJcblx0XHRcdFx0XHQ/IGZpZWxkX2VsLmRhdGFzZXQuY29sX3N0eWxlc19hY3RpdmVfdGFiIDogJzEnO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuc2V0X3NlbGVjdGVkX2NvbF9mbGFnKCBmaWVsZF9lbCwgayApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBLZWVwIHNlY3Rpb25zICYgZmllbGRzIGluIHRoZSBzYW1lIGZsb3c6XHJcblx0XHRcdC8vIDEpIEdlbmVyaWMgaHlkcmF0b3IgZm9yIHNpbXBsZSBkYXRhc2V0LWJhY2tlZCBjb250cm9scy5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbCApIHtcclxuXHRcdFx0XHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfQnJpZGdlLl9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHM/LiggdGhpcy5idWlsZGVyLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UuX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scz8uKCB0aGlzLmJ1aWxkZXIsIGZpZWxkX2VsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEF1dG8tb3BlbiBJbnNwZWN0b3Igd2hlbiBhIHVzZXIgc2VsZWN0cyBhIGZpZWxkL3NlY3Rpb24gLlxyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdHRhYl9pZCAgOiAnd3BiY190YWJfaW5zcGVjdG9yJ1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJvb3QuY2xhc3NMaXN0LmFkZCggJ2hhcy1zZWxlY3Rpb24nICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuU0VMRUNULCB7IHVpZDogdGhpcy5fc2VsZWN0ZWRfdWlkLCBlbDogZmllbGRfZWwgfSApO1xyXG5cdFx0XHRjb25zdCBsYWJlbCA9IGZpZWxkX2VsPy5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19maWVsZC1sYWJlbCcgKT8udGV4dENvbnRlbnQgfHwgKGZpZWxkX2VsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApID8gJ3NlY3Rpb24nIDogJycpIHx8IGZpZWxkX2VsPy5kYXRhc2V0Py5pZCB8fCAnaXRlbSc7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5fYW5ub3VuY2UoICdTZWxlY3RlZCAnICsgbGFiZWwgKyAnLicgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9ICovXHJcblx0XHRnZXRfc2VsZWN0ZWRfZmllbGQoKSB7XHJcblx0XHRcdGlmICggIXRoaXMuX3NlbGVjdGVkX3VpZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBlc2NfYXR0ciA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB0aGlzLl9zZWxlY3RlZF91aWQgKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvciggYC53cGJjX2JmYl9fZmllbGRbZGF0YS11aWQ9XCIke2VzY19hdHRyfVwiXSwgLndwYmNfYmZiX19zZWN0aW9uW2RhdGEtdWlkPVwiJHtlc2NfYXR0cn1cIl1gICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGV2ICovXHJcblx0XHRvbl9jbGVhcihldikge1xyXG5cdFx0XHRjb25zdCBzcmMgPSBldj8uZGV0YWlsPy5zb3VyY2UgPz8gZXY/LnNvdXJjZTtcclxuXHRcdFx0aWYgKCBzcmMgIT09ICdidWlsZGVyJyApIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggbnVsbCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJyaWRnZXMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgSW5zcGVjdG9yIGFuZCBzYW5pdGl6ZXMgaWQvbmFtZSBlZGl0cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfQnJpZGdlID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuX2F0dGFjaF9pbnNwZWN0b3IoKTtcclxuXHRcdFx0dGhpcy5fYmluZF9pZF9zYW5pdGl6ZXIoKTtcclxuXHRcdFx0dGhpcy5fb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQoKTtcclxuXHRcdFx0dGhpcy5fYmluZF9mb2N1c19zaG9ydGN1dHMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfYXR0YWNoX2luc3BlY3RvcigpIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBhdHRhY2ggPSAoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0luc3BlY3RvciA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdGIuaW5zcGVjdG9yID0gbmV3IFdQQkNfQkZCX0luc3BlY3RvciggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApLCBiICk7XHJcblx0XHRcdFx0XHR0aGlzLl9iaW5kX2lkX3Nhbml0aXplcigpO1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIGF0dGFjaCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRW5zdXJlIHdlIGJpbmQgYWZ0ZXIgbGF0ZSByZWFkeSBhcyB3ZWxsLlxyXG5cdFx0XHRpZiAoIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfSW5zcGVjdG9yID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGF0dGFjaCgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGIuaW5zcGVjdG9yID0ge1xyXG5cdFx0XHRcdFx0YmluZF90b19maWVsZCgpIHtcclxuXHRcdFx0XHRcdH0sIGNsZWFyKCkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIGF0dGFjaCApO1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoIGF0dGFjaCwgMCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBMaXN0ZW4gZm9yIFwiZm9jdXNcIiBoaW50cyBmcm9tIHRoZSBjYW52YXMgYW5kIG9wZW4gdGhlIHJpZ2h0IGdyb3VwL3RhYi5cclxuXHRcdCAqIC0gU3VwcG9ydHM6IGdyb3VwID09PSAnY29sdW1uX3N0eWxlcydcclxuXHRcdCAqIC0gQWxzbyBzY3JvbGxzIHRoZSBncm91cCBpbnRvIHZpZXcuXHJcblx0XHQgKi9cclxuXHRcdF9iaW5kX2ZvY3VzX3Nob3J0Y3V0cygpIHtcclxuXHRcdFx0LyoqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGUgKi9cclxuXHRcdFx0Y29uc3Qgb25fZm9jdXMgPSAoZSkgPT4ge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBncnBfa2V5ID0gZSAmJiBlLmRldGFpbCAmJiBlLmRldGFpbC5ncm91cDtcclxuXHRcdFx0XHRcdGNvbnN0IHRhYl9rZXkgPSBlICYmIGUuZGV0YWlsICYmIGUuZGV0YWlsLnRhYl9rZXk7XHJcblx0XHRcdFx0XHRpZiAoICFncnBfa2V5ICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGlmICggIWlucyApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICggZ3JwX2tleSA9PT0gJ2NvbHVtbl9zdHlsZXMnICkge1xyXG5cdFx0XHRcdFx0XHQvLyBGaW5kIHRoZSBDb2x1bW4gU3R5bGVzIHNsb3QvZ3JvdXAuXHJcblx0XHRcdFx0XHRcdGNvbnN0IHNsb3QgPSBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwiY29sdW1uX3N0eWxlc1wiXScgKSB8fCBpbnMucXVlcnlTZWxlY3RvciggJ1tkYXRhLWluc3BlY3Rvci1ncm91cC1rZXk9XCJjb2x1bW5fc3R5bGVzXCJdJyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHNsb3QgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gT3BlbiBjb2xsYXBzaWJsZSBjb250YWluZXIgaWYgcHJlc2VudC5cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBncm91cF93cmFwID0gc2xvdC5jbG9zZXN0KCAnLmluc3BlY3Rvcl9fZ3JvdXAnICkgfHwgc2xvdC5jbG9zZXN0KCAnW2RhdGEtaW5zcGVjdG9yLWdyb3VwXScgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGdyb3VwX3dyYXAgJiYgIWdyb3VwX3dyYXAuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtb3BlbicgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwX3dyYXAuY2xhc3NMaXN0LmFkZCggJ2lzLW9wZW4nICk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBNaXJyb3IgQVJJQSBzdGF0ZSBpZiB5b3VyIGhlYWRlciB1c2VzIGFyaWEtZXhwYW5kZWQuXHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoZWFkZXJfYnRuID0gZ3JvdXBfd3JhcC5xdWVyeVNlbGVjdG9yKCAnW2FyaWEtZXhwYW5kZWRdJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBoZWFkZXJfYnRuICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRoZWFkZXJfYnRuLnNldEF0dHJpYnV0ZSggJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsOiBzZXQgdGhlIHJlcXVlc3RlZCB0YWIga2V5IGlmIHRhYnMgZXhpc3QgaW4gdGhpcyBncm91cC5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIHRhYl9rZXkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0YWJzID0gc2xvdC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy10YWJzXScgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggdGFicyAmJiB3aW5kb3cud3BiY191aV90YWJzICYmIHR5cGVvZiB3aW5kb3cud3BiY191aV90YWJzLnNldF9hY3RpdmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSggdGFicywgU3RyaW5nKCB0YWJfa2V5ICkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEJyaW5nIGludG8gdmlldyBmb3IgY29udmVuaWVuY2UuXHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFVuY29tbWVudCAoT25seSAgaWYgbmVlZGVkKSB0aGlzIHRvIEFVVE8gU0NST0xMIHRvICBzcGVjaWZpYyBDT0xVTU4gaW4gdGhlIHNlY3Rpb246LlxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2xvdC5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSApO1xyXG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dGhpcy5fb25faW5zcGVjdG9yX2ZvY3VzID0gb25fZm9jdXM7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLCBvbl9mb2N1cywgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgKSB7XHJcblx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnd3BiY19iZmI6aW5zcGVjdG9yX2ZvY3VzJywgdGhpcy5fb25faW5zcGVjdG9yX2ZvY3VzLCB0cnVlICk7XHJcblx0XHRcdFx0XHR0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSHlkcmF0ZSBpbnNwZWN0b3IgaW5wdXRzIGZvciBcInNwZWNpYWxcIiBrZXlzIHRoYXQgd2UgaGFuZGxlIGV4cGxpY2l0bHkuXHJcblx0XHQgKiBXb3JrcyBmb3IgYm90aCBmaWVsZHMgYW5kIHNlY3Rpb25zLlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VsXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfaHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzKGJ1aWxkZXIsIHNlbCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGlmICggIWlucyB8fCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2V0VmFsID0gKGtleSwgdmFsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3RybCA9IGlucy5xdWVyeVNlbGVjdG9yKCBgW2RhdGEtaW5zcGVjdG9yLWtleT1cIiR7a2V5fVwiXWAgKTtcclxuXHRcdFx0XHRpZiAoIGN0cmwgJiYgJ3ZhbHVlJyBpbiBjdHJsICkgY3RybC52YWx1ZSA9IFN0cmluZyggdmFsID8/ICcnICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBJbnRlcm5hbCBpZCAvIG5hbWUgLyBwdWJsaWMgaHRtbF9pZC5cclxuXHRcdFx0c2V0VmFsKCAnaWQnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnJyApO1xyXG5cdFx0XHRzZXRWYWwoICduYW1lJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSB8fCAnJyApO1xyXG5cdFx0XHRzZXRWYWwoICdodG1sX2lkJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKSB8fCAnJyApO1xyXG5cclxuXHRcdFx0Ly8gU2VjdGlvbi1vbmx5IGV4dHJhcyBhcmUgaGFybWxlc3MgdG8gc2V0IGZvciBmaWVsZHMgKGNvbnRyb2xzIG1heSBub3QgZXhpc3QpLlxyXG5cdFx0XHRzZXRWYWwoICdjc3NjbGFzcycsIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ2xhYmVsJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnICkgfHwgJycgKTtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIeWRyYXRlIGluc3BlY3RvciBpbnB1dHMgdGhhdCBkZWNsYXJlIGEgZ2VuZXJpYyBkYXRhc2V0IG1hcHBpbmcgdmlhXHJcblx0XHQgKiBbZGF0YS1pbnNwZWN0b3Ita2V5XSBidXQgZG8gTk9UIGRlY2xhcmUgYSBjdXN0b20gdmFsdWVfZnJvbSBhZGFwdGVyLlxyXG5cdFx0ICogVGhpcyBtYWtlcyBzZWN0aW9ucyBmb2xsb3cgdGhlIHNhbWUgZGF0YSBmbG93IGFzIGZpZWxkcyB3aXRoIGFsbW9zdCBubyBnbHVlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXJcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlbCAtIGN1cnJlbnRseSBzZWxlY3RlZCBmaWVsZC9zZWN0aW9uXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfZ2VuZXJpY19oeWRyYXRlX2NvbnRyb2xzKGJ1aWxkZXIsIHNlbCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGlmICggIWlucyB8fCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgU0tJUCA9IC9eKGlkfG5hbWV8aHRtbF9pZHxjc3NjbGFzc3xsYWJlbCkkLzsgLy8gaGFuZGxlZCBieSBfaHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzXHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgc2NoZW1hIGZvciB0aGUgc2VsZWN0ZWQgZWxlbWVudOKAmXMgdHlwZS5cclxuXHRcdFx0Y29uc3Qgc2NoZW1hcyAgICAgPSB3aW5kb3cuV1BCQ19CRkJfU2NoZW1hcyB8fCB7fTtcclxuXHRcdFx0Y29uc3QgdHlwZUtleSAgICAgPSAoc2VsLmRhdGFzZXQgJiYgc2VsLmRhdGFzZXQudHlwZSkgfHwgJyc7XHJcblx0XHRcdGNvbnN0IHNjaGVtYUVudHJ5ID0gc2NoZW1hc1t0eXBlS2V5XSB8fCBudWxsO1xyXG5cdFx0XHRjb25zdCBwcm9wc1NjaGVtYSA9IChzY2hlbWFFbnRyeSAmJiBzY2hlbWFFbnRyeS5zY2hlbWEgJiYgc2NoZW1hRW50cnkuc2NoZW1hLnByb3BzKSA/IHNjaGVtYUVudHJ5LnNjaGVtYS5wcm9wcyA6IHt9O1xyXG5cdFx0XHRjb25zdCBoYXNPd24gICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgKTtcclxuXHRcdFx0Y29uc3QgZ2V0RGVmYXVsdCAgPSAoa2V5KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWV0YSA9IHByb3BzU2NoZW1hW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIChtZXRhICYmIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkpID8gbWV0YS5kZWZhdWx0IDogdW5kZWZpbmVkO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aW5zLnF1ZXJ5U2VsZWN0b3JBbGwoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKS5mb3JFYWNoKCAoY3RybCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyggY3RybC5kYXRhc2V0Py5pbnNwZWN0b3JLZXkgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggIWtleSB8fCBTS0lQLnRlc3QoIGtleSApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBFbGVtZW50LWxldmVsIGxvY2suXHJcblx0XHRcdFx0Y29uc3QgZGwgPSAoY3RybC5kYXRhc2V0Py5sb2NrZWQgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICggZGwgPT09ICcxJyB8fCBkbCA9PT0gJ3RydWUnIHx8IGRsID09PSAneWVzJyApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gUmVzcGVjdCBleHBsaWNpdCBhZGFwdGVycy5cclxuXHRcdFx0XHRpZiAoIGN0cmwuZGF0YXNldD8udmFsdWVfZnJvbSB8fCBjdHJsLmRhdGFzZXQ/LnZhbHVlRnJvbSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgcmF3ICAgICAgPSBzZWwuZGF0YXNldCA/IHNlbC5kYXRhc2V0W2tleV0gOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0Y29uc3QgaGFzUmF3ICAgPSBzZWwuZGF0YXNldCA/IGhhc093biggc2VsLmRhdGFzZXQsIGtleSApIDogZmFsc2U7XHJcblx0XHRcdFx0Y29uc3QgZGVmVmFsdWUgPSBnZXREZWZhdWx0KCBrZXkgKTtcclxuXHJcblx0XHRcdFx0Ly8gQmVzdC1lZmZvcnQgY29udHJvbCB0eXBpbmcgd2l0aCBzY2hlbWEgZGVmYXVsdCBmYWxsYmFjayB3aGVuIHZhbHVlIGlzIGFic2VudC5cclxuXHJcblx0XHRcdFx0aWYgKCBjdHJsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiAoY3RybC50eXBlID09PSAnY2hlY2tib3gnIHx8IGN0cmwudHlwZSA9PT0gJ3JhZGlvJykgKSB7XG5cdFx0XHRcdFx0Ly8gSWYgZGF0YXNldCBpcyBtaXNzaW5nIHRoZSBrZXkgZW50aXJlbHkgLT4gdXNlIHNjaGVtYSBkZWZhdWx0IChib29sZWFuKS5cblx0XHRcdFx0XHRpZiAoICFoYXNSYXcgKSB7XG5cdFx0XHRcdFx0XHRjdHJsLmNoZWNrZWQgPSAhIWRlZlZhbHVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBBbiBleHBsaWNpdCBlbXB0eSB2YWx1ZSBpcyB0aGUgbGVnYWN5IHBlcnNpc3RlZCByZXByZXNlbnRhdGlvbiBvZiBmYWxzZS5cblx0XHRcdFx0XHRcdGN0cmwuY2hlY2tlZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIHJhdywgZmFsc2UgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoICd2YWx1ZScgaW4gY3RybCApIHtcclxuXHRcdFx0XHRcdGlmICggaGFzUmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjdHJsLnZhbHVlID0gKHJhdyAhPSBudWxsKSA/IFN0cmluZyggcmF3ICkgOiAnJztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGN0cmwudmFsdWUgPSAoZGVmVmFsdWUgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggZGVmVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfYmluZF9pZF9zYW5pdGl6ZXIoKSB7XHJcblx0XHRcdGNvbnN0IGIgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICEgaW5zICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucy5fX3dwYmNfYmZiX2lkX3Nhbml0aXplcl9ib3VuZCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zLl9fd3BiY19iZmJfaWRfc2FuaXRpemVyX2JvdW5kID0gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xyXG5cclxuXHRcdFx0XHRjb25zdCB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0aWYgKCAhdCB8fCAhKCd2YWx1ZScgaW4gdCkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGtleSAgICAgICA9ICh0LmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRjb25zdCBzZWwgICAgICAgPSBiLmdldF9zZWxlY3RlZF9maWVsZD8uKCk7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gc2VsPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblx0XHRcdFx0aWYgKCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBVbmlmaWVkIGVtaXR0ZXIgdGhhdCBhbHdheXMgaW5jbHVkZXMgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG5cdFx0XHRcdGNvbnN0IEVWICAgICAgICAgICAgICA9IENvcmUuV1BCQ19CRkJfRXZlbnRzO1xyXG5cdFx0XHRcdC8vIFNUUlVDVFVSRV9DSEFOR0UgY2FuIGJlIFwiZXhwZW5zaXZlXCIgYmVjYXVzZSBvdGhlciBsaXN0ZW5lcnMgbWF5IHRyaWdnZXIgZnVsbCBjYW52YXMgcmVmcmVzaC5cclxuXHRcdFx0XHQvLyBEZWJvdW5jZSBvbmx5IGNvbnRpbnVvdXMgY29udHJvbHMgKGUuZy4gdmFsdWUgc2xpZGVyIHNjcnViYmluZykgb24gdGhlIElOUFVUIHBoYXNlLlxyXG5cdFx0XHRcdGNvbnN0IGVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGlmICggYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Yi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlID0geyB0aW1lcl9pZDogMCwgcGVuZGluZ19wYXlsb2FkOiBudWxsIH07XHJcblx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0aWYgKCAhc3QgKSByZXR1cm47XHJcblx0XHRcdFx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIHN0LnRpbWVyX2lkICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0XHRcdHN0LnRpbWVyX2lkICAgICAgICA9IDA7XHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSBudWxsO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1c19lbWl0X2NoYW5nZSA9IChyZWFzb24sIGV4dHJhID0ge30pID0+IHtcclxuXHRcdFx0XHRcdC8vIElmIHdl4oCZcmUgY29tbWl0dGluZyBzb21ldGhpbmcgKGNoYW5nZS9ibHVyL2V0YyksIGRyb3AgYW55IHBlbmRpbmcgXCJpbnB1dFwiIGVtaXQuXHJcblx0XHRcdFx0XHRjYW5jZWxfc2NfZGVib3VuY2VkX2VtaXQoKTtcclxuXHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHsgcmVhc29uLCBlbDogc2VsLCAuLi5leHRyYSB9ICk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYnVzX2VtaXRfY2hhbmdlX2RlYm91bmNlZCA9IChyZWFzb24sIGV4dHJhID0ge30sIHdhaXRfbXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gZW5zdXJlX3NjX2RlYm91bmNlX3N0YXRlKCk7XHJcblx0XHRcdFx0XHRjb25zdCBtcyA9IE51bWJlci5pc0Zpbml0ZSggd2FpdF9tcyApXHJcblx0XHRcdFx0XHRcdD8gd2FpdF9tc1xyXG5cdFx0XHRcdFx0XHQ6IChOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAyNDApO1xyXG5cclxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIENVUlJFTlQgc2VsZWN0ZWQgZWxlbWVudCBpbnRvIHRoZSBwYXlsb2FkIG5vdyAoc3RhYmxlIHJlZikuXHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSB7IHJlYXNvbiwgZWw6IHNlbCwgLi4uZXh0cmEsIGRlYm91bmNlZDogdHJ1ZSB9O1xyXG5cclxuXHRcdFx0XHRcdHRyeSB7IGNsZWFyVGltZW91dCggc3QudGltZXJfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdFx0c3QudGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHN0LnRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHN0LnBlbmRpbmdfcGF5bG9hZDtcclxuXHRcdFx0XHRcdFx0c3QucGVuZGluZ19wYXlsb2FkID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0aWYgKCBwYXlsb2FkICkge1xyXG5cdFx0XHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHBheWxvYWQgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgbXMgKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEL1NFQ1RJT046IGludGVybmFsIGlkIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2lkJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSA9IGIuaWQuc2V0X2ZpZWxkX2lkKCBzZWwsIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgJiYgIWlzU2VjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHtcclxuXHRcdFx0XHRcdFx0dC52YWx1ZSA9IHVuaXF1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2lkLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gRklFTEQvU0VDVElPTjogcHVibGljIEhUTUwgaWQgLS0tLVxyXG5cdFx0XHRcdGlmICgga2V5ID09PSAnaHRtbF9pZCcgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBhcHBsaWVkID0gYi5pZC5zZXRfZmllbGRfaHRtbF9pZCggc2VsLCB0LnZhbHVlICk7XHJcblx0XHRcdFx0XHQvLyBGb3Igc2VjdGlvbnMsIGFsc28gc2V0IHRoZSByZWFsIERPTSBpZCBzbyBhbmNob3JzL0NTUyBjYW4gdGFyZ2V0IGl0LlxyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdHNlbC5pZCA9IGFwcGxpZWQgfHwgJyc7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBiLnByZXZpZXdfbW9kZSApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IGFwcGxpZWQgKSB7XHJcblx0XHRcdFx0XHRcdHQudmFsdWUgPSBhcHBsaWVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnaHRtbC1pZC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEUyBPTkxZOiBuYW1lIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ25hbWUnICYmICFpc1NlY3Rpb24gKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTGl2ZSB0eXBpbmc6IHNhbml0aXplIG9ubHkgKE5PIHVuaXF1ZW5lc3MgeWV0KSB0byBhdm9pZCBcIi0yXCIgc3BhbVxyXG5cdFx0XHRcdFx0aWYgKCBlLnR5cGUgPT09ICdpbnB1dCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJlZm9yZSAgICA9IHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCBiZWZvcmUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBiZWZvcmUgIT09IHNhbml0aXplZCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBvcHRpb25hbDogcHJlc2VydmUgY2FyZXQgdG8gYXZvaWQganVtcFxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbFN0YXJ0ID0gdC5zZWxlY3Rpb25TdGFydCwgc2VsRW5kID0gdC5zZWxlY3Rpb25FbmQ7XHJcblx0XHRcdFx0XHRcdFx0dC52YWx1ZSAgICAgICAgPSBzYW5pdGl6ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHQuc2V0U2VsZWN0aW9uUmFuZ2UoIHNlbFN0YXJ0LCBzZWxFbmQgKTtcclxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuOyAvLyB1bmlxdWVuZXNzIG9uIGNoYW5nZS9ibHVyXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29tbWl0IChjaGFuZ2UvYmx1cilcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyYXcgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFJFU0VFRDoga2VlcCBuYW1lIG5vbi1lbXB0eSBhbmQgcHJvdmlzaW9uYWwgKGF1dG9uYW1lIHN0YXlzIE9OKVxyXG5cdFx0XHRcdFx0XHRjb25zdCBTICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSA9IFMuc2FuaXRpemVfaHRtbF9uYW1lKCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCBzZWwuZGF0YXNldC5pZCB8fCBzZWwuZGF0YXNldC50eXBlIHx8ICdmaWVsZCcgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdW5pcSA9IGIuaWQuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBzZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdHNlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzEnO1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcwJztcclxuXHJcblx0XHRcdFx0XHRcdC8vIEtlZXAgRE9NIGluIHN5bmMgaWYgd2XigJlyZSBub3QgcmUtcmVuZGVyaW5nXHJcblx0XHRcdFx0XHRcdGlmICggIWIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGN0cmwgKSBjdHJsLnNldEF0dHJpYnV0ZSggJ25hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICggdC52YWx1ZSAhPT0gdW5pcSApIHQudmFsdWUgPSB1bmlxO1xyXG5cdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLXJlc2VlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE5vbi1lbXB0eSBjb21taXQ6IHVzZXIgdGFrZXMgY29udHJvbDsgZGlzYWJsZSBhdXRvbmFtZSBnb2luZyBmb3J3YXJkXHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcxJztcclxuXHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzAnO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCByYXcgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSAgICA9IGIuaWQuc2V0X2ZpZWxkX25hbWUoIHNlbCwgc2FuaXRpemVkICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBjdHJsICkgY3RybC5zZXRBdHRyaWJ1dGUoICduYW1lJywgdW5pcXVlICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBzZWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gU0VDVElPTlMgJiBGSUVMRFM6IGNzc2NsYXNzIChsaXZlIGFwcGx5OyBubyByZS1yZW5kZXIpIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2Nzc2NsYXNzJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5leHQgICAgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIHQudmFsdWUgfHwgJycgKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRBcnIgPSBuZXh0LnNwbGl0KCAvXFxzKy8gKS5maWx0ZXIoIEJvb2xlYW4gKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRTZXQgPSBuZXcgU2V0KCBkZXNpcmVkQXJyICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29yZSBjbGFzc2VzIGFyZSBuZXZlciB0b3VjaGVkLlxyXG5cdFx0XHRcdFx0Y29uc3QgaXNDb3JlID0gKGNscykgPT4gY2xzID09PSAnaXMtc2VsZWN0ZWQnIHx8IGNscy5zdGFydHNXaXRoKCAnd3BiY18nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gU25hcHNob3QgYmVmb3JlIG11dGF0aW5nIChET01Ub2tlbkxpc3QgaXMgbGl2ZSkuXHJcblx0XHRcdFx0XHRjb25zdCBiZWZvcmVDbGFzc2VzID0gQXJyYXkuZnJvbSggc2VsLmNsYXNzTGlzdCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgY3VzdG9tQmVmb3JlICA9IGJlZm9yZUNsYXNzZXMuZmlsdGVyKCAoYykgPT4gIWlzQ29yZSggYyApICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHN0cmF5IG5vbi1jb3JlIGNsYXNzZXMgbm90IGluIGRlc2lyZWQuXHJcblx0XHRcdFx0XHRjdXN0b21CZWZvcmUuZm9yRWFjaCggKGMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhZGVzaXJlZFNldC5oYXMoIGMgKSApIHNlbC5jbGFzc0xpc3QucmVtb3ZlKCBjICk7XHJcblx0XHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRkIG1pc3NpbmcgZGVzaXJlZCBjbGFzc2VzIGluIG9uZSBnby5cclxuXHRcdFx0XHRcdGNvbnN0IG1pc3NpbmcgPSBkZXNpcmVkQXJyLmZpbHRlciggKGMpID0+ICFjdXN0b21CZWZvcmUuaW5jbHVkZXMoIGMgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBtaXNzaW5nLmxlbmd0aCApIHNlbC5jbGFzc0xpc3QuYWRkKCAuLi5taXNzaW5nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gS2VlcCBkYXRhc2V0IGluIHN5bmMgKGF2b2lkIHVzZWxlc3MgYXR0cmlidXRlIHdyaXRlcykuXHJcblx0XHRcdFx0XHRpZiAoIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJyApICE9PSBuZXh0ICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycsIG5leHQgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBFbWl0IG9ubHkgaWYgc29tZXRoaW5nIGFjdHVhbGx5IGNoYW5nZWQuXHJcblx0XHRcdFx0XHRjb25zdCBhZnRlckNsYXNzZXMgPSBBcnJheS5mcm9tKCBzZWwuY2xhc3NMaXN0ICk7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkICAgICAgPSBhZnRlckNsYXNzZXMubGVuZ3RoICE9PSBiZWZvcmVDbGFzc2VzLmxlbmd0aCB8fCBiZWZvcmVDbGFzc2VzLnNvbWUoIChjLCBpKSA9PiBjICE9PSBhZnRlckNsYXNzZXNbaV0gKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBkZXRhaWwgPSB7IGtleTogJ2Nzc2NsYXNzJywgcGhhc2U6IGUudHlwZSB9O1xyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2Nzc2NsYXNzLWNoYW5nZScsIGRldGFpbCApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAncHJvcC1jaGFuZ2UnLCBkZXRhaWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIFNFQ1RJT05TOiBsYWJlbCAtLS0tXHJcblx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gJiYga2V5ID09PSAnbGFiZWwnICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIHZhbCApO1xyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbGFiZWwtY2hhbmdlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBGSUVMRFM6IGxhYmVsIChhdXRvLW5hbWUgd2hpbGUgdHlwaW5nOyBmcmVlemUgb24gY29tbWl0KSAtLS0tXHJcblx0XHRcdFx0aWYgKCAhaXNTZWN0aW9uICYmIGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbCAgICAgICAgID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5sYWJlbCA9IHZhbDtcclxuXHJcblx0XHRcdFx0XHQvLyB3aGlsZSB0eXBpbmcsIGFsbG93IGF1dG8tbmFtZSAoaWYgZmxhZ3MgcGVybWl0KVxyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Q29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlLm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoIGIsIHNlbCwgdmFsICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBpZiB1c2VyIGNvbW1pdHRlZCB0aGUgbGFiZWwgKGJsdXIvY2hhbmdlKSwgZnJlZXplIGZ1dHVyZSBhdXRvLW5hbWVcclxuXHRcdFx0XHRcdGlmICggZS50eXBlICE9PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5hdXRvbmFtZSA9ICcwJzsgICAvLyBzdG9wIGZ1dHVyZSBsYWJlbC0+bmFtZSBzeW5jXHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmZyZXNoICAgID0gJzAnOyAgIC8vIGFsc28ga2lsbCB0aGUgXCJmcmVzaFwiIGVzY2FwZSBoYXRjaFxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE9wdGlvbmFsIFVJIG5pY2V0eTogZGlzYWJsZSBOYW1lIHdoZW4gYXV0byBpcyBPTiwgZW5hYmxlIHdoZW4gT0ZGXHJcblx0XHRcdFx0XHRjb25zdCBpbnMgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG5hbWVDdHJsICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhdXRvQWN0aXZlID1cclxuXHRcdFx0XHRcdFx0XHRcdCAgKHNlbC5kYXRhc2V0LmF1dG9uYW1lID8/ICcxJykgIT09ICcwJyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCAhPT0gJzEnICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIHNlbC5kYXRhc2V0Lndhc19sb2FkZWQgIT09ICcxJztcclxuXHRcdFx0XHRcdFx0bmFtZUN0cmwudG9nZ2xlQXR0cmlidXRlKCAnZGlzYWJsZWQnLCBhdXRvQWN0aXZlICk7XHJcblx0XHRcdFx0XHRcdGlmICggYXV0b0FjdGl2ZSAmJiAhbmFtZUN0cmwucGxhY2Vob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZUN0cmwucGxhY2Vob2xkZXIgPSBiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICggIWF1dG9BY3RpdmUgJiYgbmFtZUN0cmwucGxhY2Vob2xkZXIgPT09IChiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnKSApIHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lQ3RybC5wbGFjZWhvbGRlciA9ICcnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHJlLXJlbmRlciB0aGUgcHJldmlldyBzbyBsYWJlbCBjaGFuZ2VzIGFyZSB2aXNpYmxlIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdsYWJlbC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBERUZBVUxUIChHRU5FUklDKTogZGF0YXNldCB3cml0ZXIgZm9yIGJvdGggZmllbGRzICYgc2VjdGlvbnMgLS0tLVxyXG5cdFx0XHRcdC8vIEFueSBpbnNwZWN0b3IgY29udHJvbCB3aXRoIFtkYXRhLWluc3BlY3Rvci1rZXldIHRoYXQgZG9lc24ndCBoYXZlIGEgY3VzdG9tXHJcblx0XHRcdFx0Ly8gYWRhcHRlci92YWx1ZV9mcm9tIHdpbGwgc2ltcGx5IHJlYWQvd3JpdGUgc2VsLmRhdGFzZXRba2V5XS5cclxuXHRcdFx0XHRpZiAoIGtleSApIHtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBzZWxmTG9ja2VkID0gL14oMXx0cnVlfHllcykkL2kudGVzdCggKHQuZGF0YXNldD8ubG9ja2VkIHx8ICcnKS50cmltKCkgKTtcclxuXHRcdFx0XHRcdGlmICggc2VsZkxvY2tlZCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFNraXAga2V5cyB3ZSBoYW5kbGVkIGFib3ZlIHRvIGF2b2lkIGRvdWJsZSB3b3JrLlxyXG5cdFx0XHRcdFx0aWYgKCBrZXkgPT09ICdpZCcgfHwga2V5ID09PSAnbmFtZScgfHwga2V5ID09PSAnaHRtbF9pZCcgfHwga2V5ID09PSAnY3NzY2xhc3MnIHx8IGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bGV0IG5leHRWYWwgPSAnJztcblx0XHRcdFx0XHRpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICh0LnR5cGUgPT09ICdjaGVja2JveCcgfHwgdC50eXBlID09PSAncmFkaW8nKSApIHtcblx0XHRcdFx0XHRcdC8vIFBlcnNpc3QgYm90aCBib29sZWFuIHN0YXRlcyBleHBsaWNpdGx5IHNvIHNjaGVtYSBkZWZhdWx0cyBjYW5ub3QgcmVwbGFjZSBmYWxzZS5cblx0XHRcdFx0XHRcdG5leHRWYWwgPSB0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICd2YWx1ZScgaW4gdCApIHtcclxuXHRcdFx0XHRcdFx0bmV4dFZhbCA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gUGVyc2lzdCB0byBkYXRhc2V0LlxyXG5cdFx0XHRcdFx0aWYgKCBzZWw/LmRhdGFzZXQgKSBzZWwuZGF0YXNldFtrZXldID0gbmV4dFZhbDtcclxuXHJcblx0XHRcdFx0XHQvLyBHZW5lcmF0b3IgY29udHJvbHMgYXJlIFwiVUkgaW5wdXRzXCIg4oCUIGF2b2lkIFNUUlVDVFVSRV9DSEFOR0Ugc3BhbSB3aGlsZSBkcmFnZ2luZy90eXBpbmcuXHJcblx0XHRcdFx0XHRjb25zdCBpc19nZW5fa2V5ID0gKGtleS5pbmRleE9mKCAnZ2VuXycgKSA9PT0gMCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmUtcmVuZGVyIG9uIHZpc3VhbCBrZXlzIHNvIHByZXZpZXcgc3RheXMgaW4gc3luYyAoY2FsZW5kYXIgbGFiZWwvaGVscCwgZXRjLikuXHJcblx0XHRcdFx0XHRjb25zdCB2aXN1YWxLZXlzID0gbmV3IFNldCggWyAnaGVscCcsICdwbGFjZWhvbGRlcicsICdtaW5fd2lkdGgnLCAnY3NzY2xhc3MnIF0gKTtcclxuXHRcdFx0XHRcdGlmICggIWlzU2VjdGlvbiAmJiAodmlzdWFsS2V5cy5oYXMoIGtleSApIHx8IGtleS5zdGFydHNXaXRoKCAndWlfJyApKSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gTGlnaHQgaGV1cmlzdGljOiBvbmx5IHJlLXJlbmRlciBvbiBjb21taXQgZm9yIGhlYXZ5IGlucHV0czsgbGl2ZSBmb3Igc2hvcnQgb25lcyBpcyBmaW5lLlxyXG5cdFx0XHRcdFx0XHRpZiAoIGUudHlwZSA9PT0gJ2NoYW5nZScgfHwga2V5ID09PSAnaGVscCcgfHwga2V5ID09PSAncGxhY2Vob2xkZXInICkge1xyXG5cdFx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIHNlbCApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhKGlzX2dlbl9rZXkgJiYgZS50eXBlID09PSAnaW5wdXQnKSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gRGVib3VuY2UgY29udGludW91cyB2YWx1ZSBzbGlkZXIgaW5wdXQgZXZlbnRzIHRvIGF2b2lkIGZ1bGwtY2FudmFzIHJlZnJlc2ggc3BhbS5cclxuXHRcdFx0XHRcdFx0Ly8gV2UgZGV0ZWN0IHRoZSBzbGlkZXIgZ3JvdXAgdmlhIFtkYXRhLWxlbi1ncm91cF0gd3JhcHBlci5cclxuXHRcdFx0XHRcdFx0Y29uc3QgaXNfbGVuX2dyb3VwX2N0cmwgPSAhISh0ICYmIHQuY2xvc2VzdCAmJiB0LmNsb3Nlc3QoICdbZGF0YS1sZW4tZ3JvdXBdJyApKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggaXNfbGVuX2dyb3VwX2N0cmwgJiYgZS50eXBlID09PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZV9kZWJvdW5jZWQoICdwcm9wLWNoYW5nZScsIHsga2V5LCBwaGFzZTogZS50eXBlIH0gKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdwcm9wLWNoYW5nZScsIHsga2V5LCBwaGFzZTogZS50eXBlIH0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlucy5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgaGFuZGxlciwgdHJ1ZSApO1xyXG5cdFx0XHQvLyByZWZsZWN0IGluc3RhbnRseSB3aGlsZSB0eXBpbmcgYXMgd2VsbC5cclxuXHRcdFx0aW5zLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsIGhhbmRsZXIsIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gSW5zcGVjdG9yIGFmdGVyIGEgZmllbGQgaXMgYWRkZWQuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfb3Blbl9pbnNwZWN0b3JfYWZ0ZXJfZmllbGRfYWRkZWQoKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5GSUVMRF9BREQsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSBlPy5kZXRhaWw/LmVsIHx8IG51bGw7XHJcblx0XHRcdFx0aWYgKCBlbCAmJiB0aGlzLmJ1aWxkZXI/LnNlbGVjdF9maWVsZCApIHtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQoIGVsLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gU2hvdyBJbnNwZWN0b3IgUGFsZXR0ZS5cclxuXHRcdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcclxuXHRcdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9faW5zcGVjdG9yJyxcclxuXHRcdFx0XHRcdFx0dGFiX2lkICA6ICd3cGJjX3RhYl9pbnNwZWN0b3InXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEtleWJvYXJkIHNob3J0Y3V0cyBmb3Igc2VsZWN0aW9uLCBkZWxldGlvbiwgYW5kIG1vdmVtZW50LlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX0tleWJvYXJkX0NvbnRyb2xsZXIgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLl9vbl9rZXkgPSB0aGlzLm9uX2tleS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgdGhpcy5fb25fa2V5LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCB0aGlzLl9vbl9rZXksIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlICovXHJcblx0XHRvbl9rZXkoZSkge1xyXG5cdFx0XHRjb25zdCBiICAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGlzX3R5cGluZyA9IHRoaXMuX2lzX3R5cGluZ19hbnl3aGVyZSgpO1xyXG5cdFx0XHRpZiAoIGUua2V5ID09PSAnRXNjYXBlJyApIHtcclxuXHRcdFx0XHRpZiAoIGlzX3R5cGluZyApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5lbWl0KCBDb3JlLldQQkNfQkZCX0V2ZW50cy5DTEVBUl9TRUxFQ1RJT04sIHsgc291cmNlOiAnZXNjJyB9ICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHNlbGVjdGVkID0gYi5nZXRfc2VsZWN0ZWRfZmllbGQ/LigpO1xyXG5cdFx0XHRpZiAoICFzZWxlY3RlZCB8fCBpc190eXBpbmcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJyApIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0Yi5kZWxldGVfaXRlbT8uKCBzZWxlY3RlZCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAoZS5rZXkgPT09ICdBcnJvd1VwJyB8fCBlLmtleSA9PT0gJ0Fycm93RG93bicpICYmICFlLnNoaWZ0S2V5ICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRjb25zdCBkaXIgPSAoZS5rZXkgPT09ICdBcnJvd1VwJykgPyAndXAnIDogJ2Rvd24nO1xyXG5cdFx0XHRcdGIubW92ZV9pdGVtPy4oIHNlbGVjdGVkLCBkaXIgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBlLmtleSA9PT0gJ0VudGVyJyApIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0Yi5zZWxlY3RfZmllbGQoIHNlbGVjdGVkLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cclxuXHRcdF9pc190eXBpbmdfYW55d2hlcmUoKSB7XHJcblx0XHRcdGNvbnN0IGEgICA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblx0XHRcdGNvbnN0IHRhZyA9IGE/LnRhZ05hbWU7XHJcblx0XHRcdGlmICggdGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnIHx8IChhPy5pc0NvbnRlbnRFZGl0YWJsZSA9PT0gdHJ1ZSkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRyZXR1cm4gISEoaW5zICYmIGEgJiYgaW5zLmNvbnRhaW5zKCBhICkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbHVtbiByZXNpemUgbG9naWMgZm9yIHNlY3Rpb24gcm93cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9SZXNpemVfQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5pbml0X3Jlc2l6ZV9oYW5kbGVyID0gdGhpcy5oYW5kbGVfcmVzaXplLmJpbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIHJlYWQgdGhlIENTUyB2YXIgKGtlcHQgbG9jYWwgc28gaXQgZG9lc27igJl0IGRlcGVuZCBvbiB0aGUgTWluLVdpZHRoIG1vZHVsZSlcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0gY29sXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfG51bWJlcn1cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdF9nZXRfY29sX21pbl9weChjb2wpIHtcclxuXHRcdFx0Y29uc3QgdiA9IGdldENvbXB1dGVkU3R5bGUoIGNvbCApLmdldFByb3BlcnR5VmFsdWUoICctLXdwYmMtY29sLW1pbicgKSB8fCAnMCc7XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCB2ICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IE1hdGgubWF4KCAwLCBuICkgOiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgKi9cclxuXHRcdGhhbmRsZV9yZXNpemUoZSkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdGlmICggZS5idXR0b24gIT09IDAgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCByZXNpemVyICAgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcblx0XHRcdGNvbnN0IHJvd19lbCAgICA9IHJlc2l6ZXIucGFyZW50RWxlbWVudDtcclxuXHRcdFx0Y29uc3QgY29scyAgICAgID0gQXJyYXkuZnJvbSggcm93X2VsLnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApO1xyXG5cdFx0XHRjb25zdCBsZWZ0X2NvbCAgPSByZXNpemVyPy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG5cdFx0XHRjb25zdCByaWdodF9jb2wgPSByZXNpemVyPy5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblx0XHRcdGlmICggIWxlZnRfY29sIHx8ICFyaWdodF9jb2wgfHwgIWxlZnRfY29sLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgfHwgIXJpZ2h0X2NvbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgbGVmdF9pbmRleCAgPSBjb2xzLmluZGV4T2YoIGxlZnRfY29sICk7XHJcblx0XHRcdGNvbnN0IHJpZ2h0X2luZGV4ID0gY29scy5pbmRleE9mKCByaWdodF9jb2wgKTtcclxuXHRcdFx0aWYgKCBsZWZ0X2luZGV4ID09PSAtMSB8fCByaWdodF9pbmRleCAhPT0gbGVmdF9pbmRleCArIDEgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBzdGFydF94ICAgICAgICA9IGUuY2xpZW50WDtcclxuXHRcdFx0Y29uc3QgbGVmdF9zdGFydF9weCAgPSBsZWZ0X2NvbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgcmlnaHRfc3RhcnRfcHggPSByaWdodF9jb2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcblx0XHRcdGNvbnN0IHBhaXJfcHggICAgICAgID0gTWF0aC5tYXgoIDAsIGxlZnRfc3RhcnRfcHggKyByaWdodF9zdGFydF9weCApO1xyXG5cclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IGIuY29sX2dhcF9wZXJjZW50O1xyXG5cdFx0XHRjb25zdCBjb21wdXRlZCAgID0gYi5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvd19lbCwgZ3AgKTtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IGNvbXB1dGVkLmF2YWlsYWJsZTsgICAgICAgICAgICAgICAgIC8vICUgb2YgdGhlIOKAnGZ1bGwgMTAw4oCdIGFmdGVyIGdhcHNcclxuXHRcdFx0Y29uc3QgYmFzZXMgICAgICA9IGNvbXB1dGVkLmJhc2VzLnNsaWNlKCAwICk7ICAgICAgICAgICAgLy8gY3VycmVudCBlZmZlY3RpdmUgJVxyXG5cdFx0XHRjb25zdCBwYWlyX2F2YWlsID0gYmFzZXNbbGVmdF9pbmRleF0gKyBiYXNlc1tyaWdodF9pbmRleF07XHJcblxyXG5cdFx0XHQvLyBCYWlsIGlmIHdlIGNhbuKAmXQgY29tcHV0ZSBzYW5lIGRlbHRhcy5cclxuXHRcdFx0aWYgKCFwYWlyX3B4IHx8ICFOdW1iZXIuaXNGaW5pdGUocGFpcl9hdmFpbCkgfHwgcGFpcl9hdmFpbCA8PSAwKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyAtLS0gTUlOIENMQU1QUyAocGl4ZWxzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRcdGNvbnN0IHBjdFRvUHggICAgICAgPSAocGN0KSA9PiAocGFpcl9weCAqIChwY3QgLyBwYWlyX2F2YWlsKSk7IC8vIHBhaXItbG9jYWwgcGVyY2VudCAtPiBweFxyXG5cdFx0XHRjb25zdCBnZW5lcmljTWluUGN0ID0gTWF0aC5taW4oIDAuMSwgYXZhaWxhYmxlICk7ICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgMC4xJSBmbG9vciAoaW4g4oCcYXZhaWxhYmxlICXigJ0gc3BhY2UpXHJcblx0XHRcdGNvbnN0IGdlbmVyaWNNaW5QeCAgPSBwY3RUb1B4KCBnZW5lcmljTWluUGN0ICk7XHJcblxyXG5cdFx0XHRjb25zdCBsZWZ0TWluUHggID0gTWF0aC5tYXgoIHRoaXMuX2dldF9jb2xfbWluX3B4KCBsZWZ0X2NvbCApLCBnZW5lcmljTWluUHggKTtcclxuXHRcdFx0Y29uc3QgcmlnaHRNaW5QeCA9IE1hdGgubWF4KCB0aGlzLl9nZXRfY29sX21pbl9weCggcmlnaHRfY29sICksIGdlbmVyaWNNaW5QeCApO1xyXG5cclxuXHRcdFx0Ly8gZnJlZXplIHRleHQgc2VsZWN0aW9uICsgY3Vyc29yXHJcblx0XHRcdGNvbnN0IHByZXZfdXNlcl9zZWxlY3QgICAgICAgICA9IGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdDtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xyXG5cdFx0XHRyb3dfZWwuc3R5bGUuY3Vyc29yICAgICAgICAgICAgPSAnY29sLXJlc2l6ZSc7XHJcblxyXG5cdFx0XHRjb25zdCBvbl9tb3VzZV9tb3ZlID0gKGV2KSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhcGFpcl9weCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gd29yayBpbiBwaXhlbHMsIGNsYW1wIGJ5IGVhY2ggc2lkZeKAmXMgbWluXHJcblx0XHRcdFx0Y29uc3QgZGVsdGFfcHggICA9IGV2LmNsaWVudFggLSBzdGFydF94O1xyXG5cdFx0XHRcdGxldCBuZXdMZWZ0UHggICAgPSBsZWZ0X3N0YXJ0X3B4ICsgZGVsdGFfcHg7XHJcblx0XHRcdFx0bmV3TGVmdFB4ICAgICAgICA9IE1hdGgubWF4KCBsZWZ0TWluUHgsIE1hdGgubWluKCBwYWlyX3B4IC0gcmlnaHRNaW5QeCwgbmV3TGVmdFB4ICkgKTtcclxuXHRcdFx0XHRjb25zdCBuZXdSaWdodFB4ID0gcGFpcl9weCAtIG5ld0xlZnRQeDtcclxuXHJcblx0XHRcdFx0Ly8gdHJhbnNsYXRlIGJhY2sgdG8gcGFpci1sb2NhbCBwZXJjZW50YWdlc1xyXG5cdFx0XHRcdGNvbnN0IG5ld0xlZnRQY3QgICAgICA9IChuZXdMZWZ0UHggLyBwYWlyX3B4KSAqIHBhaXJfYXZhaWw7XHJcblx0XHRcdFx0Y29uc3QgbmV3QmFzZXMgICAgICAgID0gYmFzZXMuc2xpY2UoIDAgKTtcclxuXHRcdFx0XHRuZXdCYXNlc1tsZWZ0X2luZGV4XSAgPSBuZXdMZWZ0UGN0O1xyXG5cdFx0XHRcdG5ld0Jhc2VzW3JpZ2h0X2luZGV4XSA9IHBhaXJfYXZhaWwgLSBuZXdMZWZ0UGN0O1xyXG5cclxuXHRcdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgbmV3QmFzZXMgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGNvbnN0IG9uX21vdXNlX3VwID0gKCkgPT4ge1xyXG5cdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdtb3VzZW1vdmUnLCBvbl9tb3VzZV9tb3ZlICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNldXAnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNlbGVhdmUnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9IHByZXZfdXNlcl9zZWxlY3QgfHwgJyc7XHJcblx0XHRcdFx0cm93X2VsLnN0eWxlLmN1cnNvciAgICAgICAgICAgID0gJyc7XHJcblxyXG5cdFx0XHRcdC8vIG5vcm1hbGl6ZSB0byB0aGUgcm934oCZcyBhdmFpbGFibGUgJSBhZ2FpblxyXG5cdFx0XHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93X2VsLCBncCApO1xyXG5cdFx0XHRcdGIubGF5b3V0LmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBub3JtYWxpemVkLmJhc2VzICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2Vtb3ZlJywgb25fbW91c2VfbW92ZSApO1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWxlYXZlJywgb25fbW91c2VfdXAgKTtcclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogUGFnZSBhbmQgc2VjdGlvbiBjcmVhdGlvbiwgcmVidWlsZGluZywgYW5kIG5lc3RlZCBTb3J0YWJsZSBzZXR1cC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9QYWdlc19TZWN0aW9ucyA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX3BhZ2UgICAgICAgICAgICAgICAgICA9IChvcHRzKSA9PiB0aGlzLmFkZF9wYWdlKCBvcHRzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5hZGRfc2VjdGlvbiAgICAgICAgICAgICAgID0gKGNvbnRhaW5lciwgY29scykgPT4gdGhpcy5hZGRfc2VjdGlvbiggY29udGFpbmVyLCBjb2xzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5yZWJ1aWxkX3NlY3Rpb24gICAgICAgICAgID0gKHNlY3Rpb25fZGF0YSwgY29udGFpbmVyKSA9PiB0aGlzLnJlYnVpbGRfc2VjdGlvbiggc2VjdGlvbl9kYXRhLCBjb250YWluZXIgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXMgPSAoZWwpID0+IHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggZWwgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfc2VjdGlvbl9zb3J0YWJsZSAgICAgPSAoZWwpID0+IHRoaXMuaW5pdF9zZWN0aW9uX3NvcnRhYmxlKCBlbCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnMgICAgICAgICAgICA9IHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHaXZlIGV2ZXJ5IGZpZWxkL3NlY3Rpb24gaW4gYSBjbG9uZWQgc3VidHJlZSBhIGZyZXNoIGRhdGEtdWlkIHNvXHJcblx0XHQgKiB1bmlxdWVuZXNzIGNoZWNrcyBkb24ndCBleGNsdWRlIHRoZWlyIG9yaWdpbmFscy5cclxuXHRcdCAqL1xyXG5cdFx0X3JldGFnX3VpZHNfaW5fc3VidHJlZShyb290KSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IG5vZGVzID0gW107XHJcblx0XHRcdGlmICggcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgfHwgcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdG5vZGVzLnB1c2goIHJvb3QgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRub2Rlcy5wdXNoKCAuLi5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24sIC53cGJjX2JmYl9fZmllbGQnICkgKTtcclxuXHRcdFx0bm9kZXMuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJlZml4ICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSA/ICdzJyA6ICdmJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0LnVpZCA9IGAke3ByZWZpeH0tJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWA7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1bXAgXCJmb29cIiwgXCJmb28tMlwiLCBcImZvby0zXCIsIC4uLlxyXG5cdFx0ICovXHJcblx0XHRfbWFrZV91bmlxdWUoYmFzZSwgdGFrZW4pIHtcclxuXHRcdFx0Y29uc3QgcyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdGxldCB2ICAgPSBTdHJpbmcoIGJhc2UgfHwgJycgKTtcclxuXHRcdFx0aWYgKCAhdiApIHYgPSAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBtICA9IHYubWF0Y2goIC8tKFxcZCspJC8gKTtcclxuXHRcdFx0bGV0IG4gICAgPSBtID8gKHBhcnNlSW50KCBtWzFdLCAxMCApIHx8IDEpIDogMTtcclxuXHRcdFx0bGV0IHN0ZW0gPSBtID8gdi5yZXBsYWNlKCAvLVxcZCskLywgJycgKSA6IHY7XHJcblx0XHRcdHdoaWxlICggdGFrZW4uaGFzKCB2ICkgKSB7XHJcblx0XHRcdFx0biA9IE1hdGgubWF4KCAyLCBuICsgMSApO1xyXG5cdFx0XHRcdHYgPSBgJHtzdGVtfS0ke259YDtcclxuXHRcdFx0fVxyXG5cdFx0XHR0YWtlbi5hZGQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIHY7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdHJpY3QsIG9uZS1wYXNzIGRlLWR1cGxpY2F0aW9uIGZvciBhIG5ld2x5LWluc2VydGVkIHN1YnRyZWUuXHJcblx0XHQgKiAtIEVuc3VyZXMgdW5pcXVlIGRhdGEtaWQgKGludGVybmFsKSwgZGF0YS1uYW1lIChmaWVsZHMpLCBkYXRhLWh0bWxfaWQgKHB1YmxpYylcclxuXHRcdCAqIC0gQWxzbyB1cGRhdGVzIERPTTogPHNlY3Rpb24gaWQ+LCA8aW5wdXQgaWQ+LCA8bGFiZWwgZm9yPiwgYW5kIGlucHV0W25hbWVdLlxyXG5cdFx0ICovXHJcblx0XHRfZGVkdXBlX3N1YnRyZWVfc3RyaWN0KHJvb3QpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgcyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblx0XHRcdGlmICggIXJvb3QgfHwgIWI/LnBhZ2VzX2NvbnRhaW5lciApIHJldHVybjtcclxuXHJcblx0XHRcdC8vIDEpIEJ1aWxkIFwidGFrZW5cIiBzZXRzIGZyb20gb3V0c2lkZSB0aGUgc3VidHJlZS5cclxuXHRcdFx0Y29uc3QgdGFrZW5EYXRhSWQgICA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5EYXRhTmFtZSA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5IdG1sSWQgICA9IG5ldyBTZXQoKTtcclxuXHRcdFx0Y29uc3QgdGFrZW5Eb21JZCAgICA9IG5ldyBTZXQoKTtcclxuXHJcblx0XHRcdC8vIEFsbCBmaWVsZHMvc2VjdGlvbnMgb3V0c2lkZSByb290XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2ZpZWxkLCAud3BiY19iZmJfX3NlY3Rpb24nICkuZm9yRWFjaCggZWwgPT4ge1xyXG5cdFx0XHRcdGlmICggcm9vdC5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCBkaWQgID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKTtcclxuXHRcdFx0XHRjb25zdCBkbmFtID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApO1xyXG5cdFx0XHRcdGNvbnN0IGhpZCAgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnICk7XHJcblx0XHRcdFx0aWYgKCBkaWQgKSB0YWtlbkRhdGFJZC5hZGQoIGRpZCApO1xyXG5cdFx0XHRcdGlmICggZG5hbSApIHRha2VuRGF0YU5hbWUuYWRkKCBkbmFtICk7XHJcblx0XHRcdFx0aWYgKCBoaWQgKSB0YWtlbkh0bWxJZC5hZGQoIGhpZCApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBBbGwgRE9NIGlkcyBvdXRzaWRlIHJvb3QgKGxhYmVscywgaW5wdXRzLCBhbnl0aGluZylcclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJ1tpZF0nICkuZm9yRWFjaCggZWwgPT4ge1xyXG5cdFx0XHRcdGlmICggcm9vdC5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGVsLmlkICkgdGFrZW5Eb21JZC5hZGQoIGVsLmlkICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGNvbnN0IG5vZGVzID0gW107XHJcblx0XHRcdGlmICggcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgfHwgcm9vdC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdG5vZGVzLnB1c2goIHJvb3QgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRub2Rlcy5wdXNoKCAuLi5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24sIC53cGJjX2JmYl9fZmllbGQnICkgKTtcclxuXHJcblx0XHRcdC8vIDIpIFdhbGsgdGhlIHN1YnRyZWUgYW5kIGZpeCBjb2xsaXNpb25zIGRldGVybWluaXN0aWNhbGx5LlxyXG5cdFx0XHRub2Rlcy5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXNGaWVsZCAgID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzU2VjdGlvbiA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cclxuXHRcdFx0XHQvLyBJTlRFUk5BTCBkYXRhLWlkXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3ICA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgJyc7XHJcblx0XHRcdFx0XHRjb25zdCBiYXNlID0gcy5zYW5pdGl6ZV9odG1sX2lkKCByYXcgKSB8fCAoaXNTZWN0aW9uID8gJ3NlY3Rpb24nIDogJ2ZpZWxkJyk7XHJcblx0XHRcdFx0XHRjb25zdCB1bmlxID0gdGhpcy5fbWFrZV91bmlxdWUoIGJhc2UsIHRha2VuRGF0YUlkICk7XHJcblx0XHRcdFx0XHRpZiAoIHVuaXEgIT09IHJhdyApIGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCB1bmlxICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBIVE1MIG5hbWUgKGZpZWxkcyBvbmx5KVxyXG5cdFx0XHRcdGlmICggaXNGaWVsZCApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSB8fCAnJztcclxuXHRcdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gcy5zYW5pdGl6ZV9odG1sX25hbWUoIHJhdyApO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB1bmlxID0gdGhpcy5fbWFrZV91bmlxdWUoIGJhc2UsIHRha2VuRGF0YU5hbWUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCB1bmlxICE9PSByYXcgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRcdC8vIFVwZGF0ZSBpbm5lciBjb250cm9sIGltbWVkaWF0ZWx5XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBpbnB1dCApIGlucHV0LnNldEF0dHJpYnV0ZSggJ25hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFB1YmxpYyBIVE1MIGlkIChmaWVsZHMgKyBzZWN0aW9ucylcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRjb25zdCByYXcgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnICkgfHwgJyc7XHJcblx0XHRcdFx0XHRpZiAoIHJhdyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSAgICAgICAgICA9IHMuc2FuaXRpemVfaHRtbF9pZCggcmF3ICk7XHJcblx0XHRcdFx0XHRcdC8vIFJlc2VydmUgYWdhaW5zdCBCT1RIIGtub3duIGRhdGEtaHRtbF9pZCBhbmQgcmVhbCBET00gaWRzLlxyXG5cdFx0XHRcdFx0XHRjb25zdCBjb21iaW5lZFRha2VuID0gbmV3IFNldCggWyAuLi50YWtlbkh0bWxJZCwgLi4udGFrZW5Eb21JZCBdICk7XHJcblx0XHRcdFx0XHRcdGxldCBjYW5kaWRhdGUgICAgICAgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgY29tYmluZWRUYWtlbiApO1xyXG5cdFx0XHRcdFx0XHQvLyBSZWNvcmQgaW50byB0aGUgcmVhbCBzZXRzIHNvIGZ1dHVyZSBjaGVja3Mgc2VlIHRoZSByZXNlcnZhdGlvbi5cclxuXHRcdFx0XHRcdFx0dGFrZW5IdG1sSWQuYWRkKCBjYW5kaWRhdGUgKTtcclxuXHRcdFx0XHRcdFx0dGFrZW5Eb21JZC5hZGQoIGNhbmRpZGF0ZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBjYW5kaWRhdGUgIT09IHJhdyApIGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcsIGNhbmRpZGF0ZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gUmVmbGVjdCB0byBET00gaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdFx0ZWwuaWQgPSBjYW5kaWRhdGUgfHwgJyc7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBlbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWwud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggaW5wdXQgKSBpbnB1dC5pZCA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGxhYmVsICkgbGFiZWwuaHRtbEZvciA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHQvLyBFbnN1cmUgbm8gc3RhbGUgRE9NIGlkIGlmIGRhdGEtaHRtbF9pZCB3YXMgY2xlYXJlZFxyXG5cdFx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdpZCcgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfbWFrZV9hZGRfY29sdW1uc19jb250cm9sKHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCBpbnNlcnRfcG9zID0gJ2JvdHRvbScpIHtcclxuXHJcblx0XHRcdC8vIEFjY2VwdCBpbnNlcnRfcG9zICgndG9wJ3wnYm90dG9tJyksIGRlZmF1bHQgJ2JvdHRvbScuXHJcblxyXG5cdFx0XHRjb25zdCB0cGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19hZGRfY29sdW1uc190ZW1wbGF0ZScgKTtcclxuXHRcdFx0aWYgKCAhdHBsICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDbG9uZSAqY29udGVudHMqIChub3QgdGhlIGlkKSwgdW5oaWRlLCBhbmQgYWRkIGEgcGFnZS1zY29wZWQgY2xhc3MuXHJcblx0XHRcdGNvbnN0IHNyYyA9ICh0cGwuY29udGVudCAmJiB0cGwuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkgPyB0cGwuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCA6IHRwbC5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0aWYgKCAhc3JjICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjbG9uZSA9IHNyYy5jbG9uZU5vZGUoIHRydWUgKTtcclxuXHRcdFx0Y2xvbmUucmVtb3ZlQXR0cmlidXRlKCAnaGlkZGVuJyApO1xyXG5cdFx0XHRpZiAoIGNsb25lLmlkICkge1xyXG5cdFx0XHRcdGNsb25lLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNsb25lLnF1ZXJ5U2VsZWN0b3JBbGwoICdbaWRdJyApLmZvckVhY2goIG4gPT4gbi5yZW1vdmVBdHRyaWJ1dGUoICdpZCcgKSApO1xyXG5cclxuXHRcdFx0Ly8gTWFyayB3aGVyZSB0aGlzIGNvbnRyb2wgaW5zZXJ0cyBzZWN0aW9ucy5cclxuXHRcdFx0Y2xvbmUuZGF0YXNldC5pbnNlcnQgPSBpbnNlcnRfcG9zOyAvLyAndG9wJyB8ICdib3R0b20nXHJcblxyXG5cdFx0XHQvLyAvLyBPcHRpb25hbCBVSSBoaW50IGZvciB1c2VycyAoa2VlcHMgZXhpc3RpbmcgbWFya3VwIGludGFjdCkuXHJcblx0XHRcdC8vIGNvbnN0IGhpbnQgPSBjbG9uZS5xdWVyeVNlbGVjdG9yKCAnLm5hdi10YWItdGV4dCAuc2VsZWN0ZWRfdmFsdWUnICk7XHJcblx0XHRcdC8vIGlmICggaGludCApIHtcclxuXHRcdFx0Ly8gXHRoaW50LnRleHRDb250ZW50ID0gKGluc2VydF9wb3MgPT09ICd0b3AnKSA/ICcgKGFkZCBhdCB0b3ApJyA6ICcgKGFkZCBhdCBib3R0b20pJztcclxuXHRcdFx0Ly8gfVxyXG5cclxuXHRcdFx0Ly8gQ2xpY2sgb24gb3B0aW9ucyAtIGFkZCBzZWN0aW9uIHdpdGggTiBjb2x1bW5zLlxyXG5cdFx0XHRjbG9uZS5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGEgPSBlLnRhcmdldC5jbG9zZXN0KCAnLnVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uX2FkZF9zZWN0aW9ucycgKTtcclxuXHRcdFx0XHRpZiAoICFhICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdC8vIFJlYWQgTiBlaXRoZXIgZnJvbSBkYXRhLWNvbHMgb3IgZmFsbGJhY2sgdG8gcGFyc2luZyB0ZXh0IGxpa2UgXCIzIENvbHVtbnNcIi5cclxuXHRcdFx0XHRsZXQgY29scyA9IHBhcnNlSW50KCBhLmRhdGFzZXQuY29scyB8fCAoYS50ZXh0Q29udGVudC5tYXRjaCggL1xcYihcXGQrKVxccypDb2x1bW4vaSApPy5bMV0gPz8gJzEnKSwgMTAgKTtcclxuXHRcdFx0XHRjb2xzICAgICA9IE1hdGgubWF4KCAxLCBNYXRoLm1pbiggNCwgY29scyApICk7XHJcblxyXG5cdFx0XHRcdC8vIE5FVzogaG9ub3IgdGhlIGNvbnRyb2wncyBpbnNlcnRpb24gcG9zaXRpb25cclxuXHRcdFx0XHR0aGlzLmFkZF9zZWN0aW9uKCBzZWN0aW9uX2NvbnRhaW5lciwgY29scywgaW5zZXJ0X3BvcyApO1xyXG5cclxuXHRcdFx0XHQvLyBSZWZsZWN0IGxhc3QgY2hvaWNlICh1bmNoYW5nZWQpXHJcblx0XHRcdFx0Y29uc3QgdmFsID0gY2xvbmUucXVlcnlTZWxlY3RvciggJy5zZWxlY3RlZF92YWx1ZScgKTtcclxuXHRcdFx0XHRpZiAoIHZhbCApIHtcclxuXHRcdFx0XHRcdHZhbC50ZXh0Q29udGVudCA9IGAgKCR7Y29sc30pYDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHJldHVybiBjbG9uZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7e3Njcm9sbD86IGJvb2xlYW59fSBbb3B0cyA9IHt9XVxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRhZGRfcGFnZSh7IHNjcm9sbCA9IHRydWUgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IHBhZ2VfZWwgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fcGFuZWwgd3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3ICB3cGJjX2JmYl9mb3JtIHdwYmNfY29udGFpbmVyIHdwYmNfZm9ybSB3cGJjX2NvbnRhaW5lcl9ib29raW5nX2Zvcm0nICk7XHJcblx0XHRcdHBhZ2VfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1wYWdlJywgKytiLnBhZ2VfY291bnRlciApO1xyXG5cclxuXHRcdFx0Ly8gXCJQYWdlIDEgfCBYXCIgLSBSZW5kZXIgcGFnZSBUaXRsZSB3aXRoIFJlbW92ZSBYIGJ1dHRvbi5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaHRtbCA9IFVJLnJlbmRlcl93cF90ZW1wbGF0ZSggJ3dwYmMtYmZiLXRwbC1wYWdlLXJlbW92ZScsIHsgcGFnZV9udW1iZXI6IGIucGFnZV9jb3VudGVyIH0gKTtcclxuXHRcdFx0cGFnZV9lbC5pbm5lckhUTUwgICA9IGNvbnRyb2xzX2h0bWwgKyAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXIgd3BiY193aXphcmRfX2JvcmRlcl9jb250YWluZXJcIj48L2Rpdj4nO1xyXG5cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuYXBwZW5kQ2hpbGQoIHBhZ2VfZWwgKTtcclxuXHRcdFx0aWYgKCBzY3JvbGwgKSB7XHJcblx0XHRcdFx0cGFnZV9lbC5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc2VjdGlvbl9jb250YWluZXIgICAgICAgICA9IHBhZ2VfZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdFx0XHRjb25zdCBzZWN0aW9uX2NvdW50X29uX2FkZF9wYWdlID0gMjtcclxuXHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIHNlY3Rpb25fY29udGFpbmVyICk7XHJcblx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIHNlY3Rpb25fY29udGFpbmVyLCBzZWN0aW9uX2NvdW50X29uX2FkZF9wYWdlICk7XHJcblxyXG5cdFx0XHQvLyBEcm9wZG93biBjb250cm9sIGNsb25lZCBmcm9tIHRoZSBoaWRkZW4gdGVtcGxhdGUuXHJcblx0XHRcdGNvbnN0IGNvbnRyb2xzX2hvc3RfdG9wID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19jb250cm9scycgKTtcclxuXHRcdFx0Y29uc3QgY3RybF90b3AgICAgICAgICAgPSB0aGlzLl9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2woIHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCAndG9wJyApO1xyXG5cdFx0XHRpZiAoIGN0cmxfdG9wICkge1xyXG5cdFx0XHRcdGNvbnRyb2xzX2hvc3RfdG9wLmFwcGVuZENoaWxkKCBjdHJsX3RvcCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEJvdHRvbSBjb250cm9sIGJhciBhZnRlciB0aGUgc2VjdGlvbiBjb250YWluZXIuXHJcblx0XHRcdGNvbnN0IGNvbnRyb2xzX2hvc3RfYm90dG9tID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX2NvbnRyb2xzIHdwYmNfYmZiX19jb250cm9scy0tYm90dG9tJyApO1xyXG5cdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5hZnRlciggY29udHJvbHNfaG9zdF9ib3R0b20gKTtcclxuXHRcdFx0Y29uc3QgY3RybF9ib3R0b20gPSB0aGlzLl9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2woIHBhZ2VfZWwsIHNlY3Rpb25fY29udGFpbmVyLCAnYm90dG9tJyApO1xyXG5cdFx0XHRpZiAoIGN0cmxfYm90dG9tICkge1xyXG5cdFx0XHRcdGNvbnRyb2xzX2hvc3RfYm90dG9tLmFwcGVuZENoaWxkKCBjdHJsX2JvdHRvbSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcGFnZV9lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9ICAgICAgY29sc1xyXG5cdFx0ICogQHBhcmFtIHsndG9wJ3wnYm90dG9tJ30gW2luc2VydF9wb3M9J2JvdHRvbSddICAvLyBORVdcclxuXHRcdCAqL1xyXG5cdFx0YWRkX3NlY3Rpb24oY29udGFpbmVyLCBjb2xzLCBpbnNlcnRfcG9zID0gJ2JvdHRvbScpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29scyAgICA9IE1hdGgubWF4KCAxLCBwYXJzZUludCggY29scywgMTAgKSB8fCAxICk7XHJcblxyXG5cdFx0XHRjb25zdCBzZWN0aW9uID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIGBzZWN0aW9uLSR7KytiLnNlY3Rpb25fY291bnRlcn0tJHtEYXRlLm5vdygpfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXVpZCcsIGBzLSR7KytiLl91aWRfY291bnRlcn0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDcgKX1gICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS10eXBlJywgJ3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsICdTZWN0aW9uJyApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtY29sdW1ucycsIFN0cmluZyggY29scyApICk7XHJcblx0XHRcdC8vIERvIG5vdCBwZXJzaXN0IG9yIHNlZWQgcGVyLWNvbHVtbiBzdHlsZXMgYnkgZGVmYXVsdCAob3B0LWluIHZpYSBpbnNwZWN0b3IpLlxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX3JvdyB3cGJjX19yb3cnICk7XHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKyApIHtcclxuXHRcdFx0XHRjb25zdCBjb2wgICAgICAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdkaXYnLCAnd3BiY19iZmJfX2NvbHVtbiB3cGJjX19maWVsZCcgKTtcclxuXHRcdFx0XHRjb2wuc3R5bGUuZmxleEJhc2lzID0gKDEwMCAvIGNvbHMpICsgJyUnO1xyXG5cdFx0XHRcdC8vIE5vIGRlZmF1bHQgQ1NTIHZhcnMgaGVyZTsgcmVhbCBjb2x1bW5zIHJlbWFpbiB1bmFmZmVjdGVkIHVudGlsIHVzZXIgYWN0aXZhdGVzIHN0eWxlcy5cclxuXHRcdFx0XHRiLmluaXRfc29ydGFibGU/LiggY29sICk7XHJcblx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCBjb2wgKTtcclxuXHRcdFx0XHRpZiAoIGkgPCBjb2xzIC0gMSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc2l6ZXIgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29sdW1uLXJlc2l6ZXInICk7XHJcblx0XHRcdFx0XHRyZXNpemVyLmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWRvd24nLCBiLmluaXRfcmVzaXplX2hhbmRsZXIgKTtcclxuXHRcdFx0XHRcdHJvdy5hcHBlbmRDaGlsZCggcmVzaXplciApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRzZWN0aW9uLmFwcGVuZENoaWxkKCByb3cgKTtcclxuXHRcdFx0Yi5sYXlvdXQuc2V0X2VxdWFsX2Jhc2VzKCByb3csIGIuY29sX2dhcF9wZXJjZW50ICk7XHJcblx0XHRcdGIuYWRkX292ZXJsYXlfdG9vbGJhciggc2VjdGlvbiApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ3RhYmluZGV4JywgJzAnICk7XHJcblx0XHRcdHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggc2VjdGlvbiApO1xyXG5cclxuXHRcdFx0Ly8gSW5zZXJ0aW9uIHBvbGljeTogdG9wIHwgYm90dG9tLlxyXG5cdFx0XHRpZiAoIGluc2VydF9wb3MgPT09ICd0b3AnICYmIGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCApIHtcclxuXHRcdFx0XHRjb250YWluZXIuaW5zZXJ0QmVmb3JlKCBzZWN0aW9uLCBjb250YWluZXIuZmlyc3RFbGVtZW50Q2hpbGQgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoIHNlY3Rpb24gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNlY3Rpb25fZGF0YVxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSByZWJ1aWx0IHNlY3Rpb24gZWxlbWVudC5cclxuXHRcdCAqL1xyXG5cdFx0cmVidWlsZF9zZWN0aW9uKHNlY3Rpb25fZGF0YSwgY29udGFpbmVyKSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgY29sc19kYXRhID0gQXJyYXkuaXNBcnJheSggc2VjdGlvbl9kYXRhPy5jb2x1bW5zICkgPyBzZWN0aW9uX2RhdGEuY29sdW1ucyA6IFtdO1xyXG5cdFx0XHR0aGlzLmFkZF9zZWN0aW9uKCBjb250YWluZXIsIGNvbHNfZGF0YS5sZW5ndGggfHwgMSApO1xyXG5cdFx0XHRjb25zdCBzZWN0aW9uID0gY29udGFpbmVyLmxhc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdGlmICggIXNlY3Rpb24uZGF0YXNldC51aWQgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXVpZCcsIGBzLSR7KytiLl91aWRfY291bnRlcn0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDcgKX1gICk7XHJcblx0XHRcdH1cclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgc2VjdGlvbl9kYXRhPy5pZCB8fCBgc2VjdGlvbi0keysrYi5zZWN0aW9uX2NvdW50ZXJ9LSR7RGF0ZS5ub3coKX1gICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS10eXBlJywgJ3NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIHNlY3Rpb25fZGF0YT8ubGFiZWwgfHwgJ1NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2x1bW5zJywgU3RyaW5nKCAoc2VjdGlvbl9kYXRhPy5jb2x1bW5zIHx8IFtdKS5sZW5ndGggfHwgMSApICk7XHJcblx0XHRcdC8vIFBlcnNpc3RlZCBhdHRyaWJ1dGVzXHJcblx0XHRcdGlmICggc2VjdGlvbl9kYXRhPy5odG1sX2lkICkge1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgU3RyaW5nKCBzZWN0aW9uX2RhdGEuaHRtbF9pZCApICk7XHJcblx0XHRcdFx0Ly8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcmVhbCBpZCBzbyBhbmNob3JzL0NTUyBjYW4gdGFyZ2V0IGl0XHJcblx0XHRcdFx0c2VjdGlvbi5pZCA9IFN0cmluZyggc2VjdGlvbl9kYXRhLmh0bWxfaWQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiByZXN0b3JlIHBlcnNpc3RlZCBwZXItY29sdW1uIHN0eWxlcyAocmF3IEpTT04gc3RyaW5nKS5cclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/LmNvbF9zdHlsZXMgIT0gbnVsbCApIHtcclxuXHRcdFx0XHRjb25zdCBqc29uID0gU3RyaW5nKCBzZWN0aW9uX2RhdGEuY29sX3N0eWxlcyApO1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2xfc3R5bGVzJywganNvbiApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRzZWN0aW9uLmRhdGFzZXQuY29sX3N0eWxlcyA9IGpzb247XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyAoTm8gcmVuZGVyX3ByZXZpZXcoKSBjYWxsIGhlcmUgb24gcHVycG9zZTogc2VjdGlvbnPigJkgYnVpbGRlciBET00gdXNlcyAud3BiY19iZmJfX3Jvdy8ud3BiY19iZmJfX2NvbHVtbi4pXHJcblxyXG5cclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/LmNzc2NsYXNzICkge1xyXG5cdFx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycsIFN0cmluZyggc2VjdGlvbl9kYXRhLmNzc2NsYXNzICkgKTtcclxuXHRcdFx0XHQvLyBrZWVwIGNvcmUgY2xhc3NlcywgdGhlbiBhZGQgY3VzdG9tIGNsYXNzKGVzKVxyXG5cdFx0XHRcdFN0cmluZyggc2VjdGlvbl9kYXRhLmNzc2NsYXNzICkuc3BsaXQoIC9cXHMrLyApLmZpbHRlciggQm9vbGVhbiApLmZvckVhY2goIGNscyA9PiBzZWN0aW9uLmNsYXNzTGlzdC5hZGQoIGNscyApICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJvdyA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHQvLyBEZWxlZ2F0ZSBwYXJzaW5nICsgYWN0aXZhdGlvbiArIGFwcGxpY2F0aW9uIHRvIHRoZSBDb2x1bW4gU3R5bGVzIHNlcnZpY2UuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QganNvbiA9IHNlY3Rpb24uZ2V0QXR0cmlidXRlKCAnZGF0YS1jb2xfc3R5bGVzJyApXHJcblx0XHRcdFx0XHR8fCAoc2VjdGlvbi5kYXRhc2V0ID8gKHNlY3Rpb24uZGF0YXNldC5jb2xfc3R5bGVzIHx8ICcnKSA6ICcnKTtcclxuXHRcdFx0XHRjb25zdCBhcnIgID0gVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5wYXJzZV9jb2xfc3R5bGVzKCBqc29uICk7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5hcHBseSggc2VjdGlvbiwgYXJyICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29sc19kYXRhLmZvckVhY2goIChjb2xfZGF0YSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5zX29ubHkgID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKTtcclxuXHRcdFx0XHRjb25zdCBjb2wgICAgICAgICAgID0gY29sdW1uc19vbmx5W2luZGV4XTtcclxuXHRcdFx0XHRjb2wuc3R5bGUuZmxleEJhc2lzID0gY29sX2RhdGEud2lkdGggfHwgJzEwMCUnO1xyXG5cdFx0XHRcdChjb2xfZGF0YS5pdGVtcyB8fCBbXSkuZm9yRWFjaCggKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmICggIWl0ZW0gfHwgIWl0ZW0udHlwZSApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdmaWVsZCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gYi5idWlsZF9maWVsZCggaXRlbS5kYXRhICk7XHJcblx0XHRcdFx0XHRcdGlmICggZWwgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sLmFwcGVuZENoaWxkKCBlbCApO1xyXG5cdFx0XHRcdFx0XHRcdGIudHJpZ2dlcl9maWVsZF9kcm9wX2NhbGxiYWNrKCBlbCwgJ2xvYWQnICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWJ1aWxkX3NlY3Rpb24oIGl0ZW0uZGF0YSwgY29sICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGVkID0gYi5sYXlvdXQuY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvdywgYi5jb2xfZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0Yi5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGNvbXB1dGVkLmJhc2VzICk7XHJcblx0XHRcdHRoaXMuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyggc2VjdGlvbiApO1xyXG5cclxuXHRcdFx0Ly8gTkVXOiByZXRhZyBVSURzIGZpcnN0IChzbyB1bmlxdWVuZXNzIGNoZWNrcyBkb24ndCBleGNsdWRlIG9yaWdpbmFscyksIHRoZW4gZGVkdXBlIGFsbCBrZXlzLlxyXG5cdFx0XHR0aGlzLl9yZXRhZ191aWRzX2luX3N1YnRyZWUoIHNlY3Rpb24gKTtcclxuXHRcdFx0dGhpcy5fZGVkdXBlX3N1YnRyZWVfc3RyaWN0KCBzZWN0aW9uICk7XHJcblx0XHRcdHJldHVybiBzZWN0aW9uO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgKi9cclxuXHRcdGluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXMoY29udGFpbmVyKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICkgKSB7XHJcblx0XHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGNvbnRhaW5lciApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19zZWN0aW9uJyApLmZvckVhY2goIChzZWN0aW9uKSA9PiB7XHJcblx0XHRcdFx0c2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19jb2x1bW4nICkuZm9yRWFjaCggKGNvbCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGNvbCApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgKi9cclxuXHRcdGluaXRfc2VjdGlvbl9zb3J0YWJsZShjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCAhY29udGFpbmVyICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc19jb2x1bW4gICAgPSBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKTtcclxuXHRcdFx0Y29uc3QgaXNfdG9wX2xldmVsID0gY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdGlmICggIWlzX2NvbHVtbiAmJiAhaXNfdG9wX2xldmVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRiLmluaXRfc29ydGFibGU/LiggY29udGFpbmVyICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIG9mIHBhZ2VzL3NlY3Rpb25zL2ZpZWxkcy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9TdHJ1Y3R1cmVfSU8gPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XG5cdFx0aW5pdCgpIHtcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc3RydWN0dXJlICAgICAgICA9ICgpID0+IHRoaXMuc2VyaWFsaXplKCk7XG5cdFx0XHR0aGlzLmJ1aWxkZXIubG9hZF9zYXZlZF9zdHJ1Y3R1cmUgPSAocywgb3B0cykgPT4gdGhpcy5kZXNlcmlhbGl6ZSggcywgb3B0cyApO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE5vcm1hbGl6ZSBvcHRpb24gdmFsdWVzIHdoZW4gYSBmaWVsZCBleHBsaWNpdGx5IGRpc2FibGVzIHNlcGFyYXRlIHZhbHVlcy5cblx0XHQgKlxuXHRcdCAqIE9sZGVyIEJ1aWxkZXIgdmVyc2lvbnMgcGVyc2lzdGVkIGFuIHVuY2hlY2tlZCB2YWx1ZV9kaWZmZXJzIHRvZ2dsZSBhcyBhblxuXHRcdCAqIGVtcHR5IHN0cmluZy4gVHJlYXQgdGhhdCBleHBsaWNpdCBsZWdhY3kgdmFsdWUgYXMgZmFsc2UsIHdoaWxlIHJldGFpbmluZ1xuXHRcdCAqIHRoZSBzY2hlbWEgZGVmYXVsdCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBnZW51aW5lbHkgYWJzZW50LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZpZWxkX2RhdGEgU2VyaWFsaXplZCBmaWVsZCBkYXRhLlxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9IE5vcm1hbGl6ZWQgc2VyaWFsaXplZCBmaWVsZCBkYXRhLlxuXHRcdCAqL1xuXHRcdF9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyhmaWVsZF9kYXRhKSB7XG5cdFx0XHRjb25zdCBoYXNfdmFsdWVfZGlmZmVycyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ3ZhbHVlX2RpZmZlcnMnICk7XG5cdFx0XHRpZiAoICFoYXNfdmFsdWVfZGlmZmVycyApIHtcblx0XHRcdFx0cmV0dXJuIGZpZWxkX2RhdGE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZhbHVlX2RpZmZlcnMgICA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIGZpZWxkX2RhdGEudmFsdWVfZGlmZmVycywgZmFsc2UgKTtcblx0XHRcdGZpZWxkX2RhdGEudmFsdWVfZGlmZmVycyA9IHZhbHVlX2RpZmZlcnM7XG5cblx0XHRcdGlmICggIXZhbHVlX2RpZmZlcnMgJiYgQXJyYXkuaXNBcnJheSggZmllbGRfZGF0YS5vcHRpb25zICkgKSB7XG5cdFx0XHRcdGZpZWxkX2RhdGEub3B0aW9ucyA9IGZpZWxkX2RhdGEub3B0aW9ucy5tYXAoICggb3B0aW9uX3JlY29yZCApID0+IHtcblx0XHRcdFx0XHRpZiAoICFvcHRpb25fcmVjb3JkIHx8IHR5cGVvZiBvcHRpb25fcmVjb3JkICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdFx0XHRcdHJldHVybiBvcHRpb25fcmVjb3JkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRvcHRpb25fcmVjb3JkLFxuXHRcdFx0XHRcdFx0eyB2YWx1ZTogU3RyaW5nKCBvcHRpb25fcmVjb3JkLmxhYmVsID09IG51bGwgPyAnJyA6IG9wdGlvbl9yZWNvcmQubGFiZWwgKSB9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmllbGRfZGF0YTtcblx0XHR9XG5cblx0XHQvKiogQHJldHVybnMge0FycmF5fSAqL1xuXHRcdHNlcmlhbGl6ZSgpIHtcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdHRoaXMuX25vcm1hbGl6ZV9pZHMoKTtcclxuXHRcdFx0dGhpcy5fbm9ybWFsaXplX25hbWVzKCk7XHJcblx0XHRcdGNvbnN0IHBhZ2VzID0gW107XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApLmZvckVhY2goIChwYWdlX2VsLCBwYWdlX2luZGV4KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdFx0Y29uc3QgY29udGVudCAgID0gW107XHJcblx0XHRcdFx0aWYgKCAhY29udGFpbmVyICkge1xyXG5cdFx0XHRcdFx0cGFnZXMucHVzaCggeyBwYWdlOiBwYWdlX2luZGV4ICsgMSwgY29udGVudCB9ICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gKicgKS5mb3JFYWNoKCAoY2hpbGQpID0+IHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQucHVzaCggeyB0eXBlOiAnc2VjdGlvbicsIGRhdGE6IHRoaXMuc2VyaWFsaXplX3NlY3Rpb24oIGNoaWxkICkgfSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGNoaWxkLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1pbnZhbGlkJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCBmX2RhdGEgPSB0aGlzLl9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyhcblx0XHRcdFx0XHRcdFx0Q29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGNoaWxkIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHQvLyBEcm9wIGVwaGVtZXJhbC9lZGl0b3Itb25seSBmbGFnc1xyXG5cdFx0XHRcdFx0XHRbICd1aWQnLCAnZnJlc2gnLCAnYXV0b25hbWUnLCAnd2FzX2xvYWRlZCcsICduYW1lX3VzZXJfdG91Y2hlZCcgXVxyXG5cdFx0XHRcdFx0XHRcdC5mb3JFYWNoKCBrID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggayBpbiBmX2RhdGEgKSBkZWxldGUgZl9kYXRhW2tdO1xyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0Y29udGVudC5wdXNoKCB7IHR5cGU6ICdmaWVsZCcsIGRhdGE6IGZfZGF0YSB9ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdHBhZ2VzLnB1c2goIHsgcGFnZTogcGFnZV9pbmRleCArIDEsIGNvbnRlbnQgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiBwYWdlcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEByZXR1cm5zIHt7aWQ6c3RyaW5nLGxhYmVsOnN0cmluZyxodG1sX2lkOnN0cmluZyxjc3NjbGFzczpzdHJpbmcsY29sX3N0eWxlczpzdHJpbmcsY29sdW1uczpBcnJheX19XHJcblx0XHQgKi9cclxuXHRcdHNlcmlhbGl6ZV9zZWN0aW9uKHNlY3Rpb25fZWwpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgcGVyLWNvbHVtbiBzdHlsZXMgZnJvbSBkYXRhc2V0L2F0dHJpYnV0ZXMgKHVuZGVyc2NvcmUgJiBoeXBoZW4pXHJcblx0XHRcdHZhciBjb2xfc3R5bGVzX3JhdyA9XHJcblx0XHRcdFx0XHRzZWN0aW9uX2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY29sX3N0eWxlcycgKSB8fFxyXG5cdFx0XHRcdFx0KHNlY3Rpb25fZWwuZGF0YXNldCA/IChzZWN0aW9uX2VsLmRhdGFzZXQuY29sX3N0eWxlcykgOiAnJykgfHxcclxuXHRcdFx0XHRcdCcnO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFzZSA9IHtcclxuXHRcdFx0XHRpZCAgICAgICAgOiBzZWN0aW9uX2VsLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0bGFiZWwgICAgIDogc2VjdGlvbl9lbC5kYXRhc2V0LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdGh0bWxfaWQgICA6IHNlY3Rpb25fZWwuZGF0YXNldC5odG1sX2lkIHx8ICcnLFxyXG5cdFx0XHRcdGNzc2NsYXNzICA6IHNlY3Rpb25fZWwuZGF0YXNldC5jc3NjbGFzcyB8fCAnJyxcclxuXHRcdFx0XHRjb2xfc3R5bGVzOiBTdHJpbmcoIGNvbF9zdHlsZXNfcmF3ICkgICAgICAgIC8vIDwtLSBORVc6IGtlZXAgYXMgcmF3IEpTT04gc3RyaW5nXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHt9LCBiYXNlLCB7IGNvbHVtbnM6IFtdIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IFtdO1xyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmZvckVhY2goIGZ1bmN0aW9uIChjb2wpIHtcclxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGNvbC5zdHlsZS5mbGV4QmFzaXMgfHwgJzEwMCUnO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gW107XHJcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1zLnB1c2goIHsgdHlwZTogJ3NlY3Rpb24nLCBkYXRhOiB0aGlzLnNlcmlhbGl6ZV9zZWN0aW9uKCBjaGlsZCApIH0gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtaW52YWxpZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgZl9kYXRhID0gdGhpcy5fbm9ybWFsaXplX2ZpZWxkX29wdGlvbl92YWx1ZXMoXG5cdFx0XHRcdFx0XHRcdENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBjaGlsZCApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0WyAndWlkJywgJ2ZyZXNoJywgJ2F1dG9uYW1lJywgJ3dhc19sb2FkZWQnLCAnbmFtZV91c2VyX3RvdWNoZWQnIF0uZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGsgaW4gZl9kYXRhICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGZfZGF0YVtrXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0aXRlbXMucHVzaCggeyB0eXBlOiAnZmllbGQnLCBkYXRhOiBmX2RhdGEgfSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0uYmluZCggdGhpcyApICk7XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKCB7IHdpZHRoOiB3aWR0aCwgaXRlbXM6IGl0ZW1zIH0gKTtcclxuXHRcdFx0fS5iaW5kKCB0aGlzICkgKTtcclxuXHJcblx0XHRcdC8vIENsYW1wIHBlcnNpc3RlZCBjb2xfc3R5bGVzIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvbHVtbnMgb24gU2F2ZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBjb2xDb3VudCA9IGNvbHVtbnMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IHJhdyAgICAgID0gU3RyaW5nKCBjb2xfc3R5bGVzX3JhdyB8fCAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0XHRsZXQgYXJyID0gW107XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKCByYXcgKTtcclxuXHRcdFx0XHRcdFx0YXJyICAgICAgICAgID0gQXJyYXkuaXNBcnJheSggcGFyc2VkICkgPyBwYXJzZWQgOiAocGFyc2VkICYmIEFycmF5LmlzQXJyYXkoIHBhcnNlZC5jb2x1bW5zICkgPyBwYXJzZWQuY29sdW1ucyA6IFtdKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0YXJyID0gW107XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjb2xDb3VudCA8PSAwICkge1xyXG5cdFx0XHRcdFx0XHRiYXNlLmNvbF9zdHlsZXMgPSAnW10nO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBhcnIubGVuZ3RoID4gY29sQ291bnQgKSBhcnIubGVuZ3RoID0gY29sQ291bnQ7XHJcblx0XHRcdFx0XHRcdHdoaWxlICggYXJyLmxlbmd0aCA8IGNvbENvdW50ICkgYXJyLnB1c2goIHt9ICk7XHJcblx0XHRcdFx0XHRcdGJhc2UuY29sX3N0eWxlcyA9IEpTT04uc3RyaW5naWZ5KCBhcnIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YmFzZS5jb2xfc3R5bGVzID0gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKCB7fSwgYmFzZSwgeyBjb2x1bW5zOiBjb2x1bW5zIH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHN0cnVjdHVyZVxyXG5cdFx0ICogQHBhcmFtIHt7ZGVmZXJJZlR5cGluZz86IGJvb2xlYW59fSBbb3B0cyA9IHt9XVxyXG5cdFx0ICovXHJcblx0XHRkZXNlcmlhbGl6ZShzdHJ1Y3R1cmUsIHsgZGVmZXJJZlR5cGluZyA9IHRydWUgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggZGVmZXJJZlR5cGluZyAmJiB0aGlzLl9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLl9kZWZlcl90aW1lciApO1xyXG5cdFx0XHRcdHRoaXMuX2RlZmVyX3RpbWVyID0gc2V0VGltZW91dCggKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5kZXNlcmlhbGl6ZSggc3RydWN0dXJlLCB7IGRlZmVySWZUeXBpbmc6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHR9LCAxNTAgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdGIucGFnZV9jb3VudGVyICAgICAgICAgICAgICA9IDA7XHJcblx0XHRcdChzdHJ1Y3R1cmUgfHwgW10pLmZvckVhY2goIChwYWdlX2RhdGEpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYWdlX2VsICAgICAgICAgICAgICAgPSBiLnBhZ2VzX3NlY3Rpb25zLmFkZF9wYWdlKCB7IHNjcm9sbDogZmFsc2UgfSApO1xyXG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25fY29udGFpbmVyICAgICA9IHBhZ2VfZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdFx0XHRcdHNlY3Rpb25fY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdGIuaW5pdF9zZWN0aW9uX3NvcnRhYmxlPy4oIHNlY3Rpb25fY29udGFpbmVyICk7XHJcblx0XHRcdFx0KHBhZ2VfZGF0YS5jb250ZW50IHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0Ly8gTm93IHJldHVybnMgdGhlIGVsZW1lbnQ7IGF0dHJpYnV0ZXMgKGluY2wuIGNvbF9zdHlsZXMpIGFyZSBhcHBsaWVkIGluc2lkZSByZWJ1aWxkLlxyXG5cdFx0XHRcdFx0XHRiLnBhZ2VzX3NlY3Rpb25zLnJlYnVpbGRfc2VjdGlvbiggaXRlbS5kYXRhLCBzZWN0aW9uX2NvbnRhaW5lciApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBiLmJ1aWxkX2ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5hcHBlbmRDaGlsZCggZWwgKTtcclxuXHRcdFx0XHRcdFx0XHRiLnRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayggZWwsICdsb2FkJyApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0Yi5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgeyBzdHJ1Y3R1cmUgfSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9ub3JtYWxpemVfaWRzKCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkOm5vdCguaXMtaW52YWxpZCknICkuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHdhbnQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIGRhdGEuaWQgfHwgJycgKSB8fCAnZmllbGQnO1xyXG5cdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfaWQoIHdhbnQsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLmlkICE9PSB1bmlxICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIHVuaXEgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIGVsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X25vcm1hbGl6ZV9uYW1lcygpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKTtcclxuXHRcdFx0XHRjb25zdCBiYXNlID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIChkYXRhLm5hbWUgIT0gbnVsbCkgPyBkYXRhLm5hbWUgOiBkYXRhLmlkICkgfHwgJ2ZpZWxkJztcclxuXHRcdFx0XHRjb25zdCB1bmlxID0gYi5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLm5hbWUgIT09IHVuaXEgKSB7XHJcblx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRpZiAoIGIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cclxuXHRcdF9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdHJldHVybiAhIShpbnMgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpbnMuY29udGFpbnMoIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWluaW1hbCwgc3RhbmRhbG9uZSBndWFyZCB0aGF0IGVuZm9yY2VzIHBlci1jb2x1bW4gbWluIHdpZHRocyBiYXNlZCBvbiBmaWVsZHMnIGRhdGEtbWluX3dpZHRoLlxyXG5cdCAqXHJcblx0ICogQHR5cGUge1VJLldQQkNfQkZCX01pbl9XaWR0aF9HdWFyZH1cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHRzdXBlciggYnVpbGRlciApO1xyXG5cdFx0XHR0aGlzLl9vbl9maWVsZF9hZGQgICAgICAgID0gdGhpcy5fb25fZmllbGRfYWRkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fZmllbGRfcmVtb3ZlICAgICA9IHRoaXMuX29uX2ZpZWxkX3JlbW92ZS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgPSB0aGlzLl9vbl9zdHJ1Y3R1cmVfbG9hZGVkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fc3RydWN0dXJlX2NoYW5nZSA9IHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl93aW5kb3dfcmVzaXplICAgID0gdGhpcy5fb25fd2luZG93X3Jlc2l6ZS5iaW5kKCB0aGlzICk7XHJcblxyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MgPSBuZXcgU2V0KCk7XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsICA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgICAgICAgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub24/LiggRVYuRklFTERfUkVNT1ZFLCB0aGlzLl9vbl9maWVsZF9yZW1vdmUgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLlNUUlVDVFVSRV9MT0FERUQsIHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgKTtcclxuXHRcdFx0Ly8gUmVmcmVzaCBzZWxlY3RpdmVseSBvbiBzdHJ1Y3R1cmUgY2hhbmdlIChOT1Qgb24gZXZlcnkgcHJvcCBpbnB1dCkuXHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCB0aGlzLl9vbl9zdHJ1Y3R1cmVfY2hhbmdlICk7XHJcblxyXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3Jlc2l6ZScsIHRoaXMuX29uX3dpbmRvd19yZXNpemUsIHsgcGFzc2l2ZTogdHJ1ZSB9ICk7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0Y29uc3QgRVYgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9mZj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLkZJRUxEX1JFTU9WRSwgdGhpcy5fb25fZmllbGRfcmVtb3ZlICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vZmY/LiggRVYuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fc3RydWN0dXJlX2xvYWRlZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UgKTtcclxuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCB0aGlzLl9vbl93aW5kb3dfcmVzaXplICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX2FkZChlKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdC8vIGlmIHlvdSByZWFsbHkgd2FudCB0byBiZSBtaW5pbWFsIHdvcmsgaGVyZSwga2VlcCB5b3VyIHJvdy1vbmx5IHZlcnNpb24uXHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX3JlbW92ZShlKSB7XHJcblx0XHRcdGNvbnN0IHNyY19lbCA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ICAgID0gKHNyY19lbCAmJiBzcmNfZWwuY2xvc2VzdCkgPyBzcmNfZWwuY2xvc2VzdCggJy53cGJjX2JmYl9fcm93JyApIDogbnVsbDtcclxuXHRcdFx0aWYgKCByb3cgKSB7XHJcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9yb3coIHJvdyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2xvYWRlZCgpIHtcclxuXHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9hbGwoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2NoYW5nZShlKSB7XHJcblx0XHRcdGNvbnN0IHJlYXNvbiA9IGU/LmRldGFpbD8ucmVhc29uIHx8ICcnO1xyXG5cdFx0XHRjb25zdCBrZXkgICAgPSBlPy5kZXRhaWw/LmtleSB8fCAnJztcclxuXHJcblx0XHRcdC8vIElnbm9yZSBub2lzeSBwcm9wIGNoYW5nZXMgdGhhdCBkb24ndCBhZmZlY3QgbWluIHdpZHRocy5cclxuXHRcdFx0aWYgKCByZWFzb24gPT09ICdwcm9wLWNoYW5nZScgJiYga2V5ICE9PSAnbWluX3dpZHRoJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGVsICA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ID0gZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fcm93JyApIHx8IG51bGw7XHJcblx0XHRcdGlmICggcm93ICkge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfcm93KCByb3cgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX3dpbmRvd19yZXNpemUoKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3NjaGVkdWxlX3JlZnJlc2hfcm93KHJvd19lbCkge1xyXG5cdFx0XHRpZiAoICFyb3dfZWwgKSByZXR1cm47XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfcm93cy5hZGQoIHJvd19lbCApO1xyXG5cdFx0XHR0aGlzLl9raWNrX3JhZigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5fcGVuZGluZ19hbGwgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0dGhpcy5fa2lja19yYWYoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfa2lja19yYWYoKSB7XHJcblx0XHRcdGlmICggdGhpcy5fcmFmX2lkICkgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgPSAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBzZXRUaW1lb3V0KSggKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX3JhZl9pZCA9IDA7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9wZW5kaW5nX2FsbCApIHtcclxuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2hfYWxsKCk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKCB0aGlzLl9wZW5kaW5nX3Jvd3MgKTtcclxuXHRcdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0XHRyb3dzLmZvckVhY2goIChyKSA9PiB0aGlzLnJlZnJlc2hfcm93KCByICkgKTtcclxuXHRcdFx0fSwgMCApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRyZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5wYWdlc19jb250YWluZXJcclxuXHRcdFx0XHQ/LnF1ZXJ5U2VsZWN0b3JBbGw/LiggJy53cGJjX2JmYl9fcm93JyApXHJcblx0XHRcdFx0Py5mb3JFYWNoPy4oIChyb3cpID0+IHRoaXMucmVmcmVzaF9yb3coIHJvdyApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVmcmVzaF9yb3cocm93X2VsKSB7XHJcblx0XHRcdGlmICggIXJvd19lbCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSByb3dfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cclxuXHRcdFx0Ly8gMSkgUmVjYWxjdWxhdGUgZWFjaCBjb2x1bW7igJlzIHJlcXVpcmVkIG1pbiBweCBhbmQgd3JpdGUgaXQgdG8gdGhlIENTUyB2YXIuXHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKGNvbCkgPT4gdGhpcy5hcHBseV9jb2xfbWluKCBjb2wgKSApO1xyXG5cclxuXHRcdFx0Ly8gMikgRW5mb3JjZSBpdCBhdCB0aGUgQ1NTIGxldmVsIHJpZ2h0IGF3YXkgc28gbGF5b3V0IGNhbuKAmXQgcmVuZGVyIG5hcnJvd2VyLlxyXG5cdFx0XHRjb2xzLmZvckVhY2goIChjb2wpID0+IHtcclxuXHRcdFx0XHRjb25zdCBweCAgICAgICAgICAgPSBwYXJzZUZsb2F0KCBnZXRDb21wdXRlZFN0eWxlKCBjb2wgKS5nZXRQcm9wZXJ0eVZhbHVlKCAnLS13cGJjLWNvbC1taW4nICkgfHwgJzAnICkgfHwgMDtcclxuXHRcdFx0XHRjb2wuc3R5bGUubWluV2lkdGggPSBweCA+IDAgPyBNYXRoLnJvdW5kKCBweCApICsgJ3B4JyA6ICcnO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyAzKSBOb3JtYWxpemUgY3VycmVudCBiYXNlcyBzbyB0aGUgcm93IHJlc3BlY3RzIGFsbCBtaW5zIHdpdGhvdXQgb3ZlcmZsb3cuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgYiAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRcdGNvbnN0IGdwICA9IGIuY29sX2dhcF9wZXJjZW50O1xyXG5cdFx0XHRcdGNvbnN0IGVmZiA9IGIubGF5b3V0LmNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdwICk7ICAvLyB7IGJhc2VzLCBhdmFpbGFibGUgfVxyXG5cdFx0XHRcdC8vIFJlLWZpdCAqY3VycmVudCogYmFzZXMgYWdhaW5zdCBtaW5zIChzYW1lIGFsZ29yaXRobSBsYXlvdXQgY2hpcHMgdXNlKS5cclxuXHRcdFx0XHRjb25zdCBmaXR0ZWQgPSBVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluKCBiLCByb3dfZWwsIGVmZi5iYXNlcyApO1xyXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggZml0dGVkICkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkID0gZml0dGVkLnNvbWUoICh2LCBpKSA9PiBNYXRoLmFicyggdiAtIGVmZi5iYXNlc1tpXSApID4gMC4wMSApO1xyXG5cdFx0XHRcdFx0aWYgKCBjaGFuZ2VkICkge1xyXG5cdFx0XHRcdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgZml0dGVkICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdXUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgLSByZWZyZXNoX3JvdycsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGFwcGx5X2NvbF9taW4oY29sX2VsKSB7XHJcblx0XHRcdGlmICggIWNvbF9lbCApIHJldHVybjtcclxuXHRcdFx0bGV0IG1heF9weCAgICA9IDA7XHJcblx0XHRcdGNvbnN0IGNvbFJlY3QgPSBjb2xfZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdGNvbF9lbC5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19maWVsZCcgKS5mb3JFYWNoKCAoZmllbGQpID0+IHtcclxuXHRcdFx0XHRjb25zdCByYXcgPSBmaWVsZC5nZXRBdHRyaWJ1dGUoICdkYXRhLW1pbl93aWR0aCcgKTtcclxuXHRcdFx0XHRsZXQgcHggICAgPSAwO1xyXG5cdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcyA9IFN0cmluZyggcmF3ICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRpZiAoIHMuZW5kc1dpdGgoICclJyApICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggbiApICYmIGNvbFJlY3Qud2lkdGggPiAwICkge1xyXG5cdFx0XHRcdFx0XHRcdHB4ID0gKG4gLyAxMDApICogY29sUmVjdC53aWR0aDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRweCA9IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHB4ID0gdGhpcy5wYXJzZV9sZW5fcHgoIHMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKCBmaWVsZCApO1xyXG5cdFx0XHRcdFx0cHggICAgICAgPSBwYXJzZUZsb2F0KCBjcy5taW5XaWR0aCB8fCAnMCcgKSB8fCAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIHB4ID4gbWF4X3B4ICkgbWF4X3B4ID0gcHg7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0Y29sX2VsLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWNvbC1taW4nLCBtYXhfcHggPiAwID8gTWF0aC5yb3VuZCggbWF4X3B4ICkgKyAncHgnIDogJzBweCcgKTtcclxuXHRcdH1cclxuXHJcblx0XHRwYXJzZV9sZW5fcHgodmFsdWUpIHtcclxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsICkgcmV0dXJuIDA7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHZhbHVlICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdGlmICggcyA9PT0gJycgKSByZXR1cm4gMDtcclxuXHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAncHgnICkgKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHMuZW5kc1dpdGgoICdyZW0nICkgfHwgcy5lbmRzV2l0aCggJ2VtJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IG4gICAgPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdFx0Y29uc3QgYmFzZSA9IHBhcnNlRmxvYXQoIGdldENvbXB1dGVkU3R5bGUoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApLmZvbnRTaXplICkgfHwgMTY7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiAqIGJhc2UgOiAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gOiAwO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyXHJcblx0ICpcclxuXHQgKiBDb252ZXJ0cyBwbGFpbiBjaGVja2JveGVzIGludG8gdG9nZ2xlIFVJOlxyXG5cdCAqIDxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+XHJcblx0ICogICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJ7dW5pcXVlfVwiIGRhdGEtaW5zcGVjdG9yLWtleT1cIi4uLlwiIGNsYXNzPVwiaW5zcGVjdG9yX19pbnB1dFwiIHJvbGU9XCJzd2l0Y2hcIlxyXG5cdCAqIGFyaWEtY2hlY2tlZD1cInRydWV8ZmFsc2VcIj5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9pY29uXCIgIGZvcj1cInt1bmlxdWV9XCI+PC9sYWJlbD5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9sYWJlbFwiIGZvcj1cInt1bmlxdWV9XCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogLSBTa2lwcyBpbnB1dHMgYWxyZWFkeSBpbnNpZGUgYC53cGJjX3VpX190b2dnbGVgLlxyXG5cdCAqIC0gUmV1c2VzIGFuIGV4aXN0aW5nIDxsYWJlbCBmb3I9XCIuLi5cIj4gdGV4dCBpZiBwcmVzZW50OyBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBuZWFyYnkgbGFiZWxzIG9yIGF0dHJpYnV0ZXMuXHJcblx0ICogLSBBdXRvLWdlbmVyYXRlcyBhIHVuaXF1ZSBpZCB3aGVuIGFic2VudC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVwZ3JhZGUgYWxsIHJhdyBjaGVja2JveGVzIGluIGEgY29udGFpbmVyIHRvIHRvZ2dsZXMuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290X2VsXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB1cGdyYWRlX2NoZWNrYm94ZXNfaW4ocm9vdF9lbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhcm9vdF9lbCB8fCAhcm9vdF9lbC5xdWVyeVNlbGVjdG9yQWxsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGlucHV0cyA9IHJvb3RfZWwucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKTtcclxuXHRcdFx0aWYgKCAhaW5wdXRzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIGlucHV0cywgZnVuY3Rpb24gKGlucHV0KSB7XHJcblxyXG5cdFx0XHRcdC8vIDEpIFNraXAgaWYgYWxyZWFkeSBpbnNpZGUgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbG9zZXN0KCAnLndwYmNfdWlfX3RvZ2dsZScgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gU2tpcCByb3dzIC8gd2hlcmUgaW5wdXQgY2hlY2tib3ggZXhwbGljaXRseSBtYXJrZWQgd2l0aCAgYXR0cmlidXRlICdkYXRhLXdwYmMtdWktbm8tdG9nZ2xlJy5cclxuXHRcdFx0XHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtd3BiYy11aS1uby10b2dnbGUnICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAyKSBFbnN1cmUgdW5pcXVlIGlkOyBwcmVmZXIgZXhpc3RpbmcuXHJcblx0XHRcdFx0dmFyIGlucHV0X2lkID0gaW5wdXQuZ2V0QXR0cmlidXRlKCAnaWQnICk7XHJcblx0XHRcdFx0aWYgKCAhaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0XHR2YXIga2V5ICA9IChpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5KSA/IFN0cmluZyggaW5wdXQuZGF0YXNldC5pbnNwZWN0b3JLZXkgKSA6ICdvcHQnO1xyXG5cdFx0XHRcdFx0aW5wdXRfaWQgPSBVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplci5nZW5lcmF0ZV91bmlxdWVfaWQoICd3cGJjX2luc19hdXRvXycgKyBrZXkgKyAnXycgKTtcclxuXHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggJ2lkJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIDMpIEZpbmQgYmVzdCBsYWJlbCB0ZXh0LlxyXG5cdFx0XHRcdHZhciBsYWJlbF90ZXh0ID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIucmVzb2x2ZV9sYWJlbF90ZXh0KCByb290X2VsLCBpbnB1dCwgaW5wdXRfaWQgKTtcclxuXHJcblx0XHRcdFx0Ly8gNCkgQnVpbGQgdGhlIHRvZ2dsZSB3cmFwcGVyLlxyXG5cdFx0XHRcdHZhciB3cmFwcGVyICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHR3cmFwcGVyLmNsYXNzTmFtZSA9ICdpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlJztcclxuXHJcblx0XHRcdFx0Ly8gS2VlcCBvcmlnaW5hbCBpbnB1dDsganVzdCBtb3ZlIGl0IGludG8gd3JhcHBlci5cclxuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCAnaW5zcGVjdG9yX19pbnB1dCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdyb2xlJywgJ3N3aXRjaCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cclxuXHRcdFx0XHR2YXIgaWNvbl9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfaWNvbic7XHJcblx0XHRcdFx0aWNvbl9sYWJlbC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cclxuXHRcdFx0XHR2YXIgdGV4dF9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfbGFiZWwnO1xyXG5cdFx0XHRcdHRleHRfbGFiZWwuc2V0QXR0cmlidXRlKCAnZm9yJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHRcdC8vIDUpIEluc2VydCB3cmFwcGVyIGludG8gRE9NIG5lYXIgdGhlIGlucHV0LlxyXG5cdFx0XHRcdC8vICAgIFByZWZlcnJlZDogcmVwbGFjZSB0aGUgb3JpZ2luYWwgbGFiZWxlZCByb3cgaWYgaXQgbWF0Y2hlcyB0eXBpY2FsIGluc3BlY3RvciBsYXlvdXQuXHJcblx0XHRcdFx0dmFyIHJlcGxhY2VkID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIudHJ5X3JlcGxhY2Vfa25vd25fcm93KCBpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCApO1xyXG5cclxuXHRcdFx0XHRpZiAoICFyZXBsYWNlZCApIHtcclxuXHRcdFx0XHRcdGlmICggIWlucHV0LnBhcmVudE5vZGUgKSByZXR1cm47IC8vIE5FVyBndWFyZFxyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2s6IGp1c3Qgd3JhcCB0aGUgaW5wdXQgaW4gcGxhY2UgYW5kIGFwcGVuZCBsYWJlbHMuXHJcblx0XHRcdFx0XHRpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggd3JhcHBlciwgaW5wdXQgKTtcclxuXHRcdFx0XHRcdHdyYXBwZXIuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBpY29uX2xhYmVsICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCB0ZXh0X2xhYmVsICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyA2KSBBUklBIHN5bmMgb24gY2hhbmdlLlxyXG5cdFx0XHRcdGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2VuZXJhdGUgYSB1bmlxdWUgaWQgd2l0aCBhIGdpdmVuIHByZWZpeC5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZW5lcmF0ZV91bmlxdWVfaWQocHJlZml4KSB7XHJcblx0XHRcdHZhciBiYXNlID0gU3RyaW5nKCBwcmVmaXggfHwgJ3dwYmNfaW5zX2F1dG9fJyApO1xyXG5cdFx0XHR2YXIgdWlkICA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dmFyIGlkICAgPSBiYXNlICsgdWlkO1xyXG5cdFx0XHQvLyBNaW5pbWFsIGNvbGxpc2lvbiBndWFyZCBpbiB0aGUgY3VycmVudCBkb2N1bWVudCBzY29wZS5cclxuXHRcdFx0d2hpbGUgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHtcclxuXHRcdFx0XHR1aWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA4ICk7XHJcblx0XHRcdFx0aWQgID0gYmFzZSArIHVpZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXNvbHZlIHRoZSBiZXN0IGh1bWFuIGxhYmVsIGZvciBhbiBpbnB1dC5cclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogIDEpIDxsYWJlbCBmb3I9XCJ7aWR9XCI+dGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgMikgbmVhcmVzdCBzaWJsaW5nL3BhcmVudCAuaW5zcGVjdG9yX19sYWJlbCB0ZXh0XHJcblx0XHQgKiAgMykgaW5wdXQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgfHwgZGF0YS1sYWJlbCB8fCBkYXRhLWluc3BlY3Rvci1rZXkgfHwgbmFtZSB8fCAnT3B0aW9uJ1xyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdF9lbFxyXG5cdFx0ICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0X2lkXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVzb2x2ZV9sYWJlbF90ZXh0KHJvb3RfZWwsIGlucHV0LCBpbnB1dF9pZCkge1xyXG5cdFx0XHQvLyBmb3I9IGFzc29jaWF0aW9uXHJcblx0XHRcdGlmICggaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0dmFyIGFzc29jID0gcm9vdF9lbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWxbZm9yPVwiJyArIFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyLmNzc19lc2NhcGUoIGlucHV0X2lkICkgKyAnXCJdJyApO1xyXG5cdFx0XHRcdGlmICggYXNzb2MgJiYgYXNzb2MudGV4dENvbnRlbnQgKSB7XHJcblx0XHRcdFx0XHR2YXIgdHh0ID0gYXNzb2MudGV4dENvbnRlbnQudHJpbSgpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBvbGQgbGFiZWwgZnJvbSBET007IGl0cyB0ZXh0IHdpbGwgYmUgdXNlZCBieSB0b2dnbGUuXHJcblx0XHRcdFx0XHRhc3NvYy5wYXJlbnROb2RlICYmIGFzc29jLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGFzc29jICk7XHJcblx0XHRcdFx0XHRpZiAoIHR4dCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHR4dDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIG5lYXJieSBpbnNwZWN0b3IgbGFiZWxcclxuXHRcdFx0dmFyIG5lYXJfbGFiZWwgPSBpbnB1dC5jbG9zZXN0KCAnLmluc3BlY3Rvcl9fcm93JyApO1xyXG5cdFx0XHRpZiAoIG5lYXJfbGFiZWwgKSB7XHJcblx0XHRcdFx0dmFyIGlsID0gbmVhcl9sYWJlbC5xdWVyeVNlbGVjdG9yKCAnLmluc3BlY3Rvcl9fbGFiZWwnICk7XHJcblx0XHRcdFx0aWYgKCBpbCAmJiBpbC50ZXh0Q29udGVudCApIHtcclxuXHRcdFx0XHRcdHZhciB0MiA9IGlsLnRleHRDb250ZW50LnRyaW0oKTtcclxuXHRcdFx0XHRcdC8vIElmIHRoaXMgcm93IGhhZCB0aGUgc3RhbmRhcmQgbGFiZWwrY29udHJvbCwgZHJvcCB0aGUgb2xkIHRleHQgbGFiZWwgdG8gYXZvaWQgZHVwbGljYXRlcy5cclxuXHRcdFx0XHRcdGlsLnBhcmVudE5vZGUgJiYgaWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggaWwgKTtcclxuXHRcdFx0XHRcdGlmICggdDIgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0MjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGZhbGxiYWNrc1xyXG5cdFx0XHR2YXIgYXJpYSA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnICk7XHJcblx0XHRcdGlmICggYXJpYSApIHtcclxuXHRcdFx0XHRyZXR1cm4gYXJpYTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucHV0LmRhdGFzZXQgJiYgaW5wdXQuZGF0YXNldC5sYWJlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKCBpbnB1dC5kYXRhc2V0LmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5uYW1lICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0Lm5hbWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJ09wdGlvbic7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnkgdG8gcmVwbGFjZSBhIGtub3duIGluc3BlY3RvciByb3cgcGF0dGVybiB3aXRoIGEgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHQgKiBQYXR0ZXJuczpcclxuXHRcdCAqICA8ZGl2Lmluc3BlY3Rvcl9fcm93PlxyXG5cdFx0ICogICAgPGxhYmVsLmluc3BlY3Rvcl9fbGFiZWw+VGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgICA8ZGl2Lmluc3BlY3Rvcl9fY29udHJvbD4gW2lucHV0W3R5cGU9Y2hlY2tib3hdXSA8L2Rpdj5cclxuXHRcdCAqICA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB3cmFwcGVyXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmVwbGFjZWRcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHRyeV9yZXBsYWNlX2tub3duX3JvdyhpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCkge1xyXG5cdFx0XHR2YXIgcm93ICAgICAgID0gaW5wdXQuY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGlucHV0LnBhcmVudEVsZW1lbnQ7XHJcblxyXG5cdFx0XHRpZiAoIHJvdyAmJiBjdHJsX3dyYXAgJiYgY3RybF93cmFwLmNsYXNzTGlzdC5jb250YWlucyggJ2luc3BlY3Rvcl9fY29udHJvbCcgKSApIHtcclxuXHRcdFx0XHQvLyBDbGVhciBjb250cm9sIHdyYXAgYW5kIHJlaW5zZXJ0IHRvZ2dsZSBzdHJ1Y3R1cmUuXHJcblx0XHRcdFx0d2hpbGUgKCBjdHJsX3dyYXAuZmlyc3RDaGlsZCApIHtcclxuXHRcdFx0XHRcdGN0cmxfd3JhcC5yZW1vdmVDaGlsZCggY3RybF93cmFwLmZpcnN0Q2hpbGQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93LmNsYXNzTGlzdC5hZGQoICdpbnNwZWN0b3JfX3Jvdy0tdG9nZ2xlJyApO1xyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuY2xhc3NMaXN0LmFkZCggJ3dwYmNfdWlfX3RvZ2dsZScgKTtcclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblxyXG5cdFx0XHRcdHZhciBpbnB1dF9pZCAgICAgICA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdHZhciBpY29uX2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2ljb24nO1xyXG5cdFx0XHRcdGljb25fbGJsLnNldEF0dHJpYnV0ZSggJ2ZvcicsIGlucHV0X2lkICk7XHJcblxyXG5cdFx0XHRcdHZhciB0ZXh0X2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJztcclxuXHRcdFx0XHR0ZXh0X2xibC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cdFx0XHRcdGlmICggbGFiZWxfdGV4dCApIHtcclxuXHRcdFx0XHRcdHRleHRfbGJsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIElmIHRoZSByb3cgcHJldmlvdXNseSBoYWQgYSAuaW5zcGVjdG9yX19sYWJlbCAod2UgcmVtb3ZlZCBpdCBpbiByZXNvbHZlX2xhYmVsX3RleHQpLFxyXG5cdFx0XHRcdC8vIHdlIGludGVudGlvbmFsbHkgZG8gTk9UIHJlY3JlYXRlIGl0OyB0aGUgdG9nZ2xlIHRleHQgbGFiZWwgYmVjb21lcyB0aGUgdmlzaWJsZSBvbmUuXHJcblx0XHRcdFx0Ly8gVGhlIHRleHQgY29udGVudCBpcyBhbHJlYWR5IHJlc29sdmVkIGluIHJlc29sdmVfbGFiZWxfdGV4dCgpIGFuZCBzZXQgYmVsb3cgYnkgY2FsbGVyLlxyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGljb25fbGJsICk7XHJcblx0XHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCB0ZXh0X2xibCApO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOb3QgYSBrbm93biBwYXR0ZXJuOyBjYWxsZXIgd2lsbCB3cmFwIGluIHBsYWNlLlxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDU1MuZXNjYXBlIHBvbHlmaWxsIGZvciBzZWxlY3RvcnMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc1xyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGNzc19lc2NhcGUocykge1xyXG5cdFx0XHRzID0gU3RyaW5nKCBzICk7XHJcblx0XHRcdGlmICggd2luZG93LkNTUyAmJiB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5DU1MuZXNjYXBlKCBzICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHMucmVwbGFjZSggLyhbXlxcdy1dKS9nLCAnXFxcXCQxJyApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFwcGx5IGFsbCBVSSBub3JtYWxpemVycy9lbmhhbmNlcnMgdG8gYSBjb250YWluZXIgKHBvc3QtcmVuZGVyKS5cclxuXHQgKiBLZWVwIHRoaXMgZmlsZSBzbWFsbCBhbmQgYWRkIG1vcmUgbm9ybWFsaXplcnMgbGF0ZXIgaW4gb25lIHBsYWNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxyXG5cdCAqL1xyXG5cdFVJLmFwcGx5X3Bvc3RfcmVuZGVyID0gZnVuY3Rpb24gKHJvb3QpIHtcclxuXHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdFVJLldQQkNfQkZCX1ZhbHVlU2xpZGVyPy5pbml0X29uPy4oIHJvb3QgKTtcclxuXHRcdH0gY2F0Y2ggKCBlICkgeyAvKiBub29wICovXHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHR2YXIgVCA9IFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyO1xyXG5cdFx0XHRpZiAoIFQgJiYgdHlwZW9mIFQudXBncmFkZV9jaGVja2JveGVzX2luID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFQudXBncmFkZV9jaGVja2JveGVzX2luKCByb290ICk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdhcHBseV9wb3N0X3JlbmRlci50b2dnbGUnLCBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWNjZXNzaWJpbGl0eToga2VlcCBhcmlhLWNoZWNrZWQgaW4gc3luYyBmb3IgYWxsIHRvZ2dsZXMgaW5zaWRlIHJvb3QuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY191aV9fdG9nZ2xlIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY2IpIHtcclxuXHRcdFx0XHRpZiAoIGNiLl9fd3BiY19hcmlhX2hvb2tlZCApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2IuX193cGJjX2FyaWFfaG9va2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRjYi5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBjYi5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdC8vIERlbGVnYXRlIOKAmGNoYW5nZeKAmSBqdXN0IG9uY2UgcGVyIHJlbmRlciDigJMgbmF0aXZlIGRlbGVnYXRpb24gc3RpbGwgd29ya3MgZmluZSBmb3IgeW91ciBsb2dpYy5cclxuXHRcdFx0XHRjYi5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y2Iuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgY2IuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR9LCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnYXBwbHlfcG9zdF9yZW5kZXIuYXJpYScsIGUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRVSS5JbnNwZWN0b3JFbmhhbmNlcnMgPSBVSS5JbnNwZWN0b3JFbmhhbmNlcnMgfHwgKGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciByZWdzID0gW107XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgc2VsZWN0b3IsIGluaXQsIGRlc3Ryb3kpIHtcclxuXHRcdFx0cmVncy5wdXNoKCB7IG5hbWUsIHNlbGVjdG9yLCBpbml0LCBkZXN0cm95IH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzY2FuKHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHRub2RlLl9fd3BiY19laCA9IG5vZGUuX193cGJjX2VoIHx8IHt9O1xyXG5cdFx0XHRcdFx0aWYgKCBub2RlLl9fd3BiY19laFtyLm5hbWVdICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ci5pbml0ICYmIHIuaW5pdCggbm9kZSwgcm9vdCApO1xyXG5cdFx0XHRcdFx0XHRub2RlLl9fd3BiY19laFtyLm5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBkZXN0cm95KHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRyLmRlc3Ryb3kgJiYgci5kZXN0cm95KCBub2RlLCByb290ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIG5vZGUuX193cGJjX2VoICkgZGVsZXRlIG5vZGUuX193cGJjX2VoW3IubmFtZV07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgcmVnaXN0ZXIsIHNjYW4sIGRlc3Ryb3kgfTtcclxuXHR9KSgpO1xyXG5cclxuXHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlciA9IHtcclxuXHRcdGluaXRfb24ocm9vdCkge1xyXG5cdFx0XHR2YXIgZ3JvdXBzID0gKHJvb3Qubm9kZVR5cGUgPT09IDEgPyBbIHJvb3QgXSA6IFtdKS5jb25jYXQoIFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApICk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGcuX193cGJjX2xlbl93aXJlZCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0dmFyIG51bWJlciA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0dmFyIHJhbmdlICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0dmFyIHVuaXQgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhbnVtYmVyIHx8ICFyYW5nZSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gTWlycm9yIGNvbnN0cmFpbnRzIGlmIG1pc3Npbmcgb24gdGhlIHJhbmdlLlxyXG5cdFx0XHRcdFsgJ21pbicsICdtYXgnLCAnc3RlcCcgXS5mb3JFYWNoKCBmdW5jdGlvbiAoYSkge1xyXG5cdFx0XHRcdFx0aWYgKCAhcmFuZ2UuaGFzQXR0cmlidXRlKCBhICkgJiYgbnVtYmVyLmhhc0F0dHJpYnV0ZSggYSApICkge1xyXG5cdFx0XHRcdFx0XHRyYW5nZS5zZXRBdHRyaWJ1dGUoIGEsIG51bWJlci5nZXRBdHRyaWJ1dGUoIGEgKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHN5bmNfcmFuZ2VfZnJvbV9udW1iZXIoKSB7XHJcblx0XHRcdFx0XHRpZiAoIHJhbmdlLnZhbHVlICE9PSBudW1iZXIudmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnZhbHVlID0gbnVtYmVyLnZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gZGlzcGF0Y2hfaW5wdXQoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApOyB9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmdW5jdGlvbiBkaXNwYXRjaF9jaGFuZ2UoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTsgfSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRocm90dGxlIHJhbmdlLT5udW1iZXIgc3luY2luZyAodGltZS1iYXNlZCkuXHJcblx0XHRcdFx0dmFyIHRpbWVyX2lkICAgICAgID0gMDtcclxuXHRcdFx0XHR2YXIgcGVuZGluZ192YWwgICAgPSBudWxsO1xyXG5cdFx0XHRcdHZhciBwZW5kaW5nX2NoYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHZhciBsYXN0X2ZsdXNoX3RzICA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIENoYW5nZSB0aGlzIHRvIHR1bmUgc3BlZWQ6IDUwLi4xMjAgbXMgaXMgYSBnb29kIHJhbmdlLlxyXG5cdFx0XHRcdHZhciBtaW5faW50ZXJ2YWxfbXMgPSBwYXJzZUludCggZy5kYXRhc2V0LmxlblRocm90dGxlIHx8IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUywgMTAgKTtcclxuXHRcdFx0XHRtaW5faW50ZXJ2YWxfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIG1pbl9pbnRlcnZhbF9tcyApID8gTWF0aC5tYXgoIDAsIG1pbl9pbnRlcnZhbF9tcyApIDogMTIwO1xyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBmbHVzaF9yYW5nZV90b19udW1iZXIoKSB7XHJcblx0XHRcdFx0XHR0aW1lcl9pZCA9IDA7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX3ZhbCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dmFyIG5leHQgICAgPSBTdHJpbmcoIHBlbmRpbmdfdmFsICk7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBudW1iZXIudmFsdWUgIT09IG5leHQgKSB7XHJcblx0XHRcdFx0XHRcdG51bWJlci52YWx1ZSA9IG5leHQ7XHJcblx0XHRcdFx0XHRcdC8vIElNUE9SVEFOVDogb25seSAnaW5wdXQnIHdoaWxlIGRyYWdnaW5nLlxyXG5cdFx0XHRcdFx0XHRkaXNwYXRjaF9pbnB1dCggbnVtYmVyICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX2NoYW5nZSApIHtcclxuXHRcdFx0XHRcdFx0cGVuZGluZ19jaGFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0ZGlzcGF0Y2hfY2hhbmdlKCBudW1iZXIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRsYXN0X2ZsdXNoX3RzID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHNjaGVkdWxlX3JhbmdlX3RvX251bWJlcih2YWwsIGVtaXRfY2hhbmdlKSB7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICggZW1pdF9jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdHBlbmRpbmdfY2hhbmdlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBJZiBjb21taXQgcmVxdWVzdGVkLCBmbHVzaCBpbW1lZGlhdGVseS5cclxuXHRcdFx0XHRcdGlmICggcGVuZGluZ19jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdGltZXJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lcl9pZCApO1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRmbHVzaF9yYW5nZV90b19udW1iZXIoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBub3cgICA9IERhdGUubm93KCk7XHJcblx0XHRcdFx0XHR2YXIgZGVsdGEgPSBub3cgLSBsYXN0X2ZsdXNoX3RzO1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIGVub3VnaCB0aW1lIHBhc3NlZCwgZmx1c2ggaW1tZWRpYXRlbHk7IGVsc2Ugc2NoZWR1bGUuXHJcblx0XHRcdFx0XHRpZiAoIGRlbHRhID49IG1pbl9pbnRlcnZhbF9tcyApIHtcclxuXHRcdFx0XHRcdFx0Zmx1c2hfcmFuZ2VfdG9fbnVtYmVyKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHRpbWVyX2lkICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmbHVzaF9yYW5nZV90b19udW1iZXIsIE1hdGgubWF4KCAwLCBtaW5faW50ZXJ2YWxfbXMgLSBkZWx0YSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzeW5jX3JhbmdlX2Zyb21fbnVtYmVyKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzY2hlZHVsZV9yYW5nZV90b19udW1iZXIoIHJhbmdlLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyKCByYW5nZS52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bnVtYmVyLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsICBvbl9udW1iZXJfaW5wdXQgKTtcclxuXHRcdFx0XHRudW1iZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCAgb25fcmFuZ2VfaW5wdXQgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgb25fcmFuZ2VfY2hhbmdlICk7XHJcblxyXG5cdFx0XHRcdGlmICggdW5pdCApIHtcclxuXHRcdFx0XHRcdHVuaXQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UganVzdCBudWRnZSB0aGUgbnVtYmVyIHNvIHVwc3RyZWFtIGhhbmRsZXJzIHJlLXJ1bi5cclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRudW1iZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSW5pdGlhbCBzeW5jXHJcblx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cclxuXHRcdFx0XHRnLl9fd3BiY19sZW5fd2lyZWQgPSB7XHJcblx0XHRcdFx0XHRkZXN0cm95KCkge1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX251bWJlcl9pbnB1dCApO1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdFx0cmFuZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX3JhbmdlX2lucHV0ICk7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9yYW5nZV9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9LFxyXG5cdFx0ZGVzdHJveV9vbihyb290KSB7XHJcblx0XHRcdHZhciBncm91cHMgPSAocm9vdCAmJiByb290Lm5vZGVUeXBlID09PSAxID8gWyByb290IF0gOiBbXSkuY29uY2F0KFxyXG5cdFx0XHRcdFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApXHJcblx0XHRcdCk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Zy5fX3dwYmNfbGVuX3dpcmVkICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95ICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95KCk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkZWxldGUgZy5fX3dwYmNfbGVuX3dpcmVkO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gUmVnaXN0ZXIgd2l0aCB0aGUgZ2xvYmFsIGVuaGFuY2VycyBodWIuXHJcblx0VUkuSW5zcGVjdG9yRW5oYW5jZXJzICYmIFVJLkluc3BlY3RvckVuaGFuY2Vycy5yZWdpc3RlcihcclxuXHRcdCd2YWx1ZS1zbGlkZXInLFxyXG5cdFx0J1tkYXRhLWxlbi1ncm91cF0nLFxyXG5cdFx0ZnVuY3Rpb24gKGVsLCBfcm9vdCkge1xyXG5cdFx0XHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlci5pbml0X29uKCBlbCApO1xyXG5cdFx0fSxcclxuXHRcdGZ1bmN0aW9uIChlbCwgX3Jvb3QpIHtcclxuXHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXIuZGVzdHJveV9vbiggZWwgKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxuXHQvLyBTaW5nbGUsIGxvYWQtb3JkZXItc2FmZSBwYXRjaCBzbyBlbmhhbmNlcnMgYXV0by1ydW4gb24gZXZlcnkgYmluZC5cclxuXHQoZnVuY3Rpb24gcGF0Y2hJbnNwZWN0b3JFbmhhbmNlcnMoKSB7XHJcblx0XHRmdW5jdGlvbiBhcHBseVBhdGNoKCkge1xyXG5cdFx0XHR2YXIgSW5zcGVjdG9yID0gdy5XUEJDX0JGQl9JbnNwZWN0b3I7XHJcblx0XHRcdGlmICggIUluc3BlY3RvciB8fCBJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkID0gdHJ1ZTtcclxuXHRcdFx0dmFyIG9yaWcgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEluc3BlY3Rvci5wcm90b3R5cGUuYmluZF90b19maWVsZDtcclxuXHRcdFx0SW5zcGVjdG9yLnByb3RvdHlwZS5iaW5kX3RvX2ZpZWxkICA9IGZ1bmN0aW9uIChlbCkge1xyXG5cdFx0XHRcdG9yaWcuY2FsbCggdGhpcywgZWwgKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGlucyA9IHRoaXMucGFuZWxcclxuXHRcdFx0XHRcdFx0fHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApXHJcblx0XHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gSW5pdGlhbCBzY2FuIGlmIHRoZSBET00gaXMgYWxyZWFkeSBwcmVzZW50LlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBpbnNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKVxyXG5cdFx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zRWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRyeSBub3c7IGlmIEluc3BlY3RvciBpc27igJl0IGRlZmluZWQgeWV0LCBwYXRjaCB3aGVuIGl0IGJlY29tZXMgcmVhZHkuXHJcblx0XHRpZiAoICFhcHBseVBhdGNoKCkgKSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdFx0J3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsXHJcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0YXBwbHlQYXRjaCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0eyBvbmNlOiB0cnVlIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9KSgpO1xyXG5cclxufSggd2luZG93LCBkb2N1bWVudCApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fX2pzL2NvcmUvYmZiLXN5bmMtY29kZS10b29scy10YWIuanMgICB8IDIwMjYtMDQtMDYgfCAxNjozOFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdywgZCApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc3BhdGNoIHJlcXVlc3QgdG8gc2hvdyBhIHJpZ2h0IHNpZGViYXIgcGFuZWwuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGFuZWxfaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFiX2lkXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX19kaXNwYXRjaF9zaG93X3BhbmVsKCBwYW5lbF9pZCwgdGFiX2lkICkge1xyXG5cclxuXHRcdHZhciBldmVudF9kZXRhaWw7XHJcblxyXG5cdFx0aWYgKCAhIHBhbmVsX2lkIHx8ICEgdGFiX2lkICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0ZXZlbnRfZGV0YWlsID0ge1xyXG5cdFx0XHRwYW5lbF9pZDogcGFuZWxfaWQsXHJcblx0XHRcdHRhYl9pZCAgOiB0YWJfaWRcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmNfYmZiOnNob3dfcGFuZWwnLCBldmVudF9kZXRhaWwgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGQuZGlzcGF0Y2hFdmVudChcclxuXHRcdFx0bmV3IEN1c3RvbUV2ZW50KFxyXG5cdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRkZXRhaWw6IGV2ZW50X2RldGFpbFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN5bmMgcmlnaHQgc2lkZWJhciB3aXRoIHRvcCBtb2RlIHRhYnMuXHJcblx0ICpcclxuXHQgKiBVc2VzIHRvcCB0YWJzIG5hdiBhdHRyaWJ1dGUgYGRhdGEtYWN0aXZlLXRhYmAgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aC5cclxuXHQgKiBUaGlzIGF2b2lkcyBmYWxzZSBkZXRlY3Rpb24gb24gaW5pdGlhbCBwYWdlIGxvYWQsIGJlY2F1c2UgdG9wIHBhbmVscyBhcmVcclxuXHQgKiBoaWRkZW4gYnkgaW5saW5lIHN0eWxlIGBkaXNwbGF5Om5vbmVgLCBub3QgYnkgdGhlIGBoaWRkZW5gIGF0dHJpYnV0ZS5cclxuXHQgKi9cclxuXHRjbGFzcyBXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMge1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gbnVsbDtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcCA9IG51bGw7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfcGFuZWwgICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbnVsbDtcclxuXHRcdFx0dGhpcy5sYXN0X21vZGUgICAgICAgICA9ICcnO1xyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSA9IHRoaXMuc3luY19yaWdodGJhcl9tb2RlLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5oYW5kbGVfY2xpY2sgICAgICA9IHRoaXMuaGFuZGxlX2NsaWNrLmJpbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEluaXQgY29udHJvbGxlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gZC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX190b3BfaG9yaXNvbnRhbF9uYXYnICk7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3JpZ2h0YmFyX3RhYl93cmFwLS1hZHZhbmNlZF90b29scycgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF9wYW5lbCAgICA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yX2FkdmFuY2VkX3Rvb2xzJyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgfHwgISB0aGlzLmFkdmFuY2VkX3BhbmVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT2JzZXJ2ZSBhY3RpdmUgdGFiIGNoYW5nZXMgaW4gdGhlIHRvcCB0YWJzIG5hdi5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIHRoaXMuc3luY19yaWdodGJhcl9tb2RlICk7XHJcblx0XHRcdFx0dGhpcy5tdXRhdGlvbl9vYnNlcnZlci5vYnNlcnZlKFxyXG5cdFx0XHRcdFx0dGhpcy50b3BfdGFic19uYXYsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXMgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbICdkYXRhLWFjdGl2ZS10YWInIF1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjayBmb3IgY2xpY2stZHJpdmVuIHN3aXRjaGluZy5cclxuXHRcdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLmhhbmRsZV9jbGljaywgdHJ1ZSApO1xyXG5cclxuXHRcdFx0Ly8gSW5pdGlhbCBzeW5jLlxyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFjdGl2ZSB0b3AgdGFiIGlkLlxyXG5cdFx0ICpcclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogMS4gZGF0YS1hY3RpdmUtdGFiIGZyb20gdG9wIHRhYnMgbmF2XHJcblx0XHQgKiAyLiBhY3RpdmUgQ1NTIGNsYXNzIGluIG5hdlxyXG5cdFx0ICogMy4gdmlzaWJsZSB0b3AgcGFuZWwgZmFsbGJhY2tcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdGdldF9hY3RpdmVfdG9wX3RhYl9pZCgpIHtcclxuXHRcdFx0dmFyIGFjdGl2ZV90YWJfaWQgPSAnJztcclxuXHRcdFx0dmFyIGFjdGl2ZV9saW5rICAgPSBudWxsO1xyXG5cdFx0XHR2YXIgYWR2YW5jZWRfcGFuZWwgPSBudWxsO1xyXG5cdFx0XHR2YXIgYnVpbGRlcl9wYW5lbCAgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCB0aGlzLnRvcF90YWJzX25hdi5nZXRBdHRyaWJ1dGUoICdkYXRhLWFjdGl2ZS10YWInICkgfHwgJycgKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAnJyAhPT0gYWN0aXZlX3RhYl9pZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YWN0aXZlX2xpbmsgPSB0aGlzLnRvcF90YWJzX25hdi5xdWVyeVNlbGVjdG9yKCAnLndwYmNfdWlfZWxfX2hvcmlzX25hdl9pdGVtLmFjdGl2ZSBbZGF0YS13cGJjLWJmYi10YWJdJyApO1xyXG5cdFx0XHRcdGlmICggYWN0aXZlX2xpbmsgKSB7XHJcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCBhY3RpdmVfbGluay5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSB8fCAnJyApLnRyaW0oKTtcclxuXHRcdFx0XHRcdGlmICggJycgIT09IGFjdGl2ZV90YWJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmluYWwgZmFsbGJhY2s6IGRldGVjdCB2aXNpYmxlIHBhbmVsLlxyXG5cdFx0XHRhZHZhbmNlZF9wYW5lbCA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uX19hZHZhbmNlZF90YWInICk7XHJcblx0XHRcdGJ1aWxkZXJfcGFuZWwgID0gZC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX190b3BfdGFiX3NlY3Rpb25fX2J1aWxkZXJfdGFiJyApO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYWR2YW5jZWRfcGFuZWwgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gJ2FkdmFuY2VkX3RhYic7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYnVpbGRlcl9wYW5lbCApICkge1xyXG5cdFx0XHRcdHJldHVybiAnYnVpbGRlcl90YWInO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBlbGVtZW50IHZpc2liaWxpdHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBlbFxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2VsZW1lbnRfdmlzaWJsZSggZWwgKSB7XHJcblx0XHRcdHZhciBzdHlsZTtcclxuXHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHN0eWxlID0gdy5nZXRDb21wdXRlZFN0eWxlKCBlbCApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHN0eWxlICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAnbm9uZScgPT09IHN0eWxlLmRpc3BsYXkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICdoaWRkZW4nID09PSBzdHlsZS52aXNpYmlsaXR5ICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBBZHZhbmNlZCBNb2RlIGlzIGFjdGl2ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19hZHZhbmNlZF9tb2RlX2FjdGl2ZSgpIHtcclxuXHRcdFx0cmV0dXJuICggJ2FkdmFuY2VkX3RhYicgPT09IHRoaXMuZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnJlbW92ZUF0dHJpYnV0ZSggJ2hpZGRlbicgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsICdmYWxzZScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEhpZGUgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2hpZGRlbicsICd0cnVlJyApO1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBDb2RlIFRvb2xzIHBhbmVsIGlzIGN1cnJlbnRseSBhY3RpdmUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlKCkge1xyXG5cdFx0XHRyZXR1cm4gISEgKCB0aGlzLmFkdmFuY2VkX3BhbmVsICYmICEgdGhpcy5hZHZhbmNlZF9wYW5lbC5oYXNBdHRyaWJ1dGUoICdoaWRkZW4nICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gQ29kZSBUb29scyBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2FkdmFuY2VkX3Rvb2xzX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19pbnNwZWN0b3JfYWR2YW5jZWRfdG9vbHMnLCAnd3BiY190YWJfYWR2YW5jZWRfdG9vbHMnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIGRlZmF1bHQgYnVpbGRlciByaWdodGJhciBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2RlZmF1bHRfdmlzdWFsX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19wYWxldHRlX2FkZF9uZXcnLCAnd3BiY190YWJfbGlicmFyeScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN5bmMgcmlnaHRiYXIgbW9kZSB3aXRoIHRvcCB0YWJzIG1vZGUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3luY19yaWdodGJhcl9tb2RlKCkge1xyXG5cdFx0XHR2YXIgaXNfYWR2YW5jZWRfbW9kZSA9IHRoaXMuaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUoKTtcclxuXHJcblx0XHRcdGlmICggaXNfYWR2YW5jZWRfbW9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCk7XHJcblxyXG5cdFx0XHRcdGlmICggJ2FkdmFuY2VkJyAhPT0gdGhpcy5sYXN0X21vZGUgKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW5fYWR2YW5jZWRfdG9vbHNfcGFuZWwoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMubGFzdF9tb2RlID0gJ2FkdmFuY2VkJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5pc19hZHZhbmNlZF90b29sc19wYW5lbF9hY3RpdmUoKSApIHtcclxuXHRcdFx0XHR0aGlzLm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5oaWRlX2FkdmFuY2VkX3Rvb2xzX3RhYigpO1xyXG5cdFx0XHR0aGlzLmxhc3RfbW9kZSA9ICdidWlsZGVyJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEZhbGxiYWNrIGNsaWNrIGhhbmRsZXIgZm9yIHRvcCB0YWJzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0aGFuZGxlX2NsaWNrKCBldmVudCApIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItdGFiXScgKTtcclxuXHRcdFx0dmFyIHRoaXNfb2JqID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggISB0YXJnZXQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZXRUaW1lb3V0KFxyXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRoaXNfb2JqLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0MFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyApIHtcclxuXHRcdGQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J0RPTUNvbnRlbnRMb2FkZWQnLFxyXG5cdFx0XHRmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0KCBuZXcgV1BCQ19CRkJfTW9kZV9SaWdodGJhcl9TeW5jKCkgKS5pbml0KCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdCggbmV3IFdQQkNfQkZCX01vZGVfUmlnaHRiYXJfU3luYygpICkuaW5pdCgpO1xyXG5cdH1cclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7IiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWluc3BlY3Rvci5qcyA9PSBUaW1lIHBvaW50OiAyMDI1LTA5LTA2IDE0OjA4XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIDEpIEFjdGlvbnMgcmVnaXN0cnkuXHJcblxyXG5cdC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgKGN0eDogSW5zcGVjdG9yQWN0aW9uQ29udGV4dCkgPT4gdm9pZD59ICovXHJcblx0Y29uc3QgX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfXyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcclxuXHJcblx0Ly8gQnVpbHQtaW5zLlxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ2Rlc2VsZWN0J10gPSAoeyBidWlsZGVyIH0pID0+IHtcclxuXHRcdGJ1aWxkZXI/LnNlbGVjdF9maWVsZD8uKCBudWxsICk7XHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8uc2VsZWN0X2ZpZWxkPy4oIGVsLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJyApO1xyXG5cdFx0c2V0VGltZW91dCggKCkgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnICksIDcwMCApO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtdXAnXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8ubW92ZV9pdGVtPy4oIGVsLCAndXAnICk7XHJcblx0XHQvLyBTY3JvbGwgYWZ0ZXIgdGhlIERPTSBoYXMgc2V0dGxlZC5cclxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydzY3JvbGx0byddKHsgYnVpbGRlciwgZWwgfSkpO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtZG93biddID0gKHsgYnVpbGRlciwgZWwgfSkgPT4ge1xyXG5cdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblx0XHRidWlsZGVyPy5tb3ZlX2l0ZW0/LiggZWwsICdkb3duJyApO1xyXG5cdFx0Ly8gU2Nyb2xsIGFmdGVyIHRoZSBET00gaGFzIHNldHRsZWQuXHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSh7IGJ1aWxkZXIsIGVsIH0pKTtcclxuXHR9O1xyXG5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydkZWxldGUnXSA9ICh7IGJ1aWxkZXIsIGVsLCBjb25maXJtID0gdy5jb25maXJtIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgaXNfZmllbGQgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICk7XHJcblx0XHRjb25zdCBsYWJlbCAgICA9IGlzX2ZpZWxkXHJcblx0XHRcdD8gKGVsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApPy50ZXh0Q29udGVudCB8fCBlbC5kYXRhc2V0Py5pZCB8fCAnZmllbGQnKVxyXG5cdFx0XHQ6IChlbC5kYXRhc2V0Py5pZCB8fCAnc2VjdGlvbicpO1xyXG5cclxuXHRcdFVJLk1vZGFsX0NvbmZpcm1fRGVsZXRlLm9wZW4oIGxhYmVsLCAoKSA9PiB7XHJcblx0XHRcdC8vIENlbnRyYWwgY29tbWFuZCB3aWxsIHJlbW92ZSwgZW1pdCBldmVudHMsIGFuZCByZXNlbGVjdCBuZWlnaGJvciAod2hpY2ggcmUtYmluZHMgSW5zcGVjdG9yKS5cclxuXHRcdFx0YnVpbGRlcj8uZGVsZXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snZHVwbGljYXRlJ10gPSAoeyBidWlsZGVyLCBlbCB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdGNvbnN0IGNsb25lID0gYnVpbGRlcj8uZHVwbGljYXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdGlmICggY2xvbmUgKSBidWlsZGVyPy5zZWxlY3RfZmllbGQ/LiggY2xvbmUsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdH07XHJcblxyXG5cdC8vIFB1YmxpYyBBUEkuXHJcblx0dy5XUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyA9IHtcclxuXHRcdHJ1bihuYW1lLCBjdHgpIHtcclxuXHRcdFx0Y29uc3QgZm4gPSBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyApIGZuKCBjdHggKTtcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oICdXUEJDLiBJbnNwZWN0b3IgYWN0aW9uIG5vdCBmb3VuZDonLCBuYW1lICk7XHJcblx0XHR9LFxyXG5cdFx0cmVnaXN0ZXIobmFtZSwgaGFuZGxlcikge1xyXG5cdFx0XHRpZiAoICFuYW1lIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvciggJ3JlZ2lzdGVyKG5hbWUsIGhhbmRsZXIpOiBpbnZhbGlkIGFyZ3VtZW50cycgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdID0gaGFuZGxlcjtcclxuXHRcdH0sXHJcblx0XHRoYXMobmFtZSkge1xyXG5cdFx0XHRyZXR1cm4gdHlwZW9mIF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bbmFtZV0gPT09ICdmdW5jdGlvbic7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gMikgSW5zcGVjdG9yIEZhY3RvcnkuXHJcblxyXG5cdHZhciBVSSA9ICh3LldQQkNfQkZCX0NvcmUuVUkgPSB3LldQQkNfQkZCX0NvcmUuVUkgfHwge30pO1xyXG5cclxuXHQvLyBHbG9iYWwgSHlicmlkKysgcmVnaXN0cmllcyAoa2VlcCBwdWJsaWMpLlxyXG5cdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgICAgICA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgfHwge307XHJcblx0dy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tIHx8IHt9O1xyXG5cclxuXHQvLyBEZWZpbmUgRmFjdG9yeSBvbmx5IGlmIG1pc3NpbmcgKG5vIGVhcmx5IHJldHVybiBmb3IgdGhlIHdob2xlIGJ1bmRsZSkuXHJcblx0Ly8gYWx3YXlzIGRlZmluZS9yZXBsYWNlIEZhY3RvcnlcclxuXHR7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVdGlsaXR5OiBjcmVhdGUgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0PX0gYXR0cnNcclxuXHRcdCAqIEBwYXJhbSB7KE5vZGV8c3RyaW5nfEFycmF5PE5vZGV8c3RyaW5nPik9fSBjaGlsZHJlblxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBlbCh0YWcsIGF0dHJzLCBjaGlsZHJlbikge1xyXG5cdFx0XHR2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApO1xyXG5cdFx0XHRpZiAoIGF0dHJzICkge1xyXG5cdFx0XHRcdE9iamVjdC5rZXlzKCBhdHRycyApLmZvckVhY2goIGZ1bmN0aW9uIChrKSB7XHJcblx0XHRcdFx0XHR2YXIgdiA9IGF0dHJzW2tdO1xyXG5cdFx0XHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm47XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjbGFzcycgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gdjtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGF0YXNldCcgKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKCB2ICkuZm9yRWFjaCggZnVuY3Rpb24gKGRrKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS5kYXRhc2V0W2RrXSA9IFN0cmluZyggdltka10gKTtcclxuXHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjaGVja2VkJyAmJiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHYgKSBub2RlLnNldEF0dHJpYnV0ZSggJ2NoZWNrZWQnLCAnY2hlY2tlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGlzYWJsZWQnICYmIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdiApIG5vZGUuc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIG5vcm1hbGl6ZSBib29sZWFuIGF0dHJpYnV0ZXMgdG8gc3RyaW5ncy5cclxuXHRcdFx0XHRcdGlmICggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHtcclxuXHRcdFx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoIGssIHYgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCBrLCBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGNoaWxkcmVuICkge1xyXG5cdFx0XHRcdChBcnJheS5pc0FycmF5KCBjaGlsZHJlbiApID8gY2hpbGRyZW4gOiBbIGNoaWxkcmVuIF0pLmZvckVhY2goIGZ1bmN0aW9uIChjKSB7XHJcblx0XHRcdFx0XHRpZiAoIGMgPT0gbnVsbCApIHJldHVybjtcclxuXHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIGMgKSA6IGMgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBhIHRvZ2dsZSBjb250cm9sIHJvdyAoY2hlY2tib3ggcmVuZGVyZWQgYXMgdG9nZ2xlKS5cclxuXHRcdCAqXHJcblx0XHQgKiBTdHJ1Y3R1cmU6XHJcblx0XHQgKiA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19yb3cgaW5zcGVjdG9yX19yb3ctLXRvZ2dsZVwiPlxyXG5cdFx0ICogICA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZVwiPlxyXG5cdFx0ICogICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIklEXCIgZGF0YS1pbnNwZWN0b3Ita2V5PVwiS0VZXCIgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgY2hlY2tlZD5cclxuXHRcdCAqICAgICA8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvblwiICBmb3I9XCJJRFwiPjwvbGFiZWw+XHJcblx0XHQgKiAgICAgPGxhYmVsIGNsYXNzPVwid3BiY191aV9fdG9nZ2xlX2xhYmVsXCIgZm9yPVwiSURcIj5MYWJlbCB0ZXh0PC9sYWJlbD5cclxuXHRcdCAqICAgPC9kaXY+XHJcblx0XHQgKiA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRfaWRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tlZFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfdG9nZ2xlX3JvdyggaW5wdXRfaWQsIGtleSwgY2hlY2tlZCwgbGFiZWxfdGV4dCApIHtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93IGluc3BlY3Rvcl9fcm93LS10b2dnbGUnIH0gKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZScgfSApO1xyXG5cclxuXHRcdFx0dmFyIGlucHV0X2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRpZCAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICdjaGVja2JveCcsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdGNoZWNrZWQgICAgICAgICAgICAgOiAhIWNoZWNrZWQsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgICAgICA6ICdzd2l0Y2gnLFxyXG5cdFx0XHRcdCdhcmlhLWNoZWNrZWQnICAgICAgOiAhIWNoZWNrZWRcclxuXHRcdFx0fSApO1xyXG5cdFx0XHR2YXIgaWNvbl9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2ljb24nLCAnZm9yJzogaW5wdXRfaWQgfSApO1xyXG5cdFx0XHR2YXIgdGV4dF9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJywgJ2Zvcic6IGlucHV0X2lkIH0sIGxhYmVsX3RleHQgfHwgJycgKTtcclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggaW5wdXRfZWwgKTtcclxuXHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCBpY29uX2xibCApO1xyXG5cdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIHRleHRfbGJsICk7XHJcblxyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNob29zZSBpbml0aWFsIHZhbHVlIGZyb20gZGF0YSBvciBzY2hlbWEgZGVmYXVsdC5cclxuXHQgKi9cclxuXHRcdGZ1bmN0aW9uIGdldF9pbml0aWFsX3ZhbHVlKGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hKSB7XHJcblx0XHRcdGlmICggZGF0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsIGtleSApICkgcmV0dXJuIGRhdGFba2V5XTtcclxuXHRcdFx0dmFyIG1ldGEgPSBwcm9wc19zY2hlbWEgJiYgcHJvcHNfc2NoZW1hW2tleV07XHJcblx0XHRcdHJldHVybiAobWV0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIG1ldGEsICdkZWZhdWx0JyApKSA/IG1ldGEuZGVmYXVsdCA6ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNvZXJjZSB2YWx1ZSBieSBzY2hlbWEgdHlwZS5cclxuXHQgKi9cclxuXHJcblxyXG5cdFx0ZnVuY3Rpb24gY29lcmNlX2J5X3R5cGUodmFsdWUsIHR5cGUpIHtcclxuXHRcdFx0c3dpdGNoICggdHlwZSApIHtcclxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdFx0Y2FzZSAnZmxvYXQnOlxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIG4gPSBOdW1iZXIoIHZhbHVlICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXNOYU4oIG4gKSA/ICcnIDogbjtcclxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcclxuXHRcdFx0XHRcdHJldHVybiAhIXZhbHVlO1xyXG5cdFx0XHRcdGNhc2UgJ2FycmF5JzpcclxuXHRcdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KCB2YWx1ZSApID8gdmFsdWUgOiBbXTtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/ICcnIDogU3RyaW5nKCB2YWx1ZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0ICogTm9ybWFsaXplIDxzZWxlY3Q+IG9wdGlvbnMgKGFycmF5IG9mIHt2YWx1ZSxsYWJlbH0gb3IgbWFwIHt2YWx1ZTpsYWJlbH0pLlxyXG5cdCAqL1xyXG5cdFx0ZnVuY3Rpb24gbm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKG9wdGlvbnMpIHtcclxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBvcHRpb25zICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9wdGlvbnMubWFwKCBmdW5jdGlvbiAobykge1xyXG5cdFx0XHRcdFx0aWYgKCB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAmJiAndmFsdWUnIGluIG8gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8udmFsdWUgKSwgbGFiZWw6IFN0cmluZyggby5sYWJlbCB8fCBvLnZhbHVlICkgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8gKSwgbGFiZWw6IFN0cmluZyggbyApIH07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKCBvcHRpb25zICkubWFwKCBmdW5jdGlvbiAoaykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IFN0cmluZyggayApLCBsYWJlbDogU3RyaW5nKCBvcHRpb25zW2tdICkgfTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBQYXJzZSBhIENTUyBsZW5ndGggbGlrZSBcIjEyMHB4XCIgb3IgXCI4MCVcIiBpbnRvIHsgdmFsdWU6bnVtYmVyLCB1bml0OnN0cmluZyB9LiAqL1xyXG5cdFx0ZnVuY3Rpb24gcGFyc2VfbGVuKHZhbHVlLCBmYWxsYmFja191bml0KSB7XHJcblx0XHRcdHZhbHVlID0gKHZhbHVlID09IG51bGwpID8gJycgOiBTdHJpbmcoIHZhbHVlICkudHJpbSgpO1xyXG5cdFx0XHR2YXIgbSA9IHZhbHVlLm1hdGNoKCAvXigtP1xcZCsoPzpcXC5cXGQrKT8pKHB4fCV8cmVtfGVtKSQvaSApO1xyXG5cdFx0XHRpZiAoIG0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IHBhcnNlRmxvYXQoIG1bMV0gKSwgdW5pdDogbVsyXS50b0xvd2VyQ2FzZSgpIH07XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gcGxhaW4gbnVtYmVyIC0+IGFzc3VtZSBmYWxsYmFjayB1bml0XHJcblx0XHRcdGlmICggdmFsdWUgIT09ICcnICYmICFpc05hTiggTnVtYmVyKCB2YWx1ZSApICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IE51bWJlciggdmFsdWUgKSwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4geyB2YWx1ZTogMCwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQ2xhbXAgaGVscGVyLiAqL1xyXG5cdFx0ZnVuY3Rpb24gY2xhbXBfbnVtKHYsIG1pbiwgbWF4KSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHYgIT09ICdudW1iZXInIHx8IGlzTmFOKCB2ICkgKSByZXR1cm4gKG1pbiAhPSBudWxsID8gbWluIDogMCk7XHJcblx0XHRcdGlmICggbWluICE9IG51bGwgJiYgdiA8IG1pbiApIHYgPSBtaW47XHJcblx0XHRcdGlmICggbWF4ICE9IG51bGwgJiYgdiA+IG1heCApIHYgPSBtYXg7XHJcblx0XHRcdHJldHVybiB2O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluaXRpYWxpemUgQ29sb3JpcyBwaWNrZXJzIGluIGEgZ2l2ZW4gcm9vdC5cclxuXHRcdC8vIFJlbGllcyBvbiBDb2xvcmlzIGJlaW5nIGVucXVldWVkIChzZWUgYmZiLWJvb3RzdHJhcC5waHApLlxyXG5cdFx0ZnVuY3Rpb24gaW5pdF9jb2xvcmlzX3BpY2tlcnMocm9vdCkge1xyXG5cdFx0XHRpZiAoICFyb290IHx8ICF3LkNvbG9yaXMgKSByZXR1cm47XHJcblx0XHRcdC8vIE1hcmsgaW5wdXRzIHdlIHdhbnQgQ29sb3JpcyB0byBoYW5kbGUuXHJcblx0XHRcdHZhciBpbnB1dHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl0nICk7XHJcblx0XHRcdGlmICggIWlucHV0cy5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBBZGQgYSBzdGFibGUgY2xhc3MgZm9yIENvbG9yaXMgdGFyZ2V0aW5nOyBhdm9pZCBkb3VibGUtaW5pdGlhbGl6aW5nLlxyXG5cdFx0XHRpbnB1dHMuZm9yRWFjaCggZnVuY3Rpb24gKGlucHV0KSB7XHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9jb2xvcmlzJyApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9jb2xvcmlzJyApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGUvcmVmcmVzaCBhIENvbG9yaXMgaW5zdGFuY2UgYm91bmQgdG8gdGhlc2UgaW5wdXRzLlxyXG5cdFx0XHQvLyBLZWVwIEhFWCBvdXRwdXQgdG8gbWF0Y2ggc2NoZW1hIGRlZmF1bHRzIChlLmcuLCBcIiNlMGUwZTBcIikuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dy5Db2xvcmlzKCB7XHJcblx0XHRcdFx0XHRlbCAgICAgICA6ICcud3BiY19iZmJfY29sb3JpcycsXHJcblx0XHRcdFx0XHRhbHBoYSAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Zm9ybWF0ICAgOiAnaGV4JyxcclxuXHRcdFx0XHRcdHRoZW1lTW9kZTogJ2F1dG8nXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdC8vIENvbG9yaXMgYWxyZWFkeSBkaXNwYXRjaGVzICdpbnB1dCcgZXZlbnRzIG9uIHZhbHVlIGNoYW5nZXMuXHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdC8vIE5vbi1mYXRhbDogaWYgQ29sb3JpcyB0aHJvd3MgKHJhcmUpLCB0aGUgdGV4dCBpbnB1dCBzdGlsbCB3b3Jrcy5cclxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdXUEJDIEluc3BlY3RvcjogQ29sb3JpcyBpbml0IGZhaWxlZDonLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiBzbGlkZXIgKyBudW1iZXIgaW4gb25lIHJvdyAod3JpdGVzIHRvIGEgc2luZ2xlIGRhdGEga2V5KS5cclxuXHRcdCAqIENvbnRyb2wgbWV0YTogeyB0eXBlOidyYW5nZV9udW1iZXInLCBrZXksIGxhYmVsLCBtaW4sIG1heCwgc3RlcCB9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coaW5wdXRfaWQsIGtleSwgbGFiZWxfdGV4dCwgdmFsdWUsIG1ldGEpIHtcclxuXHRcdFx0dmFyIHJvd19lbCAgID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9KTtcclxuXHRcdFx0dmFyIGxhYmVsX2VsID0gZWwoJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0IHx8IGtleSB8fCAnJyk7XHJcblx0XHRcdHZhciBjdHJsICAgICA9IGVsKCdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2NvbnRyb2wnIH0pO1xyXG5cclxuXHRcdFx0dmFyIG1pbiAgPSAobWV0YSAmJiBtZXRhLm1pbiAhPSBudWxsKSAgPyBtZXRhLm1pbiAgOiAwO1xyXG5cdFx0XHR2YXIgbWF4ICA9IChtZXRhICYmIG1ldGEubWF4ICE9IG51bGwpICA/IG1ldGEubWF4ICA6IDEwMDtcclxuXHRcdFx0dmFyIHN0ZXAgPSAobWV0YSAmJiBtZXRhLnN0ZXAgIT0gbnVsbCkgPyBtZXRhLnN0ZXAgOiAxO1xyXG5cclxuXHRcdFx0dmFyIGdyb3VwID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwIHdwYmNfaW5saW5lX2lucHV0cycsICdkYXRhLWxlbi1ncm91cCc6IGtleSB9KTtcclxuXHJcblx0XHRcdHZhciByYW5nZSA9IGVsKCdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlIDogJ3JhbmdlJyxcclxuXHRcdFx0XHQnY2xhc3MnOiAnaW5zcGVjdG9yX19pbnB1dCcsXHJcblx0XHRcdFx0J2RhdGEtbGVuLXJhbmdlJzogJycsXHJcblx0XHRcdFx0bWluICA6IFN0cmluZyhtaW4pLFxyXG5cdFx0XHRcdG1heCAgOiBTdHJpbmcobWF4KSxcclxuXHRcdFx0XHRzdGVwIDogU3RyaW5nKHN0ZXApLFxyXG5cdFx0XHRcdHZhbHVlOiBTdHJpbmcodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyBtaW4gOiB2YWx1ZSlcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHR2YXIgbnVtID0gZWwoJ2lucHV0Jywge1xyXG5cdFx0XHRcdGlkICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHR0eXBlIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQgaW5zcGVjdG9yX193XzMwJyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tdmFsdWUnOiAnJyxcclxuXHRcdFx0XHQnZGF0YS1pbnNwZWN0b3Ita2V5Jzoga2V5LFxyXG5cdFx0XHRcdG1pbiAgOiBTdHJpbmcobWluKSxcclxuXHRcdFx0XHRtYXggIDogU3RyaW5nKG1heCksXHJcblx0XHRcdFx0c3RlcCA6IFN0cmluZyhzdGVwKSxcclxuXHRcdFx0XHR2YWx1ZTogKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSA/IFN0cmluZyhtaW4pIDogU3RyaW5nKHZhbHVlKVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKHJhbmdlKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQobnVtKTtcclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZChncm91cCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChsYWJlbF9lbCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChjdHJsKTtcclxuXHRcdFx0cmV0dXJuIHJvd19lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiAobnVtYmVyICsgdW5pdCkgKyBzbGlkZXIsIHdyaXRpbmcgYSAqc2luZ2xlKiBjb21iaW5lZCBzdHJpbmcgdG8gYGtleWAuXHJcblx0XHQgKiBDb250cm9sIG1ldGE6XHJcblx0XHQgKiB7XHJcblx0XHQgKiAgIHR5cGU6J2xlbicsIGtleSwgbGFiZWwsIHVuaXRzOlsncHgnLCclJywncmVtJywnZW0nXSxcclxuXHRcdCAqICAgc2xpZGVyOiB7IHB4OnttaW46MCxtYXg6NTEyLHN0ZXA6MX0sICclJzp7bWluOjAsbWF4OjEwMCxzdGVwOjF9LCByZW06e21pbjowLG1heDoxMCxzdGVwOjAuMX0sIGVtOnsuLi59IH0sXHJcblx0XHQgKiAgIGZhbGxiYWNrX3VuaXQ6J3B4J1xyXG5cdFx0ICogfVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9sZW5fY29tcG91bmRfcm93KGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkKSB7XHJcblx0XHRcdHZhciBrZXkgICAgICAgID0gY29udHJvbC5rZXk7XHJcblx0XHRcdHZhciBsYWJlbF90ZXh0ID0gY29udHJvbC5sYWJlbCB8fCBrZXkgfHwgJyc7XHJcblx0XHRcdHZhciBkZWZfc3RyICAgID0gZ2V0X2luaXRpYWxfdmFsdWUoIGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hICk7XHJcblx0XHRcdHZhciBmYWxsYmFja191ID0gY29udHJvbC5mYWxsYmFja191bml0IHx8ICdweCc7XHJcblx0XHRcdHZhciBwYXJzZWQgICAgID0gcGFyc2VfbGVuKCBkZWZfc3RyLCBmYWxsYmFja191ICk7XHJcblxyXG5cdFx0XHR2YXIgcm93ICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbCA9IGVsKCAnbGFiZWwnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsICA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sJyB9ICk7XHJcblxyXG5cdFx0XHR2YXIgdW5pdHMgICAgICA9IEFycmF5LmlzQXJyYXkoIGNvbnRyb2wudW5pdHMgKSAmJiBjb250cm9sLnVuaXRzLmxlbmd0aCA/IGNvbnRyb2wudW5pdHMgOiBbICdweCcsICclJywgJ3JlbScsICdlbScgXTtcclxuXHRcdFx0dmFyIHNsaWRlcl9tYXAgPSBjb250cm9sLnNsaWRlciB8fCB7XHJcblx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdCclJyAgOiB7IG1pbjogMCwgbWF4OiAxMDAsIHN0ZXA6IDEgfSxcclxuXHRcdFx0XHQncmVtJzogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9LFxyXG5cdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEhvc3Qgd2l0aCBhIGhpZGRlbiBpbnB1dCB0aGF0IGNhcnJpZXMgZGF0YS1pbnNwZWN0b3Ita2V5IHRvIHJldXNlIHRoZSBzdGFuZGFyZCBoYW5kbGVyLlxyXG5cdFx0XHR2YXIgZ3JvdXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwJywgJ2RhdGEtbGVuLWdyb3VwJzoga2V5IH0gKTtcclxuXHJcblx0XHRcdHZhciBpbmxpbmUgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfaW5saW5lX2lucHV0cycgfSApO1xyXG5cclxuXHRcdFx0dmFyIG51bSA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdCdkYXRhLWxlbi12YWx1ZSc6ICcnLFxyXG5cdFx0XHRcdG1pbiAgICAgICAgICAgICA6ICcwJyxcclxuXHRcdFx0XHRzdGVwICAgICAgICAgICAgOiAnYW55JyxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgOiBTdHJpbmcoIHBhcnNlZC52YWx1ZSApXHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHZhciBzZWwgPSBlbCggJ3NlbGVjdCcsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnLCAnZGF0YS1sZW4tdW5pdCc6ICcnIH0gKTtcclxuXHRcdFx0dW5pdHMuZm9yRWFjaCggZnVuY3Rpb24gKHUpIHtcclxuXHRcdFx0XHR2YXIgb3B0ID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiB1IH0sIHUgKTtcclxuXHRcdFx0XHRpZiAoIHUgPT09IHBhcnNlZC51bml0ICkgb3B0LnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdHNlbC5hcHBlbmRDaGlsZCggb3B0ICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggbnVtICk7XHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggc2VsICk7XHJcblxyXG5cdFx0XHQvLyBTbGlkZXIgKHVuaXQtYXdhcmUpXHJcblx0XHRcdHZhciBjdXJyZW50ID0gc2xpZGVyX21hcFtwYXJzZWQudW5pdF0gfHwgc2xpZGVyX21hcFt1bml0c1swXV07XHJcblx0XHRcdHZhciByYW5nZSAgID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlICAgICAgICAgICAgOiAncmFuZ2UnLFxyXG5cdFx0XHRcdCdjbGFzcycgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tcmFuZ2UnOiAnJyxcclxuXHRcdFx0XHRtaW4gICAgICAgICAgICAgOiBTdHJpbmcoIGN1cnJlbnQubWluICksXHJcblx0XHRcdFx0bWF4ICAgICAgICAgICAgIDogU3RyaW5nKCBjdXJyZW50Lm1heCApLFxyXG5cdFx0XHRcdHN0ZXAgICAgICAgICAgICA6IFN0cmluZyggY3VycmVudC5zdGVwICksXHJcblx0XHRcdFx0dmFsdWUgICAgICAgICAgIDogU3RyaW5nKCBjbGFtcF9udW0oIHBhcnNlZC52YWx1ZSwgY3VycmVudC5taW4sIGN1cnJlbnQubWF4ICkgKVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBIaWRkZW4gd3JpdGVyIGlucHV0IHRoYXQgdGhlIGRlZmF1bHQgSW5zcGVjdG9yIGhhbmRsZXIgd2lsbCBjYXRjaC5cclxuXHRcdFx0dmFyIGhpZGRlbiA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdHN0eWxlICAgICAgICAgICAgICAgOiAnZGlzcGxheTpub25lJyxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nICAgICAgIDogJ3RydWUnLFxyXG5cdFx0XHRcdHRhYmluZGV4ICAgICAgICAgICAgOiAnLTEnLFxyXG5cdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZCArICdfbGVuX2hpZGRlbicsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgICAgIDogKFN0cmluZyggcGFyc2VkLnZhbHVlICkgKyBwYXJzZWQudW5pdClcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGlubGluZSApO1xyXG5cdFx0XHRncm91cC5hcHBlbmRDaGlsZCggcmFuZ2UgKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGhpZGRlbiApO1xyXG5cclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZCggZ3JvdXAgKTtcclxuXHRcdFx0cm93LmFwcGVuZENoaWxkKCBsYWJlbCApO1xyXG5cdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGN0cmwgKTtcclxuXHRcdFx0cmV0dXJuIHJvdztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFdpcmUgc3luY2luZyBmb3IgYW55IC53cGJjX2xlbl9ncm91cCBpbnNpZGUgYSBnaXZlbiByb290IChwYW5lbCkuXHJcblx0XHQgKiAtIHJhbmdlIOKHhCBudW1iZXIgc3luY1xyXG5cdFx0ICogLSB1bml0IHN3aXRjaGVzIHVwZGF0ZSBzbGlkZXIgYm91bmRzXHJcblx0XHQgKiAtIGhpZGRlbiB3cml0ZXIgKGlmIHByZXNlbnQpIGdldHMgdXBkYXRlZCBhbmQgZW1pdHMgJ2lucHV0J1xyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3aXJlX2xlbl9ncm91cChyb290KSB7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBmaW5kX2dyb3VwKGVsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsICYmIGVsLmNsb3Nlc3QgJiYgZWwuY2xvc2VzdCggJy53cGJjX2xlbl9ncm91cCcgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdHZhciB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0Ly8gU2xpZGVyIG1vdmVkIC0+IHVwZGF0ZSBudW1iZXIgKGFuZCB3cml0ZXIvaGlkZGVuKVxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXJhbmdlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIG51bSA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG51bSApIHtcclxuXHRcdFx0XHRcdFx0bnVtLnZhbHVlID0gdC52YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB1bml0ICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHRcdFx0XHRcdFx0dW5pdCAgICAgICAgID0gdW5pdCA/IHVuaXQudmFsdWUgOiAncHgnO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHQudmFsdWUgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHQvLyB0cmlnZ2VyIHN0YW5kYXJkIGluc3BlY3RvciBoYW5kbGVyOlxyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBQbGFpbiByYW5nZV9udW1iZXIgY2FzZSAobnVtYmVyIGhhcyBkYXRhLWluc3BlY3Rvci1rZXkpIC0+IGZpcmUgaW5wdXQgb24gbnVtYmVyXHJcblx0XHRcdFx0XHRcdGlmICggbnVtICYmIG51bS5oYXNBdHRyaWJ1dGUoICdkYXRhLWluc3BlY3Rvci1rZXknICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0bnVtLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBOdW1iZXIgdHlwZWQgLT4gdXBkYXRlIHNsaWRlciBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIHIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tcmFuZ2VdJyApO1xyXG5cdFx0XHRcdFx0aWYgKCByICkge1xyXG5cdFx0XHRcdFx0XHQvLyBjbGFtcCB3aXRoaW4gc2xpZGVyIGJvdW5kcyBpZiBwcmVzZW50XHJcblx0XHRcdFx0XHRcdHZhciBtaW4gPSBOdW1iZXIoIHIubWluICk7XHJcblx0XHRcdFx0XHRcdHZhciBtYXggPSBOdW1iZXIoIHIubWF4ICk7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgPSBOdW1iZXIoIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCAhaXNOYU4oIHYgKSApIHtcclxuXHRcdFx0XHRcdFx0XHR2ICAgICAgID0gY2xhbXBfbnVtKCB2LCBpc05hTiggbWluICkgPyB1bmRlZmluZWQgOiBtaW4sIGlzTmFOKCBtYXggKSA/IHVuZGVmaW5lZCA6IG1heCApO1xyXG5cdFx0XHRcdFx0XHRcdHIudmFsdWUgPSBTdHJpbmcoIHYgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIFN0cmluZyggdiApICE9PSB0LnZhbHVlICkgdC52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR2YXIgd3JpdGVyID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIHdyaXRlciAmJiB3cml0ZXIudHlwZSA9PT0gJ3RleHQnICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdW5pdCAgICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdW5pdF0nICk7XHJcblx0XHRcdFx0XHRcdHVuaXQgICAgICAgICA9IHVuaXQgPyB1bml0LnZhbHVlIDogJ3B4JztcclxuXHRcdFx0XHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKCB0LnZhbHVlIHx8IDAgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBlbHNlOiBudW1iZXIgaXRzZWxmIGxpa2VseSBjYXJyaWVzIGRhdGEtaW5zcGVjdG9yLWtleSAocmFuZ2VfbnVtYmVyKTsgZGVmYXVsdCBoYW5kbGVyIHdpbGwgcnVuLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHR2YXIgdCA9IGUudGFyZ2V0O1xyXG5cdFx0XHRcdC8vIFVuaXQgY2hhbmdlZCAtPiB1cGRhdGUgc2xpZGVyIGxpbWl0cyBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXVuaXQnICkgKSB7XHJcblx0XHRcdFx0XHR2YXIgZyA9IGZpbmRfZ3JvdXAoIHQgKTtcclxuXHRcdFx0XHRcdGlmICggIWcgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0Ly8gRmluZCB0aGUgY29udHJvbCBtZXRhIHZpYSBhIGRhdGEgYXR0cmlidXRlIG9uIGdyb3VwIGlmIHByb3ZpZGVkXHJcblx0XHRcdFx0XHQvLyAoRmFjdG9yeSBwYXRoIHNldHMgbm90aGluZyBoZXJlOyB3ZSByZS1kZXJpdmUgZnJvbSBjdXJyZW50IHNsaWRlciBib3VuZHMuKVxyXG5cdFx0XHRcdFx0dmFyIHIgICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0XHR2YXIgbnVtICAgID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtbGVuLXZhbHVlXScgKTtcclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdHZhciB1bml0ICAgPSB0LnZhbHVlIHx8ICdweCc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRqdXN0IHNsaWRlciBib3VuZHMgaGV1cmlzdGljYWxseSAobWF0Y2ggRmFjdG9yeSBkZWZhdWx0cylcclxuXHRcdFx0XHRcdHZhciBib3VuZHNfYnlfdW5pdCA9IHtcclxuXHRcdFx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdFx0XHQnJScgIDogeyBtaW46IDAsIG1heDogMTAwLCBzdGVwOiAxIH0sXHJcblx0XHRcdFx0XHRcdCdyZW0nOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH0sXHJcblx0XHRcdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRpZiAoIHIgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBiICA9IGJvdW5kc19ieV91bml0W3VuaXRdIHx8IGJvdW5kc19ieV91bml0WydweCddO1xyXG5cdFx0XHRcdFx0XHRyLm1pbiAgPSBTdHJpbmcoIGIubWluICk7XHJcblx0XHRcdFx0XHRcdHIubWF4ICA9IFN0cmluZyggYi5tYXggKTtcclxuXHRcdFx0XHRcdFx0ci5zdGVwID0gU3RyaW5nKCBiLnN0ZXAgKTtcclxuXHRcdFx0XHRcdFx0Ly8gY2xhbXAgdG8gbmV3IGJvdW5kc1xyXG5cdFx0XHRcdFx0XHR2YXIgdiAgPSBOdW1iZXIoIG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiByLnZhbHVlICk7XHJcblx0XHRcdFx0XHRcdGlmICggIWlzTmFOKCB2ICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0diAgICAgICA9IGNsYW1wX251bSggdiwgYi5taW4sIGIubWF4ICk7XHJcblx0XHRcdFx0XHRcdFx0ci52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbnVtICkgbnVtLnZhbHVlID0gU3RyaW5nKCB2ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgICAgICA9IG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiAociA/IHIudmFsdWUgOiAnMCcpO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHYgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gIEMgTyBOIFQgUiBPIEwgID09XHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdFx0LyoqXHJcblx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gQ29udHJvbCBFbGVtZW50LCBlLmcuIElucHV0ISAgQnVpbGQgYSBzaW5nbGUgY29udHJvbCByb3c6XHJcblx0ICogPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fcm93XCI+XHJcblx0ICogICA8bGFiZWwgY2xhc3M9XCJpbnNwZWN0b3JfX2xhYmVsXCIgZm9yPVwiLi4uXCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqICAgPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fY29udHJvbFwiPjxpbnB1dHx0ZXh0YXJlYXxzZWxlY3QgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgLi4uPjwvZGl2PlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRyb2wgICAgICAgICAgIC0gc2NoZW1hIGNvbnRyb2wgbWV0YSAoe3R5cGUsa2V5LGxhYmVsLC4uLn0pXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzX3NjaGVtYSAgICAgIC0gc2NoZW1hLnByb3BzXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgICAgICAgICAgICAgIC0gY3VycmVudCBlbGVtZW50IGRhdGEtKiBtYXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkICAgICAgICAgICAgICAgLSB1bmlxdWUgc3VmZml4IGZvciBpbnB1dCBpZHNcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gY3R4ICAgICAgICAgICAgICAgLSB7IGVsLCBidWlsZGVyLCB0eXBlLCBkYXRhIH1cclxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9jb250cm9sKGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkLCBjdHgpIHtcclxuXHRcdFx0dmFyIHR5cGUgPSBjb250cm9sLnR5cGU7XHJcblx0XHRcdHZhciBrZXkgID0gY29udHJvbC5rZXk7XHJcblxyXG5cdFx0XHR2YXIgbGFiZWxfdGV4dCA9IGNvbnRyb2wubGFiZWwgfHwga2V5IHx8ICcnO1xyXG5cdFx0XHR2YXIgcHJvcF9tZXRhICA9IChrZXkgPyAocHJvcHNfc2NoZW1hW2tleV0gfHwgeyB0eXBlOiAnc3RyaW5nJyB9KSA6IHsgdHlwZTogJ3N0cmluZycgfSk7XHJcblx0XHRcdHZhciB2YWx1ZSAgICAgID0gY29lcmNlX2J5X3R5cGUoIGdldF9pbml0aWFsX3ZhbHVlKCBrZXksIGRhdGEsIHByb3BzX3NjaGVtYSApLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0Ly8gQWxsb3cgdmFsdWVfZnJvbSBvdmVycmlkZSAoY29tcHV0ZWQgYXQgcmVuZGVyLXRpbWUpLlxyXG5cdFx0aWYgKCBjb250cm9sICYmIGNvbnRyb2wudmFsdWVfZnJvbSAmJiB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb21bY29udHJvbC52YWx1ZV9mcm9tXSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGNvbXB1dGVkID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tW2NvbnRyb2wudmFsdWVfZnJvbV0oIGN0eCB8fCB7fSApO1xyXG5cdFx0XHRcdFx0dmFsdWUgICAgICAgID0gY29lcmNlX2J5X3R5cGUoIGNvbXB1dGVkLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAndmFsdWVfZnJvbSBmYWlsZWQgZm9yJywgY29udHJvbC52YWx1ZV9mcm9tLCBlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgaW5wdXRfaWQgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbF9lbCAgPSBlbCggJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsX3dyYXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkX2VsO1xyXG5cclxuXHRcdC8vIC0tLSBzbG90IGhvc3QgKG5hbWVkIFVJIGluamVjdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdGlmICggdHlwZSA9PT0gJ3Nsb3QnICYmIGNvbnRyb2wuc2xvdCApIHtcclxuXHRcdFx0Ly8gYWRkIGEgbWFya2VyIGNsYXNzIGZvciB0aGUgbGF5b3V0IGNoaXBzIHJvd1xyXG5cdFx0XHR2YXIgY2xhc3NlcyA9ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tc2xvdCc7XHJcblx0XHRcdGlmICggY29udHJvbC5zbG90ID09PSAnbGF5b3V0X2NoaXBzJyApIGNsYXNzZXMgKz0gJyBpbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzJztcclxuXHJcblx0XHRcdHZhciBzbG90X3JvdyA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiBjbGFzc2VzIH0gKTtcclxuXHJcblx0XHRcdGlmICggbGFiZWxfdGV4dCApIHNsb3Rfcm93LmFwcGVuZENoaWxkKCBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHQvLyBhZGQgYSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgaG9zdCBzbyBib3RoIENTUyBhbmQgdGhlIHNhZmV0eS1uZXQgY2FuIHRhcmdldCBpdFxyXG5cdFx0XHR2YXIgaG9zdF9hdHRycyA9IHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfTtcclxuXHRcdFx0aWYgKCBjb250cm9sLnNsb3QgPT09ICdsYXlvdXRfY2hpcHMnICkgaG9zdF9hdHRyc1snZGF0YS1iZmItc2xvdCddID0gJ2xheW91dF9jaGlwcyc7XHJcblxyXG5cdFx0XHR2YXIgc2xvdF9ob3N0ID0gZWwoICdkaXYnLCBob3N0X2F0dHJzICk7XHJcblx0XHRcdHNsb3Rfcm93LmFwcGVuZENoaWxkKCBzbG90X2hvc3QgKTtcclxuXHJcblx0XHRcdHZhciBzbG90X2ZuID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV9zbG90c1tjb250cm9sLnNsb3RdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBzbG90X2ZuID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHNsb3RfZm4oIHNsb3RfaG9zdCwgY3R4IHx8IHt9ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnc2xvdCBcIicgKyBjb250cm9sLnNsb3QgKyAnXCIgZmFpbGVkOicsIGUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LCAwICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c2xvdF9ob3N0LmFwcGVuZENoaWxkKCBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19zbG90X19taXNzaW5nJyB9LCAnW3Nsb3Q6ICcgKyBjb250cm9sLnNsb3QgKyAnXScgKSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzbG90X3JvdztcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0XHRpZiAoIHR5cGUgPT09ICd0ZXh0YXJlYScgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwgPSBlbCggJ3RleHRhcmVhJywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdHJvd3MgICAgICAgICAgICAgICAgOiBjb250cm9sLnJvd3MgfHwgMyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9LCAodmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCB2YWx1ZSApKSApO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnc2VsZWN0JyApIHtcclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnc2VsZWN0Jywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0bm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKCBjb250cm9sLm9wdGlvbnMgfHwgW10gKS5mb3JFYWNoKCBmdW5jdGlvbiAob3B0KSB7XHJcblx0XHRcdFx0XHR2YXIgb3B0X2VsID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiBvcHQudmFsdWUgfSwgb3B0LmxhYmVsICk7XHJcblx0XHRcdFx0XHRpZiAoIFN0cmluZyggdmFsdWUgKSA9PT0gb3B0LnZhbHVlICkgb3B0X2VsLnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwuYXBwZW5kQ2hpbGQoIG9wdF9lbCApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHRcdFx0XHQvLyBmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCB7IGlkOiBpbnB1dF9pZCwgdHlwZTogJ2NoZWNrYm94JywgJ2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSwgY2hlY2tlZDogISF2YWx1ZSwgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnIH0gKTsgLy8uXHJcblxyXG5cdFx0XHRcdC8vIFJlbmRlciBhcyB0b2dnbGUgVUkgaW5zdGVhZCBvZiBsYWJlbC1sZWZ0ICsgY2hlY2tib3guICBOb3RlOiB3ZSByZXR1cm4gdGhlIGZ1bGwgdG9nZ2xlIHJvdyBoZXJlIGFuZCBza2lwIHRoZSBkZWZhdWx0IHJvdy9sYWJlbCBmbG93IGJlbG93LlxyXG5cdFx0XHRcdHJldHVybiBidWlsZF90b2dnbGVfcm93KCBpbnB1dF9pZCwga2V5LCAhIXZhbHVlLCBsYWJlbF90ZXh0ICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAncmFuZ2VfbnVtYmVyJyApIHtcclxuXHRcdFx0XHQvLyAtLS0gbmV3OiBzbGlkZXIgKyBudW1iZXIgKHNpbmdsZSBrZXkpLlxyXG5cdFx0XHRcdHZhciBybl9pZCAgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHRcdFx0XHR2YXIgcm5fdmFsID0gdmFsdWU7IC8vIGZyb20gZ2V0X2luaXRpYWxfdmFsdWUvcHJvcF9tZXRhIGFscmVhZHkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coIHJuX2lkLCBrZXksIGxhYmVsX3RleHQsIHJuX3ZhbCwgY29udHJvbCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2xlbicgKSB7XHJcblx0XHRcdFx0Ly8gLS0tIG5ldzogbGVuZ3RoIGNvbXBvdW5kICh2YWx1ZSt1bml0K3NsaWRlciAtPiB3cml0ZXMgYSBzaW5nbGUgc3RyaW5nIGtleSkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX2xlbl9jb21wb3VuZF9yb3coIGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnY29sb3InICkge1xyXG5cdFx0XHRcdC8vIENvbG9yIHBpY2tlciAoQ29sb3JpcykuIFN0b3JlIGFzIHN0cmluZyAoZS5nLiwgXCIjZTBlMGUwXCIpLlxyXG5cdFx0XHRcdGZpZWxkX2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0XHR0eXBlICAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknIDoga2V5LFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLXR5cGUnOiAnY29sb3InLFxyXG5cdFx0XHRcdFx0J2RhdGEtY29sb3JpcycgICAgICAgOiAnJyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdFx0J2RhdGEtZGVmYXVsdC1jb2xvcicgOiAoIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gU3RyaW5nKHZhbHVlKSA6IChjb250cm9sLnBsYWNlaG9sZGVyIHx8ICcnKSApXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIHRleHQvbnVtYmVyIGRlZmF1bHQuXHJcblx0XHRcdFx0dmFyIGF0dHJzID0ge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICh0eXBlID09PSAnbnVtYmVyJykgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0Ly8gbnVtYmVyIGNvbnN0cmFpbnRzIChzY2hlbWEgb3IgY29udHJvbClcclxuXHRcdFx0XHRpZiAoIHR5cGUgPT09ICdudW1iZXInICkge1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHByb3BfbWV0YSwgJ21pbicgKSApIGF0dHJzLm1pbiA9IHByb3BfbWV0YS5taW47XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcHJvcF9tZXRhLCAnbWF4JyApICkgYXR0cnMubWF4ID0gcHJvcF9tZXRhLm1heDtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwcm9wX21ldGEsICdzdGVwJyApICkgYXR0cnMuc3RlcCA9IHByb3BfbWV0YS5zdGVwO1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGNvbnRyb2wsICdtaW4nICkgKSBhdHRycy5taW4gPSBjb250cm9sLm1pbjtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBjb250cm9sLCAnbWF4JyApICkgYXR0cnMubWF4ID0gY29udHJvbC5tYXg7XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggY29udHJvbCwgJ3N0ZXAnICkgKSBhdHRycy5zdGVwID0gY29udHJvbC5zdGVwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCBhdHRycyApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkgZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggZmllbGRfZWwgKTtcclxuXHRcdFx0cm93X2VsLmFwcGVuZENoaWxkKCBsYWJlbF9lbCApO1xyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gR3JvdXBzISBCdWlsZCBhbiBpbnNwZWN0b3IgZ3JvdXAgKGNvbGxhcHNpYmxlKS5cclxuXHRcdCAqIFN0cnVjdHVyZTpcclxuXHRcdCAqIDxzZWN0aW9uIGNsYXNzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXAgd3BiY191aV9fY29sbGFwc2libGVfZ3JvdXAgaXMtb3BlblwiIGRhdGEtZ3JvdXA9XCIuLi5cIj5cclxuXHRcdCAqICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cF9faGVhZGVyXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCIgYXJpYS1jb250cm9scz1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiPlxyXG5cdFx0ICogICAgIDxoMz5Hcm91cCBUaXRsZTwvaDM+XHJcblx0XHQgKiAgICAgPGkgY2xhc3M9XCJ3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxyXG5cdFx0ICogICA8L2J1dHRvbj5cclxuXHRcdCAqICAgPGRpdiBjbGFzcz1cImdyb3VwX19maWVsZHNcIiBpZD1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIj4g4oCmcm93c+KApiA8L2Rpdj5cclxuXHRcdCAqIDwvc2VjdGlvbj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZ3JvdXBcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc19zY2hlbWFcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gY3R4XHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX2dyb3VwKGdyb3VwLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4KSB7XHJcblx0XHRcdHZhciBpc19vcGVuICA9ICEhZ3JvdXAub3BlbjtcclxuXHRcdFx0dmFyIHBhbmVsX2lkID0gJ3dwYmNfY29sbGFwc2libGVfcGFuZWxfJyArIHVpZCArICdfJyArIChncm91cC5rZXkgfHwgJ2cnKTtcclxuXHJcblx0XHRcdHZhciBzZWN0aW9uID0gZWwoICdzZWN0aW9uJywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgIDogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwIHdwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyArIChpc19vcGVuID8gJyBpcy1vcGVuJyA6ICcnKSxcclxuXHRcdFx0XHQnZGF0YS1ncm91cCc6IGdyb3VwLmtleSB8fCAnJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR2YXIgaGVhZGVyX2J0biA9IGVsKCAnYnV0dG9uJywge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgOiAnZ3JvdXBfX2hlYWRlcicsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgOiAnYnV0dG9uJyxcclxuXHRcdFx0XHQnYXJpYS1leHBhbmRlZCc6IGlzX29wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxyXG5cdFx0XHRcdCdhcmlhLWNvbnRyb2xzJzogcGFuZWxfaWRcclxuXHRcdFx0fSwgW1xyXG5cdFx0XHRcdGVsKCAnaDMnLCBudWxsLCBncm91cC50aXRsZSB8fCBncm91cC5sYWJlbCB8fCBncm91cC5rZXkgfHwgJycgKSxcclxuXHRcdFx0XHRlbCggJ2knLCB7ICdjbGFzcyc6ICd3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0JyB9IClcclxuXHRcdFx0XSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkcyA9IGVsKCAnZGl2Jywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgICA6ICdncm91cF9fZmllbGRzJyxcclxuXHRcdFx0XHRpZCAgICAgICAgICAgOiBwYW5lbF9pZCxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nOiBpc19vcGVuID8gJ2ZhbHNlJyA6ICd0cnVlJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBhc0FycmF5KHgpIHtcclxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHggKSApIHJldHVybiB4O1xyXG5cdFx0XHRcdGlmICggeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgKSByZXR1cm4gT2JqZWN0LnZhbHVlcyggeCApO1xyXG5cdFx0XHRcdHJldHVybiB4ICE9IG51bGwgPyBbIHggXSA6IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhc0FycmF5KCBncm91cC5jb250cm9scyApLmZvckVhY2goIGZ1bmN0aW9uIChjb250cm9sKSB7XHJcblx0XHRcdFx0ZmllbGRzLmFwcGVuZENoaWxkKCBidWlsZF9jb250cm9sKCBjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4ICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0c2VjdGlvbi5hcHBlbmRDaGlsZCggaGVhZGVyX2J0biApO1xyXG5cdFx0XHRzZWN0aW9uLmFwcGVuZENoaWxkKCBmaWVsZHMgKTtcclxuXHRcdFx0cmV0dXJuIHNlY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTY2hlbWEgPiBJbnNwZWN0b3IgPiBIZWFkZXIhIEJ1aWxkIGluc3BlY3RvciBoZWFkZXIgd2l0aCBhY3Rpb24gYnV0dG9ucyB3aXJlZCB0byBleGlzdGluZyBkYXRhLWFjdGlvbiBoYW5kbGVycy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGhlYWRlcl9hY3Rpb25zXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIHRpdGxlX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfaGVhZGVyKGluc3BlY3Rvcl91aSwgdGl0bGVfZmFsbGJhY2ssIHNjaGVtYV9mb3JfdHlwZSkge1xyXG5cclxuXHRcdFx0aW5zcGVjdG9yX3VpICAgICAgPSBpbnNwZWN0b3JfdWkgfHwge307XHJcblx0XHRcdHNjaGVtYV9mb3JfdHlwZSAgID0gc2NoZW1hX2Zvcl90eXBlIHx8IHt9O1xyXG5cdFx0XHR2YXIgdmFyaWFudCAgICAgICA9IGluc3BlY3Rvcl91aS5oZWFkZXJfdmFyaWFudCB8fCAnbWluaW1hbCc7XHJcblx0XHRcdHZhciBoZWFkZXJBY3Rpb25zID0gaW5zcGVjdG9yX3VpLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgc2NoZW1hX2Zvcl90eXBlLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgWyAnZGVzZWxlY3QnLCAnc2Nyb2xsdG8nLCAnbW92ZS11cCcsICdtb3ZlLWRvd24nLCAnZHVwbGljYXRlJywgJ2RlbGV0ZScgXTtcclxuXHJcblx0XHRcdHZhciB0aXRsZSAgICAgICA9IGluc3BlY3Rvcl91aS50aXRsZSB8fCB0aXRsZV9mYWxsYmFjayB8fCAnJztcclxuXHRcdFx0dmFyIGRlc2NyaXB0aW9uID0gaW5zcGVjdG9yX3VpLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG5cclxuXHRcdFx0Ly8gaGVscGVyIHRvIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgZWl0aGVyIGhlYWRlciBzdHlsZVxyXG5cdFx0XHRmdW5jdGlvbiBhY3Rpb25CdG4oYWN0LCBtaW5pbWFsKSB7XHJcblx0XHRcdFx0aWYgKCBtaW5pbWFsICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsKCAnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgJ2NsYXNzJzogJ2J1dHRvbi1saW5rJywgJ2RhdGEtYWN0aW9uJzogYWN0IH0sICcnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIHRvb2xiYXIgdmFyaWFudCAocmljaClcclxuXHRcdFx0XHR2YXIgaWNvbk1hcCA9IHtcclxuXHRcdFx0XHRcdCdkZXNlbGVjdCcgOiAnd3BiY19pY25fcmVtb3ZlX2RvbmUnLFxyXG5cdFx0XHRcdFx0J3Njcm9sbHRvJyA6ICd3cGJjX2ljbl9hZHNfY2xpY2sgZmlsdGVyX2NlbnRlcl9mb2N1cycsXHJcblx0XHRcdFx0XHQnbW92ZS11cCcgIDogJ3dwYmNfaWNuX2Fycm93X3Vwd2FyZCcsXHJcblx0XHRcdFx0XHQnbW92ZS1kb3duJzogJ3dwYmNfaWNuX2Fycm93X2Rvd253YXJkJyxcclxuXHRcdFx0XHRcdCdkdXBsaWNhdGUnOiAnd3BiY19pY25fY29udGVudF9jb3B5JyxcclxuXHRcdFx0XHRcdCdkZWxldGUnICAgOiAnd3BiY19pY25fZGVsZXRlX291dGxpbmUnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YXIgY2xhc3NlcyA9ICdidXR0b24gYnV0dG9uLXNlY29uZGFyeSB3cGJjX3VpX2NvbnRyb2wgd3BiY191aV9idXR0b24nO1xyXG5cdFx0XHRcdGlmICggYWN0ID09PSAnZGVsZXRlJyApIGNsYXNzZXMgKz0gJyB3cGJjX3VpX2J1dHRvbl9kYW5nZXIgYnV0dG9uLWxpbmstZGVsZXRlJztcclxuXHJcblx0XHRcdFx0dmFyIGJ0biA9IGVsKCAnYnV0dG9uJywge1xyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgOiBjbGFzc2VzLFxyXG5cdFx0XHRcdFx0J2RhdGEtYWN0aW9uJzogYWN0LFxyXG5cdFx0XHRcdFx0J2FyaWEtbGFiZWwnIDogYWN0LnJlcGxhY2UoIC8tL2csICcgJyApXHJcblx0XHRcdFx0fSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGFjdCA9PT0gJ2RlbGV0ZScgKSB7XHJcblx0XHRcdFx0XHRidG4uYXBwZW5kQ2hpbGQoIGVsKCAnc3BhbicsIHsgJ2NsYXNzJzogJ2luLWJ1dHRvbi10ZXh0JyB9LCAnRGVsZXRlJyApICk7XHJcblx0XHRcdFx0XHRidG4uYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCAnICcgKSApOyAvLyBtaW5vciBzcGFjaW5nIGJlZm9yZSBpY29uXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggZWwoICdpJywgeyAnY2xhc3MnOiAnbWVudV9pY29uIGljb24tMXggJyArIChpY29uTWFwW2FjdF0gfHwgJycpIH0gKSApO1xyXG5cdFx0XHRcdHJldHVybiBidG47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vID09PSBtaW5pbWFsIGhlYWRlciAoZXhpc3RpbmcgbG9vazsgZGVmYXVsdCkgPT09XHJcblx0XHRcdGlmICggdmFyaWFudCAhPT0gJ3Rvb2xiYXInICkge1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSBlbCggJ2hlYWRlcicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2hlYWRlcicgfSApO1xyXG5cdFx0XHRcdGhlYWRlci5hcHBlbmRDaGlsZCggZWwoICdoMycsIG51bGwsIHRpdGxlIHx8ICcnICkgKTtcclxuXHJcblx0XHRcdFx0dmFyIGFjdGlvbnMgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2hlYWRlcl9hY3Rpb25zJyB9ICk7XHJcblx0XHRcdFx0aGVhZGVyQWN0aW9ucy5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0XHRhY3Rpb25zLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgLyptaW5pbWFsKi90cnVlICkgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0aGVhZGVyLmFwcGVuZENoaWxkKCBhY3Rpb25zICk7XHJcblx0XHRcdFx0cmV0dXJuIGhlYWRlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gPT09IHRvb2xiYXIgaGVhZGVyIChyaWNoIHRpdGxlL2Rlc2MgKyBncm91cGVkIGJ1dHRvbnMpID09PVxyXG5cdFx0XHR2YXIgcm9vdCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnd3BiY19iZmJfX2luc3BlY3Rvcl9faGVhZCcgfSApO1xyXG5cdFx0XHR2YXIgd3JhcCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaGVhZGVyX2NvbnRhaW5lcicgfSApO1xyXG5cdFx0XHR2YXIgbGVmdCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaGVhZGVyX3RpdGxlX2NvbnRlbnQnIH0gKTtcclxuXHRcdFx0dmFyIGgzICAgPSBlbCggJ2gzJywgeyAnY2xhc3MnOiAndGl0bGUnIH0sIHRpdGxlIHx8ICcnICk7XHJcblx0XHRcdGxlZnQuYXBwZW5kQ2hpbGQoIGgzICk7XHJcblx0XHRcdGlmICggZGVzY3JpcHRpb24gKSB7XHJcblx0XHRcdFx0bGVmdC5hcHBlbmRDaGlsZCggZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdkZXNjJyB9LCBkZXNjcmlwdGlvbiApICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciByaWdodCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnYWN0aW9ucyB3cGJjX2FqeF90b29sYmFyIHdwYmNfbm9fYm9yZGVycycgfSApO1xyXG5cdFx0XHR2YXIgdWlDICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2NvbnRhaW5lciB1aV9jb250YWluZXJfc21hbGwnIH0gKTtcclxuXHRcdFx0dmFyIHVpRyAgID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9ncm91cCcgfSApO1xyXG5cclxuXHRcdFx0Ly8gU3BsaXQgaW50byB2aXN1YWwgZ3JvdXBzOiBmaXJzdCAyLCBuZXh0IDIsIHRoZW4gdGhlIHJlc3QuXHJcblx0XHRcdHZhciBnMSA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfZWxlbWVudCcgfSApO1xyXG5cdFx0XHR2YXIgZzIgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2VsZW1lbnQnIH0gKTtcclxuXHRcdFx0dmFyIGczID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9lbGVtZW50JyB9ICk7XHJcblxyXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnNsaWNlKCAwLCAyICkuZm9yRWFjaCggZnVuY3Rpb24gKGFjdCkge1xyXG5cdFx0XHRcdGcxLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgZmFsc2UgKSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGhlYWRlckFjdGlvbnMuc2xpY2UoIDIsIDQgKS5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0ZzIuYXBwZW5kQ2hpbGQoIGFjdGlvbkJ0biggYWN0LCBmYWxzZSApICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aGVhZGVyQWN0aW9ucy5zbGljZSggNCApLmZvckVhY2goIGZ1bmN0aW9uIChhY3QpIHtcclxuXHRcdFx0XHRnMy5hcHBlbmRDaGlsZCggYWN0aW9uQnRuKCBhY3QsIGZhbHNlICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0dWlHLmFwcGVuZENoaWxkKCBnMSApO1xyXG5cdFx0XHR1aUcuYXBwZW5kQ2hpbGQoIGcyICk7XHJcblx0XHRcdHVpRy5hcHBlbmRDaGlsZCggZzMgKTtcclxuXHRcdFx0dWlDLmFwcGVuZENoaWxkKCB1aUcgKTtcclxuXHRcdFx0cmlnaHQuYXBwZW5kQ2hpbGQoIHVpQyApO1xyXG5cclxuXHRcdFx0d3JhcC5hcHBlbmRDaGlsZCggbGVmdCApO1xyXG5cdFx0XHR3cmFwLmFwcGVuZENoaWxkKCByaWdodCApO1xyXG5cdFx0XHRyb290LmFwcGVuZENoaWxkKCB3cmFwICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcm9vdDtcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0ZnVuY3Rpb24gZmFjdG9yeV9yZW5kZXIocGFuZWxfZWwsIHNjaGVtYV9mb3JfdHlwZSwgZGF0YSwgb3B0cykge1xyXG5cdFx0XHRpZiAoICFwYW5lbF9lbCApIHJldHVybiBwYW5lbF9lbDtcclxuXHJcblx0XHRcdHNjaGVtYV9mb3JfdHlwZSAgPSBzY2hlbWFfZm9yX3R5cGUgfHwge307XHJcblx0XHRcdHZhciBwcm9wc19zY2hlbWEgPSAoc2NoZW1hX2Zvcl90eXBlLnNjaGVtYSAmJiBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzKSA/IHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEucHJvcHMgOiB7fTtcclxuXHRcdFx0dmFyIGluc3BlY3Rvcl91aSA9IChzY2hlbWFfZm9yX3R5cGUuaW5zcGVjdG9yX3VpIHx8IHt9KTtcclxuXHRcdFx0dmFyIGdyb3VwcyAgICAgICA9IGluc3BlY3Rvcl91aS5ncm91cHMgfHwgW107XHJcblxyXG5cdFx0XHR2YXIgaGVhZGVyX2FjdGlvbnMgPSBpbnNwZWN0b3JfdWkuaGVhZGVyX2FjdGlvbnMgfHwgc2NoZW1hX2Zvcl90eXBlLmhlYWRlcl9hY3Rpb25zIHx8IFtdO1xyXG5cdFx0XHR2YXIgdGl0bGVfdGV4dCAgICAgPSAob3B0cyAmJiBvcHRzLnRpdGxlKSB8fCBpbnNwZWN0b3JfdWkudGl0bGUgfHwgc2NoZW1hX2Zvcl90eXBlLmxhYmVsIHx8IChkYXRhICYmIGRhdGEubGFiZWwpIHx8ICcnO1xyXG5cclxuXHRcdC8vIFByZXBhcmUgcmVuZGVyaW5nIGNvbnRleHQgZm9yIHNsb3RzL3ZhbHVlX2Zyb20sIGV0Yy5cclxuXHRcdFx0dmFyIGN0eCA9IHtcclxuXHRcdFx0XHRlbCAgICAgOiBvcHRzICYmIG9wdHMuZWwgfHwgbnVsbCxcclxuXHRcdFx0XHRidWlsZGVyOiBvcHRzICYmIG9wdHMuYnVpbGRlciB8fCBudWxsLFxyXG5cdFx0XHRcdHR5cGUgICA6IG9wdHMgJiYgb3B0cy50eXBlIHx8IG51bGwsXHJcblx0XHRcdFx0ZGF0YSAgIDogZGF0YSB8fCB7fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gY2xlYXIgcGFuZWwuXHJcblx0XHRcdHdoaWxlICggcGFuZWxfZWwuZmlyc3RDaGlsZCApIHBhbmVsX2VsLnJlbW92ZUNoaWxkKCBwYW5lbF9lbC5maXJzdENoaWxkICk7XHJcblxyXG5cdFx0XHR2YXIgdWlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgOCApO1xyXG5cclxuXHRcdFx0Ly8gaGVhZGVyLlxyXG5cdFx0XHRwYW5lbF9lbC5hcHBlbmRDaGlsZCggYnVpbGRfaGVhZGVyKCBpbnNwZWN0b3JfdWksIHRpdGxlX3RleHQsIHNjaGVtYV9mb3JfdHlwZSApICk7XHJcblxyXG5cclxuXHRcdFx0Ly8gZ3JvdXBzLlxyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggZnVuY3Rpb24gKGcpIHtcclxuXHRcdFx0XHRwYW5lbF9lbC5hcHBlbmRDaGlsZCggYnVpbGRfZ3JvdXAoIGcsIHByb3BzX3NjaGVtYSwgZGF0YSB8fCB7fSwgdWlkLCBjdHggKSApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBBUklBIHN5bmMgZm9yIHRvZ2dsZXMgY3JlYXRlZCBoZXJlIChlbnN1cmUgYXJpYS1jaGVja2VkIG1hdGNoZXMgc3RhdGUpLlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIENlbnRyYWxpemVkIFVJIG5vcm1hbGl6ZXJzICh0b2dnbGVzICsgQTExeSk6IGhhbmRsZWQgaW4gQ29yZS5cclxuXHRcdFx0XHRVSS5hcHBseV9wb3N0X3JlbmRlciggcGFuZWxfZWwgKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0d2lyZV9sZW5fZ3JvdXAoIHBhbmVsX2VsICk7XHJcblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIENvbG9yaXMgb24gY29sb3IgaW5wdXRzIHJlbmRlcmVkIGluIHRoaXMgcGFuZWwuXHJcblx0XHRcdFx0XHRpbml0X2NvbG9yaXNfcGlja2VycyggcGFuZWxfZWwgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHsgfVxyXG5cdFx0XHR9IGNhdGNoICggXyApIHsgfVxyXG5cclxuXHRcdFx0cmV0dXJuIHBhbmVsX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9GYWN0b3J5ID0geyByZW5kZXI6IGZhY3RvcnlfcmVuZGVyIH07ICAgLy8gb3ZlcndyaXRlL3JlZnJlc2hcclxuXHJcblx0XHQvLyAtLS0tIEJ1aWx0LWluIHNsb3QgKyB2YWx1ZV9mcm9tIGZvciBTZWN0aW9ucyAtLS0tXHJcblxyXG5cdFx0ZnVuY3Rpb24gc2xvdF9sYXlvdXRfY2hpcHMoaG9zdCwgY3R4KSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIEwgPSB3LldQQkNfQkZCX0NvcmUgJiYgIHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzO1xyXG5cdFx0XHRcdGlmICggTCAmJiB0eXBlb2YgTC5yZW5kZXJfZm9yX3NlY3Rpb24gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRMLnJlbmRlcl9mb3Jfc2VjdGlvbiggY3R4LmJ1aWxkZXIsIGN0eC5lbCwgaG9zdCApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRob3N0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggJ1tsYXlvdXRfY2hpcHMgbm90IGF2YWlsYWJsZV0nICkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybiggJ3dwYmNfYmZiX3Nsb3RfbGF5b3V0X2NoaXBzIGZhaWxlZDonLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzLmxheW91dF9jaGlwcyA9IHNsb3RfbGF5b3V0X2NoaXBzO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHZhbHVlX2Zyb21fY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMoY3R4KSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIHJvdyA9IGN0eCAmJiBjdHguZWwgJiYgY3R4LmVsLnF1ZXJ5U2VsZWN0b3IgJiYgY3R4LmVsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRpZiAoICFyb3cgKSByZXR1cm4gMTtcclxuXHRcdFx0XHR2YXIgbiA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDE7XHJcblx0XHRcdFx0aWYgKCBuIDwgMSApIG4gPSAxO1xyXG5cdFx0XHRcdGlmICggbiA+IDQgKSBuID0gNDtcclxuXHRcdFx0XHRyZXR1cm4gbjtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb20uY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMgPSB2YWx1ZV9mcm9tX2NvbXB1dGVfc2VjdGlvbl9jb2x1bW5zO1xyXG5cdH1cclxuXHJcblx0Ly8gMykgSW5zcGVjdG9yIGNsYXNzLlxyXG5cclxuXHRjbGFzcyBXUEJDX0JGQl9JbnNwZWN0b3Ige1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKHBhbmVsX2VsLCBidWlsZGVyKSB7XHJcblx0XHRcdHRoaXMucGFuZWwgICAgICAgICA9IHBhbmVsX2VsIHx8IHRoaXMuX2NyZWF0ZV9mYWxsYmFja19wYW5lbCgpO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgICAgICAgPSBidWlsZGVyO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkX2VsICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLl9yZW5kZXJfdGltZXIgPSBudWxsO1xyXG5cclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2lucHV0ICA9IChlKSA9PiB0aGlzLl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQoIGUgKTtcclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2NoYW5nZSA9IChlKSA9PiB0aGlzLl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQoIGUgKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCB0aGlzLl9vbl9kZWxlZ2F0ZWRfaW5wdXQsIHRydWUgKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgdGhpcy5fb25fZGVsZWdhdGVkX2NoYW5nZSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0dGhpcy5fb25fZGVsZWdhdGVkX2NsaWNrID0gKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtYWN0aW9uXScgKTtcclxuXHRcdFx0XHRpZiAoICFidG4gfHwgIXRoaXMucGFuZWwuY29udGFpbnMoIGJ0biApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBidG4uZ2V0QXR0cmlidXRlKCAnZGF0YS1hY3Rpb24nICk7XHJcblx0XHRcdFx0Y29uc3QgZWwgICAgID0gdGhpcy5zZWxlY3RlZF9lbDtcclxuXHRcdFx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0dy5XUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucz8ucnVuKCBhY3Rpb24sIHtcclxuXHRcdFx0XHRcdGJ1aWxkZXI6IHRoaXMuYnVpbGRlcixcclxuXHRcdFx0XHRcdGVsLFxyXG5cdFx0XHRcdFx0cGFuZWwgIDogdGhpcy5wYW5lbCxcclxuXHRcdFx0XHRcdGV2ZW50ICA6IGVcclxuXHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdGlmICggYWN0aW9uID09PSAnZGVsZXRlJyApIHRoaXMuY2xlYXIoKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5wYW5lbC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLl9vbl9kZWxlZ2F0ZWRfY2xpY2sgKTtcclxuXHRcdH1cclxuXHJcblx0XHRfcG9zdF9yZW5kZXJfdWkoKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIFVJID0gdy5XUEJDX0JGQl9Db3JlICYmIHcuV1BCQ19CRkJfQ29yZS5VSTtcclxuXHRcdFx0XHRpZiAoIFVJICYmIHR5cGVvZiBVSS5hcHBseV9wb3N0X3JlbmRlciA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFVJLmFwcGx5X3Bvc3RfcmVuZGVyKCB0aGlzLnBhbmVsICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIE5FVzogd2lyZSBzbGlkZXIvbnVtYmVyL3VuaXQgc3luY2luZyBmb3IgbGVuZ3RoICYgcmFuZ2VfbnVtYmVyIGdyb3Vwcy5cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0d2lyZV9sZW5fZ3JvdXAoIHRoaXMucGFuZWwgKTtcclxuXHRcdFx0XHRcdGluaXRfY29sb3Jpc19waWNrZXJzKCB0aGlzLnBhbmVsICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRfd3BiYz8uZGV2Py5lcnJvcj8uKCAnaW5zcGVjdG9yLl9wb3N0X3JlbmRlcl91aScsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRfYXBwbHlfY29udHJvbF9mcm9tX2V2ZW50KGUpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5wYW5lbC5jb250YWlucyggZS50YXJnZXQgKSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHQgICA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxTZWxlY3RFbGVtZW50fSAqLyAoZS50YXJnZXQpO1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0Py5kYXRhc2V0Py5pbnNwZWN0b3JLZXk7XHJcblx0XHRcdGlmICggIWtleSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGVsID0gdGhpcy5zZWxlY3RlZF9lbDtcclxuXHRcdFx0aWYgKCAhZWwgfHwgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoIGVsICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRsZXQgdjtcclxuXHRcdFx0aWYgKCB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiB0LnR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdFx0diA9ICEhdC5jaGVja2VkO1xyXG5cdFx0XHRcdHQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgdiA/ICd0cnVlJyA6ICdmYWxzZScgKTsgICAgICAgICAvLyBLZWVwIEFSSUEgc3RhdGUgaW4gc3luYyBmb3IgdG9nZ2xlcyAoc2NoZW1hIGFuZCB0ZW1wbGF0ZSBwYXRocykuXHJcblx0XHRcdH0gZWxzZSBpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHQudHlwZSA9PT0gJ251bWJlcicgKSB7XHJcblx0XHRcdFx0diA9ICh0LnZhbHVlID09PSAnJyA/ICcnIDogTnVtYmVyKCB0LnZhbHVlICkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHYgPSB0LnZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGtleSA9PT0gJ2lkJyApIHtcclxuXHRcdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfaWQ/LiggZWwsIHYgKTtcclxuXHRcdFx0XHRpZiAoIHVuaXF1ZSAhPSBudWxsICYmIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBrZXkgPT09ICduYW1lJyApIHtcclxuXHRcdFx0XHRjb25zdCB1bmlxdWUgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfbmFtZT8uKCBlbCwgdiApO1xyXG5cdFx0XHRcdGlmICggdW5pcXVlICE9IG51bGwgJiYgdC52YWx1ZSAhPT0gdW5pcXVlICkgdC52YWx1ZSA9IHVuaXF1ZTtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gJ2h0bWxfaWQnICkge1xyXG5cdFx0XHRcdGNvbnN0IGFwcGxpZWQgPSB0aGlzLmJ1aWxkZXI/LmlkPy5zZXRfZmllbGRfaHRtbF9pZD8uKCBlbCwgdiApO1xyXG5cdFx0XHRcdGlmICggYXBwbGllZCAhPSBudWxsICYmIHQudmFsdWUgIT09IGFwcGxpZWQgKSB0LnZhbHVlID0gYXBwbGllZDtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gJ2NvbHVtbnMnICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IHZfaW50ID0gcGFyc2VJbnQoIFN0cmluZyggdiApLCAxMCApO1xyXG5cdFx0XHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCB2X2ludCApICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY2xhbXBlZCA9IHcuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jbGFtcCggdl9pbnQsIDEsIDQgKTtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRlcj8uc2V0X3NlY3Rpb25fY29sdW1ucz8uKCBlbCwgY2xhbXBlZCApO1xyXG5cdFx0XHRcdFx0aWYgKCBTdHJpbmcoIGNsYW1wZWQgKSAhPT0gdC52YWx1ZSApIHQudmFsdWUgPSBTdHJpbmcoIGNsYW1wZWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnY2hlY2tib3gnICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCBTdHJpbmcoICEhdiApICk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnbnVtYmVyJyApIHtcclxuXHRcdFx0XHRcdGlmICggdC52YWx1ZSA9PT0gJycgfHwgIU51bWJlci5pc0Zpbml0ZSggdiApICkge1xyXG5cdFx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXkgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgU3RyaW5nKCB2ICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB2ID09IG51bGwgKSB7XHJcblx0XHRcdFx0XHRlbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXkgKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCAodHlwZW9mIHYgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KCB2ICkgOiBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHByZXZpZXcvb3ZlcmxheVxyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMuYnVpbGRlcj8ucHJldmlld19tb2RlICkgdGhpcy5idWlsZGVyLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdGVsc2UgdGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXIoIGVsICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXIoIGVsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5fbmVlZHNfcmVyZW5kZXIoIGVsLCBrZXksIGUgKSApIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZW5kZXJfcHJlc2VydmluZ19mb2N1cyggMCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X25lZWRzX3JlcmVuZGVyKGVsLCBrZXksIF9lKSB7XHJcblx0XHRcdGlmICggZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiYga2V5ID09PSAnY29sdW1ucycgKSByZXR1cm4gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJpbmRfdG9fZmllbGQoZmllbGRfZWwpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZF9lbCA9IGZpZWxkX2VsO1xyXG5cdFx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNsZWFyKCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkX2VsID0gbnVsbDtcclxuXHRcdFx0aWYgKCB0aGlzLl9yZW5kZXJfdGltZXIgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLl9yZW5kZXJfdGltZXIgKTtcclxuXHRcdFx0XHR0aGlzLl9yZW5kZXJfdGltZXIgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEFsc28gY2xlYXIgdGhlIHNlY3Rpb24tY29scyBoaW50IG9uIGVtcHR5IHN0YXRlLlxyXG5cdFx0XHR0aGlzLnBhbmVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1iZmItc2VjdGlvbi1jb2xzJyk7XHJcblx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJ3cGJjX2JmYl9faW5zcGVjdG9yX19lbXB0eVwiPlNlbGVjdCBhIGZpZWxkIHRvIGVkaXQgaXRzIG9wdGlvbnMuPC9kaXY+JztcclxuXHRcdH1cclxuXHJcblx0XHRfc2NoZWR1bGVfcmVuZGVyX3ByZXNlcnZpbmdfZm9jdXMoZGVsYXkgPSAyMDApIHtcclxuXHRcdFx0Y29uc3QgYWN0aXZlICAgID0gLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR8SFRNTEVsZW1lbnR8bnVsbH0gKi8gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xyXG5cdFx0XHRjb25zdCBhY3RpdmVLZXkgPSBhY3RpdmU/LmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCBudWxsO1xyXG5cdFx0XHRsZXQgc2VsU3RhcnQgICAgPSBudWxsLCBzZWxFbmQgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCBhY3RpdmUgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBhY3RpdmUgJiYgJ3NlbGVjdGlvbkVuZCcgaW4gYWN0aXZlICkge1xyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRzZWxTdGFydCA9IGFjdGl2ZS5zZWxlY3Rpb25TdGFydDtcclxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRcdFx0c2VsRW5kICAgPSBhY3RpdmUuc2VsZWN0aW9uRW5kO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX3JlbmRlcl90aW1lciApIGNsZWFyVGltZW91dCggdGhpcy5fcmVuZGVyX3RpbWVyICk7XHJcblx0XHRcdHRoaXMuX3JlbmRlcl90aW1lciA9IC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdFx0XHRcdGlmICggYWN0aXZlS2V5ICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbmV4dCA9IC8qKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudHxIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxFbGVtZW50fG51bGx9ICovIChcclxuXHRcdFx0XHRcdFx0dGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCBgW2RhdGEtaW5zcGVjdG9yLWtleT1cIiR7YWN0aXZlS2V5fVwiXWAgKVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmICggbmV4dCApIHtcclxuXHRcdFx0XHRcdFx0bmV4dC5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggc2VsU3RhcnQgIT0gbnVsbCAmJiBzZWxFbmQgIT0gbnVsbCAmJiB0eXBlb2YgbmV4dC5zZXRTZWxlY3Rpb25SYW5nZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHRcdG5leHQuc2V0U2VsZWN0aW9uUmFuZ2UoIHNlbFN0YXJ0LCBzZWxFbmQgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2goIGUgKXsgX3dwYmM/LmRldj8uZXJyb3IoICdfcmVuZGVyX3RpbWVyJywgZSApOyB9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCBkZWxheSApKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZW5kZXIoKSB7XHJcblxyXG5cdFx0XHRjb25zdCBlbCA9IHRoaXMuc2VsZWN0ZWRfZWw7XHJcblx0XHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuIHRoaXMuY2xlYXIoKTtcclxuXHJcblx0XHRcdC8vIFJlc2V0IHNlY3Rpb24tY29scyBoaW50IHVubGVzcyB3ZSBzZXQgaXQgbGF0ZXIgZm9yIGEgc2VjdGlvbi5cclxuXHRcdFx0dGhpcy5wYW5lbC5yZW1vdmVBdHRyaWJ1dGUoICdkYXRhLWJmYi1zZWN0aW9uLWNvbHMnICk7XHJcblxyXG5cdFx0XHRjb25zdCBwcmV2X3Njcm9sbCA9IHRoaXMucGFuZWwuc2Nyb2xsVG9wO1xyXG5cclxuXHRcdFx0Ly8gU2VjdGlvblxyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkge1xyXG5cdFx0XHRcdGxldCB0cGwgPSBudWxsO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR0cGwgPSAody53cCAmJiB3cC50ZW1wbGF0ZSAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RtcGwtd3BiYy1iZmItaW5zcGVjdG9yLXNlY3Rpb24nICkpID8gd3AudGVtcGxhdGUoICd3cGJjLWJmYi1pbnNwZWN0b3Itc2VjdGlvbicgKSA6IG51bGw7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR0cGwgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCB0cGwgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9IHRwbCgge30gKTtcclxuXHRcdFx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblx0XHRcdFx0XHR0aGlzLl9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzKCBlbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5fcG9zdF9yZW5kZXJfdWkoKTtcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwuc2Nyb2xsVG9wID0gcHJldl9zY3JvbGw7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBGYWN0b3J5ID0gdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeTtcclxuXHRcdFx0XHRjb25zdCBzY2hlbWFzID0gdy5XUEJDX0JGQl9TY2hlbWFzIHx8IHt9O1xyXG5cdFx0XHRcdGNvbnN0IGVudHJ5ICAgPSBzY2hlbWFzWydzZWN0aW9uJ10gfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoIGVudHJ5ICYmIEZhY3RvcnkgKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdFx0RmFjdG9yeS5yZW5kZXIoXHJcblx0XHRcdFx0XHRcdHRoaXMucGFuZWwsXHJcblx0XHRcdFx0XHRcdGVudHJ5LFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0eyBlbCwgYnVpbGRlcjogdGhpcy5idWlsZGVyLCB0eXBlOiAnc2VjdGlvbicsIHRpdGxlOiBlbnRyeS5sYWJlbCB8fCAnU2VjdGlvbicgfVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gLS0tIFNhZmV0eSBuZXQ6IGlmIGZvciBhbnkgcmVhc29uIHRoZSBzbG90IGRpZG7igJl0IHJlbmRlciBjaGlwcywgaW5qZWN0IHRoZW0gbm93LlxyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaGFzU2xvdEhvc3QgPVxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1iZmItc2xvdD1cImxheW91dF9jaGlwc1wiXScgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcuaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyAud3BiY19iZmJfX2xheW91dF9jaGlwcycgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoICcjd3BiY19iZmJfX2xheW91dF9jaGlwc19ob3N0JyApO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3QgaGFzQ2hpcHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0ICAhIXRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fbGF5b3V0X2NoaXAnICk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoICFoYXNDaGlwcyApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBob3N0IGlmIG1pc3NpbmcgYW5kIHJlbmRlciBjaGlwcyBpbnRvIGl0LlxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhvc3QgPSAoZnVuY3Rpb24gZW5zdXJlSG9zdChyb290KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJsYXlvdXRfY2hpcHNcIl0nICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3IoICcuaW5zcGVjdG9yX19yb3ctLWxheW91dC1jaGlwcyAud3BiY19iZmJfX2xheW91dF9jaGlwcycgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fbGF5b3V0X2NoaXBzX2hvc3QnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGggKSByZXR1cm4gaDtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIGhvc3QgaW5zaWRlIChvciBhZnRlcikgdGhlIOKAnGxheW91dOKAnSBncm91cFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzICAgID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIHJvb3QucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ncm91cFtkYXRhLWdyb3VwPVwibGF5b3V0XCJdIC5ncm91cF9fZmllbGRzJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICByb290LnF1ZXJ5U2VsZWN0b3IoICcuZ3JvdXBfX2ZpZWxkcycgKSB8fCByb290O1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgcm93ICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJvdy5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzJztcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhYiAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGxhYi5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX2xhYmVsJztcclxuXHRcdFx0XHRcdFx0XHRcdGxhYi50ZXh0Q29udGVudCA9ICdMYXlvdXQnO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY3RsICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGN0bC5jbGFzc05hbWUgICA9ICdpbnNwZWN0b3JfX2NvbnRyb2wnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aCAgICAgICAgICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGguY2xhc3NOYW1lICAgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXBzJztcclxuXHRcdFx0XHRcdFx0XHRcdGguc2V0QXR0cmlidXRlKCAnZGF0YS1iZmItc2xvdCcsICdsYXlvdXRfY2hpcHMnICk7XHJcblx0XHRcdFx0XHRcdFx0XHRjdGwuYXBwZW5kQ2hpbGQoIGggKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJvdy5hcHBlbmRDaGlsZCggbGFiICk7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGN0bCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzLmFwcGVuZENoaWxkKCByb3cgKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBoO1xyXG5cdFx0XHRcdFx0XHRcdH0pKCB0aGlzLnBhbmVsICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IEwgPSAody5XUEJDX0JGQl9Db3JlICYmIHcuV1BCQ19CRkJfQ29yZS5VSSAmJiB3LldQQkNfQkZCX0NvcmUuVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzKSA7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBMICYmIHR5cGVvZiBMLnJlbmRlcl9mb3Jfc2VjdGlvbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGhvc3QuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0XHRMLnJlbmRlcl9mb3Jfc2VjdGlvbiggdGhpcy5idWlsZGVyLCBlbCwgaG9zdCApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBjYXRjaCggZSApeyBfd3BiYz8uZGV2Py5lcnJvciggJ1dQQkNfQkZCX0luc3BlY3RvciAtIHJlbmRlcicsIGUgKTsgfVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuX3NldF9wYW5lbF9zZWN0aW9uX2NvbHMoIGVsICk7XHJcblx0XHRcdFx0XHR0aGlzLnBhbmVsLnNjcm9sbFRvcCA9IHByZXZfc2Nyb2xsO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19pbnNwZWN0b3JfX2VtcHR5XCI+U2VsZWN0IGEgZmllbGQgdG8gZWRpdCBpdHMgb3B0aW9ucy48L2Rpdj4nO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmllbGRcclxuXHRcdFx0aWYgKCAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkgcmV0dXJuIHRoaXMuY2xlYXIoKTtcclxuXHJcblx0XHRcdGNvbnN0IGRhdGEgPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApO1xyXG5cdFx0XHRjb25zdCB0eXBlID0gZGF0YS50eXBlIHx8ICd0ZXh0JztcclxuXHJcblx0XHRcdGZ1bmN0aW9uIF9nZXRfdHBsKGlkKSB7XHJcblx0XHRcdFx0aWYgKCAhdy53cCB8fCAhd3AudGVtcGxhdGUgKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0XHRpZiAoICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RtcGwtJyArIGlkICkgKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHdwLnRlbXBsYXRlKCBpZCApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB0cGxfaWQgICAgICA9IGB3cGJjLWJmYi1pbnNwZWN0b3ItJHt0eXBlfWA7XHJcblx0XHRcdGNvbnN0IHRwbCAgICAgICAgID0gX2dldF90cGwoIHRwbF9pZCApO1xyXG5cdFx0XHRjb25zdCBnZW5lcmljX3RwbCA9IF9nZXRfdHBsKCAnd3BiYy1iZmItaW5zcGVjdG9yLWdlbmVyaWMnICk7XHJcblxyXG5cdFx0XHRjb25zdCBzY2hlbWFzICAgICAgICAgPSB3LldQQkNfQkZCX1NjaGVtYXMgfHwge307XHJcblx0XHRcdGNvbnN0IHNjaGVtYV9mb3JfdHlwZSA9IHNjaGVtYXNbdHlwZV0gfHwgbnVsbDtcclxuXHRcdFx0Y29uc3QgRmFjdG9yeSAgICAgICAgID0gdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeTtcclxuXHJcblx0XHRcdGlmICggdHBsICkge1xyXG5cdFx0XHRcdC8vIE5FVzogbWVyZ2Ugc2NoZW1hIGRlZmF1bHRzIHNvIG1pc3Npbmcga2V5cyAoZXNwLiBib29sZWFucykgaG9ub3IgZGVmYXVsdHMgb24gZmlyc3QgcGFpbnRcclxuXHRcdFx0XHRjb25zdCBoYXNPd24gPSBGdW5jdGlvbi5jYWxsLmJpbmQoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgKTtcclxuXHRcdFx0XHRjb25zdCBwcm9wcyAgPSAoc2NoZW1hX2Zvcl90eXBlICYmIHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEgJiYgc2NoZW1hX2Zvcl90eXBlLnNjaGVtYS5wcm9wcykgPyBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzIDoge307XHJcblx0XHRcdFx0Y29uc3QgbWVyZ2VkID0geyAuLi5kYXRhIH07XG5cdFx0XHRcdGlmICggcHJvcHMgKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoIHByb3BzICkuZm9yRWFjaCggKGspID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG1ldGEgPSBwcm9wc1trXSB8fCB7fTtcblx0XHRcdFx0XHRcdGlmICggIWhhc093biggZGF0YSwgayApICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29lcmNlIGJvb2xlYW5zIHRvIGEgcmVhbCBib29sZWFuOyBsZWF2ZSBvdGhlcnMgYXMtaXNcblx0XHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSAobWV0YS50eXBlID09PSAnYm9vbGVhbicpID8gISFtZXRhLmRlZmF1bHQgOiBtZXRhLmRlZmF1bHQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIG1ldGEudHlwZSA9PT0gJ2Jvb2xlYW4nICkge1xuXHRcdFx0XHRcdFx0XHQvLyBFeHBsaWNpdCBlbXB0eSB2YWx1ZXMgYXJlIGxlZ2FjeSB1bmNoZWNrZWQgYm9vbGVhbnMsIG5vdCBtaXNzaW5nIGRlZmF1bHRzLlxuXHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIGRhdGFba10sIGZhbHNlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBkYXRhW2tdID09PSAnJyAmJiBoYXNPd24oIG1ldGEsICdkZWZhdWx0JyApICkge1xuXHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSBtZXRhLmRlZmF1bHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSB0cGwoIG1lcmdlZCApO1xyXG5cclxuXHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCBzY2hlbWFfZm9yX3R5cGUgJiYgRmFjdG9yeSApIHtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdEZhY3RvcnkucmVuZGVyKFxyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbCxcclxuXHRcdFx0XHRcdHNjaGVtYV9mb3JfdHlwZSxcclxuXHRcdFx0XHRcdHsgLi4uZGF0YSB9LFxyXG5cdFx0XHRcdFx0eyBlbCwgYnVpbGRlcjogdGhpcy5idWlsZGVyLCB0eXBlLCB0aXRsZTogZGF0YS5sYWJlbCB8fCAnJyB9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBFbnN1cmUgdG9nZ2xlIG5vcm1hbGl6ZXJzIGFuZCBzbGlkZXIvbnVtYmVyL3VuaXQgd2lyaW5nIGFyZSBhdHRhY2hlZC5cclxuXHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCBnZW5lcmljX3RwbCApIHtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9IGdlbmVyaWNfdHBsKCB7IC4uLmRhdGEgfSApO1xyXG5cdFx0XHRcdHRoaXMuX3Bvc3RfcmVuZGVyX3VpKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG1zZyAgICAgICAgICAgID0gYFRoZXJlIGFyZSBubyBJbnNwZWN0b3Igd3AudGVtcGxhdGUgXCIke3RwbF9pZH1cIiBvciBTY2hlbWEgZm9yIHRoaXMgXCIke1N0cmluZyggdHlwZSB8fCAnJyApfVwiIGVsZW1lbnQuYDtcclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdGNvbnN0IGRpdiAgICAgICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHRkaXYuY2xhc3NOYW1lICAgICAgICA9ICd3cGJjX2JmYl9faW5zcGVjdG9yX19lbXB0eSc7XHJcblx0XHRcdFx0ZGl2LnRleHRDb250ZW50ICAgICAgPSBtc2c7IC8vIHNhZmUuXHJcblx0XHRcdFx0dGhpcy5wYW5lbC5hcHBlbmRDaGlsZCggZGl2ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuX2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCk7XHJcblx0XHRcdHRoaXMucGFuZWwuc2Nyb2xsVG9wID0gcHJldl9zY3JvbGw7XHJcblx0XHR9XHJcblxyXG5cdFx0X2VuZm9yY2VfZGVmYXVsdF9ncm91cF9vcGVuKCkge1xyXG5cdFx0XHRjb25zdCBncm91cHMgPSBBcnJheS5mcm9tKCB0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXAnICkgKTtcclxuXHRcdFx0aWYgKCAhZ3JvdXBzLmxlbmd0aCApIHJldHVybjtcclxuXHJcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRncm91cHMuZm9yRWFjaCggKGcpID0+IHtcclxuXHRcdFx0XHRpZiAoICFmb3VuZCAmJiBnLmNsYXNzTGlzdC5jb250YWlucyggJ2lzLW9wZW4nICkgKSB7XHJcblx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICggZy5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1vcGVuJyApICkge1xyXG5cdFx0XHRcdFx0XHRnLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdFx0XHRnLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3dwYmM6Y29sbGFwc2libGU6Y2xvc2UnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRnLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0aWYgKCAhZm91bmQgKSB7XHJcblx0XHRcdFx0Z3JvdXBzWzBdLmNsYXNzTGlzdC5hZGQoICdpcy1vcGVuJyApO1xyXG5cdFx0XHRcdGdyb3Vwc1swXS5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd3cGJjOmNvbGxhcHNpYmxlOm9wZW4nLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBkYXRhLWJmYi1zZWN0aW9uLWNvbHMgb24gdGhlIGluc3BlY3RvciBwYW5lbCBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWN0aW9uLlxyXG5cdFx0ICogVXNlcyB0aGUgcmVnaXN0ZXJlZCBjb21wdXRlIGZuIGlmIGF2YWlsYWJsZTsgZmFsbHMgYmFjayB0byBkaXJlY3QgRE9NLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbkVsXHJcblx0XHQgKi9cclxuXHRcdF9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzKHNlY3Rpb25FbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIFByZWZlciB0aGUgYWxyZWFkeS1yZWdpc3RlcmVkIHZhbHVlX2Zyb20gaGVscGVyIGlmIHByZXNlbnQuXHJcblx0XHRcdFx0dmFyIGNvbXB1dGUgPSB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb20gJiYgdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tLmNvbXB1dGVfc2VjdGlvbl9jb2x1bW5zO1xyXG5cclxuXHRcdFx0XHR2YXIgY29scyA9IDE7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgY29tcHV0ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdGNvbHMgPSBjb21wdXRlKCB7IGVsOiBzZWN0aW9uRWwgfSApIHx8IDE7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBjb21wdXRlIGRpcmVjdGx5IGZyb20gdGhlIERPTS5cclxuXHRcdFx0XHRcdHZhciByb3cgPSBzZWN0aW9uRWwgJiYgc2VjdGlvbkVsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRcdGNvbHMgICAgPSByb3cgPyAocm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMSkgOiAxO1xyXG5cdFx0XHRcdFx0aWYgKCBjb2xzIDwgMSApIGNvbHMgPSAxO1xyXG5cdFx0XHRcdFx0aWYgKCBjb2xzID4gNCApIGNvbHMgPSA0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnBhbmVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtYmZiLXNlY3Rpb24tY29scycsIFN0cmluZyggY29scyApICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdF9jcmVhdGVfZmFsbGJhY2tfcGFuZWwoKSB7XHJcblx0XHRcdGNvbnN0IHAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0cC5pZCAgICAgICAgPSAnd3BiY19iZmJfX2luc3BlY3Rvcic7XHJcblx0XHRcdHAuY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19pbnNwZWN0b3InO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBwICk7XHJcblx0XHRcdHJldHVybiAvKiogQHR5cGUge0hUTUxEaXZFbGVtZW50fSAqLyAocCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBFeHBvcnQgY2xhc3MgKyByZWFkeSBzaWduYWwuXHJcblx0dy5XUEJDX0JGQl9JbnNwZWN0b3IgPSBXUEJDX0JGQl9JbnNwZWN0b3I7XHJcblx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JyApICk7XHJcblxyXG59KSggd2luZG93ICk7XHJcbiJdLCJtYXBwaW5ncyI6ImFBQUE7QUFDQTtBQUNBO0FBQ0EsVUFBQUEsQ0FBQSxFQUNBLGFBRUE7QUFDQSxNQUFBQyxJQUFBLENBQUFELENBQUEsQ0FBQUUsYUFBQSxDQUFBRixDQUFBLENBQUFFLGFBQUEsS0FDQSxNQUFBQyxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxDQUFBRixJQUFBLENBQUFFLEVBQUEsS0FFQTtBQUNBO0FBQ0E7QUFDQSxJQUNBRixJQUFBLENBQUFHLGlCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLFFBQUFDLENBQUEsRUFDQSxPQUFBTixDQUFBLENBQUFPLEdBQUEsRUFBQVAsQ0FBQSxDQUFBTyxHQUFBLENBQUFDLE1BQUEsQ0FBQVIsQ0FBQSxDQUFBTyxHQUFBLENBQUFDLE1BQUEsQ0FBQUMsTUFBQSxDQUFBSCxDQUFBLEdBQUFHLE1BQUEsQ0FBQUgsQ0FBQSxFQUFBSSxPQUFBLHFCQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLDRCQUFBQyxDQUFBLEVBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLEVBQ0FGLE9BQUEsZUFDQUEsT0FBQSxhQUNBQSxPQUFBLGVBQ0FBLE9BQUEsY0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBRyxpQkFBQUQsQ0FBQSxFQUNBLElBQUFOLENBQUEsRUFBQU0sQ0FBQSxVQUFBSCxNQUFBLENBQUFHLENBQUEsR0FBQUUsSUFBQSxHQUNBUixDQUFBLENBQUFBLENBQUEsQ0FDQUksT0FBQSxhQUNBQSxPQUFBLDRCQUNBQSxPQUFBLFlBQ0FBLE9BQUEsMEJBQ0EsSUFBQUosQ0FBQSxlQUNBLGdCQUFBUyxJQUFBLENBQUFULENBQUEsRUFBQUEsQ0FBQSxNQUFBQSxDQUFBLENBQ0EsT0FBQUEsQ0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVUsbUJBQUFKLENBQUEsRUFFQSxJQUFBTixDQUFBLEVBQUFNLENBQUEsVUFBQUgsTUFBQSxDQUFBRyxDQUFBLEdBQUFFLElBQUEsR0FFQVIsQ0FBQSxDQUFBQSxDQUFBLENBQUFJLE9BQUEsYUFBQUEsT0FBQSx3QkFBQUEsT0FBQSxZQUVBLElBQUFKLENBQUEsRUFDQUEsQ0FBQSxTQUNBLENBQ0EsZ0JBQUFTLElBQUEsQ0FBQVQsQ0FBQSxHQUNBQSxDQUFBLE1BQUFBLENBQUEsQ0FDQSxDQUNBLE9BQUFBLENBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBVyxZQUFBTCxDQUFBLEVBQ0EsR0FBQUEsQ0FBQSxRQUNBLFNBQ0EsQ0FDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsRUFDQUYsT0FBQSxlQUNBQSxPQUFBLGdCQUNBQSxPQUFBLGdCQUNBQSxPQUFBLGNBQ0FBLE9BQUEsY0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFRLHNCQUFBWixDQUFBLEVBQ0EsT0FBQUcsTUFBQSxDQUFBSCxDQUFBLFVBQUFBLENBQUEsRUFDQUksT0FBQSxlQUNBQSxPQUFBLGNBQ0FBLE9BQUEsY0FDQUEsT0FBQSxnQkFDQUEsT0FBQSxlQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFTLHVCQUFBUCxDQUFBLEVBQ0EsR0FBQUEsQ0FBQSxnQkFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsRUFBQUYsT0FBQSxtQkFBQUEsT0FBQSxhQUFBSSxJQUFBLEdBQ0EsQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFNLFNBQUFSLENBQUEsRUFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsTUFDQUUsSUFBQSxHQUNBSixPQUFBLGFBQ0FBLE9BQUEsd0JBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVcsU0FBQVQsQ0FBQSxFQUNBLE9BQUFILE1BQUEsQ0FBQUcsQ0FBQSxNQUNBRSxJQUFBLEdBQ0FKLE9BQUEsZ0JBQ0FBLE9BQUEsc0JBQ0FBLE9BQUEsWUFDQVksV0FBQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLFVBQUFYLENBQUEsRUFDQSxVQUFBQSxDQUFBLG9CQUFBQSxDQUFBLENBQ0EsTUFBQU4sQ0FBQSxDQUFBRyxNQUFBLENBQUFHLENBQUEsTUFBQUUsSUFBQSxHQUFBUSxXQUFBLEdBQ0EsT0FBQWhCLENBQUEsV0FBQUEsQ0FBQSxRQUFBQSxDQUFBLFVBQUFBLENBQUEsUUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFrQixlQUFBWixDQUFBLENBQUFhLEdBQUEsUUFDQSxHQUFBYixDQUFBLFFBQUFBLENBQUEsYUFBQWEsR0FBQSxDQUNBLFlBQUFGLFNBQUEsQ0FBQVgsQ0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQWMsY0FBQWQsQ0FBQSxDQUFBZSxjQUFBLEVBQ0EsR0FBQWYsQ0FBQSxRQUNBLE9BQUFlLGNBQUEsQ0FDQSxDQUNBLE1BQUFyQixDQUFBLENBQUFHLE1BQUEsQ0FBQUcsQ0FBQSxFQUFBRSxJQUFBLEdBQ0EsTUFBQWMsQ0FBQSxDQUFBQyxVQUFBLENBQUF2QixDQUFBLENBQUFJLE9BQUEsV0FDQSxPQUFBb0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQUEsQ0FBQSxDQUFBRCxjQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFLLE1BQUFKLENBQUEsQ0FBQUssR0FBQSxDQUFBQyxHQUFBLEVBQ0EsT0FBQUMsSUFBQSxDQUFBRCxHQUFBLENBQUFELEdBQUEsQ0FBQUUsSUFBQSxDQUFBRixHQUFBLENBQUFDLEdBQUEsQ0FBQU4sQ0FBQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVEsdUJBQUF4QixDQUFBLEVBQ0EsR0FBQUEsQ0FBQSxnQkFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsRUFBQUYsT0FBQSxlQUFBQSxPQUFBLFlBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQTJCLHFCQUFBekIsQ0FBQSxFQUNBLE9BQUFILE1BQUEsQ0FBQUcsQ0FBQSxNQUFBRixPQUFBLGFBQUFBLE9BQUEsZUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUE0QixnQkFBQWhDLENBQUEsQ0FBQWlDLFFBQUEsT0FDQSxJQUNBLE9BQUFDLElBQUEsQ0FBQUMsS0FBQSxDQUFBbkMsQ0FBQSxFQUNBLE9BQUFvQyxDQUFBLEVBQ0EsT0FBQUgsUUFBQSxDQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUkscUJBQUEvQixDQUFBLEVBQ0EsVUFBQUEsQ0FBQSxhQUFBQSxDQUFBLFNBQ0EsSUFDQSxPQUFBNEIsSUFBQSxDQUFBSSxTQUFBLENBQUFoQyxDQUFBLEVBQ0EsT0FDQWlDLE9BQUEsQ0FBQUMsS0FBQSwrQkFDQSxTQUNBLENBQ0EsQ0FDQSxPQUFBckMsTUFBQSxDQUFBRyxDQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFtQyxpQkFBQW5DLENBQUEsQ0FBQTJCLFFBQUEsU0FDQSxNQUFBakMsQ0FBQSxDQUFBRyxNQUFBLENBQUFHLENBQUEsTUFBQUUsSUFBQSxHQUNBLE1BQUFrQyxDQUFBLENBQUExQyxDQUFBLENBQUEyQyxLQUFBLHNDQUNBLE9BQUFELENBQUEsQ0FBQUEsQ0FBQSxJQUFBdkMsTUFBQSxDQUFBOEIsUUFBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBVyxtQkFBQXRDLENBQUEsQ0FBQTJCLFFBQUEsWUFDQSxNQUFBakMsQ0FBQSxDQUFBRyxNQUFBLENBQUFHLENBQUEsTUFBQUUsSUFBQSxHQUNBLHlDQUFBQyxJQUFBLENBQUFULENBQUEsRUFBQUEsQ0FBQSxDQUFBRyxNQUFBLENBQUE4QixRQUFBLEVBQ0EsQ0FFQSxFQUVBO0FBQ0E7QUFDQTtBQUNBLElBQ0F0QyxJQUFBLENBQUFrRCxrQkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsWUFBQUMsZUFBQSxFQUNBLEtBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsdUJBQUFDLE1BQUEsQ0FBQUMsU0FBQSxPQUNBLE1BQUFDLElBQUEsQ0FBQXhELElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVMsZ0JBQUEsQ0FBQTBDLE1BQUEsRUFDQSxJQUFBRyxFQUFBLENBQUFELElBQUEsVUFDQSxNQUFBRSxHQUFBLENBQUEvQyxDQUFBLEVBQUFYLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQUMsQ0FBQSxFQUNBLE1BQUFnRCxNQUFBLENBQUFoRCxDQUFBLEVBQUFYLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQUMsQ0FBQSxFQUNBLE1BQUFpRCxPQUFBLENBQUFMLFNBQUEsRUFBQU0sT0FBQSxFQUFBQyxHQUFBLG9CQUFBSCxNQUFBLENBQUFKLFNBQUEsQ0FBQU0sT0FBQSxDQUFBQyxHQUFBLFVBQ0EsV0FBQVYsZUFBQSxFQUFBVyxhQUFBLENBQ0EsNkNBQUFILE9BQUEsYUFBQUYsR0FBQSxDQUFBRCxFQUFBLG9EQUFBRyxPQUFBLGFBQUFGLEdBQUEsQ0FBQUQsRUFBQSxLQUNBLEdBQ0E7QUFDQSxNQUFBTyxLQUFBLE1BQUFaLGVBQUEsQ0FBQVcsYUFBQSx3REFBQUwsR0FBQSxDQUFBRCxFQUFBLDhEQUFBQyxHQUFBLENBQUFELEVBQUEsT0FDQSxHQUFBTyxLQUFBLEVBQUFULFNBQUEsRUFBQVMsS0FBQSxHQUFBVCxTQUFBLEVBQ0EsTUFDQSxDQUNBRSxFQUFBLElBQUFELElBQUEsYUFBQXRCLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLFFBQ0EsQ0FDQSxPQUFBVixFQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBVyx5QkFBQVosSUFBQSxDQUFBRCxTQUFBLE9BQ0EsSUFBQWMsSUFBQSxDQUFBYixJQUFBLFVBQ0EsTUFBQUUsR0FBQSxDQUFBL0MsQ0FBQSxFQUFBWCxJQUFBLENBQUFHLGlCQUFBLENBQUFPLDJCQUFBLENBQUFDLENBQUEsRUFDQSxNQUFBZ0QsTUFBQSxDQUFBaEQsQ0FBQSxFQUFBWCxJQUFBLENBQUFHLGlCQUFBLENBQUFPLDJCQUFBLENBQUFDLENBQUEsRUFDQTtBQUNBLE1BQUFtRCxHQUFBLENBQUFQLFNBQUEsRUFBQU0sT0FBQSxFQUFBQyxHQUFBLENBQ0EsTUFBQUYsT0FBQSxDQUFBRSxHQUFBLG9CQUFBSCxNQUFBLENBQUFHLEdBQUEsVUFDQSxZQUNBLE1BQUFRLFFBQUEsOENBQUFWLE9BQUEsZUFBQUYsR0FBQSxDQUFBVyxJQUFBLE1BQ0EsTUFBQUUsT0FBQSxNQUFBbkIsZUFBQSxFQUFBb0IsZ0JBQUEsQ0FBQUYsUUFBQSxNQUNBLEdBQUFDLE9BQUEsQ0FBQUUsTUFBQTtBQUNBLE1BQUExQixDQUFBLENBQUFzQixJQUFBLENBQUFyQixLQUFBLFlBQ0FxQixJQUFBLENBQUF0QixDQUFBLENBQUFzQixJQUFBLENBQUE1RCxPQUFBLGNBQUFvQixNQUFBLENBQUFrQixDQUFBLFlBQUFTLElBQUEsS0FDQSxDQUNBLE9BQUFhLElBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBSyxhQUFBQyxRQUFBLENBQUFDLFFBQUEsQ0FBQUMsYUFBQSxRQUNBLE1BQUFDLE9BQUEsQ0FBQTlFLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVMsZ0JBQUEsQ0FBQWdFLFFBQUEsRUFDQSxNQUFBRyxNQUFBLE1BQUExQixzQkFBQSxDQUFBeUIsT0FBQSxDQUFBSCxRQUFBLEVBQ0FBLFFBQUEsQ0FBQUssWUFBQSxXQUFBRCxNQUFBLEVBQ0EsR0FBQUYsYUFBQSxFQUNBO0FBQUEsQ0FFQSxPQUFBRSxNQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsZUFBQU4sUUFBQSxDQUFBTyxVQUFBLENBQUFMLGFBQUEsUUFDQSxNQUFBTSxHQUFBLEVBQUFELFVBQUEsVUFBQTFFLE1BQUEsQ0FBQTBFLFVBQUEsR0FBQXJFLElBQUEsR0FDQSxNQUFBMkMsSUFBQSxDQUFBMkIsR0FBQSxDQUNBbkYsSUFBQSxDQUFBRyxpQkFBQSxDQUFBWSxrQkFBQSxDQUFBb0UsR0FBQSxFQUNBbkYsSUFBQSxDQUFBRyxpQkFBQSxDQUFBWSxrQkFBQSxDQUFBNEQsUUFBQSxDQUFBUyxZQUFBLHNCQUVBLE1BQUFMLE1BQUEsTUFBQVgsd0JBQUEsQ0FBQVosSUFBQSxDQUFBbUIsUUFBQSxFQUNBQSxRQUFBLENBQUFLLFlBQUEsYUFBQUQsTUFBQSxFQUNBLEdBQUFGLGFBQUEsRUFDQTtBQUFBLENBRUEsT0FBQUUsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FNLGtCQUFBVixRQUFBLENBQUFXLFlBQUEsQ0FBQVQsYUFBQSxRQUNBLE1BQUFNLEdBQUEsRUFBQUcsWUFBQSxVQUFBOUUsTUFBQSxDQUFBOEUsWUFBQSxHQUFBekUsSUFBQSxHQUVBLEdBQUFzRSxHQUFBLE9BQ0FSLFFBQUEsQ0FBQVksZUFBQSxpQkFDQSxHQUFBVixhQUFBLEVBQ0E7QUFBQSxDQUVBLFNBQ0EsQ0FFQSxNQUFBQyxPQUFBLENBQUE5RSxJQUFBLENBQUFHLGlCQUFBLENBQUFTLGdCQUFBLENBQUF1RSxHQUFBLEVBQ0EsSUFBQUssTUFBQSxDQUFBVixPQUFBLENBQ0EsTUFBQXBCLEdBQUEsQ0FBQS9DLENBQUEsRUFBQVgsSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBQyxDQUFBLEVBQ0EsTUFBQWdELE1BQUEsQ0FBQWhELENBQUEsRUFBQVgsSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBQyxDQUFBLEVBRUEsWUFFQSxNQUFBbUQsR0FBQSxDQUFBYSxRQUFBLEVBQUFkLE9BQUEsRUFBQUMsR0FBQSxDQUNBLE1BQUFGLE9BQUEsQ0FBQUUsR0FBQSxvQkFBQUgsTUFBQSxDQUFBRyxHQUFBLFVBRUEsTUFBQTJCLGFBQUEsTUFBQXJDLGVBQUEsRUFBQVcsYUFBQSxDQUNBLDZDQUFBSCxPQUFBLGtCQUFBRixHQUFBLENBQUE4QixNQUFBLE9BQ0EsK0NBQUE1QixPQUFBLGtCQUFBRixHQUFBLENBQUE4QixNQUFBLEtBQ0EsRUFDQSxNQUFBRSxRQUFBLENBQUFDLFFBQUEsQ0FBQUMsY0FBQSxDQUFBSixNQUFBLEVBRUE7QUFDQSxNQUFBSyxjQUFBLENBQUFILFFBQUEsR0FBQWYsUUFBQSxFQUFBZSxRQUFBLEVBQUFmLFFBQUEsQ0FBQW1CLFFBQUEsQ0FBQUosUUFBQSxFQUVBLElBQUFELGFBQUEsSUFBQUMsUUFBQSxFQUFBRyxjQUFBLEdBQ0EsTUFDQSxDQUVBLE1BQUE5QyxDQUFBLENBQUF5QyxNQUFBLENBQUF4QyxLQUFBLFlBQ0F3QyxNQUFBLENBQUF6QyxDQUFBLENBQUF5QyxNQUFBLENBQUEvRSxPQUFBLGNBQUFvQixNQUFBLENBQUFrQixDQUFBLFlBQUErQixPQUFBLEtBQ0EsQ0FFQUgsUUFBQSxDQUFBSyxZQUFBLGdCQUFBUSxNQUFBLEVBQ0EsR0FBQVgsYUFBQSxFQUNBO0FBQUEsQ0FFQSxPQUFBVyxNQUFBLENBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQSxJQUNBeEYsSUFBQSxDQUFBK0Ysc0JBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0E1QyxZQUFBNkMsSUFBQSxLQUNBLEtBQUFDLGVBQUEsQ0FBQXBFLE1BQUEsQ0FBQUMsUUFBQSxFQUFBa0UsSUFBQSxDQUFBQyxlQUFBLEdBQUFELElBQUEsQ0FBQUMsZUFBQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyxpQ0FBQUMsTUFBQSxDQUFBQyxXQUFBLE1BQUFILGVBQUEsRUFDQSxNQUFBSSxJQUFBLENBQUFDLEtBQUEsQ0FBQUMsSUFBQSxDQUFBSixNQUFBLEVBQUEzQixnQkFBQSxvQ0FDQSxNQUFBN0MsQ0FBQSxDQUFBMEUsSUFBQSxDQUFBNUIsTUFBQSxJQUVBLE1BQUFVLEdBQUEsQ0FBQWtCLElBQUEsQ0FBQUcsR0FBQSxDQUFBQyxHQUFBLEdBQ0EsTUFBQTFHLENBQUEsQ0FBQTBHLEdBQUEsQ0FBQUMsS0FBQSxDQUFBQyxTQUFBLEtBQ0EsTUFBQUMsQ0FBQSxDQUFBNUcsSUFBQSxDQUFBRyxpQkFBQSxDQUFBc0IsYUFBQSxDQUFBMUIsQ0FBQSxDQUFBOEcsR0FBQSxFQUNBLE9BQUFoRixNQUFBLENBQUFDLFFBQUEsQ0FBQThFLENBQUEsRUFBQUEsQ0FBQSxLQUFBakYsQ0FBQSxDQUNBLEdBRUEsTUFBQW1GLE9BQUEsQ0FBQTNCLEdBQUEsQ0FBQTRCLE1BQUEsRUFBQUMsQ0FBQSxDQUFBQyxDQUFBLEdBQUFELENBQUEsQ0FBQUMsQ0FBQSxTQUNBLE1BQUFDLEVBQUEsQ0FBQXJGLE1BQUEsQ0FBQUMsUUFBQSxFQUFBc0UsV0FBQSxHQUFBQSxXQUFBLEdBQ0EsTUFBQWUsVUFBQSxDQUFBakYsSUFBQSxDQUFBRCxHQUFBLEdBQUFOLENBQUEsSUFBQXVGLEVBQUEsQ0FDQSxNQUFBRSxTQUFBLENBQUFsRixJQUFBLENBQUFELEdBQUEsT0FBQWtGLFVBQUEsRUFDQSxNQUFBRSxLQUFBLENBQUFELFNBQUEsQ0FBQU4sT0FBQSxDQUVBLE9BQ0FNLFNBQUEsQ0FDQUUsS0FBQSxDQUFBbkMsR0FBQSxDQUFBcUIsR0FBQSxDQUFBSSxDQUFBLEVBQUExRSxJQUFBLENBQUFELEdBQUEsR0FBQTJFLENBQUEsQ0FBQVMsS0FBQSxFQUNBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRSxtQkFBQXBCLE1BQUEsQ0FBQW1CLEtBQUEsRUFDQSxNQUFBakIsSUFBQSxDQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQUosTUFBQSxFQUFBM0IsZ0JBQUEsb0NBQ0E2QixJQUFBLENBQUFtQixPQUFBLEVBQUFmLEdBQUEsQ0FBQWdCLENBQUEsSUFDQSxNQUFBYixDQUFBLENBQUFVLEtBQUEsQ0FBQUcsQ0FBQSxLQUNBaEIsR0FBQSxDQUFBQyxLQUFBLENBQUFDLFNBQUEsSUFBQUMsQ0FBQSxJQUNBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBYyxnQkFBQXZCLE1BQUEsQ0FBQUMsV0FBQSxNQUFBSCxlQUFBLEVBQ0EsTUFBQUksSUFBQSxDQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQUosTUFBQSxFQUFBM0IsZ0JBQUEsb0NBQ0EsTUFBQTdDLENBQUEsQ0FBQTBFLElBQUEsQ0FBQTVCLE1BQUEsSUFDQSxNQUFBeUMsRUFBQSxDQUFBckYsTUFBQSxDQUFBQyxRQUFBLEVBQUFzRSxXQUFBLEdBQUFBLFdBQUEsR0FDQSxNQUFBZSxVQUFBLENBQUFqRixJQUFBLENBQUFELEdBQUEsR0FBQU4sQ0FBQSxJQUFBdUYsRUFBQSxDQUNBLE1BQUFFLFNBQUEsQ0FBQWxGLElBQUEsQ0FBQUQsR0FBQSxPQUFBa0YsVUFBQSxFQUNBLE1BQUFRLElBQUEsQ0FBQVAsU0FBQSxDQUFBekYsQ0FBQSxDQUNBLEtBQUE0RixrQkFBQSxDQUFBcEIsTUFBQSxDQUFBRyxLQUFBLENBQUEzRSxDQUFBLEVBQUFpRyxJQUFBLENBQUFELElBQUEsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsb0JBQUFDLFlBQUEsQ0FBQUMsT0FBQSxDQUFBM0IsV0FBQSxNQUFBSCxlQUFBLEVBQ0EsTUFBQStCLEdBQUEsQ0FBQUYsWUFBQSxFQUFBRyxTQUFBLEVBQUFuQyxRQUFBLGtCQUNBZ0MsWUFBQSxDQUNBQSxZQUFBLEVBQUEvRCxhQUFBLDRCQUVBLElBQUFpRSxHQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUEzQixJQUFBLENBQUFDLEtBQUEsQ0FBQUMsSUFBQSxDQUFBeUIsR0FBQSxDQUFBeEQsZ0JBQUEsb0NBQ0EsTUFBQTdDLENBQUEsQ0FBQTBFLElBQUEsQ0FBQTVCLE1BQUEsSUFFQSxJQUFBNkIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBSCxPQUFBLEdBQUFBLE9BQUEsQ0FBQXRELE1BQUEsR0FBQTlDLENBQUEsRUFDQSxLQUFBK0YsZUFBQSxDQUFBTSxHQUFBLENBQUE1QixXQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUErQixHQUFBLENBQUFKLE9BQUEsQ0FBQWhCLE1BQUEsRUFBQUMsQ0FBQSxDQUFBQyxDQUFBLEdBQUFELENBQUEsQ0FBQTlFLElBQUEsQ0FBQUQsR0FBQSxHQUFBSixNQUFBLENBQUFvRixDQUFBLFlBQ0EsTUFBQUMsRUFBQSxDQUFBckYsTUFBQSxDQUFBQyxRQUFBLEVBQUFzRSxXQUFBLEdBQUFBLFdBQUEsR0FDQSxNQUFBZ0IsU0FBQSxDQUFBbEYsSUFBQSxDQUFBRCxHQUFBLE9BQUFDLElBQUEsQ0FBQUQsR0FBQSxHQUFBTixDQUFBLElBQUF1RixFQUFBLEVBQ0EsTUFBQUksS0FBQSxDQUFBUyxPQUFBLENBQUF2QixHQUFBLENBQUF6RyxDQUFBLEVBQUFtQyxJQUFBLENBQUFELEdBQUEsSUFBQUosTUFBQSxDQUFBOUIsQ0FBQSxNQUFBb0ksR0FBQSxDQUFBZixTQUFBLEdBRUEsS0FBQUcsa0JBQUEsQ0FBQVMsR0FBQSxDQUFBVixLQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQWMsMEJBQUF6RyxDQUFBLEVBQ0EsT0FBQUEsQ0FBQSxFQUNBLE9BQ0EsWUFDQSxPQUNBLGdDQUNBLE9BQ0Esd0NBQ0EsT0FDQSxzQ0FDQSxRQUNBLE9BQUEyRSxLQUFBLENBQUEzRSxDQUFBLEVBQUFpRyxJQUFBLEtBQ0EsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBUyxvQkFBQU4sT0FBQSxFQUNBLE1BQUFJLEdBQUEsQ0FBQUosT0FBQSxDQUFBaEIsTUFBQSxFQUFBQyxDQUFBLENBQUFDLENBQUEsR0FBQUQsQ0FBQSxFQUFBbkYsTUFBQSxDQUFBb0YsQ0FBQSxZQUNBLE9BQUFjLE9BQUEsQ0FBQXZCLEdBQUEsQ0FBQXpHLENBQUEsRUFBQW1DLElBQUEsQ0FBQW9HLEtBQUEsRUFBQXpHLE1BQUEsQ0FBQTlCLENBQUEsTUFBQW9JLEdBQUEsT0FBQUksSUFBQSxXQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLGNBQUFDLEtBQUEsRUFDQSxJQUFBQSxLQUFBLEVBQ0EsU0FDQSxDQUNBLE9BQUFqSSxNQUFBLENBQUFpSSxLQUFBLEVBQ0FoSSxPQUFBLGtCQUNBaUksS0FBQSxXQUNBbEMsR0FBQSxDQUFBbkcsQ0FBQSxFQUFBdUIsVUFBQSxDQUFBdkIsQ0FBQSxHQUNBc0ksTUFBQSxDQUFBaEgsQ0FBQSxFQUFBRSxNQUFBLENBQUFDLFFBQUEsQ0FBQUgsQ0FBQSxHQUFBQSxDQUFBLEtBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBLElBQ0EzQixJQUFBLENBQUE0SSwwQkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBekYsWUFBQUMsZUFBQSxDQUFBeUYsV0FBQSxFQUNBLEtBQUF6RixlQUFBLENBQUFBLGVBQUEsQ0FDQTtBQUNBLEtBQUF5RixXQUFBLENBQUF2QyxLQUFBLENBQUE0QixPQUFBLENBQUFXLFdBQUEsRUFBQUEsV0FBQSxDQUFBQSxXQUFBLEVBQUFBLFdBQUEsS0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLGtCQUFBM0QsR0FBQSxFQUNBLEdBQUFBLEdBQUEsUUFDQSxPQUFBNEQsUUFBQSxDQUNBLENBQ0EsTUFBQXBILENBQUEsQ0FBQXFILFFBQUEsQ0FBQTdELEdBQUEsS0FDQSxPQUFBdEQsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQUEsQ0FBQSxDQUFBb0gsUUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRSxtQkFBQSxFQUNBLE1BQUFDLElBQUEsSUFDQSxNQUFBQyxHQUFBLE1BQUEvRixlQUFBLEVBQUFvQixnQkFBQSxvRUFDQTJFLEdBQUEsQ0FBQTNCLE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBQyxHQUFBLENBQUFELEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXlGLFNBQUEsRUFBQUYsRUFBQSxDQUFBdkYsT0FBQSxDQUFBMEYsSUFBQSxFQUFBSCxFQUFBLENBQUF2RixPQUFBLENBQUFKLEVBQUEsQ0FDQSxJQUFBNEYsR0FBQSxFQUNBLE9BQ0EsQ0FDQUgsSUFBQSxDQUFBRyxHQUFBLEdBQUFILElBQUEsQ0FBQUcsR0FBQSxRQUNBLEdBQ0EsT0FBQUgsSUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FNLGtCQUFBSCxHQUFBLEVBQ0EsSUFBQUEsR0FBQSxFQUNBLE9BQUFOLFFBQUEsQ0FDQSxDQUNBO0FBQ0EsTUFBQVUsS0FBQSxNQUFBWixXQUFBLEVBQUFwRSxNQUFBLE1BQUFvRSxXQUFBLENBQUFsRCxRQUFBLENBQUFuQixnQkFBQSxxQ0FDQSxNQUFBa0YsZ0JBQUEsQ0FBQXBELEtBQUEsQ0FBQUMsSUFBQSxDQUFBa0QsS0FBQSxFQUFBRSxPQUFBLENBQUFDLENBQUEsRUFBQXRELEtBQUEsQ0FBQUMsSUFBQSxDQUFBcUQsQ0FBQSxDQUFBcEYsZ0JBQUEsdUJBQ0EsSUFBQXFGLEtBQUEsQ0FBQWQsUUFBQSxDQUVBVyxnQkFBQSxDQUFBbEMsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUFFLFNBQUEsQ0FBQUYsRUFBQSxDQUFBdkYsT0FBQSxDQUFBeUYsU0FBQSxFQUFBRixFQUFBLENBQUF2RixPQUFBLENBQUFKLEVBQUEsQ0FDQSxHQUFBMkYsRUFBQSxDQUFBdkYsT0FBQSxDQUFBSixFQUFBLEdBQUE0RixHQUFBLEVBQUFDLFNBQUEsR0FBQUQsR0FBQSxFQUNBLE1BQUExSCxDQUFBLENBQUEzQixJQUFBLENBQUE0SSwwQkFBQSxDQUFBRSxpQkFBQSxDQUFBTSxFQUFBLENBQUF2RixPQUFBLENBQUFpRyxXQUFBLEVBQ0E7QUFDQSxHQUFBbkksQ0FBQSxDQUFBa0ksS0FBQSxFQUNBQSxLQUFBLENBQUFsSSxDQUFBLENBQ0EsQ0FDQSxDQUNBLEdBRUEsT0FBQWtJLEtBQUEsQ0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsa0JBQUEsRUFDQTtBQUNBLE1BQUFDLEtBQUEsTUFBQWYsa0JBQUEsR0FFQTtBQUNBLE1BQUFnQixRQUFBLENBQUF0RSxRQUFBLENBQUFuQixnQkFBQSxxQ0FFQXlGLFFBQUEsQ0FBQXpDLE9BQUEsQ0FBQTBDLEdBQUEsR0FDQUEsR0FBQSxDQUFBMUYsZ0JBQUEscUJBQUFnRCxPQUFBLENBQUEyQyxXQUFBLEdBQ0EsTUFBQUMsU0FBQSxDQUFBRCxXQUFBLENBQUF0RyxPQUFBLENBQUFKLEVBQUEsQ0FDQSxNQUFBNEcsUUFBQSxDQUFBRixXQUFBLENBQUF0RyxPQUFBLENBQUF5RixTQUFBLEVBQUFjLFNBQUEsQ0FDQSxNQUFBRSxTQUFBLENBQUFILFdBQUEsQ0FBQXRHLE9BQUEsQ0FBQWlHLFdBQUEsQ0FDQSxNQUFBUyxVQUFBLENBQUF2SyxJQUFBLENBQUE0SSwwQkFBQSxDQUFBRSxpQkFBQSxDQUFBd0IsU0FBQSxFQUNBO0FBQ0EsTUFBQUUsV0FBQSxNQUFBaEIsaUJBQUEsQ0FBQWEsUUFBQSxFQUNBLE1BQUFSLEtBQUEsQ0FBQWhJLE1BQUEsQ0FBQUMsUUFBQSxDQUFBMEksV0FBQSxFQUFBQSxXQUFBLENBQUFELFVBQUE7QUFFQSxNQUFBRSxPQUFBLENBQUFULEtBQUEsQ0FBQUssUUFBQSxLQUNBLE1BQUFLLE9BQUEsQ0FBQTdJLE1BQUEsQ0FBQUMsUUFBQSxDQUFBK0gsS0FBQSxHQUFBWSxPQUFBLEVBQUFaLEtBQUEsQ0FFQU0sV0FBQSxDQUFBekQsS0FBQSxDQUFBaUUsYUFBQSxDQUFBRCxPQUFBLFdBQ0FQLFdBQUEsQ0FBQXpELEtBQUEsQ0FBQWtFLE9BQUEsQ0FBQUYsT0FBQSxVQUNBUCxXQUFBLENBQUFuRixZQUFBLGlCQUFBMEYsT0FBQSxpQkFDQSxHQUFBQSxPQUFBLEVBQ0FQLFdBQUEsQ0FBQW5GLFlBQUEsa0JBQ0EsTUFDQW1GLFdBQUEsQ0FBQTVFLGVBQUEsYUFDQSxDQUNBLEdBQ0EsR0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBc0YsY0FBQXhCLEdBQUEsRUFDQSxJQUFBQSxHQUFBLEVBQ0EsU0FDQSxDQUNBLFlBQUFqRyxlQUFBLEVBQUFvQixnQkFBQSxDQUNBLDhEQUFBeEUsSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBMkksR0FBQTtBQUNBLHlFQUFBckosSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBMkksR0FBQSxzQkFDQSxPQUFBNUUsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FxRyxjQUFBekIsR0FBQSxFQUNBLFlBQUFHLGlCQUFBLENBQUFILEdBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBMEIsa0JBQUExQixHQUFBLEVBQ0EsTUFBQVEsS0FBQSxNQUFBaUIsYUFBQSxDQUFBekIsR0FBQSxFQUNBLEdBQUFRLEtBQUEsR0FBQWQsUUFBQSxFQUNBLE9BQUFBLFFBQUEsQ0FDQSxDQUNBLE1BQUFHLElBQUEsTUFBQTJCLGFBQUEsQ0FBQXhCLEdBQUEsRUFDQSxPQUFBbkgsSUFBQSxDQUFBRCxHQUFBLEdBQUE0SCxLQUFBLENBQUFYLElBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0E4QixRQUFBM0IsR0FBQSxDQUFBNEIsS0FBQSxJQUNBLE1BQUFDLEdBQUEsTUFBQUgsaUJBQUEsQ0FBQTFCLEdBQUEsRUFDQSxPQUFBNkIsR0FBQSxHQUFBbkMsUUFBQSxNQUFBbUMsR0FBQSxFQUFBRCxLQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRSxjQUFBOUIsR0FBQSxFQUFBK0IsS0FBQSxDQUFBL0IsR0FBQSxDQUFBNEIsS0FBQSxRQUNBLFFBQUFELE9BQUEsQ0FBQTNCLEdBQUEsQ0FBQTRCLEtBQUEsR0FDQSxZQUNBLENBQ0EsTUFBQXBCLEtBQUEsTUFBQWlCLGFBQUEsQ0FBQXpCLEdBQUEsRUFDQWdDLEtBQUEsU0FBQXhCLEtBQUEsWUFBQUEsS0FBQSxpQkFBQXVCLEtBQUEsY0FDQSxhQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsWUFBQWpDLEdBQUEsRUFDQSxZQUFBMkIsT0FBQSxDQUFBM0IsR0FBQSxJQUNBLENBRUEsRUFFQTtBQUNBO0FBQ0EsSUFDQXJKLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQUMsTUFBQSxDQUFBQyxNQUFBLEVBQ0FDLE1BQUEsbUJBQ0FDLGVBQUEsNEJBQ0FDLFNBQUEsc0JBQ0FDLFlBQUEseUJBQ0FDLGdCQUFBLDZCQUNBQyxnQkFBQSw0QkFDQSxHQUVBO0FBQ0E7QUFDQSxJQUNBL0wsSUFBQSxDQUFBZ00saUJBQUEsT0FDQTtBQUNBO0FBQ0EsS0FDQTdJLFlBQUE4SSxRQUFBLEVBQ0EsS0FBQUEsUUFBQSxDQUFBQSxRQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyxLQUFBM0MsSUFBQSxDQUFBNEMsTUFBQSxLQUNBLFNBQUFGLFFBQUEsRUFDQSxPQUNBLENBQ0EsS0FBQUEsUUFBQSxDQUFBRyxhQUFBLEtBQUFDLFdBQUEsQ0FBQTlDLElBQUEsRUFBQTRDLE1BQUEsS0FBQUEsTUFBQSxFQUFBRyxPQUFBLFNBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyxHQUFBaEQsSUFBQSxDQUFBaUQsT0FBQSxFQUNBN0csUUFBQSxDQUFBOEcsZ0JBQUEsQ0FBQWxELElBQUEsQ0FBQWlELE9BQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLElBQUFuRCxJQUFBLENBQUFpRCxPQUFBLEVBQ0E3RyxRQUFBLENBQUFnSCxtQkFBQSxDQUFBcEQsSUFBQSxDQUFBaUQsT0FBQSxFQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0EsSUFDQXhNLElBQUEsQ0FBQTRNLHdCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBekosWUFBQTBKLE9BQUEsQ0FBQTdHLElBQUEsS0FDQSxLQUFBNkcsT0FBQSxDQUFBQSxPQUFBLENBQ0EsTUFBQUMsR0FBQSxNQUFBRCxPQUFBLEVBQUFFLFdBQUEsRUFBQTdLLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLE1BQ0EsS0FBQTZCLElBQUEsRUFDQTtBQUNBZ0gsU0FBQSxTQUFBRixHQUFBLEdBQ0FHLFNBQUEsS0FDQUMsVUFBQSx3QkFDQUMsV0FBQSx1QkFDQUMsU0FBQSx5QkFDQSxHQUFBcEgsSUFDQSxFQUNBLCtCQUNBLEtBQUFxSCxXQUFBLEtBQUFDLEdBQUEsR0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQ0EsS0FBQUMscUJBQUEsT0FFQSxLQUFBQyxvQkFBQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyxpQkFBQSxFQUNBLEtBQUFDLFVBQUEsTUFDQSxLQUFBQyxzQkFBQSxRQUNBLEtBQUFkLE9BQUEsRUFBQWUsc0JBQUEsS0FFQTtBQUNBakksUUFBQSxDQUFBbkIsZ0JBQUEsd0VBQ0FnRCxPQUFBLENBQUE0QixFQUFBLEdBQ0EsR0FBQUEsRUFBQSxDQUFBeUUsVUFBQSxFQUNBekUsRUFBQSxDQUFBeUUsVUFBQSxDQUFBQyxXQUFBLENBQUExRSxFQUFBLEVBQ0EsQ0FDQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBb0UscUJBQUEsRUFDQSxRQUFBRCxxQkFBQSxFQUNBLE9BQ0EsQ0FFQSxLQUFBQSxxQkFBQSxNQUVBLE1BQUFRLFdBQUEsQ0FBQUEsQ0FBQSxJQUNBQyxNQUFBLENBQUFDLHFCQUFBLE1BQ0EsS0FBQVIsZ0JBQUEsR0FDQSxHQUNBLEVBRUEsNkNBQUFqRyxPQUFBLENBQUEwRyxRQUFBLEdBQ0F2SSxRQUFBLENBQUE4RyxnQkFBQSxDQUFBeUIsUUFBQSxDQUFBSCxXQUFBLE9BQ0EsR0FFQUMsTUFBQSxDQUFBdkIsZ0JBQUEsUUFBQXNCLFdBQUEsT0FFQXBJLFFBQUEsQ0FBQThHLGdCQUFBLENBQ0EsbUJBQ0EsS0FDQSxHQUFBOUcsUUFBQSxDQUFBd0ksTUFBQSxFQUNBSixXQUFBLEdBQ0EsQ0FDQSxFQUNBLElBQ0EsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUssaUJBQUFDLEdBQUEsRUFDQSxNQUFBQyxXQUFBLE1BQUF6QixPQUFBLEVBQUFoRSxXQUFBLEVBQUEwRixRQUFBLEdBQUFGLEdBQUEsQ0FBQTlILElBQUEsRUFDQSxNQUFBaUksSUFBQSxDQUFBRixXQUFBLG9CQUNBO0FBQ0FMLHFCQUFBLE1BQ0EsTUFBQVEsTUFBQSxDQUFBOUksUUFBQSxDQUFBNUIsYUFBQSw4Q0FBQWlDLElBQUEsQ0FBQW9ILFNBQUEsRUFDQSxHQUFBcUIsTUFBQSxFQUNBQSxNQUFBLENBQUF6SixZQUFBLGtCQUFBd0osSUFBQSxFQUNBLENBQ0EsR0FDQSxDQUVBYix1QkFBQWUsTUFBQSxDQUFBQyxZQUFBLFFBRUE7QUFDQSxNQUFBQyxJQUFBLENBQUFqSixRQUFBLENBQUFrSixlQUFBLENBQ0EsR0FBQUgsTUFBQSxFQUNBRSxJQUFBLENBQUEzRyxTQUFBLENBQUE2RyxHQUFBLHlCQUNBLEdBQUFILFlBQUEsRUFDQUMsSUFBQSxDQUFBM0csU0FBQSxDQUFBNkcsR0FBQSxnQ0FDQSxDQUNBLE1BQ0FGLElBQUEsQ0FBQTNHLFNBQUEsQ0FBQThHLE1BQUEsdURBQ0EsQ0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLG1CQUFBQyxTQUFBLENBQUFDLFFBQUEsS0FDQSxJQUFBRCxTQUFBLFNBQUFFLFFBQUEsZ0JBQ0EsT0FDQSxDQUNBLEdBQUFBLFFBQUEsQ0FBQUMsR0FBQSxHQUFBSCxTQUFBLEdBQ0EsT0FDQSxDQUVBLE1BQUFJLE1BQUEsRUFDQXBDLFNBQUEsTUFBQWpILElBQUEsQ0FBQWlILFNBQUEsQ0FDQUMsVUFBQSxNQUFBbEgsSUFBQSxDQUFBa0gsVUFBQSxDQUNBQyxXQUFBLE1BQUFuSCxJQUFBLENBQUFtSCxXQUFBLENBQ0FDLFNBQUEsTUFBQXBILElBQUEsQ0FBQW9ILFNBQUEsQ0FDQWtDLGFBQUEsTUFDQTtBQUNBQyxjQUFBLE9BQ0FDLGlCQUFBLEdBQ0FDLGlCQUFBLE1BQ0FDLE9BQUEsQ0FBQUEsQ0FBQSxJQUNBLEtBQUE3QyxPQUFBLEVBQUE4QyxtQkFBQSxLQUNBLEtBQUFoQyxzQkFBQSxhQUNBLEVBQ0FpQyxLQUFBLENBQUFBLENBQUEsSUFDQUMsVUFBQSxNQUNBLEtBQUFoRCxPQUFBLEVBQUFlLHNCQUFBLEtBQ0EsTUFDQSxLQUFBRCxzQkFBQSxRQUNBLEtBQUFELFVBQUEsTUFDQSxLQUFBRCxnQkFBQSxHQUNBLENBQ0EsRUFFQTBCLFFBQUEsQ0FBQVcsTUFBQSxDQUNBYixTQUFBLENBQ0EsQ0FDQSxHQUFBSSxNQUFBLENBQ0FVLEtBQUEsRUFBQTFMLElBQUEsTUFBQTJCLElBQUEsQ0FBQWdILFNBQUEsQ0FBQWdELElBQUEsT0FBQUMsR0FBQSxRQUNBQyxJQUFBLE1BQ0FDLFNBQUEsWUFDQUMsTUFBQSxDQUFBbEIsUUFBQSxDQUFBbUIsZUFBQSwyQkFDQUMsU0FBQSxDQUFBcEIsUUFBQSxDQUFBcUIsa0JBQUEsNEJBQ0FDLGFBQUEsa0NBQ0E3SCxNQUFBLEVBQ0EsUUFDQSxXQUNBLFNBQ0EsU0FDQSxJQUNBLDBCQUNBLDRCQUNBLENBQUFKLElBQUEsTUFDQWtJLGVBQUEsT0FDQUMsVUFBQSxPQUNBQyxhQUFBLE1BQ0FDLHFCQUFBLE1BQ0FDLG9CQUFBLEdBQ0FDLGNBQUEsT0FDQUMsTUFBQSxNQUNBQyxpQkFBQSxJQUNBQyxXQUFBLElBQ0FDLFFBQUEsQ0FBQWhDLFFBQUEsQ0FBQWdDLFFBQUEsY0FDQSxDQUNBLEVBRUEsS0FBQTdELFdBQUEsQ0FBQXlCLEdBQUEsQ0FBQUcsU0FBQSxFQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FrQyxPQUFBbEMsU0FBQSxDQUFBVCxJQUFBLENBQUFVLFFBQUEsS0FDQSxJQUFBRCxTQUFBLFNBQUFFLFFBQUEsZ0JBQ0EsT0FDQSxDQUNBLEdBQUFBLFFBQUEsQ0FBQUMsR0FBQSxHQUFBSCxTQUFBLEdBQ0EsT0FDQSxDQUVBLE1BQUFtQyxhQUFBLENBQUFsQyxRQUFBLENBQUFrQyxhQUFBLEtBRUEsR0FBQUEsYUFBQSxrQkFDQSxLQUFBcEMsa0JBQUEsQ0FBQUMsU0FBQSxDQUFBQyxRQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUFHLE1BQUEsRUFDQXBDLFNBQUEsTUFBQWpILElBQUEsQ0FBQWlILFNBQUEsQ0FDQUMsVUFBQSxNQUFBbEgsSUFBQSxDQUFBa0gsVUFBQSxDQUNBQyxXQUFBLE1BQUFuSCxJQUFBLENBQUFtSCxXQUFBLENBQ0FDLFNBQUEsTUFBQXBILElBQUEsQ0FBQW9ILFNBQUEsQ0FDQTtBQUNBa0MsYUFBQSxNQUNBQyxjQUFBLE1BQ0FDLGlCQUFBLEdBQ0FDLGlCQUFBLE1BQ0E7QUFDQUMsT0FBQSxDQUFBckIsR0FBQSxHQUNBLEtBQUF4QixPQUFBLEVBQUE4QyxtQkFBQSxLQUVBLE1BQUFyQixXQUFBLE1BQUF6QixPQUFBLEVBQUFoRSxXQUFBLEVBQUEwRixRQUFBLEdBQUFGLEdBQUEsQ0FBQTlILElBQUEsRUFDQSxLQUFBb0gsc0JBQUEsTUFBQVcsV0FBQTtBQUVBLEtBQUFGLGdCQUFBLENBQUFDLEdBQUE7QUFDQSxFQUNBdUIsS0FBQSxDQUFBQSxDQUFBLElBQ0FDLFVBQUEsV0FBQWhELE9BQUEsQ0FBQWUsc0JBQUEsU0FDQSxLQUFBRCxzQkFBQSxRQUNBLENBQ0EsRUFFQSxHQUFBYSxJQUFBLGNBQ0FXLFFBQUEsQ0FBQVcsTUFBQSxDQUFBYixTQUFBLEVBQ0EsR0FBQUksTUFBQSxDQUNBVSxLQUFBLEVBQUExTCxJQUFBLE1BQUEyQixJQUFBLENBQUFnSCxTQUFBLENBQUFnRCxJQUFBLFNBQUFDLEdBQUEsUUFDQUMsSUFBQSxNQUNBLEdBQ0EsS0FBQTdDLFdBQUEsQ0FBQXlCLEdBQUEsQ0FBQUcsU0FBQSxFQUNBLE9BQ0EsQ0FFQTtBQUNBRSxRQUFBLENBQUFXLE1BQUEsQ0FBQWIsU0FBQSxFQUNBLEdBQUFJLE1BQUEsQ0FDQVUsS0FBQSxFQUNBMUwsSUFBQSxNQUFBMkIsSUFBQSxDQUFBZ0gsU0FBQSxDQUNBZ0QsSUFBQSxNQUNBQyxHQUFBLENBQUFBLENBQUFvQixFQUFBLENBQUE5SyxJQUFBLENBQUErSyxTQUFBLElBQ0EsT0FBQUEsU0FBQSxDQUFBckosU0FBQSxDQUFBbkMsUUFBQSxxQkFDQXdMLFNBQUEsQ0FBQXJKLFNBQUEsQ0FBQW5DLFFBQUEsc0JBQ0EsQ0FDQSxFQUNBO0FBQ0FzSyxNQUFBLG1HQUNBRSxTQUFBO0FBQ0E7QUFDQTNILE1BQUEsRUFDQSwwQkFDQSw0QkFDQTtBQUNBO0FBQ0Esb0hBQ0EsQ0FBQUosSUFBQSxNQUNBa0ksZUFBQSxPQUNBO0FBQ0FOLFNBQUE7QUFDQU8sVUFBQTtBQUNBQyxhQUFBO0FBQ0FDLHFCQUFBO0FBQ0FDLG9CQUFBO0FBQ0FDLGNBQUE7QUFDQUMsTUFBQSxNQUNBQyxpQkFBQSxJQUNBQyxXQUFBLElBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FDQU0sTUFBQSxDQUFBQSxDQUFBbEQsR0FBQSxDQUFBbUQsYUFBQSxJQUVBLE1BQUFILEVBQUEsQ0FBQTlLLElBQUEsRUFBQThILEdBQUEsQ0FDQSxJQUFBZ0QsRUFBQSxHQUFBOUssSUFBQSxFQUNBLFlBQ0EsQ0FFQSxNQUFBa0wsaUJBQUEsR0FBQUosRUFBQSxDQUFBSyxPQUFBLDhCQUNBLElBQUFELGlCQUFBLEVBQ0EsWUFDQSxDQUVBO0FBQ0EsTUFBQUUsUUFBQSxDQUFBTixFQUFBLENBQUFwSixTQUFBLEVBQUFuQyxRQUFBLHFCQUNBLElBQUE2TCxRQUFBLGFBRUEsTUFBQUMsT0FBQSxDQUFBckwsSUFBQSxDQUFBbUwsT0FBQSxtQkFDQSxNQUFBRyxLQUFBLENBQUFSLEVBQUEsQ0FBQUssT0FBQSxtQkFDQSxHQUFBRSxPQUFBLEVBQUFDLEtBQUEsRUFBQUQsT0FBQSxHQUFBQyxLQUFBLGFBRUEsTUFBQUMsSUFBQSxDQUFBVCxFQUFBLENBQUFVLHFCQUFBLEdBQ0EsTUFBQUMsSUFBQSxDQUFBUixhQUFBLENBQUFTLE9BQUEsT0FBQUMsT0FBQSxFQUFBVixhQUFBLENBQUFVLE9BQUEsQ0FDQSxNQUFBQyxJQUFBLENBQUFYLGFBQUEsQ0FBQVMsT0FBQSxPQUFBRyxPQUFBLEVBQUFaLGFBQUEsQ0FBQVksT0FBQSxDQUVBO0FBQ0EsTUFBQUMsUUFBQSxDQUFBclMsSUFBQSxDQUFBRyxpQkFBQSxDQUFBNEIsS0FBQSxDQUFBK1AsSUFBQSxDQUFBUSxLQUFBLGFBQ0EsTUFBQUMsUUFBQSxDQUFBdlMsSUFBQSxDQUFBRyxpQkFBQSxDQUFBNEIsS0FBQSxDQUFBK1AsSUFBQSxDQUFBVSxNQUFBLFlBRUE7QUFDQSxNQUFBQyxlQUFBLENBQUFwQixFQUFBLENBQUFxQixpQkFBQSxNQUFBWixJQUFBLENBQUFVLE1BQUEsSUFDQSxNQUFBRyxRQUFBLENBQUFiLElBQUEsQ0FBQWMsR0FBQSxFQUFBSCxlQUFBLEdBQUFGLFFBQUEsRUFDQSxNQUFBTSxXQUFBLENBQUFmLElBQUEsQ0FBQWdCLE1BQUEsRUFBQUwsZUFBQSxHQUFBRixRQUFBLEVBQ0EsTUFBQVEsU0FBQSxDQUFBakIsSUFBQSxDQUFBa0IsSUFBQSxDQUFBWCxRQUFBLENBQ0EsTUFBQVksVUFBQSxDQUFBbkIsSUFBQSxDQUFBb0IsS0FBQSxDQUFBYixRQUFBLENBRUEsTUFBQWMsT0FBQSxDQUFBbkIsSUFBQSxDQUFBZSxTQUFBLEVBQUFmLElBQUEsQ0FBQWlCLFVBQUEsQ0FDQSxNQUFBRyxPQUFBLENBQUFqQixJQUFBLENBQUFRLFFBQUEsRUFBQVIsSUFBQSxDQUFBVSxXQUFBLENBQ0EsS0FBQU0sT0FBQSxFQUFBQyxPQUFBO0FBRUE7QUFDQSxNQUFBQyxFQUFBLE1BQUEzRixVQUFBLENBQ0EsR0FBQTJGLEVBQUEsRUFDQSxHQUFBQSxFQUFBLENBQUFDLFFBQUEsRUFBQUQsRUFBQSxDQUFBQyxRQUFBLEdBQUFqQyxFQUFBLEVBQ0E7QUFDQSxNQUFBa0MsT0FBQSxDQUFBdlQsSUFBQSxDQUFBRyxpQkFBQSxDQUFBNEIsS0FBQSxDQUFBK1AsSUFBQSxDQUFBUSxLQUFBO0FBQ0EsTUFBQWtCLE9BQUEsQ0FBQXhULElBQUEsQ0FBQUcsaUJBQUEsQ0FBQTRCLEtBQUEsQ0FBQStQLElBQUEsQ0FBQVUsTUFBQTtBQUVBLE1BQUFpQixVQUFBLENBQ0F6QixJQUFBLENBQUFGLElBQUEsQ0FBQWtCLElBQUEsQ0FBQU8sT0FBQSxFQUFBdkIsSUFBQSxDQUFBRixJQUFBLENBQUFvQixLQUFBLENBQUFLLE9BQUEsRUFDQXBCLElBQUEsQ0FBQUwsSUFBQSxDQUFBYyxHQUFBLENBQUFZLE9BQUEsRUFBQXJCLElBQUEsQ0FBQUwsSUFBQSxDQUFBZ0IsTUFBQSxDQUFBVSxPQUFBLENBRUEsSUFBQUMsVUFBQSxjQUNBLENBQ0E7QUFDQUosRUFBQSxDQUFBQyxRQUFBLENBQUFqQyxFQUFBLENBQ0FnQyxFQUFBLENBQUFLLFlBQUEsQ0FBQUMsV0FBQSxDQUFBQyxHQUFBLEdBQ0EsQ0FFQSxZQUNBLEVBQ0FsRSxPQUFBLENBQUFyQixHQUFBLEdBQ0EsS0FBQXhCLE9BQUEsRUFBQThDLG1CQUFBLEtBQ0E7QUFDQSxNQUFBckIsV0FBQSxNQUFBekIsT0FBQSxFQUFBaEUsV0FBQSxFQUFBMEYsUUFBQSxHQUFBRixHQUFBLENBQUE5SCxJQUFBLEVBQ0EsS0FBQW9ILHNCQUFBLE1BQUFXLFdBQUE7QUFDQSxLQUFBRixnQkFBQSxDQUFBQyxHQUFBO0FBQ0EsS0FBQVgsVUFBQSxFQUFBNEYsUUFBQSxNQUFBSSxZQUFBO0FBQ0EsRUFDQTlELEtBQUEsQ0FBQUEsQ0FBQSxJQUNBQyxVQUFBLFdBQUFoRCxPQUFBLENBQUFlLHNCQUFBLFNBQ0EsS0FBQUQsc0JBQUE7QUFDQSxLQUFBRCxVQUFBLE1BQ0EsRUFDQTtBQUNBO0FBQ0FtRyxLQUFBLENBQUF4RixHQUFBLEdBQ0EsUUFBQXlGLGVBQUEsQ0FBQXpGLEdBQUEsR0FDQSxPQUNBLENBQ0E7QUFDQSxDQUFBYSxRQUFBLENBQUEyRSxLQUFBLE9BQUFoSCxPQUFBLENBQUFrSCxhQUFBLENBQUFDLElBQUEsTUFBQW5ILE9BQUEsR0FBQXdCLEdBQUEsRUFDQSxFQUNBNkMsUUFBQSxDQUFBQSxDQUFBLElBQ0EsS0FBQXJFLE9BQUEsQ0FBQW9ILEdBQUEsRUFBQS9ILElBQUEsR0FBQWxNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQU8sZ0JBQUEsRUFBQW9JLE1BQUEsaUJBQ0EsQ0FDQSxHQUVBLEtBQUE3RyxXQUFBLENBQUF5QixHQUFBLENBQUFHLFNBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0E2RSxnQkFBQXpGLEdBQUEsRUFFQSxNQUFBOEYsSUFBQSxDQUFBOUYsR0FBQSxDQUFBOEYsSUFBQSxDQUNBLElBQUFBLElBQUEsRUFDQSxhQUNBLENBRUE7QUFDQSxNQUFBQyxJQUFBLENBQUFwVSxJQUFBLENBQUFxVSx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBSCxJQUFBLEVBQ0EsTUFBQUksU0FBQSxDQUFBSixJQUFBLENBQUFsTSxTQUFBLENBQUFuQyxRQUFBLHdCQUFBc08sSUFBQSxFQUFBN0ssSUFBQSxFQUFBNEssSUFBQSxDQUFBdFEsT0FBQSxFQUFBMEYsSUFBQSxjQUVBLElBQUFnTCxTQUFBLEVBQ0EsYUFDQSxDQUVBLE1BQUFqRyxXQUFBLE1BQUF6QixPQUFBLEVBQUFoRSxXQUFBLEVBQUEwRixRQUFBLEdBQUFGLEdBQUEsQ0FBQTlILElBQUEsU0FFQSxJQUFBK0gsV0FBQSxFQUNBO0FBQ0EsS0FBQXpCLE9BQUEsQ0FBQTJILG1CQUFBLEdBQUFMLElBQUE7QUFDQSxLQUFBdEgsT0FBQSxDQUFBNEgsY0FBQSxFQUFBQyx5QkFBQSxHQUFBUCxJQUFBO0FBRUE7QUFDQUEsSUFBQSxDQUFBdFEsT0FBQSxDQUFBMEYsSUFBQSxXQUNBLE1BQUFsRCxJQUFBLENBQUE4TixJQUFBLENBQUEzUCxnQkFBQSxnREFBQUMsTUFBQSxJQUNBMFAsSUFBQSxDQUFBdFEsT0FBQSxDQUFBOFEsT0FBQSxDQUFBblUsTUFBQSxDQUFBNkYsSUFBQSxFQUVBO0FBQ0EsS0FBQXdHLE9BQUEsQ0FBQStILFlBQUEsR0FBQVQsSUFBQSxFQUNBLEtBQUF0SCxPQUFBLENBQUFvSCxHQUFBLEVBQUEvSCxJQUFBLEdBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFPLGdCQUFBLEVBQUExQyxFQUFBLENBQUErSyxJQUFBLENBQUFELE1BQUEsa0JBQ0EsS0FBQXJILE9BQUEsQ0FBQTdDLEtBQUEsRUFBQUQsaUJBQUEsS0FDQTtBQUNBLENBRUE7QUFDQSxNQUFBc0gsRUFBQSxDQUFBaEQsR0FBQSxDQUFBZ0QsRUFBQSxFQUFBSyxPQUFBLG9FQUFBckQsR0FBQSxDQUFBZ0QsRUFBQSxDQUNBLE1BQUFoTCxJQUFBLENBQUEyQyxRQUFBLENBQUFvTCxJQUFBLEVBQUFPLE9BQUEsRUFBQVIsSUFBQSxDQUFBdFEsT0FBQSxDQUFBOFEsT0FBQSxXQUVBO0FBQ0FSLElBQUEsQ0FBQXRHLFVBQUEsRUFBQXNHLElBQUEsQ0FBQXRHLFVBQUEsQ0FBQUMsV0FBQSxDQUFBcUcsSUFBQSxFQUVBO0FBQ0EsS0FBQXRILE9BQUEsQ0FBQTRILGNBQUEsQ0FBQUksV0FBQSxDQUFBeEQsRUFBQSxDQUFBaEwsSUFBQSxFQUVBO0FBQ0EsTUFBQXlPLE9BQUEsQ0FBQXpELEVBQUEsQ0FBQTBELGdCQUFBO0FBQ0EsR0FBQTFHLEdBQUEsQ0FBQTJHLFFBQUEsUUFBQTNHLEdBQUEsQ0FBQTJHLFFBQUEsQ0FBQTNELEVBQUEsQ0FBQTRELFFBQUEsQ0FBQXhRLE1BQUEsSUFDQSxNQUFBeVEsR0FBQSxDQUFBN0QsRUFBQSxDQUFBNEQsUUFBQSxDQUFBNUcsR0FBQSxDQUFBMkcsUUFBQSxRQUNBM0QsRUFBQSxDQUFBOEQsWUFBQSxDQUFBTCxPQUFBLENBQUFJLEdBQUEsRUFDQSxDQUVBO0FBQ0EsS0FBQXJJLE9BQUEsQ0FBQTJILG1CQUFBLEdBQUFNLE9BQUEsRUFDQSxLQUFBakksT0FBQSxDQUFBK0gsWUFBQSxHQUFBRSxPQUFBLEVBQ0EsS0FBQWpJLE9BQUEsQ0FBQW9ILEdBQUEsRUFBQS9ILElBQUEsR0FBQWxNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQUssU0FBQSxFQUNBeEMsRUFBQSxDQUFBMEwsT0FBQSxDQUNBclIsRUFBQSxDQUFBcVIsT0FBQSxDQUFBalIsT0FBQSxDQUFBSixFQUFBLENBQ0FLLEdBQUEsQ0FBQWdSLE9BQUEsQ0FBQWpSLE9BQUEsQ0FBQUMsR0FDQSxHQUNBLEtBQUErSSxPQUFBLENBQUE3QyxLQUFBLEVBQUFELGlCQUFBLEtBRUEsWUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXFMLFdBQUEsRUFDQSxLQUFBL0gsV0FBQSxDQUFBN0YsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUFpTSxJQUFBLENBQUFsRyxRQUFBLENBQUFDLEdBQUEsR0FBQWhHLEVBQUEsRUFDQSxHQUFBaU0sSUFBQSxFQUNBQSxJQUFBLENBQUFDLE9BQUEsR0FDQSxDQUNBLEdBQ0EsS0FBQWpJLFdBQUEsQ0FBQWtJLEtBQUEsR0FDQSxDQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0F2VixJQUFBLENBQUF3VixZQUFBLENBQUFoSyxNQUFBLENBQUFDLE1BQUEsRUFDQWdLLFNBQUEsRUFDQUMsU0FBQSw2QkFDQUMsS0FBQSxvQkFDQUMsVUFBQSxxQ0FDQWQsT0FBQSxzQkFDQWUsTUFBQSxxQkFDQTdOLEdBQUEsa0JBQ0E4TixPQUFBLDhCQUNBLEVBQ0FDLE9BQUEsRUFDQUMsUUFBQSxjQUNBLEVBQ0FDLElBQUEsRUFDQXhTLEVBQUEsV0FDQVksSUFBQSxhQUNBbUIsTUFBQSxnQkFDQTZFLFFBQUEsa0JBQ0F2RyxHQUFBLFdBQ0EsQ0FDQSxHQUVBOUQsSUFBQSxDQUFBcVUsd0JBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQTZCLGVBQUFDLEdBQUEsQ0FBQUMsVUFBQSxJQUFBQyxVQUFBLEtBQ0EsTUFBQWpOLEVBQUEsQ0FBQXpELFFBQUEsQ0FBQTJRLGFBQUEsQ0FBQUgsR0FBQSxFQUNBLEdBQUFDLFVBQUEsRUFDQWhOLEVBQUEsQ0FBQW1OLFNBQUEsQ0FBQUgsVUFBQSxDQUNBLENBQ0EsR0FBQUMsVUFBQSxFQUNBak4sRUFBQSxDQUFBb04sU0FBQSxDQUFBSCxVQUFBLENBQ0EsQ0FDQSxPQUFBak4sRUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBcU4sb0JBQUFyTixFQUFBLENBQUFzTixRQUFBLEVBQ0FsTCxNQUFBLENBQUFtTCxPQUFBLENBQUFELFFBQUEsRUFBQWxQLE9BQUEsR0FBQTZCLEdBQUEsQ0FBQXVOLEdBQUEsS0FDQTtBQUNBO0FBQ0E7QUFDQSxJQUFBQyxLQUFBLENBQ0EsVUFBQUQsR0FBQSxhQUFBQSxHQUFBLFNBQ0EsSUFDQUMsS0FBQSxDQUFBdFUsSUFBQSxDQUFBSSxTQUFBLENBQUFpVSxHQUFBLEVBQ0EsT0FDQUMsS0FBQSxJQUNBLENBQ0EsTUFDQUEsS0FBQSxDQUFBRCxHQUFBLENBQ0EsQ0FFQXhOLEVBQUEsQ0FBQXBFLFlBQUEsU0FBQXFFLEdBQUEsQ0FBQXdOLEtBQUEsRUFDQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQXZDLHdCQUFBbEwsRUFBQSxFQUNBLE1BQUFnTCxJQUFBLElBRUEsSUFBQWhMLEVBQUEsR0FBQUEsRUFBQSxDQUFBME4sVUFBQSxFQUNBLE9BQUExQyxJQUFBLENBQ0EsQ0FFQTlOLEtBQUEsQ0FBQUMsSUFBQSxDQUFBNkMsRUFBQSxDQUFBME4sVUFBQSxFQUFBdFAsT0FBQSxDQUNBdVAsSUFBQSxHQUNBLEdBQUFBLElBQUEsQ0FBQTFTLElBQUEsQ0FBQTJTLFVBQUEsV0FDQSxNQUFBM04sR0FBQSxDQUFBME4sSUFBQSxDQUFBMVMsSUFBQSxDQUFBNUQsT0FBQSxjQUNBLElBQ0EyVCxJQUFBLENBQUEvSyxHQUFBLEVBQUE5RyxJQUFBLENBQUFDLEtBQUEsQ0FBQXVVLElBQUEsQ0FBQUYsS0FBQSxFQUNBLE9BQUFJLENBQUEsRUFDQTdDLElBQUEsQ0FBQS9LLEdBQUEsRUFBQTBOLElBQUEsQ0FBQUYsS0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLEVBRUE7QUFDQSxNQUFBSyxnQkFBQSxDQUFBMUwsTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWpELElBQUEsVUFDQSxJQUFBOEMsZ0JBQUEsRUFBQTlDLElBQUEsQ0FBQTNRLEVBQUEsRUFDQTJRLElBQUEsQ0FBQWhKLEtBQUEsQ0FBQWdKLElBQUEsQ0FBQTNRLEVBQUEsQ0FBQTZULE1BQUEsSUFBQUMsV0FBQSxHQUFBbkQsSUFBQSxDQUFBM1EsRUFBQSxDQUFBVSxLQUFBLElBQ0EsQ0FFQSxPQUFBaVEsSUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQW9ELHdCQUFBQyxVQUFBLEVBQ0E7QUFDQSxNQUFBQyxRQUFBLENBQUFsTSxNQUFBLENBQUEyTCxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBSSxVQUFBLFVBQ0EsTUFBQXJNLEtBQUEsQ0FBQXNNLFFBQUEsQ0FBQWxYLE1BQUEsQ0FBQWlYLFVBQUEsQ0FBQXJNLEtBQUEsRUFBQTVLLE1BQUEsQ0FBQWlYLFVBQUEsQ0FBQWhVLEVBQUEsZ0JBRUEsTUFBQThGLElBQUEsQ0FBQS9JLE1BQUEsQ0FBQWlYLFVBQUEsQ0FBQWxPLElBQUEsYUFDQSxNQUFBb08sV0FBQSxDQUFBRixVQUFBLENBQUFHLFFBQUEsU0FBQUgsVUFBQSxDQUFBRyxRQUFBLFdBQUFILFVBQUEsQ0FBQUcsUUFBQSxNQUFBSCxVQUFBLENBQUFHLFFBQUEsT0FFQSxNQUFBQyxPQUFBLENBQUFsUyxRQUFBLENBQUEyUSxhQUFBLFFBRUEsTUFBQXdCLFNBQUEsQ0FBQW5TLFFBQUEsQ0FBQTJRLGFBQUEsU0FDQXdCLFNBQUEsQ0FBQXZCLFNBQUEseUJBQ0F1QixTQUFBLENBQUFDLFdBQUEsQ0FBQTNNLEtBQUEsRUFBQXVNLFdBQUEsVUFDQUUsT0FBQSxDQUFBRyxXQUFBLENBQUFGLFNBQUEsRUFFQSxNQUFBRyxRQUFBLENBQUF0UyxRQUFBLENBQUEyUSxhQUFBLFNBQ0EyQixRQUFBLENBQUExQixTQUFBLHdCQUNBMEIsUUFBQSxDQUFBRixXQUFBLENBQUF4TyxJQUFBLENBQ0FzTyxPQUFBLENBQUFHLFdBQUEsQ0FBQUMsUUFBQSxFQUVBLE9BQUFKLE9BQUEsQ0FBQXJCLFNBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQTBCLFNBQUFDLEVBQUEsQ0FBQUMsSUFBQSxNQUNBLElBQUFDLENBQUEsTUFDQSxnQkFBQUMsVUFBQSxHQUFBQyxJQUFBLEVBQ0EsR0FBQUYsQ0FBQSxFQUNBRyxZQUFBLENBQUFILENBQUEsRUFDQSxDQUNBQSxDQUFBLENBQUF4SSxVQUFBLEtBQUFzSSxFQUFBLENBQUFNLEtBQUEsTUFBQUYsSUFBQSxFQUFBSCxJQUFBLEVBQ0EsRUFDQSxDQUVBLEVBRUE7QUFDQXBZLElBQUEsQ0FBQTBZLGdDQUFBLFlBQ0EsTUFBQWxTLEdBQUEsS0FBQW1TLEdBQUEsR0FDQSxPQUNBQyxTQUFBclAsSUFBQSxDQUFBc1AsUUFBQSxFQUNBclMsR0FBQSxDQUFBc1MsR0FBQSxDQUFBdFksTUFBQSxDQUFBK0ksSUFBQSxFQUFBc1AsUUFBQSxFQUNBLEVBQ0F6SixJQUFBN0YsSUFBQSxFQUNBLE9BQUEvQyxHQUFBLENBQUE0SSxHQUFBLENBQUE1TyxNQUFBLENBQUErSSxJQUFBLEdBQ0EsQ0FDQSxFQUNBLElBRUEsR0FBQXlFLE1BQUEsRUNwL0NBO0FBQ0E7QUFDQTtBQUNBLFVBQUFqTyxDQUFBLEVBQ0EsYUFFQTtBQUNBLE1BQUFDLElBQUEsQ0FBQUQsQ0FBQSxDQUFBRSxhQUFBLENBQUFGLENBQUEsQ0FBQUUsYUFBQSxLQUNBLE1BQUFDLEVBQUEsQ0FBQUYsSUFBQSxDQUFBRSxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxLQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQUYsSUFBQSxDQUFBK1ksbUJBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsYUFBQSxFQUNBLE9BQ0F6UCxJQUFBLFNBQ0E2QixLQUFBLFNBQ0EvRyxJQUFBLFNBQ0E0VSxPQUFBLElBQ0FDLFdBQUEsSUFDQXRCLFFBQUEsT0FDQXVCLFNBQUEsSUFDQUMsU0FBQSxJQUNBQyxPQUFBLElBQ0FDLFFBQUEsSUFDQUMsSUFBQSxHQUNBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsZUFBQXBGLElBQUEsRUFDQSxJQUFBcUYsQ0FBQSxDQUFBckYsSUFBQSxLQUNBLElBQUFzRixRQUFBLE1BQUFWLFlBQUEsR0FDQSxJQUFBVyxHQUFBLElBQ0EsSUFBQUMsQ0FBQSxDQUVBLElBQUFBLENBQUEsSUFBQUYsUUFBQSxFQUNBLEdBQUFsTyxNQUFBLENBQUEyTCxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBcUMsUUFBQSxDQUFBRSxDQUFBLEdBQ0FELEdBQUEsQ0FBQUMsQ0FBQSxFQUFBRixRQUFBLENBQUFFLENBQUEsRUFDQSxDQUNBLENBQ0EsSUFBQUEsQ0FBQSxJQUFBSCxDQUFBLEVBQ0EsR0FBQWpPLE1BQUEsQ0FBQTJMLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFvQyxDQUFBLENBQUFHLENBQUEsR0FDQUQsR0FBQSxDQUFBQyxDQUFBLEVBQUFILENBQUEsQ0FBQUcsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxPQUFBRCxHQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUUsYUFBQUMsV0FBQSxFQUVBO0FBQ0EsSUFBQUEsV0FBQSxHQUFBOUwsTUFBQSxDQUFBK0wsRUFBQSxHQUFBQSxFQUFBLENBQUFDLFFBQUEsRUFDQSxZQUNBLENBQ0EsTUFBQUMsS0FBQSxDQUFBSCxXQUFBLENBQUE5QyxVQUFBLFVBQUE4QyxXQUFBLFNBQUFBLFdBQUEsQ0FDQSxJQUFBblUsUUFBQSxDQUFBQyxjQUFBLENBQUFxVSxLQUFBLEdBQ0EsWUFDQSxDQUVBLElBQUFqYSxJQUFBLENBQUFrYSxtQkFBQSxFQUNBbGEsSUFBQSxDQUFBa2EsbUJBQUEsSUFDQSxDQUVBO0FBQ0EsTUFBQTdRLEdBQUEsQ0FBQXlRLFdBQUEsQ0FBQXJaLE9BQUEsY0FDQSxHQUFBVCxJQUFBLENBQUFrYSxtQkFBQSxDQUFBN1EsR0FBQSxHQUNBLE9BQUFySixJQUFBLENBQUFrYSxtQkFBQSxDQUFBN1EsR0FBQSxFQUNBLENBRUEsTUFBQThRLFFBQUEsQ0FBQUosRUFBQSxDQUFBQyxRQUFBLENBQUEzUSxHQUFBO0FBQ0EsR0FBQThRLFFBQUEsRUFDQW5hLElBQUEsQ0FBQWthLG1CQUFBLENBQUE3USxHQUFBLEVBQUE4USxRQUFBLENBQ0EsQ0FFQSxPQUFBQSxRQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsT0FBQWhSLEVBQUEsQ0FBQWdMLElBQUEsQ0FBQWlHLEdBQUEsRUFDQSxJQUFBalIsRUFBQSxFQUNBLE9BQ0EsQ0FFQSxJQUFBa1IsT0FBQSxNQUFBVCxZQUFBLE1BQUFDLFdBQUEsRUFDQSxJQUFBTCxDQUFBLE1BQUFELGNBQUEsQ0FBQXBGLElBQUEsRUFFQSxJQUFBL1QsQ0FBQSxDQUFBZ2EsR0FBQSxFQUFBQSxHQUFBLENBQUFFLEtBQUEsQ0FBQUYsR0FBQSxDQUFBRSxLQUFBLENBQUF2YSxJQUFBLENBQUFHLGlCQUFBLENBRUE7QUFDQSxHQUFBRSxDQUFBLEVBQ0FvWixDQUFBLENBQUFSLE9BQUEsQ0FBQVEsQ0FBQSxDQUFBUixPQUFBLENBQUE1WSxDQUFBLENBQUFPLGdCQUFBLENBQUFKLE1BQUEsQ0FBQWlaLENBQUEsQ0FBQVIsT0FBQSxNQUNBUSxDQUFBLENBQUFwVixJQUFBLENBQUFoRSxDQUFBLENBQUFVLGtCQUFBLENBQUFQLE1BQUEsQ0FBQWlaLENBQUEsQ0FBQXBWLElBQUEsRUFBQW9WLENBQUEsQ0FBQWhXLEVBQUEsWUFDQSxNQUNBZ1csQ0FBQSxDQUFBUixPQUFBLENBQUFRLENBQUEsQ0FBQVIsT0FBQSxDQUFBelksTUFBQSxDQUFBaVosQ0FBQSxDQUFBUixPQUFBLEtBQ0FRLENBQUEsQ0FBQXBWLElBQUEsQ0FBQTdELE1BQUEsQ0FBQWlaLENBQUEsQ0FBQXBWLElBQUEsRUFBQW9WLENBQUEsQ0FBQWhXLEVBQUEsV0FDQSxDQUVBO0FBQ0EsR0FBQTZXLE9BQUEsRUFDQWxSLEVBQUEsQ0FBQW9OLFNBQUEsQ0FBQThELE9BQUEsQ0FBQWIsQ0FBQSxFQUVBO0FBQ0EsTUFBQWhSLEtBQUEsQ0FBQVcsRUFBQSxDQUFBckYsYUFBQSw0QkFDQSxHQUFBMEUsS0FBQSxFQUNBLEdBQUFnUixDQUFBLENBQUFQLFdBQUEsT0FBQXpRLEtBQUEsQ0FBQXpELFlBQUEsZUFBQXhFLE1BQUEsQ0FBQWlaLENBQUEsQ0FBQVAsV0FBQSxHQUNBLEdBQUFPLENBQUEsQ0FBQWUsS0FBQSxPQUFBL1IsS0FBQSxDQUFBekQsWUFBQSxTQUFBeEUsTUFBQSxDQUFBaVosQ0FBQSxDQUFBZSxLQUFBLEdBQ0EsQ0FFQSxNQUNBcFIsRUFBQSxDQUFBb04sU0FBQSxDQUFBeFcsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQW1ELHVCQUFBLENBQUFpQyxDQUFBLEVBQ0EsQ0FFQXJRLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQTBGLElBQUEsQ0FBQWtRLENBQUEsQ0FBQWxRLElBQUEsVUFDQUgsRUFBQSxDQUFBcEUsWUFBQSxjQUFBeVUsQ0FBQSxDQUFBck8sS0FBQSxPQUFBNUssTUFBQSxDQUFBaVosQ0FBQSxDQUFBck8sS0FBQTtBQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQXFQLGNBQUFyRyxJQUFBLENBQUFoTCxFQUFBLENBQUFzUixJQUFBLEVBRUEsTUFBQUMsT0FBQSxDQUFBRCxJQUFBLEVBQUFBLElBQUEsQ0FBQUMsT0FBQSxDQUFBbmEsTUFBQSxDQUFBa2EsSUFBQSxDQUFBQyxPQUFBLEtBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUFBLE9BQUEsV0FBQXZHLElBQUEsRUFDQSxJQUNBLE1BQUF3RyxJQUFBLGFBQUE1QixZQUFBLG1CQUFBQSxZQUFBLFFBQ0EsR0FBQTRCLElBQUEsRUFBQXBQLE1BQUEsQ0FBQTJMLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUF1RCxJQUFBLFVBQ0EsTUFBQW5RLE9BQUEsQ0FBQWUsTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWpELElBQUEsU0FBQUEsSUFBQSxDQUFBbUYsSUFBQSxDQUFBc0IsU0FBQSxDQUNBLE1BQUFDLFFBQUEsQ0FBQXJRLE9BQUEsR0FBQW9RLFNBQUEsRUFBQXBRLE9BQUEsU0FBQWpLLE1BQUEsQ0FBQWlLLE9BQUEsT0FDQSxNQUFBc1EsVUFBQSxDQUFBSCxJQUFBLENBQUFyQixJQUFBLENBRUEsSUFBQXVCLFFBQUEsRUFBQUMsVUFBQSxRQUFBdmEsTUFBQSxDQUFBdWEsVUFBQSxRQUNBO0FBQ0EzRyxJQUFBLENBQUFtRixJQUFBLENBQUF3QixVQUFBLENBRUE7QUFDQSxHQUFBM1IsRUFBQSxFQUNBQSxFQUFBLENBQUF2RixPQUFBLENBQUEwVixJQUFBLENBQUEvWSxNQUFBLENBQUF1YSxVQUFBLEVBRUE7QUFDQSxJQUNBL2EsSUFBQSxDQUFBZ2IsU0FBQSxFQUFBQyxpQkFBQSxHQUFBN1IsRUFBQSxRQUFBMlIsVUFBQSxFQUNBM1IsRUFBQSxDQUFBZ0QsYUFBQSxDQUNBLElBQUFDLFdBQUEsZ0NBQUFDLE9BQUEsTUFBQUgsTUFBQSxFQUFBOUMsR0FBQSxRQUFBd04sS0FBQSxDQUFBa0UsVUFBQSxHQUNBLEVBQ0EsT0FBQUcsTUFBQSxHQUNBLENBQ0EsQ0FDQSxDQUNBLE9BQUFDLEVBQUEsR0FDQSxDQUNBO0FBRUEsR0FBQVIsT0FBQSxZQUFBblAsTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWpELElBQUEsV0FDQSxNQUFBd0csSUFBQSxNQUFBNUIsWUFBQSxHQUNBNUUsSUFBQSxDQUFBaEosS0FBQSxDQUFBd1AsSUFBQSxDQUFBeFAsS0FBQSxVQUNBaEMsRUFBQSxDQUFBcEUsWUFBQSxjQUFBb1AsSUFBQSxDQUFBaEosS0FBQSxFQUNBLENBQ0E7QUFDQSxHQUFBdVAsT0FBQSxXQUNBdlIsRUFBQSxDQUFBdkYsT0FBQSxDQUFBdVgsS0FBQTtBQUNBaFMsRUFBQSxDQUFBdkYsT0FBQSxDQUFBd1gsUUFBQSxLQUNBalMsRUFBQSxDQUFBdkYsT0FBQSxDQUFBeVgsVUFBQSxLQUNBO0FBQ0EsSUFDQSxNQUFBclUsQ0FBQSxDQUFBeVQsSUFBQSxFQUFBN04sT0FBQSxDQUNBLEdBQUE1RixDQUFBLEVBQUF4RCxFQUFBLElBQUEyRixFQUFBLENBQUFtUyxZQUFBLGdCQUFBblMsRUFBQSxDQUFBaEUsWUFBQSxnQkFDQSxNQUFBb1csQ0FBQSxDQUFBeGIsSUFBQSxDQUFBRyxpQkFBQSxDQUNBLE1BQUFxRCxJQUFBLENBQUFnWSxDQUFBLENBQUF6YSxrQkFBQSxDQUFBcUksRUFBQSxDQUFBaEUsWUFBQSxhQUFBZ1AsSUFBQSxFQUFBM1EsRUFBQSxFQUFBMlEsSUFBQSxFQUFBN0ssSUFBQSxXQUNBLE1BQUFrUyxJQUFBLENBQUF4VSxDQUFBLENBQUF4RCxFQUFBLENBQUFXLHdCQUFBLENBQUFaLElBQUEsQ0FBQTRGLEVBQUEsRUFDQUEsRUFBQSxDQUFBcEUsWUFBQSxhQUFBeVcsSUFBQSxFQUNBclMsRUFBQSxDQUFBdkYsT0FBQSxDQUFBNlgsaUJBQUEsS0FDQSxDQUNBLE9BQUFqWixDQUFBLEdBRUEsU0FBQWtZLE9BQUEsV0FDQXZSLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXVYLEtBQUEsS0FDQWhTLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXdYLFFBQUEsS0FDQWpTLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXlYLFVBQUE7QUFDQSxDQUNBLENBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFLLGdCQUFBdlEsS0FBQSxFQUNBLE1BQUEvSyxDQUFBLENBQUFMLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVksa0JBQUEsQ0FBQVAsTUFBQSxDQUFBNEssS0FBQSxPQUNBLE9BQUEvSyxDQUFBLENBQUFnQixXQUFBLFlBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUF1YSwwQkFBQS9PLE9BQUEsQ0FBQXpELEVBQUEsQ0FBQXlTLFFBQUEsRUFDQSxJQUFBaFAsT0FBQSxHQUFBekQsRUFBQSxRQUNBLEdBQUFBLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsNkJBRUEsTUFBQWdXLFNBQUEsQ0FBQTFTLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXdYLFFBQUEsT0FFQSxNQUFBVSxXQUFBLENBQUEzUyxFQUFBLENBQUF2RixPQUFBLENBQUE2WCxpQkFBQSxPQUNBLE1BQUFNLFFBQUEsQ0FBQTVTLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXlYLFVBQUEsT0FFQSxJQUFBUSxTQUFBLEVBQUFDLFdBQUEsRUFBQUMsUUFBQSxRQUVBO0FBQ0EsTUFBQVIsQ0FBQSxDQUFBeGIsSUFBQSxDQUFBRyxpQkFBQSxDQUVBLE1BQUFxRCxJQUFBLE1BQUFtWSxlQUFBLENBQUFFLFFBQUEsRUFDQSxNQUFBOVcsTUFBQSxDQUFBOEgsT0FBQSxDQUFBcEosRUFBQSxDQUFBVyx3QkFBQSxDQUFBWixJQUFBLENBQUE0RixFQUFBLEVBQ0FBLEVBQUEsQ0FBQXBFLFlBQUEsYUFBQUQsTUFBQSxFQUVBLE1BQUFrWCxHQUFBLENBQUF0VyxRQUFBLENBQUFDLGNBQUEsd0JBQ0EsTUFBQXNXLFFBQUEsQ0FBQUQsR0FBQSxFQUFBbFksYUFBQSxnQ0FDQSxHQUFBbVksUUFBQSxZQUFBQSxRQUFBLEVBQUFBLFFBQUEsQ0FBQXJGLEtBQUEsR0FBQTlSLE1BQUEsQ0FBQW1YLFFBQUEsQ0FBQXJGLEtBQUEsQ0FBQTlSLE1BQUEsQ0FDQSxDQUdBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBL0UsSUFBQSxDQUFBbWMsb0JBQUEsZUFBQW5jLElBQUEsQ0FBQStZLG1CQUFBLENBRUEsT0FBQWUsV0FBQTtBQUNBLE9BQUFzQyxzQkFBQTtBQUNBLE9BQUFDLElBQUEsVUFDQSxPQUFBQyxZQUFBLE9BQ0EsT0FBQUMsV0FBQSxNQUVBO0FBQ0EsT0FBQUMsRUFBQSxFQUNBQyxJQUFBLDJCQUNBQyxNQUFBLDBEQUNBMVUsR0FBQSwwQkFDQW9ELEtBQUEsd0JBQ0F5TCxLQUFBLHdCQUNBOEYsTUFBQSwrQkFDQUMsT0FBQSxrQkFFQUMsV0FBQSwwQkFDQUMsWUFBQSxtREFDQUMsWUFBQSx5REFDQUMsaUJBQUEscURBQ0FDLGdCQUFBLHdCQUNBQyxVQUFBLGdEQUVBO0FBQ0FDLFNBQUEseUJBQ0FDLFdBQUEsaUNBQ0FDLFdBQUEsNENBQ0E7QUFDQUMsaUJBQUEsd0RBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsdUJBQUFuUyxLQUFBLENBQUFvUyxPQUFBLEVBQ0EsTUFBQWhDLENBQUEsQ0FBQXhiLElBQUEsQ0FBQUcsaUJBQUEsQ0FDQSxHQUFBcWQsT0FBQSxFQUNBLE9BQUFoQyxDQUFBLFNBQUFBLENBQUEsQ0FBQXJhLFFBQUEsY0FDQXFhLENBQUEsQ0FBQXJhLFFBQUEsQ0FBQVgsTUFBQSxDQUFBNEssS0FBQSxPQUNBNUssTUFBQSxDQUFBNEssS0FBQSxNQUFBdkssSUFBQSxHQUFBUSxXQUFBLEdBQUFaLE9BQUEsYUFBQUEsT0FBQSxlQUNBLENBQ0E7QUFDQSxPQUFBRCxNQUFBLENBQUE0SyxLQUFBLFVBQUFBLEtBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBcVMseUJBQUFDLEtBQUEsRUFDQSxNQUFBQyxHQUFBLENBQUFELEtBQUEsRUFBQTNaLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQWMsaUJBQUEsRUFDQSxTQUFBSyxHQUFBLEVBQUFBLEdBQUEsQ0FBQUMsT0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsNkJBQUFILEtBQUEsRUFDQSxNQUFBRixPQUFBLE1BQUFDLHdCQUFBLENBQUFDLEtBQUEsRUFDQSxNQUFBSSxJQUFBLENBQUFKLEtBQUEsRUFBQWxaLGdCQUFBLE1BQUFnWSxFQUFBLENBQUF4VSxHQUFBLE1BRUEsUUFBQVAsQ0FBQSxHQUFBQSxDQUFBLENBQUFxVyxJQUFBLENBQUFyWixNQUFBLENBQUFnRCxDQUFBLElBQ0EsTUFBQW1DLENBQUEsQ0FBQWtVLElBQUEsQ0FBQXJXLENBQUEsRUFDQSxNQUFBc1csTUFBQSxDQUFBblUsQ0FBQSxDQUFBN0YsYUFBQSxNQUFBeVksRUFBQSxDQUFBcFIsS0FBQSxFQUNBLE1BQUE0UyxNQUFBLENBQUFwVSxDQUFBLENBQUE3RixhQUFBLE1BQUF5WSxFQUFBLENBQUEzRixLQUFBLEVBQ0EsSUFBQW1ILE1BQUEsVUFFQSxHQUFBUixPQUFBLEVBQ0E7QUFDQVEsTUFBQSxDQUFBelksZUFBQSxhQUNBeVksTUFBQSxDQUFBdFgsS0FBQSxDQUFBdVgsT0FBQSxJQUVBO0FBQ0EsTUFBQUMsUUFBQSxHQUFBRixNQUFBLENBQUFuYSxPQUFBLENBQUFzYSxZQUFBLENBQ0EsTUFBQUMsVUFBQSxDQUFBeFUsQ0FBQSxDQUFBL0YsT0FBQSxDQUFBd2Esa0JBQUEsT0FFQSxHQUFBSCxRQUFBLEdBQUFFLFVBQUEsRUFDQUosTUFBQSxDQUFBbkgsS0FBQSxDQUFBbUgsTUFBQSxDQUFBbmEsT0FBQSxDQUFBc2EsWUFBQSxDQUNBLFVBQUFELFFBQUEsRUFDQTtBQUNBLE1BQUFJLEdBQUEsQ0FBQVAsTUFBQSxDQUFBQSxNQUFBLENBQUFsSCxLQUFBLElBQ0EsTUFBQTBILFFBQUEsTUFBQWhCLHNCQUFBLENBQUFlLEdBQUEsb0JBQ0EsR0FBQU4sTUFBQSxDQUFBbkgsS0FBQSxHQUFBMEgsUUFBQSxFQUNBUCxNQUFBLENBQUFuSCxLQUFBLE1BQUEwRyxzQkFBQSxDQUFBZSxHQUFBLG1CQUNBLENBQ0EsQ0FDQSxNQUNBO0FBQ0EsSUFBQU4sTUFBQSxDQUFBbmEsT0FBQSxDQUFBc2EsWUFBQSxFQUNBSCxNQUFBLENBQUFuYSxPQUFBLENBQUFzYSxZQUFBLENBQUFILE1BQUEsQ0FBQW5ILEtBQUEsS0FDQSxDQUNBLE1BQUF5SCxHQUFBLENBQUFQLE1BQUEsQ0FBQUEsTUFBQSxDQUFBbEgsS0FBQSxJQUNBbUgsTUFBQSxDQUFBbkgsS0FBQSxNQUFBMEcsc0JBQUEsQ0FBQWUsR0FBQSxvQkFFQU4sTUFBQSxDQUFBaFosWUFBQSx3QkFDQWdaLE1BQUEsQ0FBQXRYLEtBQUEsQ0FBQXVYLE9BQUEsUUFDQTtBQUNBLENBQ0EsQ0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBTywwQkFBQXhXLEdBQUEsRUFDQSxPQUFBQSxHQUFBLEVBQUFuRSxPQUFBLEVBQUF3YSxrQkFBQSxPQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBSSw0QkFBQXpXLEdBQUEsRUFDQSxHQUFBQSxHQUFBLENBQUFBLEdBQUEsQ0FBQW5FLE9BQUEsQ0FBQXdhLGtCQUFBLEtBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUsscUJBQUExVyxHQUFBLEVBQ0EsR0FBQUEsR0FBQSxFQUNBLElBQUFBLEdBQUEsQ0FBQW5FLE9BQUEsQ0FBQXdhLGtCQUFBLEVBQ0FyVyxHQUFBLENBQUFuRSxPQUFBLENBQUF3YSxrQkFBQSxLQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsT0FBQXJGLGFBQUEsRUFDQSxPQUNBelAsSUFBQSxNQUFBOFMsSUFBQSxDQUNBalIsS0FBQSxVQUNBL0csSUFBQSxJQUNBNFUsT0FBQSxJQUNBQyxXQUFBLGtCQUNBdEIsUUFBQSxPQUNBK0csUUFBQSxPQUNBQyxJQUFBLE1BQ0F0RixRQUFBLElBQ0FDLElBQUEsSUFDQXNGLGFBQUEsSUFDQUMsT0FBQSxFQUNBLENBQUExVCxLQUFBLFlBQUF5TCxLQUFBLFlBQUFiLFFBQUEsUUFDQSxDQUFBNUssS0FBQSxZQUFBeUwsS0FBQSxZQUFBYixRQUFBLFFBQ0EsQ0FBQTVLLEtBQUEsWUFBQXlMLEtBQUEsWUFBQWIsUUFBQSxRQUNBLENBQUE1SyxLQUFBLFlBQUF5TCxLQUFBLFlBQUFiLFFBQUEsUUFDQSxDQUNBK0ksU0FBQSxRQUNBLEVBQ0EsQ0FFQTtBQUNBLE9BQUEzRSxPQUFBaFIsRUFBQSxDQUFBZ0wsSUFBQSxDQUFBaUcsR0FBQSxFQUNBLElBQUFqUixFQUFBLFFBRUEsTUFBQXFRLENBQUEsTUFBQUQsY0FBQSxDQUFBcEYsSUFBQSxFQUVBLEdBQUFxRixDQUFBLENBQUFzRixTQUFBLFFBQ0EzVixFQUFBLENBQUF2RixPQUFBLENBQUFrYixTQUFBLENBQUF2ZSxNQUFBLENBQUFpWixDQUFBLENBQUFzRixTQUFBLEVBQ0EsSUFDQTNWLEVBQUEsQ0FBQTFDLEtBQUEsQ0FBQXNZLFdBQUEsa0JBQUF4ZSxNQUFBLENBQUFpWixDQUFBLENBQUFzRixTQUFBLEdBQ0EsT0FBQXRjLENBQUEsRUFDQSxDQUNBLENBQ0EsR0FBQWdYLENBQUEsQ0FBQVIsT0FBQSxPQUFBN1AsRUFBQSxDQUFBdkYsT0FBQSxDQUFBb1YsT0FBQSxDQUFBelksTUFBQSxDQUFBaVosQ0FBQSxDQUFBUixPQUFBLE1BQ0EsR0FBQVEsQ0FBQSxDQUFBSCxRQUFBLE9BQUFsUSxFQUFBLENBQUF2RixPQUFBLENBQUF5VixRQUFBLENBQUE5WSxNQUFBLENBQUFpWixDQUFBLENBQUFILFFBQUEsTUFDQSxHQUFBRyxDQUFBLENBQUFQLFdBQUEsT0FBQTlQLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXFWLFdBQUEsQ0FBQTFZLE1BQUEsQ0FBQWlaLENBQUEsQ0FBQVAsV0FBQSxNQUVBLE1BQUErRixHQUFBLE1BQUFwRixZQUFBLE1BQUFDLFdBQUEsRUFDQSxVQUFBbUYsR0FBQSxlQUNBN1YsRUFBQSxDQUFBb04sU0FBQSx1RUFBQXNELFdBQUEsV0FDQSxPQUNBLENBRUEsSUFDQTFRLEVBQUEsQ0FBQW9OLFNBQUEsQ0FBQXlJLEdBQUEsQ0FBQXhGLENBQUEsRUFDQSxPQUFBeEMsQ0FBQSxFQUNBakosTUFBQSxDQUFBa1IsS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLHdCQUFBb1UsQ0FBQSxFQUNBN04sRUFBQSxDQUFBb04sU0FBQSxrRkFDQSxPQUNBLENBRUFwTixFQUFBLENBQUF2RixPQUFBLENBQUEwRixJQUFBLENBQUFrUSxDQUFBLENBQUFsUSxJQUFBLE9BQUE4UyxJQUFBLENBQ0FqVCxFQUFBLENBQUFwRSxZQUFBLGNBQUF5VSxDQUFBLENBQUFyTyxLQUFBLE9BQUE1SyxNQUFBLENBQUFpWixDQUFBLENBQUFyTyxLQUFBLE1BRUEsSUFDQXBMLElBQUEsQ0FBQUUsRUFBQSxFQUFBa2YsZ0JBQUEsRUFBQWpPLE1BQUEsR0FBQWtKLEdBQUEsRUFBQXhOLE9BQUEsQ0FBQXpELEVBQUEsRUFDQSxPQUFBM0csQ0FBQSxFQUNBLENBRUEsSUFBQTJHLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQWliLE9BQUEsRUFBQXhZLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQXVSLENBQUEsQ0FBQXFGLE9BQUEsR0FBQXJGLENBQUEsQ0FBQXFGLE9BQUEsQ0FBQXJhLE1BQUEsRUFDQSxJQUNBMkUsRUFBQSxDQUFBdkYsT0FBQSxDQUFBaWIsT0FBQSxDQUFBdmMsSUFBQSxDQUFBSSxTQUFBLENBQUE4VyxDQUFBLENBQUFxRixPQUFBLEVBQ0EsT0FBQXJjLENBQUEsRUFDQSxDQUNBLENBQ0EsQ0FFQTtBQUNBLE9BQUFnWSxjQUFBckcsSUFBQSxDQUFBaEwsRUFBQSxDQUFBc1IsSUFBQSxFQUNBLElBQ0EsTUFBQUQsYUFBQSxHQUFBckcsSUFBQSxDQUFBaEwsRUFBQSxDQUFBc1IsSUFBQSxFQUNBLE9BQUFqWSxDQUFBLEVBQ0EsQ0FFQSxNQUFBNGMsT0FBQSxDQUFBM0UsSUFBQSxFQUFBQSxJQUFBLENBQUFDLE9BQUEsVUFFQSxHQUFBMEUsT0FBQSxFQUNBLElBQUEvWSxLQUFBLENBQUE0QixPQUFBLENBQUFrTSxJQUFBLENBQUEwSyxPQUFBLElBQUExSyxJQUFBLENBQUEwSyxPQUFBLENBQUFyYSxNQUFBLEVBQ0EsTUFBQXVCLElBQUEsT0FBQWdULFlBQUEsR0FBQThGLE9BQUEsTUFBQXRZLEdBQUEsQ0FBQThZLENBQUEsSUFDQWxVLEtBQUEsQ0FBQWtVLENBQUEsQ0FBQWxVLEtBQUEsQ0FDQXlMLEtBQUEsQ0FBQXlJLENBQUEsQ0FBQXpJLEtBQUEsQ0FDQWIsUUFBQSxHQUFBc0osQ0FBQSxDQUFBdEosUUFDQSxJQUNBNUIsSUFBQSxDQUFBMEssT0FBQSxDQUFBOVksSUFBQSxDQUNBLElBQ0FvRCxFQUFBLENBQUF2RixPQUFBLENBQUFpYixPQUFBLENBQUF2YyxJQUFBLENBQUFJLFNBQUEsQ0FBQXFELElBQUEsRUFDQW9ELEVBQUEsQ0FBQWdELGFBQUEsS0FBQUMsV0FBQSxnQ0FBQUMsT0FBQSxNQUNBSCxNQUFBLEVBQ0E5QyxHQUFBLFdBQ0F3TixLQUFBLENBQUE3USxJQUNBLENBQ0EsSUFDQWhHLElBQUEsQ0FBQWdiLFNBQUEsRUFBQUMsaUJBQUEsR0FBQTdSLEVBQUEsV0FBQXBELElBQUEsRUFDQSxPQUFBdkQsQ0FBQSxFQUNBLENBQ0EsQ0FFQSxNQUFBOGMsRUFBQSxFQUFBbkwsSUFBQSxDQUFBOEUsV0FBQSxNQUFBaFYsUUFBQSxHQUFBckQsSUFBQSxHQUNBLElBQUEwZSxFQUFBLEVBQ0EsTUFBQUMsSUFBQSxNQUFBeEcsWUFBQSxHQUFBRSxXQUFBLG1CQUNBOUUsSUFBQSxDQUFBOEUsV0FBQSxDQUFBc0csSUFBQSxDQUNBLElBQ0FwVyxFQUFBLENBQUF2RixPQUFBLENBQUFxVixXQUFBLENBQUExWSxNQUFBLENBQUFnZixJQUFBLEVBQ0FwVyxFQUFBLENBQUFnRCxhQUFBLEtBQUFDLFdBQUEsZ0NBQUFDLE9BQUEsTUFDQUgsTUFBQSxFQUNBOUMsR0FBQSxlQUNBd04sS0FBQSxDQUFBMkksSUFDQSxDQUNBLElBQ0F4ZixJQUFBLENBQUFnYixTQUFBLEVBQUFDLGlCQUFBLEdBQUE3UixFQUFBLGVBQUFvVyxJQUFBLEVBQ0EsT0FBQS9jLENBQUEsRUFDQSxDQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQUFnZCxlQUFBclcsRUFBQSxFQUNBLE9BQUFBLEVBQUEsRUFBQXNJLE9BQUEsa0NBQUF0SSxFQUFBLEVBQUFzSSxPQUFBLGlDQUNBLENBRUEsT0FBQWdPLFNBQUFoQyxLQUFBLEVBQ0EsT0FBQUEsS0FBQSxDQUFBQSxLQUFBLENBQUEzWixhQUFBLE1BQUF5WSxFQUFBLENBQUFDLElBQUEsT0FDQSxDQUVBLE9BQUFrRCxXQUFBakMsS0FBQSxFQUNBLE9BQUFBLEtBQUEsQ0FBQUEsS0FBQSxDQUFBM1osYUFBQSxNQUFBeVksRUFBQSxDQUFBRSxNQUFBLE9BQ0EsQ0FFQSxPQUFBa0QsU0FBQSxFQUNBLDJCQUFBMWQsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsT0FDQSxDQUVBLE9BQUEwYixXQUFBbkMsS0FBQSxDQUFBdEosSUFBQSxFQUNBLE1BQUFxSSxJQUFBLE1BQUFpRCxRQUFBLENBQUFoQyxLQUFBLEVBQ0EsSUFBQWpCLElBQUEsUUFFQSxNQUFBcUQsR0FBQSxDQUFBckQsSUFBQSxDQUFBeEgsUUFBQSxDQUFBeFEsTUFBQSxDQUNBLE1BQUFzYixJQUFBLENBQUF2VSxNQUFBLENBQUF3VSxNQUFBLEVBQUE1VSxLQUFBLElBQUF5TCxLQUFBLElBQUFiLFFBQUEsT0FBQWlLLEtBQUEsQ0FBQUgsR0FBQSxFQUFBMUwsSUFBQSxNQUNBLElBQUEyTCxJQUFBLENBQUFqYyxHQUFBLENBQUFpYyxJQUFBLENBQUFqYyxHQUFBLE1BQUE4YixRQUFBLEdBRUEsTUFBQU0sTUFBQSxNQUFBOUQsc0JBQUEsQ0FDQSxNQUFBNkMsR0FBQSxDQUFBalIsTUFBQSxDQUFBK0wsRUFBQSxFQUFBQSxFQUFBLENBQUFDLFFBQUEsQ0FBQUQsRUFBQSxDQUFBQyxRQUFBLENBQUFrRyxNQUFBLE9BQ0EsTUFBQUMsSUFBQSxDQUFBbEIsR0FBQSxDQUFBQSxHQUFBLENBQUFjLElBQUEsT0FFQTtBQUNBLE1BQUFLLElBQUEsQ0FBQXphLFFBQUEsQ0FBQTJRLGFBQUEsUUFDQThKLElBQUEsQ0FBQTVKLFNBQUEsQ0FBQTJKLElBQUEsRUFDQSxtREFBQUosSUFBQSxDQUFBRSxLQUFBLFVBQ0EsMkZBQ0EsOEVBQUFGLElBQUEsQ0FBQTNVLEtBQUEsV0FDQSw4RUFBQTJVLElBQUEsQ0FBQWxKLEtBQUEsV0FDQSx1Q0FDQSxtREFDQSxrRkFBQWtKLElBQUEsQ0FBQWpjLEdBQUEscUJBQUFpYyxJQUFBLENBQUEvSixRQUFBLDJEQUNBLGtEQUFBK0osSUFBQSxDQUFBamMsR0FBQSxjQUNBLDZDQUFBaWMsSUFBQSxDQUFBamMsR0FBQSxxQkFDQSxTQUNBLFNBQ0E7QUFDQSxxRUFDQSxrSEFDQSx1REFDQSxPQUNBLDBFQUNBLE9BQ0EsMkZBQ0EsVUFDQSx3REFDQSxPQUNBLFFBQ0EsT0FDQSwyRkFDQSxZQUNBLDBEQUNBLE9BQ0EsUUFDQSw0QkFDQSxPQUNBLHdGQUNBLFNBQ0EsNERBQ0EsT0FDQSxRQUNBLFFBQ0EsU0FDQSxRQUNBLENBRUEsTUFBQXVjLElBQUEsQ0FBQUQsSUFBQSxDQUFBRSxpQkFBQSxDQUNBLElBQUFELElBQUEsRUFDQSxPQUNBLENBQ0E7QUFDQSxNQUFBN0MsT0FBQSxNQUFBQyx3QkFBQSxDQUFBQyxLQUFBLEVBQ0EsTUFBQTZDLEtBQUEsQ0FBQUYsSUFBQSxDQUFBdGMsYUFBQSxNQUFBeVksRUFBQSxDQUFBM0YsS0FBQSxFQUNBLE1BQUEySixLQUFBLENBQUFILElBQUEsQ0FBQXRjLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQXBSLEtBQUEsRUFFQSxJQUFBb1MsT0FBQSxFQUFBK0MsS0FBQSxFQUNBLElBQUFBLEtBQUEsQ0FBQTFjLE9BQUEsQ0FBQXNhLFlBQUEsRUFDQW9DLEtBQUEsQ0FBQTFjLE9BQUEsQ0FBQXNhLFlBQUEsQ0FBQW9DLEtBQUEsQ0FBQTFKLEtBQUEsS0FDQSxDQUNBLEdBQUEySixLQUFBLENBQUFELEtBQUEsQ0FBQTFKLEtBQUEsTUFBQTBHLHNCQUFBLENBQUFpRCxLQUFBLENBQUEzSixLQUFBLFFBQ0EwSixLQUFBLENBQUF2YixZQUFBLHdCQUNBdWIsS0FBQSxDQUFBN1osS0FBQSxDQUFBdVgsT0FBQSxRQUNBLENBR0EsS0FBQVMsb0JBQUEsQ0FBQTJCLElBQUEsRUFDQTVELElBQUEsQ0FBQXpFLFdBQUEsQ0FBQXFJLElBQUEsRUFFQTtBQUNBLEtBQUF4Qyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0EsQ0FFQSxPQUFBK0MsZUFBQUMsU0FBQSxFQUNBLElBQ0EsSUFBQTlSLElBQUEsQ0FBQThSLFNBQUEsRUFBQWhQLE9BQUEsUUFBQThLLEVBQUEsQ0FBQVcsU0FBQSxFQUNBLEdBQUF2TyxJQUFBLEVBQ0E7QUFDQUEsSUFBQSxDQUFBM0csU0FBQSxDQUFBOEcsTUFBQSxTQUNBO0FBQ0EsSUFBQXNKLENBQUEsQ0FBQXpKLElBQUEsQ0FBQTdLLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQVksV0FBQSxFQUNBLEdBQUEvRSxDQUFBLEVBQ0FBLENBQUEsQ0FBQXJULFlBQUEsMEJBQ0EsQ0FDQSxDQUNBLE9BQUF2QyxDQUFBLEdBQ0EsQ0FFQSxPQUFBa2UsYUFBQUMsUUFBQSxDQUFBQyxRQUFBLEVBQ0EsR0FBQUEsUUFBQSxFQUFBaFQsVUFBQSxFQUNBLEdBQUFnVCxRQUFBLENBQUFDLFdBQUEsRUFDQUQsUUFBQSxDQUFBaFQsVUFBQSxDQUFBc0gsWUFBQSxDQUFBeUwsUUFBQSxDQUFBQyxRQUFBLENBQUFDLFdBQUEsRUFDQSxNQUNBRCxRQUFBLENBQUFoVCxVQUFBLENBQUFtSyxXQUFBLENBQUE0SSxRQUFBLEVBQ0EsQ0FDQSxDQUNBLENBRUEsT0FBQUcsZUFBQXJELEtBQUEsRUFDQSxNQUFBakIsSUFBQSxNQUFBaUQsUUFBQSxDQUFBaEMsS0FBQSxFQUNBLE1BQUFoQixNQUFBLE1BQUFpRCxVQUFBLENBQUFqQyxLQUFBLEVBQ0EsSUFBQWpCLElBQUEsR0FBQUMsTUFBQSxRQUVBLE1BQUFjLE9BQUEsTUFBQUMsd0JBQUEsQ0FBQUMsS0FBQSxFQUVBLE1BQUFJLElBQUEsQ0FBQXJCLElBQUEsQ0FBQWpZLGdCQUFBLE1BQUFnWSxFQUFBLENBQUF4VSxHQUFBLEVBQ0EsTUFBQThXLE9BQUEsSUFDQSxRQUFBclgsQ0FBQSxHQUFBQSxDQUFBLENBQUFxVyxJQUFBLENBQUFyWixNQUFBLENBQUFnRCxDQUFBLElBQ0EsTUFBQW1DLENBQUEsQ0FBQWtVLElBQUEsQ0FBQXJXLENBQUEsRUFDQSxNQUFBc1csTUFBQSxDQUFBblUsQ0FBQSxDQUFBN0YsYUFBQSxNQUFBeVksRUFBQSxDQUFBcFIsS0FBQSxFQUNBLE1BQUE0UyxNQUFBLENBQUFwVSxDQUFBLENBQUE3RixhQUFBLE1BQUF5WSxFQUFBLENBQUEzRixLQUFBLEVBQ0EsTUFBQThHLEdBQUEsQ0FBQS9ULENBQUEsQ0FBQTdGLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQUcsTUFBQSxFQUVBLE1BQUEyQixHQUFBLENBQUFQLE1BQUEsRUFBQUEsTUFBQSxDQUFBbEgsS0FBQSxLQUNBLElBQUFELEdBQUEsQ0FBQW9ILE1BQUEsRUFBQUEsTUFBQSxDQUFBbkgsS0FBQSxLQUVBO0FBQ0EsSUFBQTJHLE9BQUEsRUFDQTtBQUNBNUcsR0FBQSxNQUFBMkcsc0JBQUEsQ0FBQWUsR0FBQSxvQkFDQSxHQUFBTixNQUFBLEVBQ0FBLE1BQUEsQ0FBQW5ILEtBQUEsQ0FBQUQsR0FBQTtBQUNBLENBQ0EsQ0FFQSxNQUFBb0ssR0FBQSxJQUFBckQsR0FBQSxFQUFBQSxHQUFBLENBQUFDLE9BQUEsRUFDQWtCLE9BQUEsQ0FBQW1DLElBQUEsRUFBQTdWLEtBQUEsQ0FBQWtULEdBQUEsQ0FBQXpILEtBQUEsQ0FBQUQsR0FBQSxDQUFBWixRQUFBLENBQUFnTCxHQUFBLEdBQ0EsQ0FFQSxJQUNBdEUsTUFBQSxDQUFBN0YsS0FBQSxDQUFBdFUsSUFBQSxDQUFBSSxTQUFBLENBQUFtYyxPQUFBLEVBQ0FwQyxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFVBQUE1VSxPQUFBLFNBQ0FvUSxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFdBQUE1VSxPQUFBLFNBQ0FvUixLQUFBLENBQUF0UixhQUFBLEtBQUFDLFdBQUEsZ0NBQ0FDLE9BQUEsTUFBQUgsTUFBQSxFQUNBOUMsR0FBQSxXQUFBd04sS0FBQSxDQUFBaUksT0FDQSxDQUNBLElBQ0EsT0FBQXJjLENBQUEsRUFDQSxDQUVBLEtBQUEwZSx1QkFBQSxDQUFBekQsS0FBQSxFQUNBLEtBQUEwRCxxQkFBQSxDQUFBMUQsS0FBQSxFQUVBO0FBQ0EsTUFBQS9ILEtBQUEsQ0FBQStILEtBQUEsQ0FBQTJELGtCQUFBLEVBQ0ExYixRQUFBLENBQUE1QixhQUFBLDZEQUNBLEdBQUE0UixLQUFBLEVBQ0EsSUFDQUEsS0FBQSxDQUFBOVIsT0FBQSxDQUFBaWIsT0FBQSxDQUFBdmMsSUFBQSxDQUFBSSxTQUFBLENBQUFtYyxPQUFBLEVBQ0EsT0FBQXJjLENBQUEsRUFDQSxDQUNBekMsSUFBQSxDQUFBZ2IsU0FBQSxFQUFBQyxpQkFBQSxHQUFBdEYsS0FBQSxXQUFBbUosT0FBQSxFQUNBbkosS0FBQSxDQUFBdkosYUFBQSxLQUFBQyxXQUFBLGdDQUNBQyxPQUFBLE1BQUFILE1BQUEsRUFBQTlDLEdBQUEsV0FBQXdOLEtBQUEsQ0FBQWlJLE9BQUEsQ0FDQSxJQUNBLENBQ0EsQ0FHQSxPQUFBd0MsZ0JBQUE1RCxLQUFBLEVBRUEsTUFBQWpCLElBQUEsTUFBQWlELFFBQUEsQ0FBQWhDLEtBQUEsRUFDQSxJQUFBakIsSUFBQSxFQUNBLE9BQ0EsQ0FFQSxJQUNBLE1BQUE4RSxRQUFBLENBQUF2VCxNQUFBLENBQUFtQixRQUFBLEVBQUFDLEdBQUEsR0FBQXFOLElBQUEsRUFDQSxHQUFBOEUsUUFBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBMVUsT0FBQSxDQUFBbUIsTUFBQSxDQUFBd1QsWUFBQSxFQUFBQyxXQUFBLE1BQUF6VCxNQUFBLENBQUEwVCxRQUFBLE9BRUE7QUFDQTtBQUNBLEdBQUE3VSxPQUFBLEVBQUFBLE9BQUEsQ0FBQThVLFFBQUEsU0FBQTlVLE9BQUEsQ0FBQThVLFFBQUEsQ0FBQXhRLE1BQUEsZUFFQXRFLE9BQUEsQ0FBQThVLFFBQUEsQ0FBQXhRLE1BQUEsQ0FDQXNMLElBQUEsQ0FDQSxTQUNBLENBQ0FyTCxhQUFBLGVBQ0FmLGVBQUEsTUFBQW1NLEVBQUEsQ0FBQUssV0FBQSxDQUNBdE0sa0JBQUEsTUFBQWlNLEVBQUEsQ0FBQXhVLEdBQUEsQ0FDQWtKLFFBQUEsQ0FBQUEsQ0FBQSxJQUNBLEtBQUE2UCxjQUFBLENBQUFyRCxLQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsU0FBQTFQLE1BQUEsQ0FBQW1CLFFBQUEsRUFBQVcsTUFBQSxFQUNBO0FBQ0E5QixNQUFBLENBQUFtQixRQUFBLENBQUFXLE1BQUEsQ0FDQTJNLElBQUEsQ0FDQSxDQUNBck0sTUFBQSxNQUFBb00sRUFBQSxDQUFBSyxXQUFBLENBQ0F2TSxTQUFBLE1BQUFrTSxFQUFBLENBQUF4VSxHQUFBLENBQ0FpRixTQUFBLEtBQ0FxQyxhQUFBLE1BQ0FDLGNBQUEsT0FDQUMsaUJBQUEsR0FDQUMsaUJBQUEsTUFDQXlCLFFBQUEsQ0FBQUEsQ0FBQSxJQUNBLEtBQUE2UCxjQUFBLENBQUFyRCxLQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBQ0EsQ0FFQWpCLElBQUEsQ0FBQTVZLE9BQUEsQ0FBQStkLGFBQUEsS0FFQSxPQUFBM0ssQ0FBQSxFQUNBakosTUFBQSxDQUFBa1IsS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLGlDQUFBb1UsQ0FBQSxFQUNBLENBQ0EsQ0FFQSxPQUFBNEssaUJBQUFuRSxLQUFBLEVBQ0EsTUFBQWpCLElBQUEsTUFBQWlELFFBQUEsQ0FBQWhDLEtBQUEsRUFDQSxNQUFBaEIsTUFBQSxNQUFBaUQsVUFBQSxDQUFBakMsS0FBQSxFQUNBLElBQUFqQixJQUFBLEdBQUFDLE1BQUEsRUFBQUQsSUFBQSxDQUFBeEgsUUFBQSxDQUFBeFEsTUFBQSxRQUVBLElBQUEyUCxJQUFBLElBQ0EsSUFDQUEsSUFBQSxDQUFBN1IsSUFBQSxDQUFBQyxLQUFBLENBQUFrYSxNQUFBLENBQUE3RixLQUFBLFFBQ0EsT0FBQXBVLENBQUEsRUFDQTJSLElBQUEsSUFDQSxDQUVBLElBQUE5TixLQUFBLENBQUE0QixPQUFBLENBQUFrTSxJQUFBLElBQUFBLElBQUEsQ0FBQTNQLE1BQUEsRUFDQTJQLElBQUEsT0FBQTRFLFlBQUEsR0FBQThGLE9BQUEsTUFBQTNhLEtBQUEsSUFDQSxJQUNBdVksTUFBQSxDQUFBN0YsS0FBQSxDQUFBdFUsSUFBQSxDQUFBSSxTQUFBLENBQUF5UixJQUFBLEVBQ0FzSSxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFVBQUE1VSxPQUFBLFNBQ0FvUSxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFdBQUE1VSxPQUFBLFNBQ0EsT0FBQTdKLENBQUEsRUFDQSxDQUNBLENBRUEsUUFBQWdGLENBQUEsR0FBQUEsQ0FBQSxDQUFBMk0sSUFBQSxDQUFBM1AsTUFBQSxDQUFBZ0QsQ0FBQSxJQUNBLEtBQUFvWSxVQUFBLENBQUFuQyxLQUFBLEVBQ0F0UyxLQUFBLENBQUFnSixJQUFBLENBQUEzTSxDQUFBLEdBQUEyRCxLQUFBLEtBQ0F5TCxLQUFBLENBQUF6QyxJQUFBLENBQUEzTSxDQUFBLEdBQUFvUCxLQUFBLEtBQ0FiLFFBQUEsR0FBQTVCLElBQUEsQ0FBQTNNLENBQUEsR0FBQXVPLFFBQUEsQ0FDQWlLLEtBQUEsQ0FBQXhZLENBQUEsQ0FDQTNELEdBQUEsTUFBQThiLFFBQUEsRUFDQSxHQUNBLENBRUEsS0FBQXVCLHVCQUFBLENBQUF6RCxLQUFBLEVBQ0EsS0FBQTBELHFCQUFBLENBQUExRCxLQUFBLEVBQ0EsS0FBQUcsNEJBQUEsQ0FBQUgsS0FBQSxFQUNBLENBRUEsT0FBQW9FLGlCQUFBcEUsS0FBQSxFQUNBLE1BQUFxRSxNQUFBLENBQUFyRSxLQUFBLEVBQUFsWixnQkFBQSxNQUFBZ1ksRUFBQSxDQUFBRyxNQUFBLEVBQ0EsSUFBQW9GLE1BQUEsRUFBQXRkLE1BQUEsY0FDQSxRQUFBZ0QsQ0FBQSxHQUFBQSxDQUFBLENBQUFzYSxNQUFBLENBQUF0ZCxNQUFBLENBQUFnRCxDQUFBLE1BQUFzYSxNQUFBLENBQUF0YSxDQUFBLEVBQUFtVyxPQUFBLGFBQ0EsYUFDQSxDQUVBLE9BQUFvRSxvQkFBQXRFLEtBQUEsRUFDQSxNQUFBQyxHQUFBLENBQUFELEtBQUEsRUFBQTNaLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQU0sWUFBQSxFQUNBLFNBQUFhLEdBQUEsRUFBQUEsR0FBQSxDQUFBQyxPQUFBLEVBQ0EsQ0FFQSxPQUFBcUUsdUJBQUF2RSxLQUFBLEVBQ0EsTUFBQXdFLEVBQUEsQ0FBQXhFLEtBQUEsRUFBQTNaLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQU8sWUFBQSxFQUNBLFNBQUFtRixFQUFBLEVBQUExaEIsTUFBQSxDQUFBMGhCLEVBQUEsQ0FBQXJMLEtBQUEsTUFBQWhXLElBQUEsR0FBQTRELE1BQUEsRUFDQSxDQUVBLE9BQUEwYyx3QkFBQXpELEtBQUEsRUFDQSxNQUFBalYsS0FBQSxDQUFBaVYsS0FBQSxFQUFBM1osYUFBQSxNQUFBeVksRUFBQSxDQUFBTyxZQUFBLEVBQ0EsTUFBQW9GLElBQUEsQ0FBQXpFLEtBQUEsRUFBQTNaLGFBQUEsMkJBQ0EsSUFBQTBFLEtBQUEsUUFFQSxNQUFBMlosSUFBQSxNQUFBTixnQkFBQSxDQUFBcEUsS0FBQSxFQUNBalYsS0FBQSxDQUFBNFosUUFBQSxHQUFBRCxJQUFBLENBQ0EsR0FBQUEsSUFBQSxFQUNBM1osS0FBQSxDQUFBekQsWUFBQSx5QkFDQSxHQUFBbWQsSUFBQSxDQUFBQSxJQUFBLENBQUF6YixLQUFBLENBQUF1WCxPQUFBLElBQ0EsTUFDQXhWLEtBQUEsQ0FBQWxELGVBQUEsa0JBQ0EsR0FBQTRjLElBQUEsQ0FBQUEsSUFBQSxDQUFBemIsS0FBQSxDQUFBdVgsT0FBQSxRQUNBLENBQ0EsQ0FFQSxPQUFBbUQsc0JBQUExRCxLQUFBLEVBQ0EsTUFBQWpWLEtBQUEsQ0FBQWlWLEtBQUEsRUFBQTNaLGFBQUEsTUFBQXlZLEVBQUEsQ0FBQVEsaUJBQUEsRUFDQSxNQUFBbUYsSUFBQSxDQUFBekUsS0FBQSxFQUFBM1osYUFBQSxNQUFBeVksRUFBQSxDQUFBUyxnQkFBQSxFQUVBO0FBQ0EsTUFBQXFGLFVBQUEsTUFBQU4sbUJBQUEsQ0FBQXRFLEtBQUEsRUFDQSxNQUFBNkUsY0FBQSxDQUFBOVosS0FBQSxFQUFBaUosT0FBQSwwQkFDQSxNQUFBOFEsU0FBQSxDQUFBOUUsS0FBQSxFQUFBM1osYUFBQSxNQUFBeVksRUFBQSxDQUFBVSxVQUFBLFFBQ0EsTUFBQXVGLE9BQUEsQ0FBQUQsU0FBQSxFQUFBOVEsT0FBQSwwQkFFQTtBQUNBLEdBQUE2USxjQUFBLENBQUFBLGNBQUEsQ0FBQTdiLEtBQUEsQ0FBQXVYLE9BQUEsQ0FBQXFFLFVBQUEsV0FDQSxHQUFBRyxPQUFBLENBQUFBLE9BQUEsQ0FBQS9iLEtBQUEsQ0FBQXVYLE9BQUEsQ0FBQXFFLFVBQUEsV0FFQTtBQUNBLElBQUE3WixLQUFBLFFBRUEsTUFBQTJaLElBQUEsQ0FBQUUsVUFBQSxPQUFBUixnQkFBQSxDQUFBcEUsS0FBQSxRQUFBdUUsc0JBQUEsQ0FBQXZFLEtBQUEsRUFDQSxHQUFBeUUsSUFBQSxHQUFBQSxJQUFBLENBQUExZSxFQUFBLENBQUEwZSxJQUFBLENBQUExZSxFQUFBLDBCQUFBdkIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsT0FFQXNFLEtBQUEsQ0FBQTRaLFFBQUEsR0FBQUQsSUFBQSxDQUNBLEdBQUFBLElBQUEsRUFDQTNaLEtBQUEsQ0FBQXpELFlBQUEseUJBQ0EsR0FBQW1kLElBQUEsRUFDQUEsSUFBQSxDQUFBemIsS0FBQSxDQUFBdVgsT0FBQSxJQUNBeFYsS0FBQSxDQUFBekQsWUFBQSxvQkFBQW1kLElBQUEsQ0FBQTFlLEVBQUEsRUFDQSxDQUNBLE1BQ0FnRixLQUFBLENBQUFsRCxlQUFBLGtCQUNBa0QsS0FBQSxDQUFBbEQsZUFBQSxxQkFDQSxHQUFBNGMsSUFBQSxDQUFBQSxJQUFBLENBQUF6YixLQUFBLENBQUF1WCxPQUFBLFFBQ0EsQ0FDQSxDQUVBLE9BQUF5RSx1QkFBQWhGLEtBQUEsQ0FBQWlGLE9BQUEsRUFDQSxRQUFBWCxtQkFBQSxDQUFBdEUsS0FBQSxTQUVBLE1BQUFxRSxNQUFBLENBQUFyRSxLQUFBLEVBQUFsWixnQkFBQSxNQUFBZ1ksRUFBQSxDQUFBRyxNQUFBLEVBQ0EsSUFBQW9GLE1BQUEsRUFBQXRkLE1BQUEsUUFFQSxHQUFBa2UsT0FBQSxFQUFBQSxPQUFBLENBQUEvRSxPQUFBLEVBQ0EsUUFBQW5XLENBQUEsR0FBQUEsQ0FBQSxDQUFBc2EsTUFBQSxDQUFBdGQsTUFBQSxDQUFBZ0QsQ0FBQSxNQUFBc2EsTUFBQSxDQUFBdGEsQ0FBQSxJQUFBa2IsT0FBQSxFQUNBWixNQUFBLENBQUF0YSxDQUFBLEVBQUFtVyxPQUFBLE9BQ0FtRSxNQUFBLENBQUF0YSxDQUFBLEVBQUF6QyxZQUFBLHlCQUNBLENBQ0EyZCxPQUFBLENBQUEzZCxZQUFBLHdCQUNBLE9BQ0EsQ0FFQSxJQUFBNGQsSUFBQSxPQUNBLFFBQUFDLENBQUEsR0FBQUEsQ0FBQSxDQUFBZCxNQUFBLENBQUF0ZCxNQUFBLENBQUFvZSxDQUFBLE1BQUFkLE1BQUEsQ0FBQWMsQ0FBQSxFQUFBakYsT0FBQSxFQUNBLElBQUFnRixJQUFBLEVBQ0FBLElBQUEsTUFDQSxNQUNBYixNQUFBLENBQUFjLENBQUEsRUFBQWpGLE9BQUEsT0FDQW1FLE1BQUEsQ0FBQWMsQ0FBQSxFQUFBN2QsWUFBQSx5QkFDQSxDQUNBLENBRUEsS0FBQW1jLHVCQUFBLENBQUF6RCxLQUFBLEVBQ0EsS0FBQTBELHFCQUFBLENBQUExRCxLQUFBLEVBQ0EsQ0FFQTtBQUNBLE9BQUFvRixnQkFBQXBGLEtBQUEsRUFDQSxJQUFBQSxLQUFBLFFBQ0EsSUFBQUEsS0FBQSxDQUFBM1osYUFBQTtBQUNBLEdBQUEyWixLQUFBLENBQUE3WixPQUFBLENBQUFrZix1QkFBQSxRQUNBLEtBQUF6QixlQUFBLENBQUE1RCxLQUFBLEVBQ0EsT0FDQSxDQUVBLEtBQUFtRSxnQkFBQSxDQUFBbkUsS0FBQSxFQUNBLEtBQUE0RCxlQUFBLENBQUE1RCxLQUFBLEVBQ0FBLEtBQUEsQ0FBQTdaLE9BQUEsQ0FBQWtmLHVCQUFBLEtBRUEsS0FBQTVCLHVCQUFBLENBQUF6RCxLQUFBLEVBQ0EsS0FBQTBELHFCQUFBLENBQUExRCxLQUFBLEVBQ0EsS0FBQUcsNEJBQUEsQ0FBQUgsS0FBQSxFQUNBLENBRUE7QUFDQSxPQUFBc0YsVUFBQSxFQUNBLEdBQUFoakIsSUFBQSxDQUFBaWpCLGtCQUFBLFFBQ0FqakIsSUFBQSxDQUFBaWpCLGtCQUFBLE1BRUEsTUFBQUMsa0JBQUEsQ0FBQUMsRUFBQSxHQUNBLE1BQUF6RixLQUFBLENBQUF5RixFQUFBLEVBQUFoWCxNQUFBLEVBQUF1UixLQUFBLENBQ0EsTUFBQS9ILEtBQUEsQ0FBQXdOLEVBQUEsRUFBQWhYLE1BQUEsRUFBQS9DLEVBQUEsRUFBQStaLEVBQUEsRUFBQWhYLE1BQUEsRUFBQXdKLEtBQUEsT0FDQSxJQUFBK0gsS0FBQSxRQUNBLEdBQUEvSCxLQUFBLENBQUErSCxLQUFBLENBQUEyRCxrQkFBQSxDQUFBMUwsS0FBQSxDQUNBLEtBQUFtTixlQUFBLENBQUFwRixLQUFBLEVBQ0E7QUFDQSxLQUFBMEYsbUJBQUEsR0FDQSxFQUVBemQsUUFBQSxDQUFBOEcsZ0JBQUEsNEJBQUF5VyxrQkFBQSxFQUNBdmQsUUFBQSxDQUFBOEcsZ0JBQUEsNkJBQUF5VyxrQkFBQSxFQUVBLEtBQUFFLG1CQUFBLEdBQ0EsQ0FFQSxPQUFBQSxvQkFBQSxFQUVBO0FBQ0EsUUFBQTlHLFlBQUEsT0FBQUMsV0FBQSxFQUFBOEcsV0FBQSxRQUVBLE1BQUF6VSxJQUFBLENBQUFqSixRQUFBLENBQUFDLGNBQUEsd0JBQ0EsSUFBQWdKLElBQUEsRUFDQTtBQUNBLEtBQUEwTixZQUFBLE9BQ0EsS0FBQUMsV0FBQSxNQUNBLE9BQ0EsQ0FFQSxLQUFBQSxXQUFBLENBQUEzTixJQUFBLENBQ0EsS0FBQTBOLFlBQUEsTUFDQTFOLElBQUEsQ0FBQS9LLE9BQUEsQ0FBQXlmLHFCQUFBLEtBRUEsTUFBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQ0FBLE1BQUEsRUFBQTlSLE9BQUEsa0NBQ0E5QyxJQUFBLENBQUE3SyxhQUFBLHFDQUVBO0FBQ0E2SyxJQUFBLENBQUFuQyxnQkFBQSxTQUFBd0ssQ0FBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUE2RixTQUFBLENBQUF0TSxDQUFBLENBQUF1TSxNQUFBLEVBQ0EsSUFBQTlGLEtBQUEsUUFFQSxLQUFBb0YsZUFBQSxDQUFBcEYsS0FBQSxFQUVBLE1BQUFsQixFQUFBLE1BQUFBLEVBQUEsQ0FFQTtBQUNBLE1BQUExTixHQUFBLENBQUFtSSxDQUFBLENBQUF1TSxNQUFBLENBQUE5UixPQUFBLEdBQUE4SyxFQUFBLENBQUFJLE9BQUEsRUFDQSxHQUFBOU4sR0FBQSxFQUNBLEtBQUErUSxVQUFBLENBQUFuQyxLQUFBLEVBQUF0UyxLQUFBLElBQUF5TCxLQUFBLElBQUFiLFFBQUEsU0FDQSxLQUFBK0ssY0FBQSxDQUFBckQsS0FBQSxFQUNBLEtBQUFHLDRCQUFBLENBQUFILEtBQUEsRUFDQSxPQUNBLENBRUE7QUFDQSxNQUFBTCxXQUFBLENBQUFwRyxDQUFBLENBQUF1TSxNQUFBLENBQUE5UixPQUFBLEdBQUE4SyxFQUFBLENBQUFhLFdBQUEsRUFDQSxHQUFBQSxXQUFBLEVBQ0FwRyxDQUFBLENBQUF3TSxjQUFBLEdBQ0F4TSxDQUFBLENBQUF5TSxlQUFBLEdBRUEsTUFBQUMsTUFBQSxFQUFBdEcsV0FBQSxDQUFBalksWUFBQSxxQkFBQS9ELFdBQUEsR0FDQSxNQUFBMkcsR0FBQSxDQUFBcVYsV0FBQSxDQUFBM0wsT0FBQSxHQUFBOEssRUFBQSxDQUFBeFUsR0FBQSxFQUVBLElBQUFBLEdBQUEsRUFDQSxLQUFBeVksY0FBQSxDQUFBcEQsV0FBQSxFQUNBLE9BQ0EsQ0FFQSxpQkFBQXNHLE1BQUEsRUFDQTtBQUNBLE1BQUFDLFVBQUEsTUFBQWxFLFFBQUEsQ0FBQWhDLEtBQUEsR0FBQXpJLFFBQUEsQ0FBQXhRLE1BQUEsSUFDQSxLQUFBb2IsVUFBQSxDQUFBbkMsS0FBQSxFQUFBdFMsS0FBQSxJQUFBeUwsS0FBQSxJQUFBYixRQUFBLFNBQ0E7QUFDQSxNQUFBeUcsSUFBQSxNQUFBaUQsUUFBQSxDQUFBaEMsS0FBQSxFQUNBLEdBQUFqQixJQUFBLEVBQUFBLElBQUEsQ0FBQTFILGdCQUFBLEVBQUEwSCxJQUFBLENBQUExSCxnQkFBQSxHQUFBL00sR0FBQSxFQUNBLEtBQUEyWSxZQUFBLENBQUFsRSxJQUFBLENBQUExSCxnQkFBQSxDQUFBL00sR0FBQSxFQUNBLENBQ0EsS0FBQStZLGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxLQUFBRyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0EsdUJBQUFpRyxNQUFBLEVBQ0EsTUFBQXJGLEdBQUEsRUFBQXRXLEdBQUEsQ0FBQWpFLGFBQUEsQ0FBQXlZLEVBQUEsQ0FBQXBSLEtBQUEsT0FBQXlMLEtBQUEsS0FDQSxNQUFBRCxHQUFBLEVBQUE1TyxHQUFBLENBQUFqRSxhQUFBLENBQUF5WSxFQUFBLENBQUEzRixLQUFBLE9BQUFBLEtBQUEsS0FDQSxNQUFBbUssR0FBQSxJQUFBaFosR0FBQSxDQUFBakUsYUFBQSxDQUFBeVksRUFBQSxDQUFBRyxNQUFBLE9BQUFpQixPQUFBLENBQ0EsS0FBQWlDLFVBQUEsQ0FBQW5DLEtBQUEsRUFBQXRTLEtBQUEsQ0FBQWtULEdBQUEsQ0FBQXpILEtBQUEsQ0FBQUQsR0FBQSxDQUFBWixRQUFBLENBQUFnTCxHQUFBLENBQUFsZCxHQUFBLE1BQUE4YixRQUFBLEtBQ0E7QUFDQSxNQUFBbkQsSUFBQSxNQUFBaUQsUUFBQSxDQUFBaEMsS0FBQSxFQUVBLEdBQUFqQixJQUFBLEVBQUFBLElBQUEsQ0FBQTFILGdCQUFBLEVBQUEwSCxJQUFBLENBQUExSCxnQkFBQSxHQUFBL00sR0FBQSxFQUNBLEtBQUEyWSxZQUFBLENBQUFsRSxJQUFBLENBQUExSCxnQkFBQSxDQUFBL00sR0FBQSxFQUNBLENBQ0EsS0FBQTBhLHNCQUFBLENBQUFoRixLQUFBLE9BQ0EsS0FBQXFELGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxLQUFBRyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0Esb0JBQUFpRyxNQUFBLEVBQ0EsR0FBQTNiLEdBQUEsRUFBQUEsR0FBQSxDQUFBNkYsVUFBQSxDQUFBN0YsR0FBQSxDQUFBNkYsVUFBQSxDQUFBQyxXQUFBLENBQUE5RixHQUFBLEVBQ0EsS0FBQStZLGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxLQUFBRyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0EsQ0FFQSxLQUFBK0MsY0FBQSxDQUFBcEQsV0FBQSxFQUNBLE9BQ0EsQ0FFQSxRQUdBO0FBQ0F6TyxJQUFBLENBQUFuQyxnQkFBQSxTQUFBd0ssQ0FBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUE2RixTQUFBLENBQUF0TSxDQUFBLENBQUF1TSxNQUFBLEVBQ0EsSUFBQTlGLEtBQUEsRUFDQSxPQUNBLENBQ0EsTUFBQWxCLEVBQUEsTUFBQUEsRUFBQSxDQUNBLE1BQUFxSCxpQkFBQSxDQUFBNU0sQ0FBQSxDQUFBdU0sTUFBQSxDQUFBdmIsU0FBQSxFQUFBbkMsUUFBQSx5QkFBQW1SLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQXZiLFNBQUEsRUFBQW5DLFFBQUEsd0JBQ0EsTUFBQWdlLFNBQUEsQ0FBQTdNLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQXZiLFNBQUEsRUFBQW5DLFFBQUEsK0JBQ0EsTUFBQWllLFdBQUEsQ0FBQTlNLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQVEsT0FBQSxHQUFBeEgsRUFBQSxDQUFBTSxZQUFBLEVBQ0EsTUFBQW1ILGVBQUEsQ0FBQWhOLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQVEsT0FBQSxHQUFBeEgsRUFBQSxDQUFBTyxZQUFBLEVBQ0EsTUFBQW1ILGdCQUFBLENBQUFqTixDQUFBLENBQUF1TSxNQUFBLENBQUFRLE9BQUEsR0FBQXhILEVBQUEsQ0FBQWMsaUJBQUEsRUFFQTtBQUNBLEdBQUE0RyxnQkFBQSxFQUNBLEtBQUFyRyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0EsS0FBQXFELGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxPQUNBLENBRUE7QUFDQSxHQUFBekcsQ0FBQSxDQUFBdU0sTUFBQSxDQUFBdmIsU0FBQSxFQUFBbkMsUUFBQSx5QkFDQSxNQUFBa0MsR0FBQSxDQUFBaVAsQ0FBQSxDQUFBdU0sTUFBQSxDQUFBOVIsT0FBQSxNQUFBOEssRUFBQSxDQUFBeFUsR0FBQSxFQUNBLEtBQUF5VywyQkFBQSxDQUFBelcsR0FBQSxFQUNBO0FBQ0FpUCxDQUFBLENBQUF1TSxNQUFBLENBQUEzZixPQUFBLENBQUFzYSxZQUFBLENBQUFsSCxDQUFBLENBQUF1TSxNQUFBLENBQUEzTSxLQUFBLEtBQ0EsQ0FFQTtBQUNBLEdBQUFJLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQXZiLFNBQUEsRUFBQW5DLFFBQUEseUJBQ0EsTUFBQWtDLEdBQUEsQ0FBQWlQLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQTlSLE9BQUEsQ0FBQThLLEVBQUEsQ0FBQXhVLEdBQUEsRUFDQSxNQUFBZ1csTUFBQSxDQUFBaFcsR0FBQSxFQUFBakUsYUFBQSxDQUFBeVksRUFBQSxDQUFBM0YsS0FBQSxFQUNBLE1BQUEyRyxPQUFBLE1BQUFDLHdCQUFBLENBQUFDLEtBQUEsRUFFQSxHQUFBTSxNQUFBLEVBQ0EsSUFBQVIsT0FBQSxFQUNBO0FBQ0FRLE1BQUEsQ0FBQW5ILEtBQUEsTUFBQTBHLHNCQUFBLENBQUF0RyxDQUFBLENBQUF1TSxNQUFBLENBQUEzTSxLQUFBLFFBQ0EsZUFBQTJILHlCQUFBLENBQUF4VyxHQUFBLEdBQ0E7QUFDQWdXLE1BQUEsQ0FBQW5ILEtBQUEsTUFBQTBHLHNCQUFBLENBQUF0RyxDQUFBLENBQUF1TSxNQUFBLENBQUEzTSxLQUFBLE9BQ0EsQ0FDQSxDQUNBLENBR0EsR0FBQWdOLGlCQUFBLEVBQUFDLFNBQUEsRUFBQUMsV0FBQSxFQUNBLEdBQUFELFNBQUEsQ0FBQTdNLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQXhlLFlBQUEsZ0JBQUFpUyxDQUFBLENBQUF1TSxNQUFBLENBQUE1RixPQUFBLGlCQUNBLEdBQUFrRyxTQUFBLEVBQUFDLFdBQUEsTUFBQXJCLHNCQUFBLENBQUFoRixLQUFBLENBQUFvRyxTQUFBLENBQUE3TSxDQUFBLENBQUF1TSxNQUFBLE9BQ0EsS0FBQXpDLGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxDQUVBLEdBQUF1RyxlQUFBLEVBQ0EsS0FBQTlDLHVCQUFBLENBQUF6RCxLQUFBLEVBQ0EsS0FBQTBELHFCQUFBLENBQUExRCxLQUFBLEVBQ0EsTUFBQWhCLE1BQUEsTUFBQWlELFVBQUEsQ0FBQWpDLEtBQUEsRUFDQSxHQUFBaEIsTUFBQSxFQUNBQSxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFVBQUE1VSxPQUFBLFNBQ0FvUSxNQUFBLENBQUF0USxhQUFBLEtBQUE4VSxLQUFBLFdBQUE1VSxPQUFBLFNBQ0EsQ0FDQSxDQUNBLFFBR0E7QUFDQXNDLElBQUEsQ0FBQW5DLGdCQUFBLFVBQUF3SyxDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTZGLFNBQUEsQ0FBQXRNLENBQUEsQ0FBQXVNLE1BQUEsRUFDQSxJQUFBOUYsS0FBQSxRQUVBLE1BQUFsQixFQUFBLE1BQUFBLEVBQUEsQ0FDQSxNQUFBc0gsU0FBQSxDQUFBN00sQ0FBQSxDQUFBdU0sTUFBQSxDQUFBdmIsU0FBQSxFQUFBbkMsUUFBQSwrQkFDQSxNQUFBcWUsUUFBQSxDQUFBbE4sQ0FBQSxDQUFBdU0sTUFBQSxDQUFBUSxPQUFBLEdBQUF4SCxFQUFBLENBQUFNLFlBQUEsRUFDQSxJQUFBZ0gsU0FBQSxHQUFBSyxRQUFBLFFBRUEsR0FBQUwsU0FBQSxDQUFBN00sQ0FBQSxDQUFBdU0sTUFBQSxDQUFBeGUsWUFBQSxnQkFBQWlTLENBQUEsQ0FBQXVNLE1BQUEsQ0FBQTVGLE9BQUEsaUJBQ0EsS0FBQThFLHNCQUFBLENBQUFoRixLQUFBLENBQUFvRyxTQUFBLENBQUE3TSxDQUFBLENBQUF1TSxNQUFBLE9BQ0EsS0FBQXpDLGNBQUEsQ0FBQXJELEtBQUEsRUFDQSxRQUVBO0FBQ0E5TyxJQUFBLENBQUFuQyxnQkFBQSxjQUFBd0ssQ0FBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUE2RixTQUFBLENBQUF0TSxDQUFBLENBQUF1TSxNQUFBLEVBQ0EsR0FBQTlGLEtBQUEsRUFBQXpHLENBQUEsQ0FBQXVNLE1BQUEsRUFBQTlSLE9BQUEsUUFBQThLLEVBQUEsQ0FBQUMsSUFBQSxPQUFBcUcsZUFBQSxDQUFBcEYsS0FBQSxFQUNBLFFBRUE5TyxJQUFBLENBQUFuQyxnQkFBQSxhQUFBd0ssQ0FBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUE2RixTQUFBLENBQUF0TSxDQUFBLENBQUF1TSxNQUFBLEVBQ0EsR0FBQTlGLEtBQUEsRUFBQXpHLENBQUEsQ0FBQXVNLE1BQUEsRUFBQTlSLE9BQUEsUUFBQThLLEVBQUEsQ0FBQUssV0FBQSxPQUFBaUcsZUFBQSxDQUFBcEYsS0FBQSxFQUNBLFFBQ0EsQ0FFQSxFQUVBLElBQUExZCxJQUFBLENBQUFtYyxvQkFBQSxDQUFBNkcsU0FBQSxVQUFBdmdCLENBQUEsR0FDQTtBQUNBekMsSUFBQSxDQUFBbWMsb0JBQUEsQ0FBQWlILG1CQUFBLEdBRUF6ZCxRQUFBLENBQUE4RyxnQkFBQSx5QkFBQXpNLElBQUEsQ0FBQW1jLG9CQUFBLENBQUFpSCxtQkFBQSxNQUVBLEdBQUFwVixNQUFBLEVDem9DQTtBQUNBO0FBQ0E7QUFDQSxVQUFBak8sQ0FBQSxDQUFBMFosQ0FBQSxFQUNBLGFBRUE7QUFDQSxNQUFBelosSUFBQSxDQUFBRCxDQUFBLENBQUFFLGFBQUEsQ0FBQUYsQ0FBQSxDQUFBRSxhQUFBLEtBQ0EsTUFBQUMsRUFBQSxDQUFBRixJQUFBLENBQUFFLEVBQUEsQ0FBQUYsSUFBQSxDQUFBRSxFQUFBLEtBRUE7QUFDQUEsRUFBQSxDQUFBa2tCLGFBQUEsQ0FBQWxrQixFQUFBLENBQUFra0IsYUFBQSxNQUFBekwsR0FBQTtBQUNBelksRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQW5rQixFQUFBLENBQUFta0IsV0FBQSxNQUFBMUwsR0FBQTtBQUNBO0FBQ0F6WSxFQUFBLENBQUFva0IsaUJBQUEsQ0FBQXppQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQW9rQixpQkFBQSxFQUFBcGtCLEVBQUEsQ0FBQW9rQixpQkFBQSxLQUNBcGtCLEVBQUEsQ0FBQXFrQixpQkFBQSxDQUFBMWlCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBcWtCLGlCQUFBLEVBQUFya0IsRUFBQSxDQUFBcWtCLGlCQUFBLEtBRUE7QUFDQTtBQUNBcmtCLEVBQUEsQ0FBQXNrQiw0QkFBQSxDQUFBM2lCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBc2tCLDRCQUFBLEVBQUF0a0IsRUFBQSxDQUFBc2tCLDRCQUFBLEtBQ0E7QUFDQXRrQixFQUFBLENBQUF1a0Isd0JBQUEsQ0FBQTVpQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQXVrQix3QkFBQSxFQUFBdmtCLEVBQUEsQ0FBQXVrQix3QkFBQSxLQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBdmtCLEVBQUEsQ0FBQXdrQixZQUFBLFVBQUF0YixFQUFBLEVBQ0EsSUFBQUEsRUFBQSxVQUNBLElBQ0FvUCxZQUFBLENBQUF0WSxFQUFBLENBQUFra0IsYUFBQSxDQUFBaFYsR0FBQSxDQUFBaEcsRUFBQSxHQUNBLE9BQUEzRyxDQUFBLEdBQ0F2QyxFQUFBLENBQUFra0IsYUFBQSxDQUFBTyxNQUFBLENBQUF2YixFQUFBLEVBRUEsSUFBQXNSLElBQUEsQ0FBQXhhLEVBQUEsQ0FBQW1rQixXQUFBLENBQUFqVixHQUFBLENBQUFoRyxFQUFBLE1BQ0FzUixJQUFBLENBQUFrSyxLQUFBLEVBQUEvaUIsTUFBQSxDQUFBQyxRQUFBLENBQUE0WSxJQUFBLENBQUFrSyxLQUFBLEVBQUFsSyxJQUFBLENBQUFrSyxLQUFBLE1BQ0FsSyxJQUFBLENBQUFtSyxTQUFBLE9BQ0EsSUFBQXpiLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQThHLE1BQUEsOERBQUF0TSxDQUFBLEdBQ0EsSUFBQTJHLEVBQUEsQ0FBQTFDLEtBQUEsQ0FBQW9lLGNBQUEsa0NBQUFyaUIsQ0FBQSxHQUNBdkMsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQXZMLEdBQUEsQ0FBQTFQLEVBQUEsQ0FBQXNSLElBQUEsRUFDQSxJQUFBbEMsWUFBQSxDQUFBa0MsSUFBQSxDQUFBcUssV0FBQSxTQUFBdGlCLENBQUEsR0FDQWlZLElBQUEsQ0FBQXFLLFdBQUEsR0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQTdrQixFQUFBLENBQUE4a0Isc0JBQUEsVUFBQTViLEVBQUEsQ0FBQTZiLEdBQUEsRUFDQSxJQUFBN2IsRUFBQSxVQUNBLElBQ0FBLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQThHLE1BQUEsQ0FBQWtXLEdBQUEsRUFDQSxPQUFBeGlCLENBQUEsR0FDQTtBQUNBLEtBQUEyRyxFQUFBLENBQUE4YixXQUFBLENBQ0EsSUFDQTliLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQTZHLEdBQUEsQ0FBQW1XLEdBQUEsRUFDQSxPQUFBeGlCLENBQUEsR0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXZDLEVBQUEsQ0FBQWlsQixVQUFBLFVBQUEvYixFQUFBLENBQUFnYyxNQUFBLEVBQ0EsSUFBQWhjLEVBQUEsVUFDQSxJQUFBNmIsR0FBQSwwQkFDQSxJQUFBSSxFQUFBLENBQUF4akIsTUFBQSxDQUFBQyxRQUFBLENBQUFzakIsTUFBQSxFQUFBQSxNQUFBLEtBRUFsbEIsRUFBQSxDQUFBd2tCLFlBQUEsQ0FBQXRiLEVBQUEsRUFFQSxJQUFBc1IsSUFBQSxDQUFBeGEsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQWpWLEdBQUEsQ0FBQWhHLEVBQUEsTUFDQSxJQUFBd2IsS0FBQSxFQUFBL2lCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNFksSUFBQSxDQUFBa0ssS0FBQSxFQUFBbEssSUFBQSxDQUFBa0ssS0FBQSxNQUNBbEssSUFBQSxDQUFBa0ssS0FBQSxDQUFBQSxLQUFBLENBQ0Exa0IsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQXZMLEdBQUEsQ0FBQTFQLEVBQUEsQ0FBQXNSLElBQUEsRUFFQXhhLEVBQUEsQ0FBQThrQixzQkFBQSxDQUFBNWIsRUFBQSxDQUFBNmIsR0FBQSxFQUNBLElBQUE1TSxDQUFBLENBQUF4SSxVQUFBLFlBQ0E7QUFDQSxJQUFBOU0sQ0FBQSxDQUFBN0MsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQWpWLEdBQUEsQ0FBQWhHLEVBQUEsTUFDQSxHQUFBckcsQ0FBQSxDQUFBNmhCLEtBQUEsR0FBQUEsS0FBQSxVQUNBLElBQ0F4YixFQUFBLENBQUFuQixTQUFBLENBQUE4RyxNQUFBLENBQUFrVyxHQUFBLEVBQ0EsT0FBQXhpQixDQUFBLEdBQ0F2QyxFQUFBLENBQUFra0IsYUFBQSxDQUFBTyxNQUFBLENBQUF2YixFQUFBLEVBQ0EsRUFBQWljLEVBQUEsRUFDQW5sQixFQUFBLENBQUFra0IsYUFBQSxDQUFBdEwsR0FBQSxDQUFBMVAsRUFBQSxDQUFBaVAsQ0FBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBblksRUFBQSxDQUFBb2xCLGNBQUEsVUFBQWxjLEVBQUEsQ0FBQW1jLEtBQUEsQ0FBQUMsS0FBQSxDQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFDQSxJQUFBdGMsRUFBQSxHQUFBcVEsQ0FBQSxDQUFBa00sSUFBQSxDQUFBN2YsUUFBQSxDQUFBc0QsRUFBQSxHQUNBLE9BQ0EsQ0FDQSxJQUFBNmIsR0FBQSw2QkFDQSxJQUFBVyxLQUFBLENBQUEvakIsTUFBQSxDQUFBQyxRQUFBLENBQUF5akIsS0FBQSxFQUFBQSxLQUFBLEdBQ0EsSUFBQWhaLEVBQUEsQ0FBQTFLLE1BQUEsQ0FBQUMsUUFBQSxDQUFBMGpCLEtBQUEsRUFBQUEsS0FBQSxLQUNBLElBQUE5WSxHQUFBLENBQUE3SyxNQUFBLENBQUFDLFFBQUEsQ0FBQTJqQixNQUFBLEVBQUFBLE1BQUEsS0FFQTtBQUNBLElBQUEvSyxJQUFBLENBQUF4YSxFQUFBLENBQUFta0IsV0FBQSxDQUFBalYsR0FBQSxDQUFBaEcsRUFBQSxNQUNBLElBQUF3SyxHQUFBLENBQUFpUyxJQUFBLENBQUFqUyxHQUFBLEdBQ0EsSUFBQWtTLFdBQUEsQ0FBQWprQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQW9rQixpQkFBQSxFQUFBcGtCLEVBQUEsQ0FBQW9rQixpQkFBQSxLQUNBLEdBQUF6aUIsTUFBQSxDQUFBQyxRQUFBLENBQUE0WSxJQUFBLENBQUFxTCxPQUFBLEdBQUFuUyxHQUFBLENBQUE4RyxJQUFBLENBQUFxTCxPQUFBLENBQUFELFdBQUEsRUFDQSxPQUNBLENBQ0FwTCxJQUFBLENBQUFxTCxPQUFBLENBQUFuUyxHQUFBLENBRUE7QUFDQTFULEVBQUEsQ0FBQXdrQixZQUFBLENBQUF0YixFQUFBLEVBRUE7QUFDQSxJQUFBd2IsS0FBQSxFQUFBL2lCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNFksSUFBQSxDQUFBa0ssS0FBQSxFQUFBbEssSUFBQSxDQUFBa0ssS0FBQSxNQUNBbEssSUFBQSxDQUFBa0ssS0FBQSxDQUFBQSxLQUFBLENBRUEsSUFBQW9CLFVBQUEsR0FBQU4sU0FBQSxTQUFBQSxTQUFBLFlBQ0EsR0FBQU0sVUFBQSxFQUNBLElBQ0E1YyxFQUFBLENBQUExQyxLQUFBLENBQUFzWSxXQUFBLDBCQUFBMEcsU0FBQSxFQUNBLE9BQUFqakIsQ0FBQSxHQUNBaVksSUFBQSxDQUFBbUssU0FBQSxNQUNBLENBQ0Eza0IsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQXZMLEdBQUEsQ0FBQTFQLEVBQUEsQ0FBQXNSLElBQUEsRUFFQSxJQUFBalQsQ0FBQSxHQUNBLFVBQUF3ZSxLQUFBLEVBQ0EsSUFBQWxqQixDQUFBLENBQUE3QyxFQUFBLENBQUFta0IsV0FBQSxDQUFBalYsR0FBQSxDQUFBaEcsRUFBQSxNQUNBLEdBQUFyRyxDQUFBLENBQUE2aEIsS0FBQSxHQUFBQSxLQUFBLEVBQ0E7QUFDQSxPQUNBLENBQ0EsR0FBQW5kLENBQUEsRUFBQW1lLEtBQUEsRUFDQTFsQixFQUFBLENBQUFra0IsYUFBQSxDQUFBTyxNQUFBLENBQUF2YixFQUFBLEVBQ0EsR0FBQTRjLFVBQUEsRUFDQSxJQUNBNWMsRUFBQSxDQUFBMUMsS0FBQSxDQUFBb2UsY0FBQSwyQkFDQSxPQUFBcmlCLENBQUEsR0FDQSxDQUNBLE9BQ0EsQ0FDQXZDLEVBQUEsQ0FBQThrQixzQkFBQSxDQUFBNWIsRUFBQSxDQUFBNmIsR0FBQSxFQUNBL2tCLEVBQUEsQ0FBQWtrQixhQUFBLENBQUF0TCxHQUFBLENBQUExUCxFQUFBLENBQUF5RyxVQUFBO0FBQ0EsSUFBQXFXLEVBQUEsQ0FBQWhtQixFQUFBLENBQUFta0IsV0FBQSxDQUFBalYsR0FBQSxDQUFBaEcsRUFBQSxNQUNBLEdBQUE4YyxFQUFBLENBQUF0QixLQUFBLEdBQUFBLEtBQUEsVUFDQSxJQUNBeGIsRUFBQSxDQUFBbkIsU0FBQSxDQUFBOEcsTUFBQSxDQUFBa1csR0FBQSxFQUNBLE9BQUF4aUIsQ0FBQSxFQUNBLENBQ0F2QyxFQUFBLENBQUFra0IsYUFBQSxDQUFBdEwsR0FBQSxDQUFBMVAsRUFBQSxDQUFBeUcsVUFBQTtBQUNBLElBQUFzVyxFQUFBLENBQUFqbUIsRUFBQSxDQUFBbWtCLFdBQUEsQ0FBQWpWLEdBQUEsQ0FBQWhHLEVBQUEsTUFDQSxHQUFBK2MsRUFBQSxDQUFBdkIsS0FBQSxHQUFBQSxLQUFBLFVBQ0FuZCxDQUFBLEdBQ0F3ZSxJQUFBLEdBQ0EsRUFBQXZaLEdBQUEsR0FDQSxFQUFBSCxFQUFBLEdBQ0EsS0FDQSxFQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBck0sRUFBQSxDQUFBa21CLHFCQUFBLFVBQUFDLGdCQUFBLENBQUEvaEIsUUFBQSxDQUFBZ2lCLE9BQUEsQ0FBQXRmLENBQUEsQ0FBQUMsQ0FBQSxDQUFBc2YsQ0FBQSxDQUFBQyxLQUFBLEVBQ0EsSUFBQTVYLElBQUEsUUFBQXlYLGdCQUFBLFlBQUE1TSxDQUFBLENBQUE0TSxnQkFBQSxFQUFBNU0sQ0FBQSxDQUNBLElBQUF1SCxHQUFBLFFBQUFxRixnQkFBQSxZQUFBQSxnQkFBQSxDQUFBL2hCLFFBQUEsQ0FDQSxJQUFBMGMsR0FBQSxVQUNBLElBQUE1WCxFQUFBLENBQUF3RixJQUFBLENBQUE3SyxhQUFBLENBQUFpZCxHQUFBLEVBQ0EsSUFBQTVYLEVBQUEsVUFFQSxJQUFBcWQsTUFBQSxDQUFBNWtCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBcWtCLGlCQUFBLEVBQUFya0IsRUFBQSxDQUFBcWtCLGlCQUFBLEtBQ0EsSUFBQWMsRUFBQSxDQUFBeGpCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBd2tCLE9BQUEsRUFBQUEsT0FBQSxDQUFBRyxNQUFBLENBQ0EsSUFBQS9MLElBQUEsQ0FBQXhhLEVBQUEsQ0FBQW1rQixXQUFBLENBQUFqVixHQUFBLENBQUFoRyxFQUFBLE1BQ0EsSUFBQW9QLFlBQUEsQ0FBQWtDLElBQUEsQ0FBQXFLLFdBQUEsU0FBQXRpQixDQUFBLEdBQ0FpWSxJQUFBLENBQUFxSyxXQUFBLENBQUFsVixVQUFBLFlBQ0EzUCxFQUFBLENBQUFvbEIsY0FBQSxDQUFBbGMsRUFBQSxDQUFBcEMsQ0FBQSxDQUFBQyxDQUFBLENBQUFzZixDQUFBLENBQUFDLEtBQUEsRUFDQSxFQUFBbkIsRUFBQSxFQUNBbmxCLEVBQUEsQ0FBQW1rQixXQUFBLENBQUF2TCxHQUFBLENBQUExUCxFQUFBLENBQUFzUixJQUFBLEVBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0F4YSxFQUFBLENBQUF3bUIsV0FBQSxVQUFBTCxnQkFBQSxDQUFBL2hCLFFBQUEsQ0FBQTBDLENBQUEsQ0FBQUMsQ0FBQSxDQUFBc2YsQ0FBQSxDQUFBQyxLQUFBLEVBQ0EsSUFBQTVYLElBQUEsUUFBQXlYLGdCQUFBLFlBQUE1TSxDQUFBLENBQUE0TSxnQkFBQSxFQUFBNU0sQ0FBQSxDQUNBLElBQUF1SCxHQUFBLFFBQUFxRixnQkFBQSxZQUFBQSxnQkFBQSxDQUFBL2hCLFFBQUEsQ0FDQSxJQUFBMGMsR0FBQSxFQUNBLE9BQ0EsQ0FFQSxJQUFBNVgsRUFBQSxDQUFBd0YsSUFBQSxDQUFBN0ssYUFBQSxDQUFBaWQsR0FBQSxFQUNBLElBQUE1WCxFQUFBLEVBQ0EsT0FDQSxDQUVBO0FBQ0EsR0FBQXZILE1BQUEsQ0FBQUMsUUFBQSxDQUFBa0YsQ0FBQSxHQUFBQyxDQUFBLEdBQUE0VCxTQUFBLEVBQUEwTCxDQUFBLEdBQUExTCxTQUFBLEVBQ0EsT0FBQTNhLEVBQUEsQ0FBQWlsQixVQUFBLENBQUEvYixFQUFBLENBQUFwQyxDQUFBLEVBQ0EsQ0FDQTtBQUNBOUcsRUFBQSxDQUFBb2xCLGNBQUEsQ0FBQWxjLEVBQUEsQ0FBQXBDLENBQUEsQ0FBQUMsQ0FBQSxDQUFBc2YsQ0FBQSxDQUFBQyxLQUFBLEVBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXRtQixFQUFBLENBQUF5bUIscUJBQUEsVUFBQXZkLEVBQUEsQ0FBQXBELElBQUEsRUFDQUEsSUFBQSxDQUFBQSxJQUFBLEtBQ0E5RixFQUFBLENBQUFvbEIsY0FBQSxDQUNBbGMsRUFBQSxDQUNBdkgsTUFBQSxDQUFBQyxRQUFBLENBQUFrRSxJQUFBLENBQUF1ZixLQUFBLEVBQUF2ZixJQUFBLENBQUF1ZixLQUFBLEdBQ0ExakIsTUFBQSxDQUFBQyxRQUFBLENBQUFrRSxJQUFBLENBQUF3ZixLQUFBLEVBQUF4ZixJQUFBLENBQUF3ZixLQUFBLEtBQ0EzakIsTUFBQSxDQUFBQyxRQUFBLENBQUFrRSxJQUFBLENBQUF5ZixNQUFBLEVBQUF6ZixJQUFBLENBQUF5ZixNQUFBLEtBQ0F6ZixJQUFBLENBQUF3Z0IsS0FDQSxFQUNBLEVBR0E7QUFDQTtBQUNBLElBQ0F0bUIsRUFBQSxDQUFBMG1CLGVBQUEsT0FDQSx5Q0FDQXpqQixZQUFBMEosT0FBQSxFQUNBLEtBQUFBLE9BQUEsQ0FBQUEsT0FBQSxDQUNBLENBRUEsNkJBQ0FnYSxLQUFBLEVBQ0EsQ0FFQSwwQkFDQXZSLFFBQUEsRUFDQSxDQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0EsSUFDQXBWLEVBQUEsQ0FBQWtmLGdCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFqTyxPQUFBdEUsT0FBQSxDQUFBekQsRUFBQSxFQUVBLElBQUFBLEVBQUEsRUFDQSxPQUNBLENBQ0EsTUFBQW1MLFNBQUEsQ0FBQW5MLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsc0JBRUE7QUFDQSxJQUFBZ1EsT0FBQSxDQUFBMU0sRUFBQSxDQUFBckYsYUFBQSxhQUFBL0QsSUFBQSxDQUFBd1YsWUFBQSxDQUFBQyxTQUFBLENBQUFLLE9BQUEsSUFDQSxJQUFBQSxPQUFBLEVBQ0FBLE9BQUEsQ0FBQTlWLElBQUEsQ0FBQXFVLHdCQUFBLENBQUE2QixjQUFBLHFDQUNBOU0sRUFBQSxDQUFBMGQsT0FBQSxDQUFBaFIsT0FBQSxFQUNBLENBRUE7QUFDQSxJQUFBQSxPQUFBLENBQUEvUixhQUFBLDRCQUNBLE1BQUFxSixTQUFBLENBQUFtSCxTQUFBLHFFQUNBdUIsT0FBQSxDQUFBa0MsV0FBQSxDQUNBaFksSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQTZCLGNBQUEsUUFBQTlJLFNBQUEsaURBQ0EsRUFDQSxDQUVBO0FBQ0EsSUFBQTBJLE9BQUEsQ0FBQS9SLGFBQUEsNkJBQ0EsTUFBQWdqQixZQUFBLENBQUEvbUIsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQTZCLGNBQUEsMEZBQ0E2USxZQUFBLENBQUF4ZCxJQUFBLFVBQ0F3ZCxZQUFBLENBQUF2TSxLQUFBLGlCQUNBdU0sWUFBQSxDQUFBQyxPQUFBLENBQUEvUCxDQUFBLEdBQ0FBLENBQUEsQ0FBQXdNLGNBQUEsR0FDQTtBQUNBNVcsT0FBQSxDQUFBK0gsWUFBQSxDQUFBeEwsRUFBQSxFQUFBNmQsY0FBQSxRQUVBO0FBQ0FDLDZCQUFBLENBQ0Esc0JBQ0EsQ0FDQUMsUUFBQSx1QkFDQUMsTUFBQSxxQkFDQSxDQUNBLEVBRUE7QUFDQSxNQUFBbkwsR0FBQSxDQUFBdFcsUUFBQSxDQUFBQyxjQUFBLHdCQUNBLEdBQUFxVyxHQUFBLEVBQ0FBLEdBQUEsQ0FBQWdMLGNBQUEsRUFBQUksUUFBQSxVQUFBQyxLQUFBLGFBQ0E7QUFDQXpYLFVBQUEsTUFDQSxNQUFBMFgsU0FBQSxDQUFBdEwsR0FBQSxDQUFBbFksYUFBQSxtRkFDQXdqQixTQUFBLEVBQUFDLEtBQUEsS0FDQSxPQUNBLENBQ0EsRUFFQTFSLE9BQUEsQ0FBQWtDLFdBQUEsQ0FBQStPLFlBQUEsRUFDQSxDQUVBalIsT0FBQSxDQUFBOVEsWUFBQSxtQkFDQThRLE9BQUEsQ0FBQTlRLFlBQUEsY0FBQW9FLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEscURBRUEsT0FBQWdRLE9BQUEsQ0FDQSxDQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBNVYsRUFBQSxDQUFBdW5CLHFCQUFBLE9BRUEsOERBQ0EsT0FBQUMsZ0JBQUFqaEIsR0FBQSxFQUNBLE1BQUE5RixDQUFBLENBQUFnbkIsZ0JBQUEsQ0FBQWxoQixHQUFBLEVBQUFtaEIsZ0JBQUEsd0JBQ0EsTUFBQWptQixDQUFBLENBQUFDLFVBQUEsQ0FBQWpCLENBQUEsRUFDQSxPQUFBa0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQU8sSUFBQSxDQUFBRCxHQUFBLEdBQUFOLENBQUEsSUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBa21CLDRCQUFBaGIsT0FBQSxDQUFBN0UsR0FBQSxDQUFBRCxPQUFBLEVBQ0EsTUFBQTFCLElBQUEsQ0FBQUMsS0FBQSxDQUFBQyxJQUFBLENBQUF5QixHQUFBLENBQUF4RCxnQkFBQSxnQ0FDQSxNQUFBN0MsQ0FBQSxDQUFBMEUsSUFBQSxDQUFBNUIsTUFBQSxDQUNBLElBQUE5QyxDQUFBLGFBQ0EsSUFBQTJFLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQUgsT0FBQSxHQUFBQSxPQUFBLENBQUF0RCxNQUFBLEdBQUE5QyxDQUFBLGFBRUE7QUFDQSxNQUFBdUYsRUFBQSxDQUFBMkYsT0FBQSxDQUFBNUcsZUFBQSxDQUNBLE1BQUE2aEIsR0FBQSxDQUFBamIsT0FBQSxDQUFBa2IsTUFBQSxDQUFBN2hCLGdDQUFBLENBQUE4QixHQUFBLENBQUFkLEVBQUEsRUFDQSxNQUFBOGdCLFFBQUEsQ0FBQUYsR0FBQSxDQUFBMWdCLFNBQUE7QUFDQSxNQUFBNmdCLEtBQUEsQ0FBQWpnQixHQUFBLENBQUErSixxQkFBQSxHQUFBTyxLQUFBLENBQ0EsTUFBQTRWLE9BQUEsQ0FBQUQsS0FBQSxFQUFBRCxRQUFBLE1BRUE7QUFDQSxNQUFBRyxNQUFBLENBQUE5aEIsSUFBQSxDQUFBRyxHQUFBLENBQUErZixDQUFBLEdBQ0EsTUFBQTZCLEtBQUEsQ0FBQWxvQixFQUFBLENBQUF1bkIscUJBQUEsQ0FBQUMsZUFBQSxDQUFBbkIsQ0FBQSxFQUNBLEdBQUEyQixPQUFBLGFBQ0EsT0FBQUUsS0FBQSxDQUFBRixPQUFBLENBQUFGLFFBQUEsQ0FDQSxHQUVBO0FBQ0EsTUFBQUssTUFBQSxDQUFBRixNQUFBLENBQUFwaEIsTUFBQSxFQUFBQyxDQUFBLENBQUFDLENBQUEsR0FBQUQsQ0FBQSxDQUFBQyxDQUFBLElBQ0EsR0FBQW9oQixNQUFBLENBQUFMLFFBQUEsT0FDQTtBQUNBLENBRUE7QUFDQSxNQUFBTSxJQUFBLENBQUF2Z0IsT0FBQSxDQUFBaEIsTUFBQSxFQUFBQyxDQUFBLENBQUFqSCxDQUFBLEdBQUFpSCxDQUFBLEVBQUFuRixNQUFBLENBQUE5QixDQUFBLFVBQUE0QixDQUFBLENBQ0EsTUFBQTRtQixTQUFBLENBQUF4Z0IsT0FBQSxDQUFBdkIsR0FBQSxDQUFBekcsQ0FBQSxHQUFBOEIsTUFBQSxDQUFBOUIsQ0FBQSxNQUFBdW9CLElBQUEsQ0FBQU4sUUFBQSxFQUVBO0FBQ0E7QUFDQSxNQUFBUSxNQUFBLEtBQUFsaUIsS0FBQSxDQUFBM0UsQ0FBQSxFQUFBaUcsSUFBQSxRQUNBLElBQUE2Z0IsU0FBQSxHQUNBLFFBQUFoaEIsQ0FBQSxHQUFBQSxDQUFBLENBQUE5RixDQUFBLENBQUE4RixDQUFBLElBQ0EsR0FBQThnQixTQUFBLENBQUE5Z0IsQ0FBQSxFQUFBMGdCLE1BQUEsQ0FBQTFnQixDQUFBLEdBQ0ErZ0IsTUFBQSxDQUFBL2dCLENBQUEsT0FDQWdoQixTQUFBLEVBQUFOLE1BQUEsQ0FBQTFnQixDQUFBLEVBQ0EsQ0FDQSxDQUVBLElBQUFpaEIsU0FBQSxDQUFBVixRQUFBLENBQUFTLFNBQUEsQ0FDQSxNQUFBRSxPQUFBLElBQ0EsSUFBQUMsYUFBQSxHQUNBLFFBQUFuaEIsQ0FBQSxHQUFBQSxDQUFBLENBQUE5RixDQUFBLENBQUE4RixDQUFBLElBQ0EsSUFBQStnQixNQUFBLENBQUEvZ0IsQ0FBQSxHQUNBa2hCLE9BQUEsQ0FBQTFILElBQUEsQ0FBQXhaLENBQUEsRUFDQW1oQixhQUFBLEVBQUFMLFNBQUEsQ0FBQTlnQixDQUFBLEVBQ0EsQ0FDQSxDQUVBLE1BQUFvaEIsTUFBQSxLQUFBdmlCLEtBQUEsQ0FBQTNFLENBQUEsRUFBQWlHLElBQUEsSUFDQTtBQUNBLFFBQUFILENBQUEsR0FBQUEsQ0FBQSxDQUFBOUYsQ0FBQSxDQUFBOEYsQ0FBQSxJQUNBLEdBQUErZ0IsTUFBQSxDQUFBL2dCLENBQUEsRUFBQW9oQixNQUFBLENBQUFwaEIsQ0FBQSxFQUFBMGdCLE1BQUEsQ0FBQTFnQixDQUFBLEVBQ0EsQ0FFQSxHQUFBa2hCLE9BQUEsQ0FBQWxrQixNQUFBLE1BQ0E7QUFDQTtBQUNBLE9BQUFva0IsTUFBQSxDQUNBLENBRUEsR0FBQUgsU0FBQSxLQUNBO0FBQ0E7QUFDQSxPQUFBRyxNQUFBLENBQ0EsQ0FFQSxHQUFBRCxhQUFBLEtBQ0E7QUFDQSxNQUFBamhCLElBQUEsQ0FBQStnQixTQUFBLENBQUFDLE9BQUEsQ0FBQWxrQixNQUFBLENBQ0Fra0IsT0FBQSxDQUFBbmhCLE9BQUEsQ0FBQUMsQ0FBQSxFQUFBb2hCLE1BQUEsQ0FBQXBoQixDQUFBLEVBQUFFLElBQUEsRUFDQSxPQUFBa2hCLE1BQUEsQ0FDQSxDQUVBO0FBQ0FGLE9BQUEsQ0FBQW5oQixPQUFBLENBQUFDLENBQUEsR0FDQW9oQixNQUFBLENBQUFwaEIsQ0FBQSxFQUFBaWhCLFNBQUEsRUFBQUgsU0FBQSxDQUFBOWdCLENBQUEsRUFBQW1oQixhQUFBLEVBQ0EsR0FDQSxPQUFBQyxNQUFBLENBQ0EsQ0FFQSx3RkFDQSxPQUFBQyw2QkFBQWpjLE9BQUEsQ0FBQWtjLFVBQUEsQ0FBQWhoQixPQUFBLEVBQ0EsTUFBQUMsR0FBQSxDQUFBK2dCLFVBQUEsQ0FBQWhsQixhQUFBLDRCQUNBLElBQUFpRSxHQUFBLGNBRUEsTUFBQWdoQixNQUFBLENBQUE5b0IsRUFBQSxDQUFBdW5CLHFCQUFBLENBQUFJLDJCQUFBLENBQUFoYixPQUFBLENBQUE3RSxHQUFBLENBQUFELE9BQUEsRUFDQSxJQUFBaWhCLE1BQUEsRUFDQW5jLE9BQUEsRUFBQW9jLFNBQUEsMEVBQ0EsYUFDQSxDQUVBO0FBQ0FwYyxPQUFBLENBQUFrYixNQUFBLENBQUF4Z0Isa0JBQUEsQ0FBQVMsR0FBQSxDQUFBZ2hCLE1BQUEsRUFDQSxZQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFFLG1CQUFBcmMsT0FBQSxDQUFBa2MsVUFBQSxDQUFBSSxPQUFBLEVBRUEsSUFBQXRjLE9BQUEsR0FBQWtjLFVBQUEsR0FBQUksT0FBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBbmhCLEdBQUEsQ0FBQStnQixVQUFBLENBQUFobEIsYUFBQSw0QkFDQSxJQUFBaUUsR0FBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBM0IsSUFBQSxDQUFBMkIsR0FBQSxDQUFBeEQsZ0JBQUEsK0JBQUFDLE1BQUEsSUFFQTtBQUNBMGtCLE9BQUEsQ0FBQTNTLFNBQUEsSUFFQTtBQUNBMlMsT0FBQSxDQUFBblIsV0FBQSxDQUNBOVgsRUFBQSxDQUFBdW5CLHFCQUFBLENBQUEyQixVQUFBLENBQUF2YyxPQUFBLENBQUFrYyxVQUFBLENBQUF6aUIsS0FBQSxDQUFBRCxJQUFBLEVBQUF1QixJQUFBLFlBQ0EsRUFFQTtBQUNBLE1BQUF5aEIsT0FBQSxDQUFBeGMsT0FBQSxDQUFBa2IsTUFBQSxDQUFBM2YseUJBQUEsQ0FBQS9CLElBQUEsRUFDQWdqQixPQUFBLENBQUE3aEIsT0FBQSxDQUFBTyxPQUFBLEdBQ0FvaEIsT0FBQSxDQUFBblIsV0FBQSxDQUNBOVgsRUFBQSxDQUFBdW5CLHFCQUFBLENBQUEyQixVQUFBLENBQUF2YyxPQUFBLENBQUFrYyxVQUFBLENBQUFoaEIsT0FBQSxNQUNBLEVBQ0EsR0FFQTtBQUNBLE1BQUF1aEIsU0FBQSxDQUFBM2pCLFFBQUEsQ0FBQTJRLGFBQUEsV0FDQWdULFNBQUEsQ0FBQS9mLElBQUEsVUFDQStmLFNBQUEsQ0FBQS9TLFNBQUEseUJBQ0ErUyxTQUFBLENBQUF2UixXQUFBLFdBQ0F1UixTQUFBLENBQUE5TyxLQUFBLFVBQUFuVSxJQUFBLGVBQ0FpakIsU0FBQSxDQUFBN2MsZ0JBQUEsY0FDQSxNQUFBOGMsT0FBQSxDQUFBbGpCLElBQUEsYUFBQUEsSUFBQSw4QkFDQSxNQUFBbWpCLElBQUEsQ0FBQUMsTUFBQSxVQUFBcGpCLElBQUEsMkNBQUFrakIsT0FBQSxFQUNBLEdBQUFDLElBQUEsY0FDQSxNQUFBemhCLE9BQUEsQ0FBQThFLE9BQUEsQ0FBQWtiLE1BQUEsQ0FBQXZmLGFBQUEsQ0FBQWdoQixJQUFBLEVBQ0EsR0FBQXpoQixPQUFBLENBQUF0RCxNQUFBLEdBQUE0QixJQUFBLEVBQ0FnRixLQUFBLHlCQUFBaEYsSUFBQSxhQUNBLE9BQ0EsQ0FDQTtBQUNBO0FBQ0E7QUFDQSxJQUFBbkcsRUFBQSxDQUFBdW5CLHFCQUFBLENBQUFxQiw0QkFBQSxDQUFBamMsT0FBQSxDQUFBa2MsVUFBQSxDQUFBaGhCLE9BQUEsR0FDQSxPQUNBLENBQ0FvaEIsT0FBQSxDQUFBM2tCLGdCQUFBLDJCQUFBZ0QsT0FBQSxDQUFBK2UsQ0FBQSxFQUFBQSxDQUFBLENBQUF0ZSxTQUFBLENBQUE4RyxNQUFBLGVBQ0F1YSxTQUFBLENBQUFyaEIsU0FBQSxDQUFBNkcsR0FBQSxjQUNBLEdBQ0FxYSxPQUFBLENBQUFuUixXQUFBLENBQUFzUixTQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFGLFdBQUF2YyxPQUFBLENBQUFrYyxVQUFBLENBQUFoaEIsT0FBQSxDQUFBcUQsS0FBQSxPQUVBLE1BQUFzZSxHQUFBLENBQUEvakIsUUFBQSxDQUFBMlEsYUFBQSxXQUNBb1QsR0FBQSxDQUFBbmdCLElBQUEsVUFDQW1nQixHQUFBLENBQUFuVCxTQUFBLHlCQUVBLE1BQUFpRSxLQUFBLENBQUFwUCxLQUFBLEVBQUF5QixPQUFBLENBQUFrYixNQUFBLENBQUExZixtQkFBQSxDQUFBTixPQUFBLEVBQ0EyaEIsR0FBQSxDQUFBbFAsS0FBQSxDQUFBQSxLQUFBLENBRUE7QUFDQSxNQUFBbVAsR0FBQSxDQUFBaGtCLFFBQUEsQ0FBQTJRLGFBQUEsUUFDQXFULEdBQUEsQ0FBQXBULFNBQUEsNkJBQ0EsTUFBQXBPLEdBQUEsQ0FBQUosT0FBQSxDQUFBaEIsTUFBQSxFQUFBQyxDQUFBLENBQUFDLENBQUEsR0FBQUQsQ0FBQSxFQUFBbkYsTUFBQSxDQUFBb0YsQ0FBQSxZQUNBYyxPQUFBLENBQUFQLE9BQUEsQ0FBQXpILENBQUEsR0FDQSxNQUFBNnBCLEdBQUEsQ0FBQWprQixRQUFBLENBQUEyUSxhQUFBLFNBQ0FzVCxHQUFBLENBQUFsakIsS0FBQSxDQUFBbWpCLElBQUEsZ0JBQUFob0IsTUFBQSxDQUFBOUIsQ0FBQSxNQUFBb0ksR0FBQSxNQUFBMmhCLE9BQUEsaUJBQ0FILEdBQUEsQ0FBQTNSLFdBQUEsQ0FBQTRSLEdBQUEsRUFDQSxHQUNBRixHQUFBLENBQUExUixXQUFBLENBQUEyUixHQUFBLEVBRUEsTUFBQUksR0FBQSxDQUFBcGtCLFFBQUEsQ0FBQTJRLGFBQUEsU0FDQXlULEdBQUEsQ0FBQXhULFNBQUEsK0JBQ0F3VCxHQUFBLENBQUFoUyxXQUFBLENBQUEzTSxLQUFBLEVBQUF5QixPQUFBLENBQUFrYixNQUFBLENBQUExZixtQkFBQSxDQUFBTixPQUFBLEVBQ0EyaEIsR0FBQSxDQUFBMVIsV0FBQSxDQUFBK1IsR0FBQSxFQUVBTCxHQUFBLENBQUFqZCxnQkFBQSxjQUNBO0FBQ0E7QUFFQTtBQUNBLElBQUF2TSxFQUFBLENBQUF1bkIscUJBQUEsQ0FBQXFCLDRCQUFBLENBQUFqYyxPQUFBLENBQUFrYyxVQUFBLENBQUFoaEIsT0FBQSxHQUNBO0FBQ0EsQ0FFQTJoQixHQUFBLENBQUFNLGFBQUEsRUFBQXhsQixnQkFBQSwyQkFBQWdELE9BQUEsQ0FBQStlLENBQUEsRUFBQUEsQ0FBQSxDQUFBdGUsU0FBQSxDQUFBOEcsTUFBQSxlQUNBMmEsR0FBQSxDQUFBemhCLFNBQUEsQ0FBQTZHLEdBQUEsY0FDQSxHQUVBLE9BQUE0YSxHQUFBLENBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQSxJQUNBeHBCLEVBQUEsQ0FBQStwQiw2QkFBQSxlQUFBL3BCLEVBQUEsQ0FBQTBtQixlQUFBLENBRUFDLEtBQUEsRUFFQSxLQUFBcUQsYUFBQSxNQUNBLEtBQUFyZCxPQUFBLENBQUErSCxZQUFBLE1BQUFBLFlBQUEsQ0FBQVosSUFBQSxPQUNBLEtBQUFuSCxPQUFBLENBQUFzZCxrQkFBQSxNQUFBQSxrQkFBQSxDQUFBblcsSUFBQSxPQUNBLEtBQUFvVyxTQUFBLE1BQUFDLFFBQUEsQ0FBQXJXLElBQUEsT0FFQTtBQUNBLEtBQUFuSCxPQUFBLENBQUF5ZCxXQUFBLENBQUFsaEIsRUFBQSxHQUNBLElBQUFBLEVBQUEsRUFDQSxZQUNBLENBQ0EsTUFBQW5DLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBMGQsUUFBQSxDQUFBdGpCLENBQUEsQ0FBQXVqQix5QkFBQSxHQUFBcGhCLEVBQUEsUUFDQUEsRUFBQSxDQUFBMkYsTUFBQSxHQUNBO0FBQ0E5SCxDQUFBLENBQUFnTixHQUFBLEVBQUEvSCxJQUFBLEdBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFNLFlBQUEsRUFBQXpDLEVBQUEsQ0FBQTNGLEVBQUEsQ0FBQTJGLEVBQUEsRUFBQXZGLE9BQUEsRUFBQUosRUFBQSxDQUFBSyxHQUFBLENBQUFzRixFQUFBLEVBQUF2RixPQUFBLEVBQUFDLEdBQUEsR0FDQW1ELENBQUEsQ0FBQStDLEtBQUEsRUFBQUQsaUJBQUEsS0FDQTtBQUNBOUMsQ0FBQSxDQUFBZ04sR0FBQSxFQUFBL0gsSUFBQSxHQUFBbE0sSUFBQSxDQUFBdUwsZUFBQSxDQUFBTyxnQkFBQSxFQUFBb0ksTUFBQSxVQUFBOUssRUFBQSxHQUNBO0FBQ0E2RSxxQkFBQSxNQUNBO0FBQ0FoSCxDQUFBLENBQUEyTixZQUFBLEdBQUEyVixRQUFBLFFBQUF0RCxjQUFBLEdBQUFzRCxRQUFBLEdBQ0EsR0FDQSxPQUFBQSxRQUFBLENBQ0EsRUFDQSxLQUFBMWQsT0FBQSxDQUFBb0gsR0FBQSxDQUFBMUgsRUFBQSxDQUFBdk0sSUFBQSxDQUFBdUwsZUFBQSxDQUFBSSxlQUFBLE1BQUF5ZSxTQUFBLEVBQ0EsS0FBQXZkLE9BQUEsQ0FBQW9ILEdBQUEsQ0FBQTFILEVBQUEsQ0FBQXZNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQVEsZ0JBQUEsTUFBQXFlLFNBQUEsRUFDQTtBQUNBLEtBQUFLLGdCQUFBLE1BQUFDLG9CQUFBLENBQUExVyxJQUFBLE9BQ0EsS0FBQW5ILE9BQUEsQ0FBQXpKLGVBQUEsQ0FBQXFKLGdCQUFBLGNBQUFnZSxnQkFBQSxPQUNBLENBRUFuVixRQUFBLEVBQ0EsS0FBQXpJLE9BQUEsQ0FBQW9ILEdBQUEsQ0FBQXZILEdBQUEsQ0FBQTFNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQUksZUFBQSxNQUFBeWUsU0FBQSxFQUVBLFFBQUFLLGdCQUFBLEVBQ0EsS0FBQTVkLE9BQUEsQ0FBQXpKLGVBQUEsQ0FBQXVKLG1CQUFBLGNBQUE4ZCxnQkFBQSxPQUNBLEtBQUFBLGdCQUFBLE1BQ0EsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMscUJBQUF6VCxDQUFBLEVBQ0EsTUFBQXJJLElBQUEsTUFBQS9CLE9BQUEsQ0FBQXpKLGVBQUEsQ0FDQSxJQUFBd0wsSUFBQSxRQUVBO0FBQ0EsTUFBQStiLE1BQUEsRUFDQSw4QkFDQSwyQkFDQSx5QkFDQSw4QkFDQSwyQkFDQSw2QkFDQSw0QkFDQSxDQUFBcGlCLElBQUEsTUFFQSxHQUFBME8sQ0FBQSxDQUFBdU0sTUFBQSxDQUFBOVIsT0FBQSxDQUFBaVosTUFBQSxHQUNBO0FBQ0EsQ0FFQTtBQUNBLElBQUFDLEdBQUEsQ0FBQTNULENBQUEsQ0FBQXVNLE1BQUEsQ0FBQTlSLE9BQUEsR0FDQSxHQUFBMVIsSUFBQSxDQUFBd1YsWUFBQSxDQUFBQyxTQUFBLENBQUFHLFVBQUEsS0FBQTVWLElBQUEsQ0FBQXdWLFlBQUEsQ0FBQUMsU0FBQSxDQUFBWCxPQUFBLHFCQUNBLEVBRUEsSUFBQThWLEdBQUEsR0FBQWhjLElBQUEsQ0FBQTlJLFFBQUEsQ0FBQThrQixHQUFBLEdBQ0EsS0FBQWhXLFlBQUE7QUFDQTtBQUNBLENBRUE7QUFDQSxJQUFBaVcsaUJBQUEsTUFDQSxHQUFBRCxHQUFBLENBQUEzaUIsU0FBQSxDQUFBbkMsUUFBQSxzQkFDQSxNQUFBa0MsR0FBQSxDQUFBNGlCLEdBQUEsQ0FBQWxaLE9BQUEsbUJBQ0EsTUFBQXJMLElBQUEsQ0FBQTJCLEdBQUEsQ0FBQTFCLEtBQUEsQ0FBQUMsSUFBQSxDQUFBeUIsR0FBQSxDQUFBeEQsZ0JBQUEsbUNBQ0EsTUFBQXNiLEdBQUEsQ0FBQTVkLElBQUEsQ0FBQUQsR0FBQSxHQUFBb0UsSUFBQSxDQUFBeWtCLE9BQUEsQ0FBQUYsR0FBQSxHQUNBLE1BQUFHLEdBQUEsQ0FBQUgsR0FBQSxDQUFBbFosT0FBQSx1QkFDQSxHQUFBcVosR0FBQSxFQUNBRixpQkFBQSxDQUFBcnFCLE1BQUEsQ0FBQXNmLEdBQUE7QUFDQTtBQUNBaUwsR0FBQSxDQUFBbG5CLE9BQUEsQ0FBQW1uQixxQkFBQSxDQUFBSCxpQkFBQSxDQUNBO0FBQ0FELEdBQUEsQ0FBQUcsR0FBQSxDQUNBO0FBQ0EsR0FBQTdxQixFQUFBLEVBQUFBLEVBQUEsQ0FBQStxQixzQkFBQSxFQUFBL3FCLEVBQUEsQ0FBQStxQixzQkFBQSxDQUFBQyxxQkFBQSxFQUNBaHJCLEVBQUEsQ0FBQStxQixzQkFBQSxDQUFBQyxxQkFBQSxDQUFBSCxHQUFBLENBQUFGLGlCQUFBLEVBQ0EsQ0FDQSxDQUNBLENBRUE7QUFDQSxLQUFBalcsWUFBQSxDQUFBZ1csR0FBQSxFQUNBM1QsQ0FBQSxDQUFBeU0sZUFBQSxHQUVBO0FBQ0EsR0FBQW1ILGlCQUFBLEVBQ0EsQ0FBQTdjLE1BQUEsQ0FBQUMscUJBQUEsRUFBQTRCLFVBQUEsYUFDQSxJQUNBLE1BQUFvTSxHQUFBLENBQUF0VyxRQUFBLENBQUFDLGNBQUEsd0JBQ0EsTUFBQXVsQixJQUFBLENBQUFsUCxHQUFBLEVBQUFBLEdBQUEsQ0FBQWxZLGFBQUEscURBQ0EsR0FBQW9uQixJQUFBLEVBQUFuZCxNQUFBLENBQUFvZCxZQUFBLFNBQUFwZCxNQUFBLENBQUFvZCxZQUFBLENBQUFDLFVBQUEsZUFDQXJkLE1BQUEsQ0FBQW9kLFlBQUEsQ0FBQUMsVUFBQSxDQUFBRixJQUFBLENBQUFOLGlCQUFBLEVBQ0EsQ0FDQSxPQUFBMVAsRUFBQSxFQUNBLENBQ0EsS0FFQTtBQUNBK0wsNkJBQUEsQ0FDQSwyQkFDQSxDQUNBblgsS0FBQSxpQkFDQXViLE9BQUEsQ0FBQVQsaUJBQ0EsQ0FDQSxFQUNBLENBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQWpXLGFBQUFqUSxRQUFBLEVBQUFzaUIsY0FBQSxZQUNBLE1BQUFyWSxJQUFBLE1BQUEvQixPQUFBLENBQUF6SixlQUFBLENBQ0EsTUFBQW1vQixNQUFBLE1BQUFwQixrQkFBQTtBQUVBO0FBQ0EsR0FBQXhsQixRQUFBLEdBQUFpSyxJQUFBLENBQUE5SSxRQUFBLENBQUFuQixRQUFBLEdBQ0FBLFFBQUE7QUFDQSxDQUVBO0FBQ0EsR0FDQTRtQixNQUFBLEVBQUFBLE1BQUEsR0FBQTVtQixRQUFBLEVBQ0E0bUIsTUFBQSxDQUFBdGpCLFNBQUEsRUFBQW5DLFFBQUEsdUJBQ0E1RixFQUFBLEVBQUErcUIsc0JBQUEsRUFBQU8sdUJBQUEsQ0FDQSxDQUNBdHJCLEVBQUEsQ0FBQStxQixzQkFBQSxDQUFBTyx1QkFBQSxDQUFBRCxNQUFBLEVBQ0EsQ0FFQTtBQUNBLEdBQUFBLE1BQUEsRUFBQUEsTUFBQSxHQUFBNW1CLFFBQUEsRUFBQTRtQixNQUFBLENBQUF0akIsU0FBQSxFQUFBbkMsUUFBQSxxQkFDQXlsQixNQUFBLENBQUExbkIsT0FBQSxDQUFBd1gsUUFBQSxLQUNBa1EsTUFBQSxDQUFBMW5CLE9BQUEsQ0FBQXVYLEtBQUEsS0FDQSxDQUVBeE0sSUFBQSxDQUFBcEssZ0JBQUEsaUJBQUFnRCxPQUFBLENBQUE3RixDQUFBLEdBQ0FBLENBQUEsQ0FBQXNHLFNBQUEsQ0FBQThHLE1BQUEsZ0JBQ0EsR0FDQSxJQUFBcEssUUFBQSxFQUNBLE1BQUE4bUIsSUFBQSxNQUFBdkIsYUFBQSxPQUNBLEtBQUFBLGFBQUEsTUFDQSxLQUFBcmQsT0FBQSxDQUFBNmUsU0FBQSxFQUFBblcsS0FBQSxLQUNBM0csSUFBQSxDQUFBM0csU0FBQSxDQUFBOEcsTUFBQSxrQkFDQSxLQUFBbEMsT0FBQSxDQUFBb0gsR0FBQSxDQUFBL0gsSUFBQSxDQUFBbE0sSUFBQSxDQUFBdUwsZUFBQSxDQUFBSSxlQUFBLEVBQUFnZ0IsUUFBQSxDQUFBRixJQUFBLENBQUFHLE1BQUEsYUFFQTtBQUNBMUUsNkJBQUEsQ0FDQSxzQkFDQSxDQUNBQyxRQUFBLDZCQUNBQyxNQUFBLG1CQUNBLENBQ0EsRUFFQSxPQUNBLENBQ0F6aUIsUUFBQSxDQUFBc0QsU0FBQSxDQUFBNkcsR0FBQSxnQkFDQSxLQUFBb2IsYUFBQSxDQUFBdmxCLFFBQUEsQ0FBQVMsWUFBQSxtQkFFQTtBQUNBLEdBQUFULFFBQUEsQ0FBQXNELFNBQUEsQ0FBQW5DLFFBQUEsd0JBQUFuQixRQUFBLENBQUFkLE9BQUEsQ0FBQTBGLElBQUEsRUFDQTVFLFFBQUEsQ0FBQWQsT0FBQSxDQUFBMEYsSUFBQSxXQUNBLENBRUEsR0FBQTBkLGNBQUEsRUFDQXRpQixRQUFBLENBQUFzaUIsY0FBQSxFQUFBSSxRQUFBLFVBQUFDLEtBQUEsWUFDQSxDQUNBLEtBQUF6YSxPQUFBLENBQUE2ZSxTQUFBLEVBQUFHLGFBQUEsR0FBQWxuQixRQUFBLEVBRUE7QUFDQSxJQUNBLE1BQUFzWCxHQUFBLENBQUF0VyxRQUFBLENBQUFDLGNBQUEseUJBQ0FELFFBQUEsQ0FBQTVCLGFBQUEseUJBQ0EsR0FBQWtZLEdBQUEsRUFDQS9iLEVBQUEsQ0FBQTRyQixrQkFBQSxFQUFBQyxJQUFBLEdBQUE5UCxHQUFBO0FBQ0EvYixFQUFBLENBQUE4ckIsb0JBQUEsRUFBQUMsT0FBQSxHQUFBaFEsR0FBQTtBQUNBLENBQ0EsT0FBQXhaLENBQUEsRUFDQSxDQUVBO0FBQ0EsR0FBQWtDLFFBQUEsQ0FBQXNELFNBQUEsQ0FBQW5DLFFBQUEsdUJBQ0E1RixFQUFBLEVBQUErcUIsc0JBQUEsRUFBQUMscUJBQUEsRUFDQSxJQUFBdFIsQ0FBQSxDQUFBalYsUUFBQSxDQUFBZCxPQUFBLEVBQUFjLFFBQUEsQ0FBQWQsT0FBQSxDQUFBbW5CLHFCQUFBLENBQ0FybUIsUUFBQSxDQUFBZCxPQUFBLENBQUFtbkIscUJBQUEsS0FDQTlxQixFQUFBLENBQUErcUIsc0JBQUEsQ0FBQUMscUJBQUEsQ0FBQXZtQixRQUFBLENBQUFpVixDQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0EsR0FBQWpWLFFBQUEsRUFDQXpFLEVBQUEsQ0FBQWdzQix5QkFBQSxDQUFBQyx5QkFBQSxRQUFBdGYsT0FBQSxDQUFBbEksUUFBQSxFQUNBekUsRUFBQSxDQUFBZ3NCLHlCQUFBLENBQUFFLHlCQUFBLFFBQUF2ZixPQUFBLENBQUFsSSxRQUFBLEVBQ0EsQ0FFQTtBQUNBdWlCLDZCQUFBLENBQ0Esc0JBQ0EsQ0FDQUMsUUFBQSx1QkFDQUMsTUFBQSxxQkFDQSxDQUNBLEVBRUF4WSxJQUFBLENBQUEzRyxTQUFBLENBQUE2RyxHQUFBLGtCQUNBLEtBQUFqQyxPQUFBLENBQUFvSCxHQUFBLENBQUEvSCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFHLE1BQUEsRUFBQTVILEdBQUEsTUFBQW9tQixhQUFBLENBQUE5Z0IsRUFBQSxDQUFBekUsUUFBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUF6RyxRQUFBLEVBQUFaLGFBQUEsNEJBQUFnVSxXQUFBLEdBQUFwVCxRQUFBLENBQUFzRCxTQUFBLENBQUFuQyxRQUFBLHFDQUFBbkIsUUFBQSxFQUFBZCxPQUFBLEVBQUFKLEVBQUEsU0FDQSxLQUFBb0osT0FBQSxDQUFBb2MsU0FBQSxhQUFBN2QsS0FBQSxNQUNBLENBRUEsa0NBQ0ErZSxtQkFBQSxFQUNBLFNBQUFELGFBQUEsRUFDQSxZQUNBLENBQ0EsTUFBQW1DLFFBQUEsQ0FBQXJzQixJQUFBLENBQUFHLGlCQUFBLENBQUFPLDJCQUFBLE1BQUF3cEIsYUFBQSxFQUNBLFlBQUFyZCxPQUFBLENBQUF6SixlQUFBLENBQUFXLGFBQUEsK0JBQUFzb0IsUUFBQSxvQ0FBQUEsUUFBQSxNQUNBLENBRUEsOEJBQ0FoQyxTQUFBbEgsRUFBQSxFQUNBLE1BQUFtSixHQUFBLENBQUFuSixFQUFBLEVBQUFoWCxNQUFBLEVBQUF5ZixNQUFBLEVBQUF6SSxFQUFBLEVBQUF5SSxNQUFBLENBQ0EsR0FBQVUsR0FBQSxjQUNBLEtBQUExWCxZQUFBLE9BQ0EsQ0FDQSxDQUVBLEVBRUE7QUFDQTtBQUNBLElBQ0ExVSxFQUFBLENBQUFnc0IseUJBQUEsZUFBQWhzQixFQUFBLENBQUEwbUIsZUFBQSxDQUVBQyxLQUFBLEVBQ0EsS0FBQTBGLGlCQUFBLEdBQ0EsS0FBQUMsa0JBQUEsR0FDQSxLQUFBQyxpQ0FBQSxHQUNBLEtBQUFDLHFCQUFBLEdBQ0EsQ0FFQUgsa0JBQUEsRUFDQSxNQUFBdGxCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBOGYsTUFBQSxDQUFBQSxDQUFBLElBQ0EsVUFBQTNlLE1BQUEsQ0FBQTRlLGtCQUFBLGVBQ0EzbEIsQ0FBQSxDQUFBeWtCLFNBQUEsS0FBQWtCLGtCQUFBLENBQUFqbkIsUUFBQSxDQUFBQyxjQUFBLHdCQUFBcUIsQ0FBQSxFQUNBLEtBQUF1bEIsa0JBQUEsR0FDQTdtQixRQUFBLENBQUFnSCxtQkFBQSw0QkFBQWdnQixNQUFBLEVBQ0EsQ0FDQSxFQUNBO0FBQ0EsVUFBQTNlLE1BQUEsQ0FBQTRlLGtCQUFBLGVBQ0FELE1BQUEsR0FDQSxNQUNBMWxCLENBQUEsQ0FBQXlrQixTQUFBLEVBQ0FHLGNBQUEsRUFDQSxFQUFBdFcsTUFBQSxFQUNBLENBQ0EsRUFDQTVQLFFBQUEsQ0FBQThHLGdCQUFBLDRCQUFBa2dCLE1BQUEsRUFDQTljLFVBQUEsQ0FBQThjLE1BQUEsSUFDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRCxzQkFBQSxFQUNBLDZCQUNBLE1BQUFHLFFBQUEsQ0FBQTVWLENBQUEsR0FDQSxJQUNBLE1BQUE2VixPQUFBLENBQUE3VixDQUFBLEVBQUFBLENBQUEsQ0FBQTlLLE1BQUEsRUFBQThLLENBQUEsQ0FBQTlLLE1BQUEsQ0FBQTRELEtBQUEsQ0FDQSxNQUFBdWIsT0FBQSxDQUFBclUsQ0FBQSxFQUFBQSxDQUFBLENBQUE5SyxNQUFBLEVBQUE4SyxDQUFBLENBQUE5SyxNQUFBLENBQUFtZixPQUFBLENBQ0EsSUFBQXdCLE9BQUEsRUFDQSxPQUNBLENBRUEsTUFBQTdRLEdBQUEsQ0FBQXRXLFFBQUEsQ0FBQUMsY0FBQSx5QkFBQUQsUUFBQSxDQUFBNUIsYUFBQSx5QkFDQSxJQUFBa1ksR0FBQSxFQUNBLE9BQ0EsQ0FFQSxHQUFBNlEsT0FBQSxvQkFDQTtBQUNBLE1BQUFDLElBQUEsQ0FBQTlRLEdBQUEsQ0FBQWxZLGFBQUEscUNBQUFrWSxHQUFBLENBQUFsWSxhQUFBLCtDQUNBLEdBQUFncEIsSUFBQSxFQUNBO0FBQ0EsTUFBQUMsVUFBQSxDQUFBRCxJQUFBLENBQUFyYixPQUFBLHVCQUFBcWIsSUFBQSxDQUFBcmIsT0FBQSwyQkFDQSxHQUFBc2IsVUFBQSxHQUFBQSxVQUFBLENBQUEva0IsU0FBQSxDQUFBbkMsUUFBQSxhQUNBa25CLFVBQUEsQ0FBQS9rQixTQUFBLENBQUE2RyxHQUFBLFlBQ0E7QUFDQSxNQUFBbWUsVUFBQSxDQUFBRCxVQUFBLENBQUFqcEIsYUFBQSxvQkFDQSxHQUFBa3BCLFVBQUEsRUFDQUEsVUFBQSxDQUFBam9CLFlBQUEseUJBQ0EsQ0FDQSxDQUVBO0FBQ0EsR0FBQXNtQixPQUFBLEVBQ0EsTUFBQUgsSUFBQSxDQUFBNEIsSUFBQSxDQUFBaHBCLGFBQUEscUJBQ0EsR0FBQW9uQixJQUFBLEVBQUFuZCxNQUFBLENBQUFvZCxZQUFBLFNBQUFwZCxNQUFBLENBQUFvZCxZQUFBLENBQUFDLFVBQUEsZUFDQXJkLE1BQUEsQ0FBQW9kLFlBQUEsQ0FBQUMsVUFBQSxDQUFBRixJQUFBLENBQUEzcUIsTUFBQSxDQUFBOHFCLE9BQUEsR0FDQSxDQUNBLENBRUE7QUFDQSxJQUNBO0FBQ0E7QUFBQSxDQUNBLE1BQUFuUSxFQUFBLEdBQ0EsQ0FDQSxDQUNBLE9BQUFBLEVBQUEsR0FDQSxFQUVBLEtBQUErUixtQkFBQSxDQUFBTCxRQUFBLENBQ0FsbkIsUUFBQSxDQUFBOEcsZ0JBQUEsNEJBQUFvZ0IsUUFBQSxPQUNBLENBRUF2WCxRQUFBLEVBQ0EsSUFDQSxRQUFBNFgsbUJBQUEsRUFDQXZuQixRQUFBLENBQUFnSCxtQkFBQSxpQ0FBQXVnQixtQkFBQSxPQUNBLEtBQUFBLG1CQUFBLE1BQ0EsQ0FDQSxPQUFBL1IsRUFBQSxFQUNBLENBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBaVIsMEJBQUF2ZixPQUFBLENBQUFtVSxHQUFBLEVBQ0EsTUFBQS9FLEdBQUEsQ0FBQXRXLFFBQUEsQ0FBQUMsY0FBQSx3QkFDQSxJQUFBcVcsR0FBQSxHQUFBK0UsR0FBQSxRQUVBLE1BQUFtTSxNQUFBLENBQUFBLENBQUE5akIsR0FBQSxDQUFBdU4sR0FBQSxJQUNBLE1BQUF3VyxJQUFBLENBQUFuUixHQUFBLENBQUFsWSxhQUFBLHlCQUFBc0YsR0FBQSxNQUNBLEdBQUErakIsSUFBQSxZQUFBQSxJQUFBLENBQUFBLElBQUEsQ0FBQXZXLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQW9XLEdBQUEsTUFDQSxFQUVBO0FBQ0F1VyxNQUFBLE1BQUFuTSxHQUFBLENBQUE1YixZQUFBLGlCQUNBK25CLE1BQUEsUUFBQW5NLEdBQUEsQ0FBQTViLFlBQUEsbUJBQ0ErbkIsTUFBQSxXQUFBbk0sR0FBQSxDQUFBNWIsWUFBQSxzQkFFQTtBQUNBK25CLE1BQUEsWUFBQW5NLEdBQUEsQ0FBQTViLFlBQUEsdUJBQ0ErbkIsTUFBQSxTQUFBbk0sR0FBQSxDQUFBNWIsWUFBQSxvQkFDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBK21CLDBCQUFBdGYsT0FBQSxDQUFBbVUsR0FBQSxFQUNBLE1BQUEvRSxHQUFBLENBQUF0VyxRQUFBLENBQUFDLGNBQUEsd0JBQ0EsSUFBQXFXLEdBQUEsR0FBQStFLEdBQUEsUUFFQSxNQUFBcU0sSUFBQTtBQUVBO0FBQ0EsTUFBQUMsT0FBQSxDQUFBdGYsTUFBQSxDQUFBdWYsZ0JBQUEsS0FDQSxNQUFBQyxPQUFBLENBQUF4TSxHQUFBLENBQUFuZCxPQUFBLEVBQUFtZCxHQUFBLENBQUFuZCxPQUFBLENBQUEwRixJQUFBLEtBQ0EsTUFBQWtrQixXQUFBLENBQUFILE9BQUEsQ0FBQUUsT0FBQSxRQUNBLE1BQUFFLFdBQUEsQ0FBQUQsV0FBQSxFQUFBQSxXQUFBLENBQUFFLE1BQUEsRUFBQUYsV0FBQSxDQUFBRSxNQUFBLENBQUFDLEtBQUEsQ0FBQUgsV0FBQSxDQUFBRSxNQUFBLENBQUFDLEtBQUEsSUFDQSxNQUFBQyxNQUFBLENBQUFDLFFBQUEsQ0FBQTNXLFNBQUEsQ0FBQUUsSUFBQSxDQUFBckQsSUFBQSxDQUFBeEksTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLEVBQ0EsTUFBQTJXLFVBQUEsQ0FBQTFrQixHQUFBLEdBQ0EsTUFBQXFSLElBQUEsQ0FBQWdULFdBQUEsQ0FBQXJrQixHQUFBLEVBQ0EsT0FBQXFSLElBQUEsRUFBQW1ULE1BQUEsQ0FBQW5ULElBQUEsWUFBQUEsSUFBQSxDQUFBc1QsT0FBQSxDQUFBblQsU0FBQSxDQUNBLEVBRUFvQixHQUFBLENBQUF6WCxnQkFBQSx5QkFBQWdELE9BQUEsQ0FBQTRsQixJQUFBLEdBQ0EsTUFBQS9qQixHQUFBLENBQUE3SSxNQUFBLENBQUE0c0IsSUFBQSxDQUFBdnBCLE9BQUEsRUFBQW9xQixZQUFBLE1BQUE1c0IsV0FBQSxHQUNBLElBQUFnSSxHQUFBLEVBQUFna0IsSUFBQSxDQUFBdnNCLElBQUEsQ0FBQXVJLEdBQUEsU0FFQTtBQUNBLE1BQUE2a0IsRUFBQSxFQUFBZCxJQUFBLENBQUF2cEIsT0FBQSxFQUFBMmtCLE1BQUEsTUFBQTNuQixJQUFBLEdBQUFRLFdBQUEsR0FDQSxHQUFBNnNCLEVBQUEsUUFBQUEsRUFBQSxXQUFBQSxFQUFBLGdCQUVBO0FBQ0EsR0FBQWQsSUFBQSxDQUFBdnBCLE9BQUEsRUFBQXNxQixVQUFBLEVBQUFmLElBQUEsQ0FBQXZwQixPQUFBLEVBQUF1cUIsU0FBQSxRQUVBLE1BQUFqcEIsR0FBQSxDQUFBNmIsR0FBQSxDQUFBbmQsT0FBQSxDQUFBbWQsR0FBQSxDQUFBbmQsT0FBQSxDQUFBd0YsR0FBQSxFQUFBd1IsU0FBQSxDQUNBLE1BQUF3VCxNQUFBLENBQUFyTixHQUFBLENBQUFuZCxPQUFBLENBQUFncUIsTUFBQSxDQUFBN00sR0FBQSxDQUFBbmQsT0FBQSxDQUFBd0YsR0FBQSxRQUNBLE1BQUFpbEIsUUFBQSxDQUFBUCxVQUFBLENBQUExa0IsR0FBQSxFQUVBO0FBRUEsR0FBQStqQixJQUFBLFlBQUFtQixnQkFBQSxHQUFBbkIsSUFBQSxDQUFBN2pCLElBQUEsZUFBQTZqQixJQUFBLENBQUE3akIsSUFBQSxhQUNBO0FBQ0EsSUFBQThrQixNQUFBLEVBQ0FqQixJQUFBLENBQUF4UCxPQUFBLEdBQUEwUSxRQUFBLENBQ0EsTUFDQTtBQUNBbEIsSUFBQSxDQUFBeFAsT0FBQSxDQUFBNWQsSUFBQSxDQUFBRyxpQkFBQSxDQUFBb0IsY0FBQSxDQUFBNEQsR0FBQSxRQUNBLENBQ0EsbUJBQUFpb0IsSUFBQSxFQUNBLEdBQUFpQixNQUFBLEVBQ0FqQixJQUFBLENBQUF2VyxLQUFBLENBQUExUixHQUFBLE9BQUEzRSxNQUFBLENBQUEyRSxHQUFBLEtBQ0EsTUFDQWlvQixJQUFBLENBQUF2VyxLQUFBLENBQUF5WCxRQUFBLFVBQUE5dEIsTUFBQSxDQUFBOHRCLFFBQUEsRUFDQSxDQUNBLENBQ0EsR0FDQSxDQUVBOUIsbUJBQUEsRUFDQSxNQUFBdmxCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBb1AsR0FBQSxDQUFBdFcsUUFBQSxDQUFBQyxjQUFBLHdCQUNBLElBQUFxVyxHQUFBLEVBQ0EsT0FDQSxDQUNBLEdBQUFBLEdBQUEsQ0FBQXVTLDZCQUFBLEVBQ0EsT0FDQSxDQUNBdlMsR0FBQSxDQUFBdVMsNkJBQUEsTUFFQSxNQUFBaGlCLE9BQUEsQ0FBQXlLLENBQUEsR0FFQSxNQUFBb0IsQ0FBQSxDQUFBcEIsQ0FBQSxDQUFBdU0sTUFBQSxDQUNBLElBQUFuTCxDQUFBLGNBQUFBLENBQUEsR0FDQSxPQUNBLENBQ0EsTUFBQWhQLEdBQUEsRUFBQWdQLENBQUEsQ0FBQXhVLE9BQUEsRUFBQW9xQixZQUFBLE1BQUE1c0IsV0FBQSxHQUNBLE1BQUEyZixHQUFBLENBQUEvWixDQUFBLENBQUFrakIsa0JBQUEsS0FDQSxNQUFBNVYsU0FBQSxDQUFBeU0sR0FBQSxFQUFBL1ksU0FBQSxFQUFBbkMsUUFBQSxzQkFDQSxJQUFBa2IsR0FBQSxRQUVBO0FBQ0EsTUFBQXlOLEVBQUEsQ0FBQXp1QixJQUFBLENBQUF1TCxlQUFBLENBQ0E7QUFDQTtBQUNBLE1BQUFtakIsd0JBQUEsQ0FBQUEsQ0FBQSxJQUNBLEdBQUF6bkIsQ0FBQSxDQUFBMG5CLDRCQUFBLEVBQ0EsT0FBQTFuQixDQUFBLENBQUEwbkIsNEJBQUEsQ0FDQSxDQUNBMW5CLENBQUEsQ0FBQTBuQiw0QkFBQSxFQUFBQyxRQUFBLEdBQUFDLGVBQUEsT0FDQSxPQUFBNW5CLENBQUEsQ0FBQTBuQiw0QkFBQSxDQUNBLEVBRUEsTUFBQUcsd0JBQUEsQ0FBQUEsQ0FBQSxJQUNBLE1BQUFDLEVBQUEsQ0FBQTluQixDQUFBLENBQUEwbkIsNEJBQUEsQ0FDQSxJQUFBSSxFQUFBLFFBQ0EsSUFBQXZXLFlBQUEsQ0FBQXVXLEVBQUEsQ0FBQUgsUUFBQSxTQUFBbnNCLENBQUEsR0FDQXNzQixFQUFBLENBQUFILFFBQUEsR0FDQUcsRUFBQSxDQUFBRixlQUFBLE1BQ0EsRUFFQSxNQUFBRyxlQUFBLENBQUFBLENBQUE5YSxNQUFBLENBQUErYSxLQUFBLE9BQ0E7QUFDQUgsd0JBQUEsR0FDQTduQixDQUFBLENBQUFnTixHQUFBLEVBQUEvSCxJQUFBLEdBQUF1aUIsRUFBQSxDQUFBM2lCLGdCQUFBLEVBQUFvSSxNQUFBLENBQUE5SyxFQUFBLENBQUE0WCxHQUFBLElBQUFpTyxLQUFBLEdBQ0EsRUFFQSxNQUFBQyx5QkFBQSxDQUFBQSxDQUFBaGIsTUFBQSxDQUFBK2EsS0FBQSxJQUFBM0ksT0FBQSxJQUNBLE1BQUF5SSxFQUFBLENBQUFMLHdCQUFBLEdBQ0EsTUFBQXJKLEVBQUEsQ0FBQXhqQixNQUFBLENBQUFDLFFBQUEsQ0FBQXdrQixPQUFBLEVBQ0FBLE9BQUEsQ0FDQXprQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQXNrQiw0QkFBQSxFQUFBdGtCLEVBQUEsQ0FBQXNrQiw0QkFBQSxLQUVBO0FBQ0F1SyxFQUFBLENBQUFGLGVBQUEsRUFBQTNhLE1BQUEsQ0FBQTlLLEVBQUEsQ0FBQTRYLEdBQUEsSUFBQWlPLEtBQUEsQ0FBQTNXLFNBQUEsT0FFQSxJQUFBRSxZQUFBLENBQUF1VyxFQUFBLENBQUFILFFBQUEsU0FBQW5zQixDQUFBLEdBQ0Fzc0IsRUFBQSxDQUFBSCxRQUFBLENBQUEvZSxVQUFBLFlBQ0FrZixFQUFBLENBQUFILFFBQUEsR0FDQSxNQUFBTyxPQUFBLENBQUFKLEVBQUEsQ0FBQUYsZUFBQSxDQUNBRSxFQUFBLENBQUFGLGVBQUEsTUFDQSxHQUFBTSxPQUFBLEVBQ0Fsb0IsQ0FBQSxDQUFBZ04sR0FBQSxFQUFBL0gsSUFBQSxHQUFBdWlCLEVBQUEsQ0FBQTNpQixnQkFBQSxDQUFBcWpCLE9BQUEsRUFDQSxDQUNBLEVBQUE5SixFQUFBLEVBQ0EsRUFFQTtBQUNBLEdBQUFoYyxHQUFBLFNBQ0EsTUFBQXRFLE1BQUEsQ0FBQWtDLENBQUEsQ0FBQXhELEVBQUEsQ0FBQWlCLFlBQUEsQ0FBQXNjLEdBQUEsQ0FBQTNJLENBQUEsQ0FBQXhCLEtBQUEsRUFDQSxHQUFBNVAsQ0FBQSxDQUFBbW9CLFlBQUEsR0FBQTdhLFNBQUEsRUFDQXROLENBQUEsQ0FBQW9vQixjQUFBLENBQUFyTyxHQUFBLEVBQ0EsQ0FDQSxHQUFBM0ksQ0FBQSxDQUFBeEIsS0FBQSxHQUFBOVIsTUFBQSxFQUNBc1QsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBOVIsTUFBQSxDQUNBLENBQ0FpcUIsZUFBQSxjQUNBLE9BQ0EsQ0FFQTtBQUNBLEdBQUEzbEIsR0FBQSxjQUNBLE1BQUFpbUIsT0FBQSxDQUFBcm9CLENBQUEsQ0FBQXhELEVBQUEsQ0FBQTRCLGlCQUFBLENBQUEyYixHQUFBLENBQUEzSSxDQUFBLENBQUF4QixLQUFBLEVBQ0E7QUFDQSxHQUFBdEMsU0FBQSxFQUNBeU0sR0FBQSxDQUFBdmQsRUFBQSxDQUFBNnJCLE9BQUEsS0FDQSxTQUFBcm9CLENBQUEsQ0FBQW1vQixZQUFBLEVBQ0Fub0IsQ0FBQSxDQUFBb29CLGNBQUEsQ0FBQXJPLEdBQUEsRUFDQSxDQUNBLEdBQUEzSSxDQUFBLENBQUF4QixLQUFBLEdBQUF5WSxPQUFBLEVBQ0FqWCxDQUFBLENBQUF4QixLQUFBLENBQUF5WSxPQUFBLENBQ0EsQ0FDQU4sZUFBQSxtQkFDQSxPQUNBLENBRUE7QUFDQSxHQUFBM2xCLEdBQUEsWUFBQWtMLFNBQUEsRUFFQTtBQUNBLEdBQUEwQyxDQUFBLENBQUExTixJQUFBLFlBQ0EsTUFBQWdtQixNQUFBLENBQUFsWCxDQUFBLENBQUF4QixLQUFBLENBQ0EsTUFBQTJZLFNBQUEsQ0FBQXh2QixJQUFBLENBQUFHLGlCQUFBLENBQUFZLGtCQUFBLENBQUF3dUIsTUFBQSxFQUNBLEdBQUFBLE1BQUEsR0FBQUMsU0FBQSxFQUNBO0FBQ0EsTUFBQUMsUUFBQSxDQUFBcFgsQ0FBQSxDQUFBcVgsY0FBQSxDQUFBQyxNQUFBLENBQUF0WCxDQUFBLENBQUF1WCxZQUFBLENBQ0F2WCxDQUFBLENBQUF4QixLQUFBLENBQUEyWSxTQUFBLENBQ0EsSUFDQW5YLENBQUEsQ0FBQXdYLGlCQUFBLENBQUFKLFFBQUEsQ0FBQUUsTUFBQSxFQUNBLE9BQUFsdEIsQ0FBQSxFQUNBLENBQ0EsQ0FDQTtBQUNBLENBRUE7QUFDQSxNQUFBMEMsR0FBQSxDQUFBM0UsTUFBQSxDQUFBNlgsQ0FBQSxDQUFBeEIsS0FBQSxNQUFBaFcsSUFBQSxHQUVBLElBQUFzRSxHQUFBLEVBQ0E7QUFDQSxNQUFBcVcsQ0FBQSxDQUFBeGIsSUFBQSxDQUFBRyxpQkFBQSxDQUNBLE1BQUFxRCxJQUFBLENBQUFnWSxDQUFBLENBQUF6YSxrQkFBQSxDQUFBaWdCLEdBQUEsQ0FBQTViLFlBQUEsYUFBQTRiLEdBQUEsQ0FBQW5kLE9BQUEsQ0FBQUosRUFBQSxFQUFBdWQsR0FBQSxDQUFBbmQsT0FBQSxDQUFBMEYsSUFBQSxXQUNBLE1BQUFrUyxJQUFBLENBQUF4VSxDQUFBLENBQUF4RCxFQUFBLENBQUFXLHdCQUFBLENBQUFaLElBQUEsQ0FBQXdkLEdBQUEsRUFFQUEsR0FBQSxDQUFBaGMsWUFBQSxhQUFBeVcsSUFBQSxFQUNBdUYsR0FBQSxDQUFBbmQsT0FBQSxDQUFBd1gsUUFBQSxLQUNBMkYsR0FBQSxDQUFBbmQsT0FBQSxDQUFBNlgsaUJBQUEsS0FFQTtBQUNBLElBQUF6VSxDQUFBLENBQUFtb0IsWUFBQSxFQUNBLE1BQUFoQyxJQUFBLENBQUFwTSxHQUFBLENBQUFqZCxhQUFBLDBCQUNBLEdBQUFxcEIsSUFBQSxDQUFBQSxJQUFBLENBQUFwb0IsWUFBQSxRQUFBeVcsSUFBQSxFQUNBLE1BQ0F4VSxDQUFBLENBQUFvb0IsY0FBQSxDQUFBck8sR0FBQSxFQUNBLENBRUEsR0FBQTNJLENBQUEsQ0FBQXhCLEtBQUEsR0FBQTRFLElBQUEsQ0FBQXBELENBQUEsQ0FBQXhCLEtBQUEsQ0FBQTRFLElBQUEsQ0FDQXVULGVBQUEsZ0JBQ0EsT0FDQSxDQUVBO0FBQ0FoTyxHQUFBLENBQUFuZCxPQUFBLENBQUE2WCxpQkFBQSxLQUNBc0YsR0FBQSxDQUFBbmQsT0FBQSxDQUFBd1gsUUFBQSxLQUVBLE1BQUFtVSxTQUFBLENBQUF4dkIsSUFBQSxDQUFBRyxpQkFBQSxDQUFBWSxrQkFBQSxDQUFBb0UsR0FBQSxFQUNBLE1BQUFKLE1BQUEsQ0FBQWtDLENBQUEsQ0FBQXhELEVBQUEsQ0FBQXdCLGNBQUEsQ0FBQStiLEdBQUEsQ0FBQXdPLFNBQUEsRUFFQSxJQUFBdm9CLENBQUEsQ0FBQW1vQixZQUFBLEVBQ0EsTUFBQWhDLElBQUEsQ0FBQXBNLEdBQUEsQ0FBQWpkLGFBQUEsMEJBQ0EsR0FBQXFwQixJQUFBLENBQUFBLElBQUEsQ0FBQXBvQixZQUFBLFFBQUFELE1BQUEsRUFDQSxNQUNBa0MsQ0FBQSxDQUFBb29CLGNBQUEsQ0FBQXJPLEdBQUEsRUFDQSxDQUVBLEdBQUEzSSxDQUFBLENBQUF4QixLQUFBLEdBQUE5UixNQUFBLENBQUFzVCxDQUFBLENBQUF4QixLQUFBLENBQUE5UixNQUFBLENBQ0FpcUIsZUFBQSxnQkFDQSxPQUNBLENBRUE7QUFDQSxHQUFBM2xCLEdBQUEsZUFDQSxNQUFBeW1CLElBQUEsQ0FBQTl2QixJQUFBLENBQUFHLGlCQUFBLENBQUFlLHNCQUFBLENBQUFtWCxDQUFBLENBQUF4QixLQUFBLE1BQ0EsTUFBQWtaLFVBQUEsQ0FBQUQsSUFBQSxDQUFBcG5CLEtBQUEsUUFBQUMsTUFBQSxDQUFBcW5CLE9BQUEsRUFDQSxNQUFBQyxVQUFBLEtBQUEzaUIsR0FBQSxDQUFBeWlCLFVBQUEsRUFFQTtBQUNBLE1BQUFHLE1BQUEsQ0FBQWpMLEdBQUEsRUFBQUEsR0FBQSxrQkFBQUEsR0FBQSxDQUFBak8sVUFBQSxVQUVBO0FBQ0EsTUFBQW1aLGFBQUEsQ0FBQTdwQixLQUFBLENBQUFDLElBQUEsQ0FBQXlhLEdBQUEsQ0FBQS9ZLFNBQUEsRUFDQSxNQUFBbW9CLFlBQUEsQ0FBQUQsYUFBQSxDQUFBeG5CLE1BQUEsQ0FBQTRkLENBQUEsR0FBQTJKLE1BQUEsQ0FBQTNKLENBQUEsR0FFQTtBQUNBNkosWUFBQSxDQUFBNW9CLE9BQUEsQ0FBQStlLENBQUEsR0FDQSxJQUFBMEosVUFBQSxDQUFBSSxHQUFBLENBQUE5SixDQUFBLEVBQUF2RixHQUFBLENBQUEvWSxTQUFBLENBQUE4RyxNQUFBLENBQUF3WCxDQUFBLEVBQ0EsR0FFQTtBQUNBLE1BQUErSixPQUFBLENBQUFQLFVBQUEsQ0FBQXBuQixNQUFBLENBQUE0ZCxDQUFBLEdBQUE2SixZQUFBLENBQUE3aEIsUUFBQSxDQUFBZ1ksQ0FBQSxHQUNBLEdBQUErSixPQUFBLENBQUE3ckIsTUFBQSxDQUFBdWMsR0FBQSxDQUFBL1ksU0FBQSxDQUFBNkcsR0FBQSxJQUFBd2hCLE9BQUEsRUFFQTtBQUNBLEdBQUF0UCxHQUFBLENBQUE1YixZQUFBLG9CQUFBMHFCLElBQUEsRUFDQTlPLEdBQUEsQ0FBQWhjLFlBQUEsaUJBQUE4cUIsSUFBQSxFQUNBLENBRUE7QUFDQSxNQUFBUyxZQUFBLENBQUFqcUIsS0FBQSxDQUFBQyxJQUFBLENBQUF5YSxHQUFBLENBQUEvWSxTQUFBLEVBQ0EsTUFBQXVvQixPQUFBLENBQUFELFlBQUEsQ0FBQTlyQixNQUFBLEdBQUEwckIsYUFBQSxDQUFBMXJCLE1BQUEsRUFBQTByQixhQUFBLENBQUFNLElBQUEsRUFBQWxLLENBQUEsQ0FBQTllLENBQUEsR0FBQThlLENBQUEsR0FBQWdLLFlBQUEsQ0FBQTlvQixDQUFBLEdBRUEsTUFBQTBFLE1BQUEsRUFBQTlDLEdBQUEsWUFBQXFuQixLQUFBLENBQUF6WixDQUFBLENBQUExTixJQUFBLEVBQ0EsR0FBQWdMLFNBQUEsRUFDQXlhLGVBQUEsbUJBQUE3aUIsTUFBQSxFQUNBLE1BQ0E2aUIsZUFBQSxlQUFBN2lCLE1BQUEsRUFDQSxDQUNBLE9BQ0EsQ0FHQTtBQUNBLEdBQUFvSSxTQUFBLEVBQUFsTCxHQUFBLFlBQ0EsTUFBQXVOLEdBQUEsQ0FBQXBXLE1BQUEsQ0FBQTZYLENBQUEsQ0FBQXhCLEtBQUEsTUFDQW1LLEdBQUEsQ0FBQWhjLFlBQUEsY0FBQTRSLEdBQUEsRUFDQW9ZLGVBQUEsaUJBQ0EsT0FDQSxDQUVBO0FBQ0EsSUFBQXphLFNBQUEsRUFBQWxMLEdBQUEsWUFDQSxNQUFBdU4sR0FBQSxDQUFBcFcsTUFBQSxDQUFBNlgsQ0FBQSxDQUFBeEIsS0FBQSxNQUNBbUssR0FBQSxDQUFBbmQsT0FBQSxDQUFBdUgsS0FBQSxDQUFBd0wsR0FBQSxDQUVBO0FBQ0EsSUFDQTVXLElBQUEsQ0FBQStZLG1CQUFBLENBQUE2Qyx5QkFBQSxDQUFBM1UsQ0FBQSxDQUFBK1osR0FBQSxDQUFBcEssR0FBQSxFQUNBLE9BQUFuVSxDQUFBLEVBQ0EsQ0FFQTtBQUNBLEdBQUF3VSxDQUFBLENBQUExTixJQUFBLFlBQ0F5WCxHQUFBLENBQUFuZCxPQUFBLENBQUF3WCxRQUFBO0FBQ0EyRixHQUFBLENBQUFuZCxPQUFBLENBQUF1WCxLQUFBO0FBQ0EsQ0FFQTtBQUNBLE1BQUFhLEdBQUEsQ0FBQXRXLFFBQUEsQ0FBQUMsY0FBQSx3QkFDQSxNQUFBc1csUUFBQSxDQUFBRCxHQUFBLEVBQUFsWSxhQUFBLGdDQUNBLEdBQUFtWSxRQUFBLEVBQ0EsTUFBQXlVLFVBQUEsQ0FDQSxDQUFBM1AsR0FBQSxDQUFBbmQsT0FBQSxDQUFBd1gsUUFBQSxjQUNBMkYsR0FBQSxDQUFBbmQsT0FBQSxDQUFBNlgsaUJBQUEsUUFDQXNGLEdBQUEsQ0FBQW5kLE9BQUEsQ0FBQXlYLFVBQUEsT0FDQVksUUFBQSxDQUFBMFUsZUFBQSxZQUFBRCxVQUFBLEVBQ0EsR0FBQUEsVUFBQSxHQUFBelUsUUFBQSxDQUFBaEQsV0FBQSxFQUNBZ0QsUUFBQSxDQUFBaEQsV0FBQSxDQUFBalMsQ0FBQSxFQUFBNHBCLElBQUEsRUFBQUMsZUFBQSxzQkFDQSxDQUNBLElBQUFILFVBQUEsRUFBQXpVLFFBQUEsQ0FBQWhELFdBQUEsSUFBQWpTLENBQUEsRUFBQTRwQixJQUFBLEVBQUFDLGVBQUEsd0JBQ0E1VSxRQUFBLENBQUFoRCxXQUFBLElBQ0EsQ0FDQSxDQUVBO0FBQ0FqUyxDQUFBLENBQUFvb0IsY0FBQSxDQUFBck8sR0FBQSxFQUNBZ08sZUFBQSxpQkFDQSxPQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0EsR0FBQTNsQixHQUFBLEVBRUEsTUFBQTBuQixVQUFBLG1CQUFBandCLElBQUEsRUFBQXVYLENBQUEsQ0FBQXhVLE9BQUEsRUFBQTJrQixNQUFBLE1BQUEzbkIsSUFBQSxJQUNBLEdBQUFrd0IsVUFBQSxFQUNBLE9BQ0EsQ0FFQTtBQUNBLEdBQUExbkIsR0FBQSxTQUFBQSxHQUFBLFdBQUFBLEdBQUEsY0FBQUEsR0FBQSxlQUFBQSxHQUFBLFlBQ0EsT0FDQSxDQUNBLElBQUEybkIsT0FBQSxJQUNBLEdBQUEzWSxDQUFBLFlBQUFrVyxnQkFBQSxHQUFBbFcsQ0FBQSxDQUFBOU8sSUFBQSxlQUFBOE8sQ0FBQSxDQUFBOU8sSUFBQSxhQUNBO0FBQ0F5bkIsT0FBQSxDQUFBM1ksQ0FBQSxDQUFBdUYsT0FBQSxnQkFDQSxtQkFBQXZGLENBQUEsRUFDQTJZLE9BQUEsQ0FBQXh3QixNQUFBLENBQUE2WCxDQUFBLENBQUF4QixLQUFBLE1BQ0EsQ0FDQTtBQUNBLEdBQUFtSyxHQUFBLEVBQUFuZCxPQUFBLENBQUFtZCxHQUFBLENBQUFuZCxPQUFBLENBQUF3RixHQUFBLEVBQUEybkIsT0FBQSxDQUVBO0FBQ0EsTUFBQUMsVUFBQSxDQUFBNW5CLEdBQUEsQ0FBQXloQixPQUFBLGFBRUE7QUFDQSxNQUFBb0csVUFBQSxLQUFBNWpCLEdBQUEsZ0RBQ0EsSUFBQWlILFNBQUEsR0FBQTJjLFVBQUEsQ0FBQWIsR0FBQSxDQUFBaG5CLEdBQUEsR0FBQUEsR0FBQSxDQUFBMk4sVUFBQSxVQUNBO0FBQ0EsR0FBQUMsQ0FBQSxDQUFBMU4sSUFBQSxhQUFBRixHQUFBLFdBQUFBLEdBQUEsa0JBQ0FwQyxDQUFBLENBQUFvb0IsY0FBQSxDQUFBck8sR0FBQSxFQUNBLENBQ0EsQ0FFQSxLQUFBaVEsVUFBQSxFQUFBaGEsQ0FBQSxDQUFBMU4sSUFBQSxhQUNBO0FBQ0E7QUFDQSxNQUFBNG5CLGlCQUFBLElBQUE5WSxDQUFBLEVBQUFBLENBQUEsQ0FBQTNHLE9BQUEsRUFBQTJHLENBQUEsQ0FBQTNHLE9BQUEsc0JBRUEsR0FBQXlmLGlCQUFBLEVBQUFsYSxDQUFBLENBQUExTixJQUFBLFlBQ0EybEIseUJBQUEsZ0JBQUE3bEIsR0FBQSxDQUFBcW5CLEtBQUEsQ0FBQXpaLENBQUEsQ0FBQTFOLElBQUEsR0FDQSxNQUNBeWxCLGVBQUEsZ0JBQUEzbEIsR0FBQSxDQUFBcW5CLEtBQUEsQ0FBQXpaLENBQUEsQ0FBQTFOLElBQUEsR0FDQSxDQUNBLENBQ0EsT0FDQSxDQUNBLEVBRUEwUyxHQUFBLENBQUF4UCxnQkFBQSxVQUFBRCxPQUFBLE9BQ0E7QUFDQXlQLEdBQUEsQ0FBQXhQLGdCQUFBLFNBQUFELE9BQUEsT0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FpZ0Isa0NBQUEsRUFDQSxNQUFBZ0MsRUFBQSxDQUFBenVCLElBQUEsQ0FBQXVMLGVBQUEsQ0FDQSxLQUFBc0IsT0FBQSxFQUFBb0gsR0FBQSxFQUFBMUgsRUFBQSxHQUFBa2lCLEVBQUEsQ0FBQTdpQixTQUFBLENBQUFxTCxDQUFBLEdBQ0EsTUFBQTdOLEVBQUEsQ0FBQTZOLENBQUEsRUFBQTlLLE1BQUEsRUFBQS9DLEVBQUEsT0FDQSxHQUFBQSxFQUFBLE9BQUF5RCxPQUFBLEVBQUErSCxZQUFBLEVBQ0EsS0FBQS9ILE9BQUEsQ0FBQStILFlBQUEsQ0FBQXhMLEVBQUEsRUFBQTZkLGNBQUEsUUFDQSxDQUNBO0FBQ0FDLDZCQUFBLENBQ0Esc0JBQ0EsQ0FDQUMsUUFBQSx1QkFDQUMsTUFBQSxxQkFDQSxDQUNBLEVBQ0EsR0FDQSxDQUNBLEVBRUE7QUFDQTtBQUNBLElBQ0FsbkIsRUFBQSxDQUFBa3hCLDRCQUFBLGVBQUFseEIsRUFBQSxDQUFBMG1CLGVBQUEsQ0FDQUMsS0FBQSxFQUNBLEtBQUF3SyxPQUFBLE1BQUFDLE1BQUEsQ0FBQXRkLElBQUEsT0FDQXJPLFFBQUEsQ0FBQThHLGdCQUFBLGdCQUFBNGtCLE9BQUEsT0FDQSxDQUVBL2IsUUFBQSxFQUNBM1AsUUFBQSxDQUFBZ0gsbUJBQUEsZ0JBQUEwa0IsT0FBQSxPQUNBLENBRUEsK0JBQ0FDLE9BQUFyYSxDQUFBLEVBQ0EsTUFBQWhRLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBMGtCLFNBQUEsTUFBQUMsbUJBQUEsR0FDQSxHQUFBdmEsQ0FBQSxDQUFBNU4sR0FBQSxhQUNBLEdBQUFrb0IsU0FBQSxFQUNBLE9BQ0EsQ0FDQSxLQUFBMWtCLE9BQUEsQ0FBQW9ILEdBQUEsQ0FBQS9ILElBQUEsQ0FBQWxNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQUksZUFBQSxFQUFBaWdCLE1BQUEsU0FDQSxPQUNBLENBQ0EsTUFBQTVWLFFBQUEsQ0FBQS9PLENBQUEsQ0FBQWtqQixrQkFBQSxLQUNBLElBQUFuVSxRQUFBLEVBQUF1YixTQUFBLEVBQ0EsT0FDQSxDQUNBLEdBQUF0YSxDQUFBLENBQUE1TixHQUFBLGFBQUE0TixDQUFBLENBQUE1TixHQUFBLGdCQUNBNE4sQ0FBQSxDQUFBd00sY0FBQSxHQUNBeGMsQ0FBQSxDQUFBcWpCLFdBQUEsR0FBQXRVLFFBQUEsRUFDQSxPQUNBLENBQ0EsSUFBQWlCLENBQUEsQ0FBQXdhLE1BQUEsRUFBQXhhLENBQUEsQ0FBQXlhLE9BQUEsRUFBQXphLENBQUEsQ0FBQTBhLE9BQUEsSUFBQTFhLENBQUEsQ0FBQTVOLEdBQUEsY0FBQTROLENBQUEsQ0FBQTVOLEdBQUEsa0JBQUE0TixDQUFBLENBQUEyYSxRQUFBLEVBQ0EzYSxDQUFBLENBQUF3TSxjQUFBLEdBQ0EsTUFBQW9PLEdBQUEsQ0FBQTVhLENBQUEsQ0FBQTVOLEdBQUEseUJBQ0FwQyxDQUFBLENBQUE2cUIsU0FBQSxHQUFBOWIsUUFBQSxDQUFBNmIsR0FBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBNWEsQ0FBQSxDQUFBNU4sR0FBQSxZQUNBNE4sQ0FBQSxDQUFBd00sY0FBQSxHQUNBeGMsQ0FBQSxDQUFBMk4sWUFBQSxDQUFBb0IsUUFBQSxFQUFBaVIsY0FBQSxRQUNBLENBQ0EsQ0FFQSx5QkFDQXVLLG9CQUFBLEVBQ0EsTUFBQXhxQixDQUFBLENBQUFyQixRQUFBLENBQUFvc0IsYUFBQSxDQUNBLE1BQUE1YixHQUFBLENBQUFuUCxDQUFBLEVBQUFnckIsT0FBQSxDQUNBLEdBQUE3YixHQUFBLFlBQUFBLEdBQUEsZUFBQUEsR0FBQSxhQUFBblAsQ0FBQSxFQUFBaXJCLGlCQUFBLFNBQ0EsWUFDQSxDQUNBLE1BQUFoVyxHQUFBLENBQUF0VyxRQUFBLENBQUFDLGNBQUEsd0JBQ0EsU0FBQXFXLEdBQUEsRUFBQWpWLENBQUEsRUFBQWlWLEdBQUEsQ0FBQW5XLFFBQUEsQ0FBQWtCLENBQUEsR0FDQSxDQUNBLEVBRUE7QUFDQTtBQUNBLElBQ0E5RyxFQUFBLENBQUFneUIsMEJBQUEsZUFBQWh5QixFQUFBLENBQUEwbUIsZUFBQSxDQUNBQyxLQUFBLEVBQ0EsS0FBQWhhLE9BQUEsQ0FBQXNsQixtQkFBQSxNQUFBQyxhQUFBLENBQUFwZSxJQUFBLE9BQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBMFQsZ0JBQUFqaEIsR0FBQSxFQUNBLE1BQUE5RixDQUFBLENBQUFnbkIsZ0JBQUEsQ0FBQWxoQixHQUFBLEVBQUFtaEIsZ0JBQUEsd0JBQ0EsTUFBQWptQixDQUFBLENBQUFDLFVBQUEsQ0FBQWpCLENBQUEsRUFDQSxPQUFBa0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQU8sSUFBQSxDQUFBRCxHQUFBLEdBQUFOLENBQUEsSUFDQSxDQUVBLDRCQUNBeXdCLGNBQUFuYixDQUFBLEVBQ0EsTUFBQWhRLENBQUEsTUFBQTRGLE9BQUEsQ0FDQW9LLENBQUEsQ0FBQXdNLGNBQUEsR0FDQSxHQUFBeE0sQ0FBQSxDQUFBb2IsTUFBQSxZQUVBLE1BQUFDLE9BQUEsQ0FBQXJiLENBQUEsQ0FBQXNiLGFBQUEsQ0FDQSxNQUFBcHNCLE1BQUEsQ0FBQW1zQixPQUFBLENBQUF0SSxhQUFBLENBQ0EsTUFBQTNqQixJQUFBLENBQUFDLEtBQUEsQ0FBQUMsSUFBQSxDQUFBSixNQUFBLENBQUEzQixnQkFBQSxnQ0FDQSxNQUFBZ3VCLFFBQUEsQ0FBQUYsT0FBQSxFQUFBRyxzQkFBQSxDQUNBLE1BQUFDLFNBQUEsQ0FBQUosT0FBQSxFQUFBSyxrQkFBQSxDQUNBLElBQUFILFFBQUEsR0FBQUUsU0FBQSxHQUFBRixRQUFBLENBQUF2cUIsU0FBQSxDQUFBbkMsUUFBQSx1QkFBQTRzQixTQUFBLENBQUF6cUIsU0FBQSxDQUFBbkMsUUFBQSw0QkFFQSxNQUFBOHNCLFVBQUEsQ0FBQXZzQixJQUFBLENBQUF5a0IsT0FBQSxDQUFBMEgsUUFBQSxFQUNBLE1BQUFLLFdBQUEsQ0FBQXhzQixJQUFBLENBQUF5a0IsT0FBQSxDQUFBNEgsU0FBQSxFQUNBLEdBQUFFLFVBQUEsT0FBQUMsV0FBQSxHQUFBRCxVQUFBLFVBRUEsTUFBQUUsT0FBQSxDQUFBN2IsQ0FBQSxDQUFBL0UsT0FBQSxDQUNBLE1BQUE2Z0IsYUFBQSxDQUFBUCxRQUFBLENBQUF6Z0IscUJBQUEsR0FBQU8sS0FBQSxDQUNBLE1BQUEwZ0IsY0FBQSxDQUFBTixTQUFBLENBQUEzZ0IscUJBQUEsR0FBQU8sS0FBQSxDQUNBLE1BQUEyZ0IsT0FBQSxDQUFBL3dCLElBQUEsQ0FBQUQsR0FBQSxHQUFBOHdCLGFBQUEsQ0FBQUMsY0FBQSxFQUVBLE1BQUE5ckIsRUFBQSxDQUFBRCxDQUFBLENBQUFoQixlQUFBLENBQ0EsTUFBQWl0QixRQUFBLENBQUFqc0IsQ0FBQSxDQUFBOGdCLE1BQUEsQ0FBQTdoQixnQ0FBQSxDQUFBQyxNQUFBLENBQUFlLEVBQUEsRUFDQSxNQUFBRSxTQUFBLENBQUE4ckIsUUFBQSxDQUFBOXJCLFNBQUE7QUFDQSxNQUFBRSxLQUFBLENBQUE0ckIsUUFBQSxDQUFBNXJCLEtBQUEsQ0FBQW5ELEtBQUE7QUFDQSxNQUFBZ3ZCLFVBQUEsQ0FBQTdyQixLQUFBLENBQUFzckIsVUFBQSxFQUFBdHJCLEtBQUEsQ0FBQXVyQixXQUFBLEVBRUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFweEIsTUFBQSxDQUFBQyxRQUFBLENBQUFxeEIsVUFBQSxHQUFBQSxVQUFBLFdBRUE7QUFDQSxNQUFBQyxPQUFBLENBQUFDLEdBQUEsRUFBQUosT0FBQSxFQUFBSSxHQUFBLENBQUFGLFVBQUE7QUFDQSxNQUFBRyxhQUFBLENBQUFweEIsSUFBQSxDQUFBRixHQUFBLEtBQUFvRixTQUFBO0FBQ0EsTUFBQW1zQixZQUFBLENBQUFILE9BQUEsQ0FBQUUsYUFBQSxFQUVBLE1BQUFFLFNBQUEsQ0FBQXR4QixJQUFBLENBQUFELEdBQUEsTUFBQXlsQixlQUFBLENBQUE4SyxRQUFBLEVBQUFlLFlBQUEsRUFDQSxNQUFBRSxVQUFBLENBQUF2eEIsSUFBQSxDQUFBRCxHQUFBLE1BQUF5bEIsZUFBQSxDQUFBZ0wsU0FBQSxFQUFBYSxZQUFBLEVBRUE7QUFDQSxNQUFBRyxnQkFBQSxDQUFBL3RCLFFBQUEsQ0FBQWdnQixJQUFBLENBQUFqZixLQUFBLENBQUFpdEIsVUFBQSxDQUNBaHVCLFFBQUEsQ0FBQWdnQixJQUFBLENBQUFqZixLQUFBLENBQUFpdEIsVUFBQSxRQUNBeHRCLE1BQUEsQ0FBQU8sS0FBQSxDQUFBa3RCLE1BQUEsY0FFQSxNQUFBQyxhQUFBLENBQUExUSxFQUFBLEdBQ0EsSUFBQThQLE9BQUEsUUFFQTtBQUNBLE1BQUFhLFFBQUEsQ0FBQTNRLEVBQUEsQ0FBQWpSLE9BQUEsQ0FBQTRnQixPQUFBLENBQ0EsSUFBQWlCLFNBQUEsQ0FBQWhCLGFBQUEsQ0FBQWUsUUFBQSxDQUNBQyxTQUFBLENBQUE3eEIsSUFBQSxDQUFBRCxHQUFBLENBQUF1eEIsU0FBQSxDQUFBdHhCLElBQUEsQ0FBQUYsR0FBQSxDQUFBaXhCLE9BQUEsQ0FBQVEsVUFBQSxDQUFBTSxTQUFBLEdBQ0EsTUFBQUMsVUFBQSxDQUFBZixPQUFBLENBQUFjLFNBQUEsQ0FFQTtBQUNBLE1BQUFFLFVBQUEsQ0FBQUYsU0FBQSxDQUFBZCxPQUFBLENBQUFFLFVBQUEsQ0FDQSxNQUFBZSxRQUFBLENBQUE1c0IsS0FBQSxDQUFBbkQsS0FBQSxJQUNBK3ZCLFFBQUEsQ0FBQXRCLFVBQUEsRUFBQXFCLFVBQUEsQ0FDQUMsUUFBQSxDQUFBckIsV0FBQSxFQUFBTSxVQUFBLENBQUFjLFVBQUEsQ0FFQWh0QixDQUFBLENBQUE4Z0IsTUFBQSxDQUFBeGdCLGtCQUFBLENBQUFwQixNQUFBLENBQUErdEIsUUFBQSxFQUNBLEVBRUEsTUFBQUMsV0FBQSxDQUFBQSxDQUFBLElBQ0F4dUIsUUFBQSxDQUFBZ0gsbUJBQUEsYUFBQWtuQixhQUFBLEVBQ0FsdUIsUUFBQSxDQUFBZ0gsbUJBQUEsV0FBQXduQixXQUFBLEVBQ0FubUIsTUFBQSxDQUFBckIsbUJBQUEsV0FBQXduQixXQUFBLEVBQ0F4dUIsUUFBQSxDQUFBZ0gsbUJBQUEsY0FBQXduQixXQUFBLEVBQ0F4dUIsUUFBQSxDQUFBZ2dCLElBQUEsQ0FBQWpmLEtBQUEsQ0FBQWl0QixVQUFBLENBQUFELGdCQUFBLEtBQ0F2dEIsTUFBQSxDQUFBTyxLQUFBLENBQUFrdEIsTUFBQSxJQUVBO0FBQ0EsTUFBQVEsVUFBQSxDQUFBbnRCLENBQUEsQ0FBQThnQixNQUFBLENBQUE3aEIsZ0NBQUEsQ0FBQUMsTUFBQSxDQUFBZSxFQUFBLEVBQ0FELENBQUEsQ0FBQThnQixNQUFBLENBQUF4Z0Isa0JBQUEsQ0FBQXBCLE1BQUEsQ0FBQWl1QixVQUFBLENBQUE5c0IsS0FBQSxFQUNBLEVBRUEzQixRQUFBLENBQUE4RyxnQkFBQSxhQUFBb25CLGFBQUEsRUFDQWx1QixRQUFBLENBQUE4RyxnQkFBQSxXQUFBMG5CLFdBQUEsRUFDQW5tQixNQUFBLENBQUF2QixnQkFBQSxXQUFBMG5CLFdBQUEsRUFDQXh1QixRQUFBLENBQUE4RyxnQkFBQSxjQUFBMG5CLFdBQUEsRUFDQSxDQUVBLEVBRUE7QUFDQTtBQUNBLElBQ0FqMEIsRUFBQSxDQUFBbTBCLHVCQUFBLGVBQUFuMEIsRUFBQSxDQUFBMG1CLGVBQUEsQ0FFQUMsS0FBQSxFQUNBLEtBQUFoYSxPQUFBLENBQUF5bkIsUUFBQSxDQUFBdHVCLElBQUEsT0FBQXN1QixRQUFBLENBQUF0dUIsSUFBQSxFQUNBLEtBQUE2RyxPQUFBLENBQUFnSSxXQUFBLEVBQUE1RixTQUFBLENBQUE1SSxJQUFBLFFBQUF3TyxXQUFBLENBQUE1RixTQUFBLENBQUE1SSxJQUFBLEVBQ0EsS0FBQXdHLE9BQUEsQ0FBQTBuQixlQUFBLEVBQUFDLFlBQUEsQ0FBQXZsQixTQUFBLFFBQUFzbEIsZUFBQSxDQUFBQyxZQUFBLENBQUF2bEIsU0FBQSxFQUNBLEtBQUFwQyxPQUFBLENBQUE2SCx5QkFBQSxDQUFBdEwsRUFBQSxPQUFBc0wseUJBQUEsQ0FBQXRMLEVBQUEsRUFDQSxLQUFBeUQsT0FBQSxDQUFBNG5CLHFCQUFBLENBQUFyckIsRUFBQSxPQUFBcXJCLHFCQUFBLENBQUFyckIsRUFBQSxFQUNBLEtBQUF5RCxPQUFBLENBQUE0SCxjQUFBLE1BQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBaWdCLHVCQUFBOWxCLElBQUEsRUFDQSxNQUFBM0gsQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLElBQUErQixJQUFBLFFBQ0EsTUFBQStsQixLQUFBLElBQ0EsR0FBQS9sQixJQUFBLENBQUEzRyxTQUFBLEVBQUFuQyxRQUFBLHVCQUFBOEksSUFBQSxDQUFBM0csU0FBQSxFQUFBbkMsUUFBQSxxQkFDQTZ1QixLQUFBLENBQUExVCxJQUFBLENBQUFyUyxJQUFBLEVBQ0EsQ0FDQStsQixLQUFBLENBQUExVCxJQUFBLElBQUFyUyxJQUFBLENBQUFwSyxnQkFBQSwwQ0FDQW13QixLQUFBLENBQUFudEIsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUF3ckIsTUFBQSxDQUFBeHJCLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsOEJBQ0FzRCxFQUFBLENBQUF2RixPQUFBLENBQUFDLEdBQUEsSUFBQTh3QixNQUFBLE1BQUEzdEIsQ0FBQSxDQUFBNHRCLFlBQUEsSUFBQWhQLElBQUEsQ0FBQWpTLEdBQUEsTUFBQTFSLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLFFBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQSxLQUNBMndCLGFBQUF0eEIsSUFBQSxDQUFBdXhCLEtBQUEsRUFDQSxNQUFBMTBCLENBQUEsQ0FBQUwsSUFBQSxDQUFBRyxpQkFBQSxDQUNBLElBQUFRLENBQUEsQ0FBQUgsTUFBQSxDQUFBZ0QsSUFBQSxNQUNBLElBQUE3QyxDQUFBLENBQUFBLENBQUEsU0FDQSxNQUFBb0MsQ0FBQSxDQUFBcEMsQ0FBQSxDQUFBcUMsS0FBQSxZQUNBLElBQUFyQixDQUFBLENBQUFvQixDQUFBLENBQUFpRyxRQUFBLENBQUFqRyxDQUFBLGFBQ0EsSUFBQWl5QixJQUFBLENBQUFqeUIsQ0FBQSxDQUFBcEMsQ0FBQSxDQUFBRixPQUFBLGFBQUFFLENBQUEsQ0FDQSxNQUFBbzBCLEtBQUEsQ0FBQTFFLEdBQUEsQ0FBQTF2QixDQUFBLEdBQ0FnQixDQUFBLENBQUFPLElBQUEsQ0FBQUQsR0FBQSxHQUFBTixDQUFBLElBQ0FoQixDQUFBLElBQUFxMEIsSUFBQSxJQUFBcnpCLENBQUEsR0FDQSxDQUNBb3pCLEtBQUEsQ0FBQWptQixHQUFBLENBQUFuTyxDQUFBLEVBQ0EsT0FBQUEsQ0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBczBCLHVCQUFBcm1CLElBQUEsRUFDQSxNQUFBM0gsQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLE1BQUF4TSxDQUFBLENBQUFMLElBQUEsQ0FBQUcsaUJBQUEsQ0FDQSxJQUFBeU8sSUFBQSxHQUFBM0gsQ0FBQSxFQUFBN0QsZUFBQSxRQUVBO0FBQ0EsTUFBQTh4QixXQUFBLEtBQUE1bkIsR0FBQSxHQUNBLE1BQUE2bkIsYUFBQSxLQUFBN25CLEdBQUEsR0FDQSxNQUFBOG5CLFdBQUEsS0FBQTluQixHQUFBLEdBQ0EsTUFBQStuQixVQUFBLEtBQUEvbkIsR0FBQSxHQUVBO0FBQ0FyRyxDQUFBLENBQUE3RCxlQUFBLENBQUFvQixnQkFBQSx5Q0FBQWdELE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxHQUFBd0YsSUFBQSxDQUFBOUksUUFBQSxDQUFBc0QsRUFBQSxTQUNBLE1BQUFrc0IsR0FBQSxDQUFBbHNCLEVBQUEsQ0FBQWhFLFlBQUEsWUFDQSxNQUFBbXdCLElBQUEsQ0FBQW5zQixFQUFBLENBQUFoRSxZQUFBLGNBQ0EsTUFBQW93QixHQUFBLENBQUFwc0IsRUFBQSxDQUFBaEUsWUFBQSxpQkFDQSxHQUFBa3dCLEdBQUEsQ0FBQUosV0FBQSxDQUFBcG1CLEdBQUEsQ0FBQXdtQixHQUFBLEVBQ0EsR0FBQUMsSUFBQSxDQUFBSixhQUFBLENBQUFybUIsR0FBQSxDQUFBeW1CLElBQUEsRUFDQSxHQUFBQyxHQUFBLENBQUFKLFdBQUEsQ0FBQXRtQixHQUFBLENBQUEwbUIsR0FBQSxFQUNBLEdBRUE7QUFDQTd2QixRQUFBLENBQUFuQixnQkFBQSxTQUFBZ0QsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLEdBQUF3RixJQUFBLENBQUE5SSxRQUFBLENBQUFzRCxFQUFBLFNBQ0EsR0FBQUEsRUFBQSxDQUFBM0YsRUFBQSxDQUFBNHhCLFVBQUEsQ0FBQXZtQixHQUFBLENBQUExRixFQUFBLENBQUEzRixFQUFBLEVBQ0EsR0FFQSxNQUFBa3hCLEtBQUEsSUFDQSxHQUFBL2xCLElBQUEsQ0FBQTNHLFNBQUEsRUFBQW5DLFFBQUEsdUJBQUE4SSxJQUFBLENBQUEzRyxTQUFBLEVBQUFuQyxRQUFBLHFCQUNBNnVCLEtBQUEsQ0FBQTFULElBQUEsQ0FBQXJTLElBQUEsRUFDQSxDQUNBK2xCLEtBQUEsQ0FBQTFULElBQUEsSUFBQXJTLElBQUEsQ0FBQXBLLGdCQUFBLDBDQUVBO0FBQ0Ftd0IsS0FBQSxDQUFBbnRCLE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBcXNCLE9BQUEsQ0FBQXJzQixFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLG9CQUNBLE1BQUF5TyxTQUFBLENBQUFuTCxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLHNCQUVBO0FBQ0EsQ0FDQSxNQUFBWCxHQUFBLENBQUFpRSxFQUFBLENBQUFoRSxZQUFBLGdCQUNBLE1BQUE1QixJQUFBLENBQUFuRCxDQUFBLENBQUFPLGdCQUFBLENBQUF1RSxHQUFBLElBQUFvUCxTQUFBLG9CQUNBLE1BQUFrSCxJQUFBLE1BQUFxWixZQUFBLENBQUF0eEIsSUFBQSxDQUFBMHhCLFdBQUEsRUFDQSxHQUFBelosSUFBQSxHQUFBdFcsR0FBQSxDQUFBaUUsRUFBQSxDQUFBcEUsWUFBQSxXQUFBeVcsSUFBQSxFQUNBLENBRUE7QUFDQSxHQUFBZ2EsT0FBQSxFQUNBLE1BQUF0d0IsR0FBQSxDQUFBaUUsRUFBQSxDQUFBaEUsWUFBQSxrQkFDQSxHQUFBRCxHQUFBLEVBQ0EsTUFBQTNCLElBQUEsQ0FBQW5ELENBQUEsQ0FBQVUsa0JBQUEsQ0FBQW9FLEdBQUEsRUFDQSxNQUFBc1csSUFBQSxNQUFBcVosWUFBQSxDQUFBdHhCLElBQUEsQ0FBQTJ4QixhQUFBLEVBQ0EsR0FBQTFaLElBQUEsR0FBQXRXLEdBQUEsRUFDQWlFLEVBQUEsQ0FBQXBFLFlBQUEsYUFBQXlXLElBQUEsRUFDQTtBQUNBLE1BQUFoVCxLQUFBLENBQUFXLEVBQUEsQ0FBQXJGLGFBQUEsNEJBQ0EsR0FBQTBFLEtBQUEsQ0FBQUEsS0FBQSxDQUFBekQsWUFBQSxRQUFBeVcsSUFBQSxFQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsQ0FDQSxNQUFBdFcsR0FBQSxDQUFBaUUsRUFBQSxDQUFBaEUsWUFBQSxxQkFDQSxHQUFBRCxHQUFBLEVBQ0EsTUFBQTNCLElBQUEsQ0FBQW5ELENBQUEsQ0FBQU8sZ0JBQUEsQ0FBQXVFLEdBQUEsRUFDQTtBQUNBLE1BQUF1d0IsYUFBQSxLQUFBcG9CLEdBQUEsS0FBQThuQixXQUFBLElBQUFDLFVBQUEsR0FDQSxJQUFBTSxTQUFBLE1BQUFiLFlBQUEsQ0FBQXR4QixJQUFBLENBQUFreUIsYUFBQSxFQUNBO0FBQ0FOLFdBQUEsQ0FBQXRtQixHQUFBLENBQUE2bUIsU0FBQSxFQUNBTixVQUFBLENBQUF2bUIsR0FBQSxDQUFBNm1CLFNBQUEsRUFFQSxHQUFBQSxTQUFBLEdBQUF4d0IsR0FBQSxDQUFBaUUsRUFBQSxDQUFBcEUsWUFBQSxnQkFBQTJ3QixTQUFBLEVBRUE7QUFDQSxHQUFBcGhCLFNBQUEsRUFDQW5MLEVBQUEsQ0FBQTNGLEVBQUEsQ0FBQWt5QixTQUFBLEtBQ0EsTUFDQSxNQUFBbHRCLEtBQUEsQ0FBQVcsRUFBQSxDQUFBckYsYUFBQSw0QkFDQSxNQUFBcUgsS0FBQSxDQUFBaEMsRUFBQSxDQUFBckYsYUFBQSxnQ0FDQSxHQUFBMEUsS0FBQSxDQUFBQSxLQUFBLENBQUFoRixFQUFBLENBQUFreUIsU0FBQSxLQUNBLEdBQUF2cUIsS0FBQSxDQUFBQSxLQUFBLENBQUF3cUIsT0FBQSxDQUFBRCxTQUFBLEtBQ0EsQ0FDQSxTQUFBcGhCLFNBQUEsRUFDQTtBQUNBbkwsRUFBQSxDQUFBN0QsZUFBQSxPQUNBLENBQ0EsQ0FDQSxHQUNBLENBRUFzd0IsMEJBQUFDLE9BQUEsQ0FBQUMsaUJBQUEsQ0FBQUMsVUFBQSxXQUVBO0FBRUEsTUFBQS9XLEdBQUEsQ0FBQXRaLFFBQUEsQ0FBQUMsY0FBQSxtQ0FDQSxJQUFBcVosR0FBQSxFQUNBLFlBQ0EsQ0FFQTtBQUNBLE1BQUFxTixHQUFBLENBQUFyTixHQUFBLENBQUFnWCxPQUFBLEVBQUFoWCxHQUFBLENBQUFnWCxPQUFBLENBQUEzVixpQkFBQSxDQUFBckIsR0FBQSxDQUFBZ1gsT0FBQSxDQUFBM1YsaUJBQUEsQ0FBQXJCLEdBQUEsQ0FBQXFCLGlCQUFBLENBQ0EsSUFBQWdNLEdBQUEsRUFDQSxZQUNBLENBRUEsTUFBQTRKLEtBQUEsQ0FBQTVKLEdBQUEsQ0FBQTZKLFNBQUEsT0FDQUQsS0FBQSxDQUFBM3dCLGVBQUEsV0FDQSxHQUFBMndCLEtBQUEsQ0FBQXp5QixFQUFBLEVBQ0F5eUIsS0FBQSxDQUFBM3dCLGVBQUEsT0FDQSxDQUNBMndCLEtBQUEsQ0FBQTF4QixnQkFBQSxTQUFBZ0QsT0FBQSxDQUFBN0YsQ0FBQSxFQUFBQSxDQUFBLENBQUE0RCxlQUFBLFFBRUE7QUFDQTJ3QixLQUFBLENBQUFyeUIsT0FBQSxDQUFBdXlCLE1BQUEsQ0FBQUosVUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBRSxLQUFBLENBQUF6cEIsZ0JBQUEsU0FBQXdLLENBQUEsR0FDQSxNQUFBalEsQ0FBQSxDQUFBaVEsQ0FBQSxDQUFBdU0sTUFBQSxDQUFBOVIsT0FBQSw2Q0FDQSxJQUFBMUssQ0FBQSxFQUNBLE9BQ0EsQ0FDQWlRLENBQUEsQ0FBQXdNLGNBQUEsR0FFQTtBQUNBLElBQUFwZCxJQUFBLENBQUEyQyxRQUFBLENBQUFoQyxDQUFBLENBQUFuRCxPQUFBLENBQUF3QyxJQUFBLEdBQUFXLENBQUEsQ0FBQStRLFdBQUEsQ0FBQS9VLEtBQUEscUNBQ0FxRCxJQUFBLENBQUFuRSxJQUFBLENBQUFELEdBQUEsR0FBQUMsSUFBQSxDQUFBRixHQUFBLEdBQUFxRSxJQUFBLEdBRUE7QUFDQSxLQUFBd08sV0FBQSxDQUFBa2hCLGlCQUFBLENBQUExdkIsSUFBQSxDQUFBMnZCLFVBQUEsRUFFQTtBQUNBLE1BQUFwZixHQUFBLENBQUFzZixLQUFBLENBQUFueUIsYUFBQSxvQkFDQSxHQUFBNlMsR0FBQSxFQUNBQSxHQUFBLENBQUFtQixXQUFBLE1BQUExUixJQUFBLElBQ0EsQ0FDQSxHQUVBLE9BQUE2dkIsS0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQTVCLFNBQUEsQ0FBQXZqQixNQUFBLFdBQ0EsTUFBQTlKLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBaXBCLE9BQUEsQ0FBQTkxQixJQUFBLENBQUFxVSx3QkFBQSxDQUFBNkIsY0FBQSx1SEFDQTRmLE9BQUEsQ0FBQTl3QixZQUFBLGVBQUFpQyxDQUFBLENBQUFvdkIsWUFBQSxFQUVBO0FBQ0EsTUFBQUMsYUFBQSxDQUFBcDJCLEVBQUEsQ0FBQXEyQixrQkFBQSw2QkFBQUMsV0FBQSxDQUFBdnZCLENBQUEsQ0FBQW92QixZQUFBLEdBQ0FQLE9BQUEsQ0FBQXRmLFNBQUEsQ0FBQThmLGFBQUEsOEZBRUFydkIsQ0FBQSxDQUFBN0QsZUFBQSxDQUFBNFUsV0FBQSxDQUFBOGQsT0FBQSxFQUNBLEdBQUEva0IsTUFBQSxFQUNBK2tCLE9BQUEsQ0FBQTdPLGNBQUEsRUFBQUksUUFBQSxVQUFBQyxLQUFBLFdBQ0EsQ0FFQSxNQUFBeU8saUJBQUEsQ0FBQUQsT0FBQSxDQUFBL3hCLGFBQUEsOENBQ0EsTUFBQTB5Qix5QkFBQSxHQUNBLEtBQUFoQyxxQkFBQSxDQUFBc0IsaUJBQUEsRUFDQSxLQUFBbGhCLFdBQUEsQ0FBQWtoQixpQkFBQSxDQUFBVSx5QkFBQSxFQUVBO0FBQ0EsTUFBQUMsaUJBQUEsQ0FBQVosT0FBQSxDQUFBL3hCLGFBQUEsd0JBQ0EsTUFBQTR5QixRQUFBLE1BQUFkLHlCQUFBLENBQUFDLE9BQUEsQ0FBQUMsaUJBQUEsUUFDQSxHQUFBWSxRQUFBLEVBQ0FELGlCQUFBLENBQUExZSxXQUFBLENBQUEyZSxRQUFBLEVBQ0EsQ0FDQTtBQUNBLE1BQUFDLG9CQUFBLENBQUE1MkIsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQTZCLGNBQUEsd0RBQ0E2ZixpQkFBQSxDQUFBYyxLQUFBLENBQUFELG9CQUFBLEVBQ0EsTUFBQUUsV0FBQSxNQUFBakIseUJBQUEsQ0FBQUMsT0FBQSxDQUFBQyxpQkFBQSxXQUNBLEdBQUFlLFdBQUEsRUFDQUYsb0JBQUEsQ0FBQTVlLFdBQUEsQ0FBQThlLFdBQUEsRUFDQSxDQUVBLE9BQUFoQixPQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FqaEIsWUFBQTVGLFNBQUEsQ0FBQTVJLElBQUEsQ0FBQTJ2QixVQUFBLFdBQ0EsTUFBQS91QixDQUFBLE1BQUE0RixPQUFBLENBQ0F4RyxJQUFBLENBQUFuRSxJQUFBLENBQUFELEdBQUEsR0FBQStHLFFBQUEsQ0FBQTNDLElBQUEsU0FFQSxNQUFBeU8sT0FBQSxDQUFBOVUsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQTZCLGNBQUEsNEJBQ0FwQixPQUFBLENBQUE5UCxZQUFBLHdCQUFBaUMsQ0FBQSxDQUFBOHZCLGVBQUEsSUFBQWxSLElBQUEsQ0FBQWpTLEdBQUEsTUFDQWtCLE9BQUEsQ0FBQTlQLFlBQUEsbUJBQUFpQyxDQUFBLENBQUE0dEIsWUFBQSxJQUFBaFAsSUFBQSxDQUFBalMsR0FBQSxNQUFBMVIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsU0FDQTJRLE9BQUEsQ0FBQTlQLFlBQUEsd0JBQ0E4UCxPQUFBLENBQUE5UCxZQUFBLHlCQUNBOFAsT0FBQSxDQUFBOVAsWUFBQSxnQkFBQXhFLE1BQUEsQ0FBQTZGLElBQUEsR0FDQTtBQUVBLE1BQUEyQixHQUFBLENBQUFoSSxJQUFBLENBQUFxVSx3QkFBQSxDQUFBNkIsY0FBQSxrQ0FDQSxRQUFBek8sQ0FBQSxHQUFBQSxDQUFBLENBQUFwQixJQUFBLENBQUFvQixDQUFBLElBQ0EsTUFBQWhCLEdBQUEsQ0FBQXpHLElBQUEsQ0FBQXFVLHdCQUFBLENBQUE2QixjQUFBLHVDQUNBelAsR0FBQSxDQUFBQyxLQUFBLENBQUFDLFNBQUEsS0FBQU4sSUFBQSxLQUNBO0FBQ0FZLENBQUEsQ0FBQSt2QixhQUFBLEdBQUF2d0IsR0FBQSxFQUNBdUIsR0FBQSxDQUFBZ1EsV0FBQSxDQUFBdlIsR0FBQSxFQUNBLEdBQUFnQixDQUFBLENBQUFwQixJQUFBLElBQ0EsTUFBQWlzQixPQUFBLENBQUF0eUIsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQTZCLGNBQUEsbUNBQ0FvYyxPQUFBLENBQUE3bEIsZ0JBQUEsYUFBQXhGLENBQUEsQ0FBQWtyQixtQkFBQSxFQUNBbnFCLEdBQUEsQ0FBQWdRLFdBQUEsQ0FBQXNhLE9BQUEsRUFDQSxDQUNBLENBQ0F4ZCxPQUFBLENBQUFrRCxXQUFBLENBQUFoUSxHQUFBLEVBQ0FmLENBQUEsQ0FBQThnQixNQUFBLENBQUFyZ0IsZUFBQSxDQUFBTSxHQUFBLENBQUFmLENBQUEsQ0FBQWhCLGVBQUEsRUFDQWdCLENBQUEsQ0FBQXVOLG1CQUFBLENBQUFNLE9BQUEsRUFDQUEsT0FBQSxDQUFBOVAsWUFBQSxpQkFDQSxLQUFBMFAseUJBQUEsQ0FBQUksT0FBQSxFQUVBO0FBQ0EsR0FBQWtoQixVQUFBLFVBQUEvbUIsU0FBQSxDQUFBcVIsaUJBQUEsRUFDQXJSLFNBQUEsQ0FBQWtHLFlBQUEsQ0FBQUwsT0FBQSxDQUFBN0YsU0FBQSxDQUFBcVIsaUJBQUEsRUFDQSxNQUNBclIsU0FBQSxDQUFBK0ksV0FBQSxDQUFBbEQsT0FBQSxFQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0F5ZixnQkFBQUMsWUFBQSxDQUFBdmxCLFNBQUEsRUFDQSxNQUFBaEksQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLE1BQUFvcUIsU0FBQSxDQUFBM3dCLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQXNzQixZQUFBLEVBQUE3ZixPQUFBLEVBQUE2ZixZQUFBLENBQUE3ZixPQUFBLElBQ0EsS0FBQUUsV0FBQSxDQUFBNUYsU0FBQSxDQUFBZ29CLFNBQUEsQ0FBQXh5QixNQUFBLEtBQ0EsTUFBQXFRLE9BQUEsQ0FBQTdGLFNBQUEsQ0FBQThGLGdCQUFBLENBQ0EsSUFBQUQsT0FBQSxDQUFBalIsT0FBQSxDQUFBQyxHQUFBLEVBQ0FnUixPQUFBLENBQUE5UCxZQUFBLG1CQUFBaUMsQ0FBQSxDQUFBNHRCLFlBQUEsSUFBQWhQLElBQUEsQ0FBQWpTLEdBQUEsTUFBQTFSLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLFNBQ0EsQ0FDQTJRLE9BQUEsQ0FBQTlQLFlBQUEsV0FBQXd2QixZQUFBLEVBQUEvd0IsRUFBQSxlQUFBd0QsQ0FBQSxDQUFBOHZCLGVBQUEsSUFBQWxSLElBQUEsQ0FBQWpTLEdBQUEsTUFDQWtCLE9BQUEsQ0FBQTlQLFlBQUEsd0JBQ0E4UCxPQUFBLENBQUE5UCxZQUFBLGNBQUF3dkIsWUFBQSxFQUFBcHBCLEtBQUEsYUFDQTBKLE9BQUEsQ0FBQTlQLFlBQUEsZ0JBQUF4RSxNQUFBLEVBQUFnMEIsWUFBQSxFQUFBN2YsT0FBQSxNQUFBbFEsTUFBQSxNQUNBO0FBQ0EsR0FBQSt2QixZQUFBLEVBQUF2YixPQUFBLEVBQ0FuRSxPQUFBLENBQUE5UCxZQUFBLGdCQUFBeEUsTUFBQSxDQUFBZzBCLFlBQUEsQ0FBQXZiLE9BQUEsR0FDQTtBQUNBbkUsT0FBQSxDQUFBclIsRUFBQSxDQUFBakQsTUFBQSxDQUFBZzBCLFlBQUEsQ0FBQXZiLE9BQUEsRUFDQSxDQUVBO0FBQ0EsR0FBQXViLFlBQUEsRUFBQTBDLFVBQUEsUUFDQSxNQUFBQyxJQUFBLENBQUEzMkIsTUFBQSxDQUFBZzBCLFlBQUEsQ0FBQTBDLFVBQUEsRUFDQXBpQixPQUFBLENBQUE5UCxZQUFBLG1CQUFBbXlCLElBQUEsRUFDQSxJQUNBcmlCLE9BQUEsQ0FBQWpSLE9BQUEsQ0FBQXF6QixVQUFBLENBQUFDLElBQUEsQ0FDQSxPQUFBaGMsRUFBQSxFQUNBLENBQ0EsQ0FDQTtBQUdBLEdBQUFxWixZQUFBLEVBQUFsYixRQUFBLEVBQ0F4RSxPQUFBLENBQUE5UCxZQUFBLGlCQUFBeEUsTUFBQSxDQUFBZzBCLFlBQUEsQ0FBQWxiLFFBQUEsR0FDQTtBQUNBOVksTUFBQSxDQUFBZzBCLFlBQUEsQ0FBQWxiLFFBQUEsRUFBQTVRLEtBQUEsUUFBQUMsTUFBQSxDQUFBcW5CLE9BQUEsRUFBQXhvQixPQUFBLENBQUF5ZCxHQUFBLEVBQUFuUSxPQUFBLENBQUE3TSxTQUFBLENBQUE2RyxHQUFBLENBQUFtVyxHQUFBLEdBQ0EsQ0FFQSxNQUFBamQsR0FBQSxDQUFBOE0sT0FBQSxDQUFBL1EsYUFBQSxtQkFDQTtBQUNBLElBQ0EsTUFBQW96QixJQUFBLENBQUFyaUIsT0FBQSxDQUFBMVAsWUFBQSxzQkFDQTBQLE9BQUEsQ0FBQWpSLE9BQUEsQ0FBQWlSLE9BQUEsQ0FBQWpSLE9BQUEsQ0FBQXF6QixVQUFBLFNBQ0EsTUFBQUUsR0FBQSxDQUFBbDNCLEVBQUEsQ0FBQStxQixzQkFBQSxDQUFBb00sZ0JBQUEsQ0FBQUYsSUFBQSxFQUNBajNCLEVBQUEsQ0FBQStxQixzQkFBQSxDQUFBeFMsS0FBQSxDQUFBM0QsT0FBQSxDQUFBc2lCLEdBQUEsRUFDQSxPQUFBamMsRUFBQSxFQUNBLENBRUE4YixTQUFBLENBQUF6dkIsT0FBQSxFQUFBOHZCLFFBQUEsQ0FBQXJYLEtBQUEsSUFDQSxNQUFBc1gsWUFBQSxDQUFBdnZCLEdBQUEsQ0FBQXhELGdCQUFBLCtCQUNBLE1BQUFpQyxHQUFBLENBQUE4d0IsWUFBQSxDQUFBdFgsS0FBQSxFQUNBeFosR0FBQSxDQUFBQyxLQUFBLENBQUFDLFNBQUEsQ0FBQTJ3QixRQUFBLENBQUFobEIsS0FBQSxTQUNBLENBQUFnbEIsUUFBQSxDQUFBRSxLQUFBLE1BQUFod0IsT0FBQSxDQUFBMk0sSUFBQSxHQUNBLElBQUFBLElBQUEsR0FBQUEsSUFBQSxDQUFBNUssSUFBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBNEssSUFBQSxDQUFBNUssSUFBQSxZQUNBLE1BQUFILEVBQUEsQ0FBQW5DLENBQUEsQ0FBQXd3QixXQUFBLENBQUF0akIsSUFBQSxDQUFBQyxJQUFBLEVBQ0EsR0FBQWhMLEVBQUEsRUFDQTNDLEdBQUEsQ0FBQXVSLFdBQUEsQ0FBQTVPLEVBQUEsRUFDQW5DLENBQUEsQ0FBQXl3QiwyQkFBQSxDQUFBdHVCLEVBQUEsU0FDQSxDQUNBLE9BQ0EsQ0FDQSxHQUFBK0ssSUFBQSxDQUFBNUssSUFBQSxjQUNBLEtBQUFnckIsZUFBQSxDQUFBcGdCLElBQUEsQ0FBQUMsSUFBQSxDQUFBM04sR0FBQSxFQUNBLENBQ0EsR0FDQSxHQUNBLE1BQUF5c0IsUUFBQSxDQUFBanNCLENBQUEsQ0FBQThnQixNQUFBLENBQUE3aEIsZ0NBQUEsQ0FBQThCLEdBQUEsQ0FBQWYsQ0FBQSxDQUFBaEIsZUFBQSxFQUNBZ0IsQ0FBQSxDQUFBOGdCLE1BQUEsQ0FBQXhnQixrQkFBQSxDQUFBUyxHQUFBLENBQUFrckIsUUFBQSxDQUFBNXJCLEtBQUEsRUFDQSxLQUFBb04seUJBQUEsQ0FBQUksT0FBQSxFQUVBO0FBQ0EsS0FBQTRmLHNCQUFBLENBQUE1ZixPQUFBLEVBQ0EsS0FBQW1nQixzQkFBQSxDQUFBbmdCLE9BQUEsRUFDQSxPQUFBQSxPQUFBLENBQ0EsQ0FFQSxxQ0FDQUosMEJBQUF6RixTQUFBLEVBQ0EsTUFBQWhJLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxHQUFBb0MsU0FBQSxDQUFBaEgsU0FBQSxDQUFBbkMsUUFBQSw4Q0FDQSxLQUFBMnVCLHFCQUFBLENBQUF4bEIsU0FBQSxFQUNBLENBQ0FBLFNBQUEsQ0FBQXpLLGdCQUFBLHVCQUFBZ0QsT0FBQSxDQUFBc04sT0FBQSxHQUNBQSxPQUFBLENBQUF0USxnQkFBQSxzQkFBQWdELE9BQUEsQ0FBQWYsR0FBQSxHQUNBLEtBQUFndUIscUJBQUEsQ0FBQWh1QixHQUFBLEVBQ0EsR0FDQSxHQUNBLENBRUEscUNBQ0FndUIsc0JBQUF4bEIsU0FBQSxFQUNBLE1BQUFoSSxDQUFBLE1BQUE0RixPQUFBLENBQ0EsSUFBQW9DLFNBQUEsRUFDQSxPQUNBLENBQ0EsTUFBQTBvQixTQUFBLENBQUExb0IsU0FBQSxDQUFBaEgsU0FBQSxDQUFBbkMsUUFBQSxxQkFDQSxNQUFBOHhCLFlBQUEsQ0FBQTNvQixTQUFBLENBQUFoSCxTQUFBLENBQUFuQyxRQUFBLDZDQUNBLElBQUE2eEIsU0FBQSxHQUFBQyxZQUFBLEVBQ0EsT0FDQSxDQUNBM3dCLENBQUEsQ0FBQSt2QixhQUFBLEdBQUEvbkIsU0FBQSxFQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0EsSUFDQS9PLEVBQUEsQ0FBQTIzQixxQkFBQSxlQUFBMzNCLEVBQUEsQ0FBQTBtQixlQUFBLENBQ0FDLEtBQUEsRUFDQSxLQUFBaGEsT0FBQSxDQUFBaXJCLGFBQUEsVUFBQUMsU0FBQSxHQUNBLEtBQUFsckIsT0FBQSxDQUFBbXJCLG9CQUFBLEVBQUEzM0IsQ0FBQSxDQUFBMkYsSUFBQSxRQUFBaXlCLFdBQUEsQ0FBQTUzQixDQUFBLENBQUEyRixJQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBa3lCLCtCQUFBemdCLFVBQUEsRUFDQSxNQUFBMGdCLGlCQUFBLENBQUEzc0IsTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUksVUFBQSxrQkFDQSxJQUFBMGdCLGlCQUFBLEVBQ0EsT0FBQTFnQixVQUFBLENBQ0EsQ0FFQSxNQUFBMmdCLGFBQUEsQ0FBQXA0QixJQUFBLENBQUFHLGlCQUFBLENBQUFvQixjQUFBLENBQUFrVyxVQUFBLENBQUEyZ0IsYUFBQSxRQUNBM2dCLFVBQUEsQ0FBQTJnQixhQUFBLENBQUFBLGFBQUEsQ0FFQSxJQUFBQSxhQUFBLEVBQUE5eEIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBdVAsVUFBQSxDQUFBcUgsT0FBQSxHQUNBckgsVUFBQSxDQUFBcUgsT0FBQSxDQUFBckgsVUFBQSxDQUFBcUgsT0FBQSxDQUFBdFksR0FBQSxDQUFBNnhCLGFBQUEsR0FDQSxJQUFBQSxhQUFBLFNBQUFBLGFBQUEsYUFDQSxPQUFBQSxhQUFBLENBQ0EsQ0FFQSxPQUFBN3NCLE1BQUEsQ0FBQXdVLE1BQUEsQ0FDQSxHQUNBcVksYUFBQSxDQUNBLENBQUF4aEIsS0FBQSxDQUFBclcsTUFBQSxDQUFBNjNCLGFBQUEsQ0FBQWp0QixLQUFBLFVBQUFpdEIsYUFBQSxDQUFBanRCLEtBQUEsRUFDQSxFQUNBLEdBQ0EsQ0FFQSxPQUFBcU0sVUFBQSxDQUNBLENBRUEsdUJBQ0FzZ0IsVUFBQSxFQUNBLE1BQUE5d0IsQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLEtBQUF5ckIsY0FBQSxHQUNBLEtBQUFDLGdCQUFBLEdBQ0EsTUFBQUMsS0FBQSxJQUNBdnhCLENBQUEsQ0FBQTdELGVBQUEsQ0FBQW9CLGdCQUFBLDhCQUFBZ0QsT0FBQSxFQUFBc3VCLE9BQUEsQ0FBQTJDLFVBQUEsSUFDQSxNQUFBeHBCLFNBQUEsQ0FBQTZtQixPQUFBLENBQUEveEIsYUFBQSw4Q0FDQSxNQUFBa3lCLE9BQUEsSUFDQSxJQUFBaG5CLFNBQUEsRUFDQXVwQixLQUFBLENBQUF2WCxJQUFBLEVBQUF5WCxJQUFBLENBQUFELFVBQUEsR0FBQXhDLE9BQUEsR0FDQSxPQUNBLENBQ0FobkIsU0FBQSxDQUFBekssZ0JBQUEsZUFBQWdELE9BQUEsQ0FBQW14QixLQUFBLEdBQ0EsR0FBQUEsS0FBQSxDQUFBMXdCLFNBQUEsQ0FBQW5DLFFBQUEsdUJBQ0Ftd0IsT0FBQSxDQUFBaFYsSUFBQSxFQUFBMVgsSUFBQSxXQUFBNkssSUFBQSxNQUFBd2tCLGlCQUFBLENBQUFELEtBQUEsSUFDQSxPQUNBLENBQ0EsR0FBQUEsS0FBQSxDQUFBMXdCLFNBQUEsQ0FBQW5DLFFBQUEscUJBQ0EsR0FBQTZ5QixLQUFBLENBQUExd0IsU0FBQSxDQUFBbkMsUUFBQSxnQkFDQSxPQUNBLENBQ0EsTUFBQSt5QixNQUFBLE1BQUFYLDhCQUFBLENBQ0FsNEIsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQUMsdUJBQUEsQ0FBQXFrQixLQUFBLENBQ0EsRUFDQTtBQUNBLDREQUNBbnhCLE9BQUEsQ0FBQW9TLENBQUEsR0FDQSxHQUFBQSxDQUFBLElBQUFpZixNQUFBLFFBQUFBLE1BQUEsQ0FBQWpmLENBQUEsRUFDQSxHQUNBcWMsT0FBQSxDQUFBaFYsSUFBQSxFQUFBMVgsSUFBQSxTQUFBNkssSUFBQSxDQUFBeWtCLE1BQUEsR0FDQSxDQUNBLEdBQ0FMLEtBQUEsQ0FBQXZYLElBQUEsRUFBQXlYLElBQUEsQ0FBQUQsVUFBQSxHQUFBeEMsT0FBQSxHQUNBLEdBQ0EsT0FBQXVDLEtBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FJLGtCQUFBN1AsVUFBQSxFQUNBLE1BQUEvZ0IsR0FBQSxDQUFBK2dCLFVBQUEsQ0FBQWhsQixhQUFBLDRCQUVBO0FBQ0EsSUFBQSswQixjQUFBLENBQ0EvUCxVQUFBLENBQUEzakIsWUFBQSxzQkFDQTJqQixVQUFBLENBQUFsbEIsT0FBQSxDQUFBa2xCLFVBQUEsQ0FBQWxsQixPQUFBLENBQUFxekIsVUFBQSxNQUNBLEdBRUEsTUFBQTF6QixJQUFBLEVBQ0FDLEVBQUEsQ0FBQXNsQixVQUFBLENBQUFsbEIsT0FBQSxDQUFBSixFQUFBLENBQ0EySCxLQUFBLENBQUEyZCxVQUFBLENBQUFsbEIsT0FBQSxDQUFBdUgsS0FBQSxLQUNBNk4sT0FBQSxDQUFBOFAsVUFBQSxDQUFBbGxCLE9BQUEsQ0FBQW9WLE9BQUEsS0FDQUssUUFBQSxDQUFBeVAsVUFBQSxDQUFBbGxCLE9BQUEsQ0FBQXlWLFFBQUEsS0FDQTRkLFVBQUEsQ0FBQTEyQixNQUFBLENBQUFzNEIsY0FBQTtBQUNBLEVBRUEsSUFBQTl3QixHQUFBLEVBQ0EsT0FBQXdELE1BQUEsQ0FBQXdVLE1BQUEsSUFBQXhjLElBQUEsRUFBQW1SLE9BQUEsTUFDQSxDQUVBLE1BQUFBLE9BQUEsSUFDQTNNLEdBQUEsQ0FBQXhELGdCQUFBLCtCQUFBZ0QsT0FBQSxVQUFBZixHQUFBLEVBQ0EsTUFBQTZMLEtBQUEsQ0FBQTdMLEdBQUEsQ0FBQUMsS0FBQSxDQUFBQyxTQUFBLFNBQ0EsTUFBQTZ3QixLQUFBLElBQ0FseEIsS0FBQSxDQUFBNlEsU0FBQSxDQUFBM1AsT0FBQSxDQUFBNlAsSUFBQSxDQUFBNVEsR0FBQSxDQUFBd08sUUFBQSxVQUFBMGpCLEtBQUEsRUFDQSxHQUFBQSxLQUFBLENBQUExd0IsU0FBQSxDQUFBbkMsUUFBQSx1QkFDQTB4QixLQUFBLENBQUF2VyxJQUFBLEVBQUExWCxJQUFBLFdBQUE2SyxJQUFBLE1BQUF3a0IsaUJBQUEsQ0FBQUQsS0FBQSxJQUNBLE9BQ0EsQ0FDQSxHQUFBQSxLQUFBLENBQUExd0IsU0FBQSxDQUFBbkMsUUFBQSxxQkFDQSxHQUFBNnlCLEtBQUEsQ0FBQTF3QixTQUFBLENBQUFuQyxRQUFBLGdCQUNBLE9BQ0EsQ0FDQSxNQUFBK3lCLE1BQUEsTUFBQVgsOEJBQUEsQ0FDQWw0QixJQUFBLENBQUFxVSx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBcWtCLEtBQUEsQ0FDQSxFQUNBLDREQUFBbnhCLE9BQUEsVUFBQW9TLENBQUEsRUFDQSxHQUFBQSxDQUFBLElBQUFpZixNQUFBLEVBQ0EsT0FBQUEsTUFBQSxDQUFBamYsQ0FBQSxFQUNBLENBQ0EsR0FDQTRkLEtBQUEsQ0FBQXZXLElBQUEsRUFBQTFYLElBQUEsU0FBQTZLLElBQUEsQ0FBQXlrQixNQUFBLEdBQ0EsQ0FDQSxFQUFBN2tCLElBQUEsUUFDQVcsT0FBQSxDQUFBc00sSUFBQSxFQUFBM08sS0FBQSxDQUFBQSxLQUFBLENBQUFrbEIsS0FBQSxDQUFBQSxLQUFBLEdBQ0EsRUFBQXhqQixJQUFBLFFBRUE7QUFDQSxJQUNBLE1BQUEra0IsUUFBQSxDQUFBcGtCLE9BQUEsQ0FBQWxRLE1BQUEsQ0FDQSxNQUFBVSxHQUFBLENBQUEzRSxNQUFBLENBQUFzNEIsY0FBQSxNQUFBajRCLElBQUEsR0FFQSxHQUFBc0UsR0FBQSxFQUNBLElBQUFpeUIsR0FBQSxJQUNBLElBQ0EsTUFBQTRCLE1BQUEsQ0FBQXoyQixJQUFBLENBQUFDLEtBQUEsQ0FBQTJDLEdBQUEsRUFDQWl5QixHQUFBLENBQUE5d0IsS0FBQSxDQUFBNEIsT0FBQSxDQUFBOHdCLE1BQUEsRUFBQUEsTUFBQSxDQUFBQSxNQUFBLEVBQUExeUIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBOHdCLE1BQUEsQ0FBQXJrQixPQUFBLEVBQUFxa0IsTUFBQSxDQUFBcmtCLE9BQUEsSUFDQSxPQUFBd0csRUFBQSxFQUNBaWMsR0FBQSxJQUNBLENBRUEsR0FBQTJCLFFBQUEsS0FDQXYxQixJQUFBLENBQUEwekIsVUFBQSxNQUNBLE1BQ0EsR0FBQUUsR0FBQSxDQUFBM3lCLE1BQUEsQ0FBQXMwQixRQUFBLENBQUEzQixHQUFBLENBQUEzeUIsTUFBQSxDQUFBczBCLFFBQUEsQ0FDQSxNQUFBM0IsR0FBQSxDQUFBM3lCLE1BQUEsQ0FBQXMwQixRQUFBLENBQUEzQixHQUFBLENBQUFuVyxJQUFBLEtBQ0F6ZCxJQUFBLENBQUEwekIsVUFBQSxDQUFBMzBCLElBQUEsQ0FBQUksU0FBQSxDQUFBeTBCLEdBQUEsRUFDQSxDQUNBLE1BQ0E1ekIsSUFBQSxDQUFBMHpCLFVBQUEsSUFDQSxDQUNBLE9BQUEvYixFQUFBLEVBQ0EsQ0FFQSxPQUFBM1AsTUFBQSxDQUFBd1UsTUFBQSxJQUFBeGMsSUFBQSxFQUFBbVIsT0FBQSxDQUFBQSxPQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBc2pCLFlBQUFnQixTQUFBLEVBQUFDLGFBQUEsV0FDQSxNQUFBanlCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxHQUFBcXNCLGFBQUEsT0FBQUMsdUJBQUEsSUFDQTNnQixZQUFBLE1BQUE0Z0IsWUFBQSxFQUNBLEtBQUFBLFlBQUEsQ0FBQXZwQixVQUFBLE1BQ0EsS0FBQW9vQixXQUFBLENBQUFnQixTQUFBLEVBQUFDLGFBQUEsU0FDQSxPQUNBLE9BQ0EsQ0FDQWp5QixDQUFBLENBQUE3RCxlQUFBLENBQUFvVCxTQUFBLElBQ0F2UCxDQUFBLENBQUFvdkIsWUFBQSxHQUNBLENBQUE0QyxTQUFBLE1BQUF6eEIsT0FBQSxDQUFBNnhCLFNBQUEsR0FDQSxNQUFBdkQsT0FBQSxDQUFBN3VCLENBQUEsQ0FBQXdOLGNBQUEsQ0FBQTZmLFFBQUEsRUFBQXZqQixNQUFBLFNBQ0EsTUFBQWdsQixpQkFBQSxDQUFBRCxPQUFBLENBQUEveEIsYUFBQSw4Q0FDQWd5QixpQkFBQSxDQUFBdmYsU0FBQSxJQUNBdlAsQ0FBQSxDQUFBd3RCLHFCQUFBLEdBQUFzQixpQkFBQSxFQUNBLENBQUFzRCxTQUFBLENBQUFwRCxPQUFBLE1BQUF6dUIsT0FBQSxDQUFBMk0sSUFBQSxHQUNBLEdBQUFBLElBQUEsQ0FBQTVLLElBQUEsY0FDQTtBQUNBdEMsQ0FBQSxDQUFBd04sY0FBQSxDQUFBOGYsZUFBQSxDQUFBcGdCLElBQUEsQ0FBQUMsSUFBQSxDQUFBMmhCLGlCQUFBLEVBQ0EsT0FDQSxDQUNBLEdBQUE1aEIsSUFBQSxDQUFBNUssSUFBQSxZQUNBLE1BQUFILEVBQUEsQ0FBQW5DLENBQUEsQ0FBQXd3QixXQUFBLENBQUF0akIsSUFBQSxDQUFBQyxJQUFBLEVBQ0EsR0FBQWhMLEVBQUEsRUFDQTJzQixpQkFBQSxDQUFBL2QsV0FBQSxDQUFBNU8sRUFBQSxFQUNBbkMsQ0FBQSxDQUFBeXdCLDJCQUFBLENBQUF0dUIsRUFBQSxTQUNBLENBQ0EsQ0FDQSxHQUNBLEdBQ0FuQyxDQUFBLENBQUErQyxLQUFBLEVBQUFELGlCQUFBLEtBQ0E5QyxDQUFBLENBQUFnTixHQUFBLENBQUEvSCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFRLGdCQUFBLEVBQUFrdEIsU0FBQSxHQUNBLENBRUFYLGVBQUEsRUFDQSxNQUFBcnhCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQTVGLENBQUEsQ0FBQTdELGVBQUEsQ0FBQW9CLGdCQUFBLGdFQUFBZ0QsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUFnTCxJQUFBLENBQUFwVSxJQUFBLENBQUFxVSx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBbEwsRUFBQSxFQUNBLE1BQUFrd0IsSUFBQSxDQUFBdDVCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVMsZ0JBQUEsQ0FBQXdULElBQUEsQ0FBQTNRLEVBQUEsZUFDQSxNQUFBZ1ksSUFBQSxDQUFBeFUsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBSixzQkFBQSxDQUFBaTJCLElBQUEsQ0FBQWx3QixFQUFBLEVBQ0EsR0FBQWdMLElBQUEsQ0FBQTNRLEVBQUEsR0FBQWdZLElBQUEsRUFDQXJTLEVBQUEsQ0FBQXBFLFlBQUEsV0FBQXlXLElBQUEsRUFDQSxHQUFBeFUsQ0FBQSxDQUFBbW9CLFlBQUEsRUFDQW5vQixDQUFBLENBQUFvb0IsY0FBQSxDQUFBam1CLEVBQUEsRUFDQSxDQUNBLENBQ0EsR0FDQSxDQUVBbXZCLGlCQUFBLEVBQ0EsTUFBQXR4QixDQUFBLE1BQUE0RixPQUFBLENBQ0E1RixDQUFBLENBQUE3RCxlQUFBLENBQUFvQixnQkFBQSxnRUFBQWdELE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBZ0wsSUFBQSxDQUFBcFUsSUFBQSxDQUFBcVUsd0JBQUEsQ0FBQUMsdUJBQUEsQ0FBQWxMLEVBQUEsRUFDQSxNQUFBNUYsSUFBQSxDQUFBeEQsSUFBQSxDQUFBRyxpQkFBQSxDQUFBWSxrQkFBQSxDQUFBcVQsSUFBQSxDQUFBL1AsSUFBQSxPQUFBK1AsSUFBQSxDQUFBL1AsSUFBQSxDQUFBK1AsSUFBQSxDQUFBM1EsRUFBQSxXQUNBLE1BQUFnWSxJQUFBLENBQUF4VSxDQUFBLENBQUF4RCxFQUFBLENBQUFXLHdCQUFBLENBQUFaLElBQUEsQ0FBQTRGLEVBQUEsRUFDQSxHQUFBZ0wsSUFBQSxDQUFBL1AsSUFBQSxHQUFBb1gsSUFBQSxFQUNBclMsRUFBQSxDQUFBcEUsWUFBQSxhQUFBeVcsSUFBQSxFQUNBLEdBQUF4VSxDQUFBLENBQUFtb0IsWUFBQSxFQUNBbm9CLENBQUEsQ0FBQW9vQixjQUFBLENBQUFqbUIsRUFBQSxFQUNBLENBQ0EsQ0FDQSxHQUNBLENBRUEseUJBQ0ErdkIsd0JBQUEsRUFDQSxNQUFBbGQsR0FBQSxDQUFBdFcsUUFBQSxDQUFBQyxjQUFBLHdCQUNBLFNBQUFxVyxHQUFBLEVBQUF0VyxRQUFBLENBQUFvc0IsYUFBQSxFQUFBOVYsR0FBQSxDQUFBblcsUUFBQSxDQUFBSCxRQUFBLENBQUFvc0IsYUFBQSxHQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0E3eEIsRUFBQSxDQUFBcTVCLHdCQUFBLGVBQUFyNUIsRUFBQSxDQUFBMG1CLGVBQUEsQ0FFQXpqQixZQUFBMEosT0FBQSxFQUNBLE1BQUFBLE9BQUEsRUFDQSxLQUFBMnNCLGFBQUEsTUFBQUEsYUFBQSxDQUFBeGxCLElBQUEsT0FDQSxLQUFBeWxCLGdCQUFBLE1BQUFBLGdCQUFBLENBQUF6bEIsSUFBQSxPQUNBLEtBQUEwbEIsb0JBQUEsTUFBQUEsb0JBQUEsQ0FBQTFsQixJQUFBLE9BQ0EsS0FBQTJsQixvQkFBQSxNQUFBQSxvQkFBQSxDQUFBM2xCLElBQUEsT0FDQSxLQUFBNGxCLGlCQUFBLE1BQUFBLGlCQUFBLENBQUE1bEIsSUFBQSxPQUVBLEtBQUE2bEIsYUFBQSxLQUFBdnNCLEdBQUEsR0FDQSxLQUFBd3NCLFlBQUEsT0FDQSxLQUFBQyxPQUFBLEdBQ0EsQ0FFQWxULEtBQUEsRUFDQSxNQUFBNEgsRUFBQSxDQUFBenVCLElBQUEsQ0FBQXVMLGVBQUEsQ0FDQSxLQUFBc0IsT0FBQSxFQUFBb0gsR0FBQSxFQUFBMUgsRUFBQSxHQUFBa2lCLEVBQUEsQ0FBQTdpQixTQUFBLE1BQUE0dEIsYUFBQSxFQUNBLEtBQUEzc0IsT0FBQSxFQUFBb0gsR0FBQSxFQUFBMUgsRUFBQSxHQUFBa2lCLEVBQUEsQ0FBQTVpQixZQUFBLE1BQUE0dEIsZ0JBQUEsRUFDQSxLQUFBNXNCLE9BQUEsRUFBQW9ILEdBQUEsRUFBQTFILEVBQUEsR0FBQWtpQixFQUFBLENBQUExaUIsZ0JBQUEsTUFBQTJ0QixvQkFBQSxFQUNBO0FBQ0EsS0FBQTdzQixPQUFBLEVBQUFvSCxHQUFBLEVBQUExSCxFQUFBLEdBQUFraUIsRUFBQSxDQUFBM2lCLGdCQUFBLE1BQUE2dEIsb0JBQUEsRUFFQTNyQixNQUFBLENBQUF2QixnQkFBQSxlQUFBbXRCLGlCQUFBLEVBQUFJLE9BQUEsUUFDQSxLQUFBQyxxQkFBQSxHQUNBLENBRUEza0IsUUFBQSxFQUNBLE1BQUFtWixFQUFBLENBQUF6dUIsSUFBQSxDQUFBdUwsZUFBQSxDQUNBLEtBQUFzQixPQUFBLEVBQUFvSCxHQUFBLEVBQUF2SCxHQUFBLEdBQUEraEIsRUFBQSxDQUFBN2lCLFNBQUEsTUFBQTR0QixhQUFBLEVBQ0EsS0FBQTNzQixPQUFBLEVBQUFvSCxHQUFBLEVBQUF2SCxHQUFBLEdBQUEraEIsRUFBQSxDQUFBNWlCLFlBQUEsTUFBQTR0QixnQkFBQSxFQUNBLEtBQUE1c0IsT0FBQSxFQUFBb0gsR0FBQSxFQUFBdkgsR0FBQSxHQUFBK2hCLEVBQUEsQ0FBQTFpQixnQkFBQSxNQUFBMnRCLG9CQUFBLEVBQ0EsS0FBQTdzQixPQUFBLEVBQUFvSCxHQUFBLEVBQUF2SCxHQUFBLEdBQUEraEIsRUFBQSxDQUFBM2lCLGdCQUFBLE1BQUE2dEIsb0JBQUEsRUFDQTNyQixNQUFBLENBQUFyQixtQkFBQSxlQUFBaXRCLGlCQUFBLEVBQ0EsQ0FFQUosY0FBQXZpQixDQUFBLEVBQ0EsS0FBQWdqQixxQkFBQSxHQUNBO0FBQ0EsQ0FFQVIsaUJBQUF4aUIsQ0FBQSxFQUNBLE1BQUFpakIsTUFBQSxDQUFBampCLENBQUEsRUFBQTlLLE1BQUEsRUFBQS9DLEVBQUEsT0FDQSxNQUFBcEIsR0FBQSxDQUFBa3lCLE1BQUEsRUFBQUEsTUFBQSxDQUFBeG9CLE9BQUEsQ0FBQXdvQixNQUFBLENBQUF4b0IsT0FBQSx3QkFDQSxHQUFBMUosR0FBQSxFQUNBLEtBQUFteUIscUJBQUEsQ0FBQW55QixHQUFBLEVBQ0EsTUFDQSxLQUFBaXlCLHFCQUFBLEdBQ0EsQ0FDQSxDQUVBUCxxQkFBQSxFQUNBLEtBQUFPLHFCQUFBLEdBQ0EsQ0FFQU4scUJBQUExaUIsQ0FBQSxFQUNBLE1BQUEvQyxNQUFBLENBQUErQyxDQUFBLEVBQUE5SyxNQUFBLEVBQUErSCxNQUFBLEtBQ0EsTUFBQTdLLEdBQUEsQ0FBQTROLENBQUEsRUFBQTlLLE1BQUEsRUFBQTlDLEdBQUEsS0FFQTtBQUNBLEdBQUE2SyxNQUFBLGtCQUFBN0ssR0FBQSxnQkFDQSxPQUNBLENBRUEsTUFBQUQsRUFBQSxDQUFBNk4sQ0FBQSxFQUFBOUssTUFBQSxFQUFBL0MsRUFBQSxPQUNBLE1BQUFwQixHQUFBLENBQUFvQixFQUFBLEVBQUFzSSxPQUFBLDJCQUNBLEdBQUExSixHQUFBLEVBQ0EsS0FBQW15QixxQkFBQSxDQUFBbnlCLEdBQUEsRUFDQSxNQUNBLEtBQUFpeUIscUJBQUEsR0FDQSxDQUNBLENBRUFMLGtCQUFBLEVBQ0EsS0FBQUsscUJBQUEsR0FDQSxDQUVBRSxzQkFBQWgwQixNQUFBLEVBQ0EsSUFBQUEsTUFBQSxRQUNBLEtBQUEwekIsYUFBQSxDQUFBL3FCLEdBQUEsQ0FBQTNJLE1BQUEsRUFDQSxLQUFBaTBCLFNBQUEsR0FDQSxDQUVBSCxzQkFBQSxFQUNBLEtBQUFILFlBQUEsTUFDQSxLQUFBRCxhQUFBLENBQUF0a0IsS0FBQSxHQUNBLEtBQUE2a0IsU0FBQSxHQUNBLENBRUFBLFVBQUEsRUFDQSxRQUFBTCxPQUFBLFFBQ0EsS0FBQUEsT0FBQSxFQUFBL3JCLE1BQUEsQ0FBQUMscUJBQUEsRUFBQTRCLFVBQUEsT0FDQSxLQUFBa3FCLE9BQUEsR0FDQSxRQUFBRCxZQUFBLEVBQ0EsS0FBQUEsWUFBQSxPQUNBLEtBQUFPLFdBQUEsR0FDQSxPQUNBLENBQ0EsTUFBQXZjLElBQUEsQ0FBQXhYLEtBQUEsQ0FBQUMsSUFBQSxNQUFBc3pCLGFBQUEsRUFDQSxLQUFBQSxhQUFBLENBQUF0a0IsS0FBQSxHQUNBdUksSUFBQSxDQUFBdFcsT0FBQSxDQUFBb0MsQ0FBQSxPQUFBMHdCLFdBQUEsQ0FBQTF3QixDQUFBLEdBQ0EsS0FDQSxDQUdBeXdCLFlBQUEsRUFDQSxLQUFBeHRCLE9BQUEsRUFBQXpKLGVBQUEsRUFDQW9CLGdCQUFBLHNCQUNBZ0QsT0FBQSxHQUFBUSxHQUFBLE9BQUFzeUIsV0FBQSxDQUFBdHlCLEdBQUEsR0FDQSxDQUVBc3lCLFlBQUFuMEIsTUFBQSxFQUNBLElBQUFBLE1BQUEsUUFFQSxNQUFBRSxJQUFBLENBQUFGLE1BQUEsQ0FBQTNCLGdCQUFBLCtCQUVBO0FBQ0E2QixJQUFBLENBQUFtQixPQUFBLENBQUFmLEdBQUEsT0FBQTh6QixhQUFBLENBQUE5ekIsR0FBQSxHQUVBO0FBQ0FKLElBQUEsQ0FBQW1CLE9BQUEsQ0FBQWYsR0FBQSxHQUNBLE1BQUErekIsRUFBQSxDQUFBNTRCLFVBQUEsQ0FBQStsQixnQkFBQSxDQUFBbGhCLEdBQUEsRUFBQW1oQixnQkFBQSw0QkFDQW5oQixHQUFBLENBQUFDLEtBQUEsQ0FBQSt6QixRQUFBLENBQUFELEVBQUEsR0FBQXQ0QixJQUFBLENBQUFvRyxLQUFBLENBQUFreUIsRUFBQSxVQUNBLEdBRUE7QUFDQSxJQUNBLE1BQUF2ekIsQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLE1BQUEzRixFQUFBLENBQUFELENBQUEsQ0FBQWhCLGVBQUEsQ0FDQSxNQUFBNmhCLEdBQUEsQ0FBQTdnQixDQUFBLENBQUE4Z0IsTUFBQSxDQUFBN2hCLGdDQUFBLENBQUFDLE1BQUEsQ0FBQWUsRUFBQTtBQUNBO0FBQ0EsTUFBQThoQixNQUFBLENBQUE5b0IsRUFBQSxDQUFBdW5CLHFCQUFBLENBQUFJLDJCQUFBLENBQUE1Z0IsQ0FBQSxDQUFBZCxNQUFBLENBQUEyaEIsR0FBQSxDQUFBeGdCLEtBQUEsRUFDQSxHQUFBaEIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBOGdCLE1BQUEsR0FDQSxNQUFBd0gsT0FBQSxDQUFBeEgsTUFBQSxDQUFBeUgsSUFBQSxFQUFBOXZCLENBQUEsQ0FBQThHLENBQUEsR0FBQXZGLElBQUEsQ0FBQXc0QixHQUFBLENBQUEvNUIsQ0FBQSxDQUFBbW5CLEdBQUEsQ0FBQXhnQixLQUFBLENBQUFHLENBQUEsU0FDQSxHQUFBK29CLE9BQUEsRUFDQXZwQixDQUFBLENBQUE4Z0IsTUFBQSxDQUFBeGdCLGtCQUFBLENBQUFwQixNQUFBLENBQUE2aUIsTUFBQSxFQUNBLENBQ0EsQ0FDQSxPQUFBL1IsQ0FBQSxFQUNBbFgsQ0FBQSxDQUFBbWYsS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLDRDQUFBb1UsQ0FBQSxFQUNBLENBQ0EsQ0FFQXNqQixjQUFBSSxNQUFBLEVBQ0EsSUFBQUEsTUFBQSxRQUNBLElBQUFDLE1BQUEsR0FDQSxNQUFBQyxPQUFBLENBQUFGLE1BQUEsQ0FBQTVvQixxQkFBQSxHQUNBNG9CLE1BQUEsQ0FBQW4yQixnQkFBQSw4QkFBQWdELE9BQUEsQ0FBQW1PLEtBQUEsR0FDQSxNQUFBeFEsR0FBQSxDQUFBd1EsS0FBQSxDQUFBdlEsWUFBQSxtQkFDQSxJQUFBbzFCLEVBQUEsR0FDQSxHQUFBcjFCLEdBQUEsRUFDQSxNQUFBOUUsQ0FBQSxDQUFBRyxNQUFBLENBQUEyRSxHQUFBLEVBQUF0RSxJQUFBLEdBQUFRLFdBQUEsR0FDQSxHQUFBaEIsQ0FBQSxDQUFBeTZCLFFBQUEsT0FDQSxNQUFBbjVCLENBQUEsQ0FBQUMsVUFBQSxDQUFBdkIsQ0FBQSxFQUNBLEdBQUF3QixNQUFBLENBQUFDLFFBQUEsQ0FBQUgsQ0FBQSxHQUFBazVCLE9BQUEsQ0FBQXZvQixLQUFBLElBQ0Frb0IsRUFBQSxDQUFBNzRCLENBQUEsS0FBQWs1QixPQUFBLENBQUF2b0IsS0FBQSxDQUNBLE1BQ0Frb0IsRUFBQSxHQUNBLENBQ0EsTUFDQUEsRUFBQSxNQUFBTyxZQUFBLENBQUExNkIsQ0FBQSxFQUNBLENBQ0EsTUFDQSxNQUFBMjZCLEVBQUEsQ0FBQXJULGdCQUFBLENBQUFoUyxLQUFBLEVBQ0E2a0IsRUFBQSxDQUFBNTRCLFVBQUEsQ0FBQW81QixFQUFBLENBQUFQLFFBQUEsVUFDQSxDQUNBLEdBQUFELEVBQUEsQ0FBQUksTUFBQSxDQUFBQSxNQUFBLENBQUFKLEVBQUEsQ0FDQSxHQUNBRyxNQUFBLENBQUFqMEIsS0FBQSxDQUFBc1ksV0FBQSxrQkFBQTRiLE1BQUEsR0FBQTE0QixJQUFBLENBQUFvRyxLQUFBLENBQUFzeUIsTUFBQSxjQUNBLENBRUFHLGFBQUFsa0IsS0FBQSxFQUNBLEdBQUFBLEtBQUEsZ0JBQ0EsTUFBQXhXLENBQUEsQ0FBQUcsTUFBQSxDQUFBcVcsS0FBQSxFQUFBaFcsSUFBQSxHQUFBUSxXQUFBLEdBQ0EsR0FBQWhCLENBQUEsZUFDQSxHQUFBQSxDQUFBLENBQUF5NkIsUUFBQSxRQUNBLE1BQUFuNUIsQ0FBQSxDQUFBQyxVQUFBLENBQUF2QixDQUFBLEVBQ0EsT0FBQXdCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsR0FDQSxDQUNBLEdBQUF0QixDQUFBLENBQUF5NkIsUUFBQSxTQUFBejZCLENBQUEsQ0FBQXk2QixRQUFBLFFBQ0EsTUFBQW41QixDQUFBLENBQUFDLFVBQUEsQ0FBQXZCLENBQUEsRUFDQSxNQUFBbUQsSUFBQSxDQUFBNUIsVUFBQSxDQUFBK2xCLGdCQUFBLENBQUFoaUIsUUFBQSxDQUFBa0osZUFBQSxFQUFBb3NCLFFBQUEsTUFDQSxPQUFBcDVCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsQ0FBQTZCLElBQUEsR0FDQSxDQUNBLE1BQUE3QixDQUFBLENBQUFDLFVBQUEsQ0FBQXZCLENBQUEsRUFDQSxPQUFBd0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQUEsQ0FBQSxHQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXpCLEVBQUEsQ0FBQWc3QiwwQkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsc0JBQUFDLE9BQUEsRUFFQSxJQUFBQSxPQUFBLEdBQUFBLE9BQUEsQ0FBQTUyQixnQkFBQSxFQUNBLE9BQ0EsQ0FFQSxJQUFBNjJCLE1BQUEsQ0FBQUQsT0FBQSxDQUFBNTJCLGdCQUFBLDJCQUNBLElBQUE2MkIsTUFBQSxDQUFBNTJCLE1BQUEsRUFDQSxPQUNBLENBRUE2QixLQUFBLENBQUE2USxTQUFBLENBQUEzUCxPQUFBLENBQUE2UCxJQUFBLENBQUFna0IsTUFBQSxVQUFBNXlCLEtBQUEsRUFFQTtBQUNBLEdBQUFBLEtBQUEsQ0FBQWlKLE9BQUEsc0JBQ0EsT0FDQSxDQUNBO0FBQ0EsR0FBQWpKLEtBQUEsQ0FBQThTLFlBQUEsNEJBQ0EsT0FDQSxDQUVBO0FBQ0EsSUFBQStmLFFBQUEsQ0FBQTd5QixLQUFBLENBQUFyRCxZQUFBLE9BQ0EsSUFBQWsyQixRQUFBLEVBQ0EsSUFBQWp5QixHQUFBLENBQUFaLEtBQUEsQ0FBQTVFLE9BQUEsRUFBQTRFLEtBQUEsQ0FBQTVFLE9BQUEsQ0FBQW9xQixZQUFBLENBQUF6dEIsTUFBQSxDQUFBaUksS0FBQSxDQUFBNUUsT0FBQSxDQUFBb3FCLFlBQUEsUUFDQXFOLFFBQUEsQ0FBQXA3QixFQUFBLENBQUFnN0IsMEJBQUEsQ0FBQUssa0JBQUEsa0JBQUFseUIsR0FBQSxNQUNBWixLQUFBLENBQUF6RCxZQUFBLE1BQUFzMkIsUUFBQSxFQUNBLENBRUE7QUFDQSxJQUFBRSxVQUFBLENBQUF0N0IsRUFBQSxDQUFBZzdCLDBCQUFBLENBQUFPLGtCQUFBLENBQUFMLE9BQUEsQ0FBQTN5QixLQUFBLENBQUE2eUIsUUFBQSxFQUVBO0FBQ0EsSUFBQXpqQixPQUFBLENBQUFsUyxRQUFBLENBQUEyUSxhQUFBLFFBQ0F1QixPQUFBLENBQUF0QixTQUFBLHNDQUVBO0FBQ0E5TixLQUFBLENBQUFSLFNBQUEsQ0FBQTZHLEdBQUEscUJBQ0FyRyxLQUFBLENBQUF6RCxZQUFBLGtCQUNBeUQsS0FBQSxDQUFBekQsWUFBQSxnQkFBQXlELEtBQUEsQ0FBQW1WLE9BQUEsaUJBRUEsSUFBQThkLFVBQUEsQ0FBQS8xQixRQUFBLENBQUEyUSxhQUFBLFVBQ0FvbEIsVUFBQSxDQUFBbmxCLFNBQUEsd0JBQ0FtbEIsVUFBQSxDQUFBMTJCLFlBQUEsT0FBQXMyQixRQUFBLEVBRUEsSUFBQUssVUFBQSxDQUFBaDJCLFFBQUEsQ0FBQTJRLGFBQUEsVUFDQXFsQixVQUFBLENBQUFwbEIsU0FBQSx5QkFDQW9sQixVQUFBLENBQUEzMkIsWUFBQSxPQUFBczJCLFFBQUEsRUFDQUssVUFBQSxDQUFBM2pCLFdBQUEsQ0FBQXJTLFFBQUEsQ0FBQWkyQixjQUFBLENBQUFKLFVBQUEsR0FFQTtBQUNBO0FBQ0EsSUFBQUssUUFBQSxDQUFBMzdCLEVBQUEsQ0FBQWc3QiwwQkFBQSxDQUFBWSxxQkFBQSxDQUFBcnpCLEtBQUEsQ0FBQW9QLE9BQUEsQ0FBQTJqQixVQUFBLEVBRUEsSUFBQUssUUFBQSxFQUNBLElBQUFwekIsS0FBQSxDQUFBb0YsVUFBQTtBQUNBO0FBQ0FwRixLQUFBLENBQUFvRixVQUFBLENBQUFzSCxZQUFBLENBQUEwQyxPQUFBLENBQUFwUCxLQUFBLEVBQ0FvUCxPQUFBLENBQUFHLFdBQUEsQ0FBQXZQLEtBQUEsRUFDQW9QLE9BQUEsQ0FBQUcsV0FBQSxDQUFBMGpCLFVBQUEsRUFDQTdqQixPQUFBLENBQUFHLFdBQUEsQ0FBQTJqQixVQUFBLEVBQ0EsQ0FFQTtBQUNBbHpCLEtBQUEsQ0FBQWdFLGdCQUFBLHFCQUNBaEUsS0FBQSxDQUFBekQsWUFBQSxnQkFBQXlELEtBQUEsQ0FBQW1WLE9BQUEsaUJBQ0EsR0FDQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUEyZCxtQkFBQTNHLE1BQUEsRUFDQSxJQUFBcHhCLElBQUEsQ0FBQWhELE1BQUEsQ0FBQW8wQixNQUFBLG9CQUNBLElBQUE5d0IsR0FBQSxDQUFBNUIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsTUFDQSxJQUFBVixFQUFBLENBQUFELElBQUEsQ0FBQU0sR0FBQSxDQUNBO0FBQ0EsTUFBQTZCLFFBQUEsQ0FBQUMsY0FBQSxDQUFBbkMsRUFBQSxHQUNBSyxHQUFBLENBQUE1QixJQUFBLENBQUErQixNQUFBLEdBQUFDLFFBQUEsS0FBQUMsS0FBQSxNQUNBVixFQUFBLENBQUFELElBQUEsQ0FBQU0sR0FBQSxDQUNBLENBQ0EsT0FBQUwsRUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFnNEIsbUJBQUFMLE9BQUEsQ0FBQTN5QixLQUFBLENBQUE2eUIsUUFBQSxFQUNBO0FBQ0EsR0FBQUEsUUFBQSxFQUNBLElBQUFTLEtBQUEsQ0FBQVgsT0FBQSxDQUFBcjNCLGFBQUEsZUFBQTdELEVBQUEsQ0FBQWc3QiwwQkFBQSxDQUFBYyxVQUFBLENBQUFWLFFBQUEsUUFDQSxHQUFBUyxLQUFBLEVBQUFBLEtBQUEsQ0FBQWhrQixXQUFBLEVBQ0EsSUFBQWdTLEdBQUEsQ0FBQWdTLEtBQUEsQ0FBQWhrQixXQUFBLENBQUFsWCxJQUFBLEdBQ0E7QUFDQWs3QixLQUFBLENBQUFsdUIsVUFBQSxFQUFBa3VCLEtBQUEsQ0FBQWx1QixVQUFBLENBQUFDLFdBQUEsQ0FBQWl1QixLQUFBLEVBQ0EsR0FBQWhTLEdBQUEsRUFDQSxPQUFBQSxHQUFBLENBQ0EsQ0FDQSxDQUNBLENBRUE7QUFDQSxJQUFBa1MsVUFBQSxDQUFBeHpCLEtBQUEsQ0FBQWlKLE9BQUEsb0JBQ0EsR0FBQXVxQixVQUFBLEVBQ0EsSUFBQUMsRUFBQSxDQUFBRCxVQUFBLENBQUFsNEIsYUFBQSxzQkFDQSxHQUFBbTRCLEVBQUEsRUFBQUEsRUFBQSxDQUFBbmtCLFdBQUEsRUFDQSxJQUFBb2tCLEVBQUEsQ0FBQUQsRUFBQSxDQUFBbmtCLFdBQUEsQ0FBQWxYLElBQUEsR0FDQTtBQUNBcTdCLEVBQUEsQ0FBQXJ1QixVQUFBLEVBQUFxdUIsRUFBQSxDQUFBcnVCLFVBQUEsQ0FBQUMsV0FBQSxDQUFBb3VCLEVBQUEsRUFDQSxHQUFBQyxFQUFBLEVBQ0EsT0FBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsSUFBQUMsSUFBQSxDQUFBM3pCLEtBQUEsQ0FBQXJELFlBQUEsZUFDQSxHQUFBZzNCLElBQUEsRUFDQSxPQUFBQSxJQUFBLENBQ0EsQ0FDQSxHQUFBM3pCLEtBQUEsQ0FBQTVFLE9BQUEsRUFBQTRFLEtBQUEsQ0FBQTVFLE9BQUEsQ0FBQXVILEtBQUEsRUFDQSxPQUFBNUssTUFBQSxDQUFBaUksS0FBQSxDQUFBNUUsT0FBQSxDQUFBdUgsS0FBQSxFQUNBLENBQ0EsR0FBQTNDLEtBQUEsQ0FBQTVFLE9BQUEsRUFBQTRFLEtBQUEsQ0FBQTVFLE9BQUEsQ0FBQW9xQixZQUFBLEVBQ0EsT0FBQXp0QixNQUFBLENBQUFpSSxLQUFBLENBQUE1RSxPQUFBLENBQUFvcUIsWUFBQSxFQUNBLENBQ0EsR0FBQXhsQixLQUFBLENBQUFwRSxJQUFBLEVBQ0EsT0FBQTdELE1BQUEsQ0FBQWlJLEtBQUEsQ0FBQXBFLElBQUEsRUFDQSxDQUNBLGVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBeTNCLHNCQUFBcnpCLEtBQUEsQ0FBQW9QLE9BQUEsQ0FBQTJqQixVQUFBLEVBQ0EsSUFBQXh6QixHQUFBLENBQUFTLEtBQUEsQ0FBQWlKLE9BQUEsb0JBQ0EsSUFBQTJxQixTQUFBLENBQUE1ekIsS0FBQSxDQUFBdWhCLGFBQUEsQ0FFQSxHQUFBaGlCLEdBQUEsRUFBQXEwQixTQUFBLEVBQUFBLFNBQUEsQ0FBQXAwQixTQUFBLENBQUFuQyxRQUFBLHdCQUNBO0FBQ0EsTUFBQXUyQixTQUFBLENBQUFDLFVBQUEsRUFDQUQsU0FBQSxDQUFBdnVCLFdBQUEsQ0FBQXV1QixTQUFBLENBQUFDLFVBQUEsRUFDQSxDQUNBdDBCLEdBQUEsQ0FBQUMsU0FBQSxDQUFBNkcsR0FBQSwyQkFFQXV0QixTQUFBLENBQUFwMEIsU0FBQSxDQUFBNkcsR0FBQSxvQkFDQXV0QixTQUFBLENBQUFya0IsV0FBQSxDQUFBdlAsS0FBQSxFQUVBLElBQUE2eUIsUUFBQSxDQUFBN3lCLEtBQUEsQ0FBQXJELFlBQUEsT0FDQSxJQUFBbTNCLFFBQUEsQ0FBQTUyQixRQUFBLENBQUEyUSxhQUFBLFVBQ0FpbUIsUUFBQSxDQUFBaG1CLFNBQUEsd0JBQ0FnbUIsUUFBQSxDQUFBdjNCLFlBQUEsT0FBQXMyQixRQUFBLEVBRUEsSUFBQWtCLFFBQUEsQ0FBQTcyQixRQUFBLENBQUEyUSxhQUFBLFVBQ0FrbUIsUUFBQSxDQUFBam1CLFNBQUEseUJBQ0FpbUIsUUFBQSxDQUFBeDNCLFlBQUEsT0FBQXMyQixRQUFBLEVBQ0EsR0FBQUUsVUFBQSxFQUNBZ0IsUUFBQSxDQUFBeGtCLFdBQUEsQ0FBQXJTLFFBQUEsQ0FBQWkyQixjQUFBLENBQUFKLFVBQUEsR0FDQSxDQUNBO0FBQ0E7QUFDQTtBQUVBYSxTQUFBLENBQUFya0IsV0FBQSxDQUFBdWtCLFFBQUEsRUFDQUYsU0FBQSxDQUFBcmtCLFdBQUEsQ0FBQXdrQixRQUFBLEVBQ0EsWUFDQSxDQUVBO0FBQ0EsYUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBUixXQUFBMzdCLENBQUEsRUFDQUEsQ0FBQSxDQUFBRyxNQUFBLENBQUFILENBQUEsRUFDQSxHQUFBMk4sTUFBQSxDQUFBMU4sR0FBQSxTQUFBME4sTUFBQSxDQUFBMU4sR0FBQSxDQUFBQyxNQUFBLGVBQ0EsT0FBQXlOLE1BQUEsQ0FBQTFOLEdBQUEsQ0FBQUMsTUFBQSxDQUFBRixDQUFBLEVBQ0EsQ0FDQSxPQUFBQSxDQUFBLENBQUFJLE9BQUEscUJBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBUCxFQUFBLENBQUF1OEIsaUJBQUEsVUFBQTd0QixJQUFBLEVBQ0EsSUFBQUEsSUFBQSxFQUNBLE9BQ0EsQ0FDQSxJQUNBMU8sRUFBQSxDQUFBOHJCLG9CQUFBLEVBQUFDLE9BQUEsR0FBQXJkLElBQUEsRUFDQSxPQUFBcUksQ0FBQSxhQUVBLElBQ0EsSUFBQXlsQixDQUFBLENBQUF4OEIsRUFBQSxDQUFBZzdCLDBCQUFBLENBQ0EsR0FBQXdCLENBQUEsU0FBQUEsQ0FBQSxDQUFBdkIscUJBQUEsZUFDQXVCLENBQUEsQ0FBQXZCLHFCQUFBLENBQUF2c0IsSUFBQSxFQUNBLENBQ0EsT0FBQXFJLENBQUEsRUFDQWxYLENBQUEsQ0FBQW1mLEtBQUEsRUFBQUMsR0FBQSxFQUFBdGMsS0FBQSw4QkFBQW9VLENBQUEsRUFDQSxDQUVBO0FBQ0EsSUFDQXJJLElBQUEsQ0FBQXBLLGdCQUFBLDRDQUFBZ0QsT0FBQSxVQUFBbTFCLEVBQUEsRUFDQSxHQUFBQSxFQUFBLENBQUFDLGtCQUFBLEVBQ0EsT0FDQSxDQUNBRCxFQUFBLENBQUFDLGtCQUFBLE1BQ0FELEVBQUEsQ0FBQTMzQixZQUFBLGdCQUFBMjNCLEVBQUEsQ0FBQS9lLE9BQUEsaUJBQ0E7QUFDQStlLEVBQUEsQ0FBQWx3QixnQkFBQSxlQUNBa3dCLEVBQUEsQ0FBQTMzQixZQUFBLGdCQUFBMjNCLEVBQUEsQ0FBQS9lLE9BQUEsaUJBQ0EsR0FBQW9jLE9BQUEsUUFDQSxHQUNBLE9BQUEvaUIsQ0FBQSxFQUNBbFgsQ0FBQSxDQUFBbWYsS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLDRCQUFBb1UsQ0FBQSxFQUNBLENBQ0EsRUFFQS9XLEVBQUEsQ0FBQTRyQixrQkFBQSxDQUFBNXJCLEVBQUEsQ0FBQTRyQixrQkFBQSxhQUNBLElBQUErUSxJQUFBLElBRUEsU0FBQWprQixTQUFBdlUsSUFBQSxDQUFBQyxRQUFBLENBQUF1aUIsSUFBQSxDQUFBdlIsT0FBQSxFQUNBdW5CLElBQUEsQ0FBQTViLElBQUEsRUFBQTVjLElBQUEsQ0FBQUMsUUFBQSxDQUFBdWlCLElBQUEsQ0FBQXZSLE9BQUEsR0FDQSxDQUVBLFNBQUF5VyxLQUFBbmQsSUFBQSxFQUNBLElBQUFBLElBQUEsUUFDQWl1QixJQUFBLENBQUFyMUIsT0FBQSxVQUFBb0MsQ0FBQSxFQUNBZ0YsSUFBQSxDQUFBcEssZ0JBQUEsQ0FBQW9GLENBQUEsQ0FBQXRGLFFBQUEsRUFBQWtELE9BQUEsVUFBQTZZLElBQUEsRUFDQUEsSUFBQSxDQUFBeWMsU0FBQSxDQUFBemMsSUFBQSxDQUFBeWMsU0FBQSxLQUNBLEdBQUF6YyxJQUFBLENBQUF5YyxTQUFBLENBQUFsekIsQ0FBQSxDQUFBdkYsSUFBQSxTQUNBLElBQ0F1RixDQUFBLENBQUFpZCxJQUFBLEVBQUFqZCxDQUFBLENBQUFpZCxJQUFBLENBQUF4RyxJQUFBLENBQUF6UixJQUFBLEVBQ0F5UixJQUFBLENBQUF5YyxTQUFBLENBQUFsekIsQ0FBQSxDQUFBdkYsSUFBQSxPQUNBLE9BQUE4VyxFQUFBLEVBQ0EsQ0FDQSxHQUNBLEdBQ0EsQ0FFQSxTQUFBN0YsUUFBQTFHLElBQUEsRUFDQSxJQUFBQSxJQUFBLFFBQ0FpdUIsSUFBQSxDQUFBcjFCLE9BQUEsVUFBQW9DLENBQUEsRUFDQWdGLElBQUEsQ0FBQXBLLGdCQUFBLENBQUFvRixDQUFBLENBQUF0RixRQUFBLEVBQUFrRCxPQUFBLFVBQUE2WSxJQUFBLEVBQ0EsSUFDQXpXLENBQUEsQ0FBQTBMLE9BQUEsRUFBQTFMLENBQUEsQ0FBQTBMLE9BQUEsQ0FBQStLLElBQUEsQ0FBQXpSLElBQUEsRUFDQSxPQUFBdU0sRUFBQSxFQUNBLENBQ0EsR0FBQWtGLElBQUEsQ0FBQXljLFNBQUEsUUFBQXpjLElBQUEsQ0FBQXljLFNBQUEsQ0FBQWx6QixDQUFBLENBQUF2RixJQUFBLEVBQ0EsR0FDQSxHQUNBLENBRUEsT0FBQXVVLFFBQUEsQ0FBQW1ULElBQUEsQ0FBQXpXLE9BQUEsRUFDQSxJQUVBcFYsRUFBQSxDQUFBOHJCLG9CQUFBLEVBQ0FDLFFBQUFyZCxJQUFBLEVBQ0EsSUFBQW11QixNQUFBLEVBQUFudUIsSUFBQSxDQUFBb3VCLFFBQUEsTUFBQXB1QixJQUFBLE1BQUFxdUIsTUFBQSxJQUFBOTRCLEtBQUEsQ0FBQWtULElBQUEsQ0FBQXpJLElBQUEsQ0FBQXBLLGdCQUFBLDZCQUNBdTRCLE1BQUEsQ0FBQXYxQixPQUFBLFVBQUEwMUIsQ0FBQSxFQUNBLElBQUFBLENBQUEsQ0FBQWxaLE9BQUEsR0FBQWtaLENBQUEsQ0FBQWxaLE9BQUEsNEJBQ0EsR0FBQWtaLENBQUEsQ0FBQUMsZ0JBQUEsUUFFQSxJQUFBQyxNQUFBLENBQUFGLENBQUEsQ0FBQW41QixhQUFBLHFCQUNBLElBQUFzNUIsS0FBQSxDQUFBSCxDQUFBLENBQUFuNUIsYUFBQSxxQkFDQSxJQUFBdTVCLElBQUEsQ0FBQUosQ0FBQSxDQUFBbjVCLGFBQUEsb0JBRUEsSUFBQXE1QixNQUFBLEdBQUFDLEtBQUEsUUFFQTtBQUNBLHFCQUFBNzFCLE9BQUEsVUFBQVIsQ0FBQSxFQUNBLElBQUFxMkIsS0FBQSxDQUFBOWhCLFlBQUEsQ0FBQXZVLENBQUEsR0FBQW8yQixNQUFBLENBQUE3aEIsWUFBQSxDQUFBdlUsQ0FBQSxHQUNBcTJCLEtBQUEsQ0FBQXI0QixZQUFBLENBQUFnQyxDQUFBLENBQUFvMkIsTUFBQSxDQUFBaDRCLFlBQUEsQ0FBQTRCLENBQUEsR0FDQSxDQUNBLEdBR0EsU0FBQXUyQix1QkFBQSxFQUNBLEdBQUFGLEtBQUEsQ0FBQXhtQixLQUFBLEdBQUF1bUIsTUFBQSxDQUFBdm1CLEtBQUEsRUFDQXdtQixLQUFBLENBQUF4bUIsS0FBQSxDQUFBdW1CLE1BQUEsQ0FBQXZtQixLQUFBLENBQ0EsQ0FDQSxDQUVBLFNBQUEybUIsZUFBQXAwQixFQUFBLEVBQ0EsSUFBQUEsRUFBQSxDQUFBZ0QsYUFBQSxLQUFBOFUsS0FBQSxVQUFBNVUsT0FBQSxnQkFBQTZPLEVBQUEsR0FDQSxDQUNBLFNBQUFzaUIsZ0JBQUFyMEIsRUFBQSxFQUNBLElBQUFBLEVBQUEsQ0FBQWdELGFBQUEsS0FBQThVLEtBQUEsV0FBQTVVLE9BQUEsZ0JBQUE2TyxFQUFBLEdBQ0EsQ0FFQTtBQUNBLElBQUF5VCxRQUFBLEdBQ0EsSUFBQThPLFdBQUEsTUFDQSxJQUFBQyxjQUFBLE9BQ0EsSUFBQUMsYUFBQSxHQUVBO0FBQ0EsSUFBQUMsZUFBQSxDQUFBNzBCLFFBQUEsQ0FBQWswQixDQUFBLENBQUFyNUIsT0FBQSxDQUFBaTZCLFdBQUEsRUFBQTU5QixFQUFBLENBQUF1a0Isd0JBQUEsS0FDQW9aLGVBQUEsQ0FBQWg4QixNQUFBLENBQUFDLFFBQUEsQ0FBQSs3QixlQUFBLEVBQUEzN0IsSUFBQSxDQUFBRCxHQUFBLEdBQUE0N0IsZUFBQSxNQUVBLFNBQUFFLHNCQUFBLEVBQ0FuUCxRQUFBLEdBRUEsR0FBQThPLFdBQUEsUUFDQSxPQUNBLENBRUEsSUFBQTVOLElBQUEsQ0FBQXR2QixNQUFBLENBQUFrOUIsV0FBQSxFQUNBQSxXQUFBLE1BRUEsR0FBQU4sTUFBQSxDQUFBdm1CLEtBQUEsR0FBQWlaLElBQUEsRUFDQXNOLE1BQUEsQ0FBQXZtQixLQUFBLENBQUFpWixJQUFBLENBQ0E7QUFDQTBOLGNBQUEsQ0FBQUosTUFBQSxFQUNBLENBRUEsR0FBQU8sY0FBQSxFQUNBQSxjQUFBLE9BQ0FGLGVBQUEsQ0FBQUwsTUFBQSxFQUNBLENBRUFRLGFBQUEsQ0FBQS9YLElBQUEsQ0FBQWpTLEdBQUEsR0FDQSxDQUVBLFNBQUFvcUIseUJBQUFwbkIsR0FBQSxDQUFBcW5CLFdBQUEsRUFDQVAsV0FBQSxDQUFBOW1CLEdBQUEsQ0FDQSxHQUFBcW5CLFdBQUEsRUFDQU4sY0FBQSxNQUNBLENBRUE7QUFDQSxHQUFBQSxjQUFBLEVBQ0EsR0FBQS9PLFFBQUEsRUFDQXBXLFlBQUEsQ0FBQW9XLFFBQUEsRUFDQUEsUUFBQSxHQUNBLENBQ0FtUCxxQkFBQSxHQUNBLE9BQ0EsQ0FFQSxJQUFBbnFCLEdBQUEsQ0FBQWlTLElBQUEsQ0FBQWpTLEdBQUEsR0FDQSxJQUFBM0ksS0FBQSxDQUFBMkksR0FBQSxDQUFBZ3FCLGFBQUEsQ0FFQTtBQUNBLEdBQUEzeUIsS0FBQSxFQUFBNHlCLGVBQUEsRUFDQUUscUJBQUEsR0FDQSxPQUNBLENBRUEsR0FBQW5QLFFBQUEsRUFDQSxPQUNBLENBRUFBLFFBQUEsQ0FBQS9lLFVBQUEsQ0FBQWt1QixxQkFBQSxDQUFBNzdCLElBQUEsQ0FBQUQsR0FBQSxHQUFBNDdCLGVBQUEsQ0FBQTV5QixLQUFBLEdBQ0EsQ0FFQSxTQUFBaXpCLGdCQUFBLEVBQ0FYLHNCQUFBLEdBQ0EsQ0FFQSxTQUFBWSxpQkFBQSxFQUNBWixzQkFBQSxHQUNBLENBRUEsU0FBQWEsZUFBQSxFQUNBSix3QkFBQSxDQUFBWCxLQUFBLENBQUF4bUIsS0FBQSxRQUNBLENBRUEsU0FBQXduQixnQkFBQSxFQUNBTCx3QkFBQSxDQUFBWCxLQUFBLENBQUF4bUIsS0FBQSxPQUNBLENBRUF1bUIsTUFBQSxDQUFBM3dCLGdCQUFBLFNBQUF5eEIsZUFBQSxFQUNBZCxNQUFBLENBQUEzd0IsZ0JBQUEsVUFBQTB4QixnQkFBQSxFQUNBZCxLQUFBLENBQUE1d0IsZ0JBQUEsU0FBQTJ4QixjQUFBLEVBQ0FmLEtBQUEsQ0FBQTV3QixnQkFBQSxVQUFBNHhCLGVBQUEsRUFFQSxHQUFBZixJQUFBLEVBQ0FBLElBQUEsQ0FBQTd3QixnQkFBQSxxQkFDQTtBQUNBLElBQ0Eyd0IsTUFBQSxDQUFBaHhCLGFBQUEsS0FBQThVLEtBQUEsVUFBQTVVLE9BQUEsU0FDQSxPQUFBNk8sRUFBQSxFQUNBLENBQ0EsR0FDQSxDQUVBO0FBQ0FvaUIsc0JBQUEsR0FFQUwsQ0FBQSxDQUFBQyxnQkFBQSxFQUNBN25CLFFBQUEsRUFDQThuQixNQUFBLENBQUF6d0IsbUJBQUEsU0FBQXV4QixlQUFBLEVBQ0FkLE1BQUEsQ0FBQXp3QixtQkFBQSxVQUFBd3hCLGdCQUFBLEVBQ0FkLEtBQUEsQ0FBQTF3QixtQkFBQSxTQUFBeXhCLGNBQUEsRUFDQWYsS0FBQSxDQUFBMXdCLG1CQUFBLFVBQUEweEIsZUFBQSxFQUNBLENBQ0EsRUFDQSxHQUNBLEVBQ0FDLFdBQUExdkIsSUFBQSxFQUNBLElBQUFtdUIsTUFBQSxFQUFBbnVCLElBQUEsRUFBQUEsSUFBQSxDQUFBb3VCLFFBQUEsTUFBQXB1QixJQUFBLE1BQUFxdUIsTUFBQSxDQUNBLEdBQUE5NEIsS0FBQSxDQUFBa1QsSUFBQSxDQUFBekksSUFBQSxDQUFBcEssZ0JBQUEsMkJBQ0EsRUFDQXU0QixNQUFBLENBQUF2MUIsT0FBQSxVQUFBMDFCLENBQUEsRUFDQSxJQUFBQSxDQUFBLENBQUFsWixPQUFBLEdBQUFrWixDQUFBLENBQUFsWixPQUFBLDRCQUNBLElBQ0FrWixDQUFBLENBQUFDLGdCQUFBLEVBQUFELENBQUEsQ0FBQUMsZ0JBQUEsQ0FBQTduQixPQUFBLEVBQUE0bkIsQ0FBQSxDQUFBQyxnQkFBQSxDQUFBN25CLE9BQUEsR0FDQSxPQUFBNkYsRUFBQSxFQUNBLENBQ0EsT0FBQStoQixDQUFBLENBQUFDLGdCQUFBLENBQ0EsR0FDQSxDQUNBLEVBRUE7QUFDQWo5QixFQUFBLENBQUE0ckIsa0JBQUEsRUFBQTVyQixFQUFBLENBQUE0ckIsa0JBQUEsQ0FBQWxULFFBQUEsQ0FDQSxlQUNBLG1CQUNBLFNBQUF4UCxFQUFBLENBQUFtMUIsS0FBQSxFQUNBcitCLEVBQUEsQ0FBQThyQixvQkFBQSxDQUFBQyxPQUFBLENBQUE3aUIsRUFBQSxFQUNBLEVBQ0EsU0FBQUEsRUFBQSxDQUFBbTFCLEtBQUEsRUFDQXIrQixFQUFBLENBQUE4ckIsb0JBQUEsQ0FBQXNTLFVBQUEsQ0FBQWwxQixFQUFBLEVBQ0EsQ0FDQSxFQUVBO0FBQ0EsVUFBQW8xQix3QkFBQSxFQUNBLFNBQUFDLFdBQUEsRUFDQSxJQUFBQyxTQUFBLENBQUEzK0IsQ0FBQSxDQUFBNnNCLGtCQUFBLENBQ0EsSUFBQThSLFNBQUEsRUFBQUEsU0FBQSxDQUFBQyx3QkFBQSxjQUNBRCxTQUFBLENBQUFDLHdCQUFBLE1BQ0EsSUFBQUMsSUFBQSxDQUFBRixTQUFBLENBQUF2bkIsU0FBQSxDQUFBMFUsYUFBQSxDQUNBNlMsU0FBQSxDQUFBdm5CLFNBQUEsQ0FBQTBVLGFBQUEsVUFBQXppQixFQUFBLEVBQ0F3MUIsSUFBQSxDQUFBdm5CLElBQUEsTUFBQWpPLEVBQUEsRUFDQSxJQUNBLElBQUE2UyxHQUFBLE1BQUF5QixLQUFBLEVBQ0EvWCxRQUFBLENBQUFDLGNBQUEseUJBQ0FELFFBQUEsQ0FBQTVCLGFBQUEseUJBQ0E3RCxFQUFBLENBQUE0ckIsa0JBQUEsRUFBQTVyQixFQUFBLENBQUE0ckIsa0JBQUEsQ0FBQUMsSUFBQSxDQUFBOVAsR0FBQSxFQUNBLE9BQUFkLEVBQUEsRUFDQSxDQUNBLEVBQ0E7QUFDQSxJQUNBLElBQUEwakIsS0FBQSxDQUFBbDVCLFFBQUEsQ0FBQUMsY0FBQSx5QkFDQUQsUUFBQSxDQUFBNUIsYUFBQSx5QkFDQTdELEVBQUEsQ0FBQTRyQixrQkFBQSxFQUFBNXJCLEVBQUEsQ0FBQTRyQixrQkFBQSxDQUFBQyxJQUFBLENBQUE4UyxLQUFBLEVBQ0EsT0FBQTFqQixFQUFBLEVBQ0EsQ0FDQSxZQUNBLENBRUE7QUFDQSxJQUFBc2pCLFVBQUEsSUFDQTk0QixRQUFBLENBQUE4RyxnQkFBQSxDQUNBLDJCQUNBLFdBQ0FneUIsVUFBQSxHQUNBLEVBQ0EsQ0FBQUssSUFBQSxNQUNBLEVBQ0EsQ0FDQSxLQUVBLEdBQUE5d0IsTUFBQSxDQUFBckksUUFBQSxFQzF6RkE7QUFDQTtBQUNBO0FBQ0EsVUFBQTVGLENBQUEsQ0FBQTBaLENBQUEsRUFDQSxhQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQSxTQUFBc2xCLDhCQUFBNVgsUUFBQSxDQUFBQyxNQUFBLEVBRUEsSUFBQTRYLFlBQUEsQ0FFQSxJQUFBN1gsUUFBQSxHQUFBQyxNQUFBLEVBQ0EsT0FDQSxDQUVBNFgsWUFBQSxFQUNBN1gsUUFBQSxDQUFBQSxRQUFBLENBQ0FDLE1BQUEsQ0FBQUEsTUFDQSxFQUVBLFVBQUFybkIsQ0FBQSxDQUFBbW5CLDZCQUFBLGVBQ0FubkIsQ0FBQSxDQUFBbW5CLDZCQUFBLHVCQUFBOFgsWUFBQSxFQUNBLE9BQ0EsQ0FFQXZsQixDQUFBLENBQUFyTixhQUFBLENBQ0EsSUFBQUMsV0FBQSxDQUNBLHNCQUNBLENBQ0FGLE1BQUEsQ0FBQTZ5QixZQUNBLENBQ0EsQ0FDQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQSxNQUFBQywyQkFBQSxDQUVBOTdCLFlBQUEsRUFDQSxLQUFBKzdCLFlBQUEsTUFDQSxLQUFBQyxpQkFBQSxNQUNBLEtBQUFDLGNBQUEsTUFDQSxLQUFBQyxpQkFBQSxNQUNBLEtBQUFDLFNBQUEsSUFDQSxLQUFBQyxrQkFBQSxNQUFBQSxrQkFBQSxDQUFBdnJCLElBQUEsT0FDQSxLQUFBd3JCLFlBQUEsTUFBQUEsWUFBQSxDQUFBeHJCLElBQUEsT0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQTZTLEtBQUEsRUFDQSxLQUFBcVksWUFBQSxDQUFBemxCLENBQUEsQ0FBQTdULGNBQUEsaUNBQ0EsS0FBQXU1QixpQkFBQSxDQUFBMWxCLENBQUEsQ0FBQTFWLGFBQUEsaURBQ0EsS0FBQXE3QixjQUFBLENBQUEzbEIsQ0FBQSxDQUFBN1QsY0FBQSx1Q0FFQSxTQUFBdTVCLGlCQUFBLFFBQUFDLGNBQUEsRUFDQSxPQUNBLENBRUE7QUFDQSxRQUFBRixZQUFBLEVBQ0EsS0FBQUcsaUJBQUEsS0FBQUksZ0JBQUEsTUFBQUYsa0JBQUEsRUFDQSxLQUFBRixpQkFBQSxDQUFBSyxPQUFBLENBQ0EsS0FBQVIsWUFBQSxDQUNBLENBQ0Fwb0IsVUFBQSxNQUNBNm9CLGVBQUEsb0JBQ0EsQ0FDQSxFQUNBLENBRUE7QUFDQWxtQixDQUFBLENBQUFoTixnQkFBQSxjQUFBK3lCLFlBQUEsT0FFQTtBQUNBLEtBQUFELGtCQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBSyxzQkFBQSxFQUNBLElBQUFDLGFBQUEsSUFDQSxJQUFBQyxXQUFBLE1BQ0EsSUFBQVYsY0FBQSxNQUNBLElBQUFXLGFBQUEsTUFFQSxRQUFBYixZQUFBLEVBQ0FXLGFBQUEsQ0FBQXIvQixNQUFBLE1BQUEwK0IsWUFBQSxDQUFBOTVCLFlBQUEseUJBQUF2RSxJQUFBLEdBQ0EsUUFBQWcvQixhQUFBLEVBQ0EsT0FBQUEsYUFBQSxDQUNBLENBRUFDLFdBQUEsTUFBQVosWUFBQSxDQUFBbjdCLGFBQUEsMkRBQ0EsR0FBQSs3QixXQUFBLEVBQ0FELGFBQUEsQ0FBQXIvQixNQUFBLENBQUFzL0IsV0FBQSxDQUFBMTZCLFlBQUEsMkJBQUF2RSxJQUFBLEdBQ0EsUUFBQWcvQixhQUFBLEVBQ0EsT0FBQUEsYUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0FULGNBQUEsQ0FBQTNsQixDQUFBLENBQUExVixhQUFBLDZDQUNBZzhCLGFBQUEsQ0FBQXRtQixDQUFBLENBQUExVixhQUFBLDRDQUVBLFFBQUFpOEIsa0JBQUEsQ0FBQVosY0FBQSxHQUNBLHFCQUNBLENBQ0EsUUFBQVksa0JBQUEsQ0FBQUQsYUFBQSxHQUNBLG9CQUNBLENBRUEsU0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLG1CQUFBNTJCLEVBQUEsRUFDQSxJQUFBMUMsS0FBQSxDQUVBLElBQUEwQyxFQUFBLEVBQ0EsYUFDQSxDQUVBMUMsS0FBQSxDQUFBM0csQ0FBQSxDQUFBNG5CLGdCQUFBLENBQUF2ZSxFQUFBLEVBRUEsSUFBQTFDLEtBQUEsRUFDQSxhQUNBLENBRUEsWUFBQUEsS0FBQSxDQUFBdVgsT0FBQSxFQUNBLGFBQ0EsQ0FFQSxjQUFBdlgsS0FBQSxDQUFBdTVCLFVBQUEsRUFDQSxhQUNBLENBRUEsWUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsd0JBQUEsRUFDQSw0QkFBQU4scUJBQUEsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQU8sd0JBQUEsRUFDQSxLQUFBaEIsaUJBQUEsQ0FBQTU1QixlQUFBLFdBQ0EsS0FBQTQ1QixpQkFBQSxDQUFBbjZCLFlBQUEsd0JBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FvN0Isd0JBQUEsRUFDQSxLQUFBakIsaUJBQUEsQ0FBQW42QixZQUFBLGtCQUNBLEtBQUFtNkIsaUJBQUEsQ0FBQW42QixZQUFBLHVCQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBcTdCLCtCQUFBLEVBQ0EsY0FBQWpCLGNBQUEsUUFBQUEsY0FBQSxDQUFBN2pCLFlBQUEsWUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQStrQiwwQkFBQSxFQUNBdkIsNkJBQUEsaUVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0F3QiwwQkFBQSxFQUNBeEIsNkJBQUEsaURBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FRLG1CQUFBLEVBQ0EsSUFBQWlCLGdCQUFBLE1BQUFOLHVCQUFBLEdBRUEsR0FBQU0sZ0JBQUEsRUFDQSxLQUFBTCx1QkFBQSxHQUVBLHFCQUFBYixTQUFBLEVBQ0EsS0FBQWdCLHlCQUFBLEdBQ0EsQ0FFQSxLQUFBaEIsU0FBQSxZQUNBLE9BQ0EsQ0FFQSxRQUFBZSw4QkFBQSxJQUNBLEtBQUFFLHlCQUFBLEdBQ0EsQ0FFQSxLQUFBSCx1QkFBQSxHQUNBLEtBQUFkLFNBQUEsV0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLGFBQUFpQixLQUFBLEVBQ0EsSUFBQWpkLE1BQUEsQ0FBQWlkLEtBQUEsQ0FBQWpkLE1BQUEsQ0FBQTlSLE9BQUEsd0JBQ0EsSUFBQWd2QixRQUFBLE1BRUEsSUFBQWxkLE1BQUEsRUFDQSxPQUNBLENBRUEzVCxVQUFBLENBQ0EsV0FDQTZ3QixRQUFBLENBQUFuQixrQkFBQSxHQUNBLEVBQ0EsQ0FDQSxFQUNBLENBQ0EsQ0FFQSxHQUFBOWxCLENBQUEsQ0FBQWtuQixVQUFBLGNBQ0FsbkIsQ0FBQSxDQUFBaE4sZ0JBQUEsQ0FDQSxtQkFDQSxXQUNBLElBQUF3eUIsMkJBQUEsR0FBQXBZLElBQUEsR0FDQSxDQUNBLEVBQ0EsTUFDQSxJQUFBb1ksMkJBQUEsR0FBQXBZLElBQUEsR0FDQSxDQUVBLEdBQUE3WSxNQUFBLENBQUFySSxRQUFBLEVDaFNBO0FBQ0E7QUFDQTtBQUNBLFVBQUE1RixDQUFBLEVBQ0EsYUFFQTtBQUVBLG9FQUNBLE1BQUE2Z0MseUJBQUEsQ0FBQXAxQixNQUFBLENBQUFzRSxNQUFBLE9BRUE7QUFDQTh3Qix5QkFBQSxlQUFBL3pCLE9BQUEsS0FDQUEsT0FBQSxFQUFBK0gsWUFBQSxTQUNBLEVBRUFnc0IseUJBQUEsZUFBQS96QixPQUFBLENBQUF6RCxFQUFBLEtBQ0EsSUFBQUEsRUFBQSxHQUFBekQsUUFBQSxDQUFBZ2dCLElBQUEsQ0FBQTdmLFFBQUEsQ0FBQXNELEVBQUEsU0FDQXlELE9BQUEsRUFBQStILFlBQUEsR0FBQXhMLEVBQUEsRUFBQTZkLGNBQUEsUUFDQTdkLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQTZHLEdBQUEsMkJBQ0FlLFVBQUEsS0FBQXpHLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQThHLE1BQUEsZ0NBQ0EsRUFFQTZ4Qix5QkFBQSxjQUFBL3pCLE9BQUEsQ0FBQXpELEVBQUEsS0FDQSxJQUFBQSxFQUFBLFFBQ0F5RCxPQUFBLEVBQUFpbEIsU0FBQSxHQUFBMW9CLEVBQUEsT0FDQTtBQUNBNkUscUJBQUEsS0FBQTJ5Qix5QkFBQSxjQUFBL3pCLE9BQUEsQ0FBQXpELEVBQUEsSUFDQSxFQUVBdzNCLHlCQUFBLGdCQUFBL3pCLE9BQUEsQ0FBQXpELEVBQUEsS0FDQSxJQUFBQSxFQUFBLFFBQ0F5RCxPQUFBLEVBQUFpbEIsU0FBQSxHQUFBMW9CLEVBQUEsU0FDQTtBQUNBNkUscUJBQUEsS0FBQTJ5Qix5QkFBQSxjQUFBL3pCLE9BQUEsQ0FBQXpELEVBQUEsSUFDQSxFQUVBdzNCLHlCQUFBLGFBQUEvekIsT0FBQSxDQUFBekQsRUFBQSxDQUFBeTNCLE9BQUEsQ0FBQTlnQyxDQUFBLENBQUE4Z0MsT0FBQSxLQUNBLElBQUF6M0IsRUFBQSxRQUNBLE1BQUEwM0IsUUFBQSxDQUFBMTNCLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsb0JBQ0EsTUFBQXNGLEtBQUEsQ0FBQTAxQixRQUFBLENBQ0ExM0IsRUFBQSxDQUFBckYsYUFBQSw0QkFBQWdVLFdBQUEsRUFBQTNPLEVBQUEsQ0FBQXZGLE9BQUEsRUFBQUosRUFBQSxVQUNBMkYsRUFBQSxDQUFBdkYsT0FBQSxFQUFBSixFQUFBLFlBRUF2RCxFQUFBLENBQUE2Z0Msb0JBQUEsQ0FBQUMsSUFBQSxDQUFBNTFCLEtBQUEsTUFDQTtBQUNBeUIsT0FBQSxFQUFBeWQsV0FBQSxHQUFBbGhCLEVBQUEsRUFDQSxHQUVBLEVBRUF3M0IseUJBQUEsZ0JBQUEvekIsT0FBQSxDQUFBekQsRUFBQSxLQUNBLElBQUFBLEVBQUEsUUFDQSxNQUFBOHNCLEtBQUEsQ0FBQXJwQixPQUFBLEVBQUFvMEIsY0FBQSxHQUFBNzNCLEVBQUEsRUFDQSxHQUFBOHNCLEtBQUEsQ0FBQXJwQixPQUFBLEVBQUErSCxZQUFBLEdBQUFzaEIsS0FBQSxFQUFBalAsY0FBQSxRQUNBLEVBRUE7QUFDQWxuQixDQUFBLENBQUFtaEMsMEJBQUEsRUFDQUMsSUFBQTk4QixJQUFBLENBQUFnVyxHQUFBLEVBQ0EsTUFBQWxDLEVBQUEsQ0FBQXlvQix5QkFBQSxDQUFBdjhCLElBQUEsRUFDQSxVQUFBOFQsRUFBQSxjQUFBQSxFQUFBLENBQUFrQyxHQUFBLE1BQ0EsQ0FBQXpYLE9BQUEsQ0FBQXcrQixJQUFBLHFDQUFBLzhCLElBQUEsRUFDQSxFQUNBdVUsU0FBQXZVLElBQUEsQ0FBQW1JLE9BQUEsRUFDQSxJQUFBbkksSUFBQSxTQUFBbUksT0FBQSxlQUNBLFVBQUE2MEIsS0FBQSwrQ0FDQSxDQUNBVCx5QkFBQSxDQUFBdjhCLElBQUEsRUFBQW1JLE9BQUEsQ0FDQSxFQUNBNmpCLElBQUFoc0IsSUFBQSxFQUNBLGNBQUF1OEIseUJBQUEsQ0FBQXY4QixJQUFBLGVBQ0EsQ0FDQSxFQUVBO0FBRUEsSUFBQW5FLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsS0FFQTtBQUNBSCxDQUFBLENBQUF1aEMsZ0NBQUEsQ0FBQXZoQyxDQUFBLENBQUF1aEMsZ0NBQUEsS0FDQXZoQyxDQUFBLENBQUF3aEMscUNBQUEsQ0FBQXhoQyxDQUFBLENBQUF3aEMscUNBQUEsS0FFQTtBQUNBO0FBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQW40QixHQUFBK00sR0FBQSxDQUFBcXJCLEtBQUEsQ0FBQXZzQixRQUFBLEVBQ0EsSUFBQW9MLElBQUEsQ0FBQTFhLFFBQUEsQ0FBQTJRLGFBQUEsQ0FBQUgsR0FBQSxFQUNBLEdBQUFxckIsS0FBQSxFQUNBaDJCLE1BQUEsQ0FBQWkyQixJQUFBLENBQUFELEtBQUEsRUFBQWg2QixPQUFBLFVBQUFvUyxDQUFBLEVBQ0EsSUFBQWpaLENBQUEsQ0FBQTZnQyxLQUFBLENBQUE1bkIsQ0FBQSxFQUNBLEdBQUFqWixDQUFBLGNBQ0EsR0FBQWlaLENBQUEsWUFDQXlHLElBQUEsQ0FBQTlKLFNBQUEsQ0FBQTVWLENBQUEsQ0FDQSxPQUNBLENBQ0EsR0FBQWlaLENBQUEsY0FDQXBPLE1BQUEsQ0FBQWkyQixJQUFBLENBQUE5Z0MsQ0FBQSxFQUFBNkcsT0FBQSxVQUFBazZCLEVBQUEsRUFDQXJoQixJQUFBLENBQUF4YyxPQUFBLENBQUE2OUIsRUFBQSxFQUFBbGhDLE1BQUEsQ0FBQUcsQ0FBQSxDQUFBK2dDLEVBQUEsR0FDQSxHQUNBLE9BQ0EsQ0FDQSxHQUFBOW5CLENBQUEscUJBQUFqWixDQUFBLGNBQ0EsR0FBQUEsQ0FBQSxDQUFBMGYsSUFBQSxDQUFBcmIsWUFBQSxzQkFDQSxPQUNBLENBQ0EsR0FBQTRVLENBQUEsc0JBQUFqWixDQUFBLGNBQ0EsR0FBQUEsQ0FBQSxDQUFBMGYsSUFBQSxDQUFBcmIsWUFBQSx3QkFDQSxPQUNBLENBQ0E7QUFDQSxVQUFBckUsQ0FBQSxjQUNBMGYsSUFBQSxDQUFBcmIsWUFBQSxDQUFBNFUsQ0FBQSxDQUFBalosQ0FBQSxpQkFDQSxPQUNBLENBQ0EwZixJQUFBLENBQUFyYixZQUFBLENBQUE0VSxDQUFBLENBQUFwWixNQUFBLENBQUFHLENBQUEsR0FDQSxHQUNBLENBQ0EsR0FBQXNVLFFBQUEsRUFDQSxDQUFBM08sS0FBQSxDQUFBNEIsT0FBQSxDQUFBK00sUUFBQSxFQUFBQSxRQUFBLEVBQUFBLFFBQUEsR0FBQXpOLE9BQUEsVUFBQStlLENBQUEsRUFDQSxHQUFBQSxDQUFBLGNBQ0FsRyxJQUFBLENBQUFySSxXQUFBLFFBQUF1TyxDQUFBLFlBQUE1Z0IsUUFBQSxDQUFBaTJCLGNBQUEsQ0FBQXJWLENBQUEsRUFBQUEsQ0FBQSxFQUNBLEdBQ0EsQ0FDQSxPQUFBbEcsSUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQXNoQixpQkFBQXJHLFFBQUEsQ0FBQWp5QixHQUFBLENBQUF1VSxPQUFBLENBQUE0ZCxVQUFBLEVBRUEsSUFBQXIxQixNQUFBLENBQUFpRCxFQUFBLDBEQUNBLElBQUFpekIsU0FBQSxDQUFBanpCLEVBQUEsdURBRUEsSUFBQXc0QixRQUFBLENBQUF4NEIsRUFBQSxVQUNBM0YsRUFBQSxDQUFBNjNCLFFBQUEsQ0FDQS94QixJQUFBLFlBQ0EscUJBQUFGLEdBQUEsQ0FDQSwyQkFDQXVVLE9BQUEsR0FBQUEsT0FBQSxDQUNBcFAsSUFBQSxVQUNBLGlCQUFBb1AsT0FDQSxHQUNBLElBQUEyZSxRQUFBLENBQUFuekIsRUFBQSwrQ0FBQWt5QixRQUFBLEdBQ0EsSUFBQWtCLFFBQUEsQ0FBQXB6QixFQUFBLGdEQUFBa3lCLFFBQUEsRUFBQUUsVUFBQSxNQUVBYSxTQUFBLENBQUFya0IsV0FBQSxDQUFBNHBCLFFBQUEsRUFDQXZGLFNBQUEsQ0FBQXJrQixXQUFBLENBQUF1a0IsUUFBQSxFQUNBRixTQUFBLENBQUFya0IsV0FBQSxDQUFBd2tCLFFBQUEsRUFFQXIyQixNQUFBLENBQUE2UixXQUFBLENBQUFxa0IsU0FBQSxFQUNBLE9BQUFsMkIsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBLElBQ0EsU0FBQTA3QixrQkFBQXg0QixHQUFBLENBQUErSyxJQUFBLENBQUEwdEIsWUFBQSxFQUNBLEdBQUExdEIsSUFBQSxFQUFBNUksTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWpELElBQUEsQ0FBQS9LLEdBQUEsU0FBQStLLElBQUEsQ0FBQS9LLEdBQUEsRUFDQSxJQUFBcVIsSUFBQSxDQUFBb25CLFlBQUEsRUFBQUEsWUFBQSxDQUFBejRCLEdBQUEsRUFDQSxPQUFBcVIsSUFBQSxFQUFBbFAsTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQXFELElBQUEsWUFBQUEsSUFBQSxDQUFBc1QsT0FBQSxJQUNBLENBRUE7QUFDQTtBQUNBLElBR0EsU0FBQStULGVBQUFsckIsS0FBQSxDQUFBdE4sSUFBQSxFQUNBLE9BQUFBLElBQUEsRUFDQSxhQUNBLFVBQ0EsWUFDQSxHQUFBc04sS0FBQSxPQUFBQSxLQUFBLFFBQ0EsU0FDQSxDQUNBLElBQUFsVixDQUFBLENBQUFFLE1BQUEsQ0FBQWdWLEtBQUEsRUFDQSxPQUFBbXJCLEtBQUEsQ0FBQXJnQyxDQUFBLEtBQUFBLENBQUEsQ0FDQSxjQUNBLFFBQUFrVixLQUFBLENBQ0EsWUFDQSxPQUFBdlEsS0FBQSxDQUFBNEIsT0FBQSxDQUFBMk8sS0FBQSxFQUFBQSxLQUFBLElBQ0EsUUFDQSxPQUFBQSxLQUFBLFVBQUFyVyxNQUFBLENBQUFxVyxLQUFBLEVBQ0EsQ0FDQSxDQUVBO0FBQ0E7QUFDQSxJQUNBLFNBQUFvckIseUJBQUFuakIsT0FBQSxFQUNBLEdBQUF4WSxLQUFBLENBQUE0QixPQUFBLENBQUE0VyxPQUFBLEdBQ0EsT0FBQUEsT0FBQSxDQUFBdFksR0FBQSxVQUFBOFksQ0FBQSxFQUNBLFVBQUFBLENBQUEsYUFBQUEsQ0FBQSxZQUFBQSxDQUFBLEVBQ0EsT0FBQXpJLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQThlLENBQUEsQ0FBQXpJLEtBQUEsRUFBQXpMLEtBQUEsQ0FBQTVLLE1BQUEsQ0FBQThlLENBQUEsQ0FBQWxVLEtBQUEsRUFBQWtVLENBQUEsQ0FBQXpJLEtBQUEsR0FDQSxDQUNBLE9BQUFBLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQThlLENBQUEsRUFBQWxVLEtBQUEsQ0FBQTVLLE1BQUEsQ0FBQThlLENBQUEsR0FDQSxHQUNBLENBQ0EsR0FBQVIsT0FBQSxTQUFBQSxPQUFBLGFBQ0EsT0FBQXRULE1BQUEsQ0FBQWkyQixJQUFBLENBQUEzaUIsT0FBQSxFQUFBdFksR0FBQSxVQUFBb1QsQ0FBQSxFQUNBLE9BQUEvQyxLQUFBLENBQUFyVyxNQUFBLENBQUFvWixDQUFBLEVBQUF4TyxLQUFBLENBQUE1SyxNQUFBLENBQUFzZSxPQUFBLENBQUFsRixDQUFBLElBQ0EsR0FDQSxDQUNBLFNBQ0EsQ0FFQSxtRkFDQSxTQUFBc29CLFVBQUFyckIsS0FBQSxDQUFBc3JCLGFBQUEsRUFDQXRyQixLQUFBLENBQUFBLEtBQUEsVUFBQXJXLE1BQUEsQ0FBQXFXLEtBQUEsRUFBQWhXLElBQUEsR0FDQSxJQUFBa0MsQ0FBQSxDQUFBOFQsS0FBQSxDQUFBN1QsS0FBQSxzQ0FDQSxHQUFBRCxDQUFBLEVBQ0EsT0FBQThULEtBQUEsQ0FBQWpWLFVBQUEsQ0FBQW1CLENBQUEsS0FBQXU2QixJQUFBLENBQUF2NkIsQ0FBQSxJQUFBMUIsV0FBQSxJQUNBLENBQ0E7QUFDQSxHQUFBd1YsS0FBQSxRQUFBbXJCLEtBQUEsQ0FBQW5nQyxNQUFBLENBQUFnVixLQUFBLElBQ0EsT0FBQUEsS0FBQSxDQUFBaFYsTUFBQSxDQUFBZ1YsS0FBQSxFQUFBeW1CLElBQUEsQ0FBQTZFLGFBQUEsUUFDQSxDQUNBLE9BQUF0ckIsS0FBQSxHQUFBeW1CLElBQUEsQ0FBQTZFLGFBQUEsUUFDQSxDQUVBLG9CQUNBLFNBQUFDLFVBQUF6aEMsQ0FBQSxDQUFBcUIsR0FBQSxDQUFBQyxHQUFBLEVBQ0EsVUFBQXRCLENBQUEsYUFBQXFoQyxLQUFBLENBQUFyaEMsQ0FBQSxTQUFBcUIsR0FBQSxPQUFBQSxHQUFBLEdBQ0EsR0FBQUEsR0FBQSxRQUFBckIsQ0FBQSxDQUFBcUIsR0FBQSxDQUFBckIsQ0FBQSxDQUFBcUIsR0FBQSxDQUNBLEdBQUFDLEdBQUEsUUFBQXRCLENBQUEsQ0FBQXNCLEdBQUEsQ0FBQXRCLENBQUEsQ0FBQXNCLEdBQUEsQ0FDQSxPQUFBdEIsQ0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBLFNBQUEwaEMscUJBQUF6ekIsSUFBQSxFQUNBLElBQUFBLElBQUEsR0FBQTdPLENBQUEsQ0FBQXVpQyxPQUFBLFFBQ0E7QUFDQSxJQUFBakgsTUFBQSxDQUFBenNCLElBQUEsQ0FBQXBLLGdCQUFBLHVDQUNBLElBQUE2MkIsTUFBQSxDQUFBNTJCLE1BQUEsUUFFQTtBQUNBNDJCLE1BQUEsQ0FBQTd6QixPQUFBLFVBQUFpQixLQUFBLEVBQ0EsR0FBQUEsS0FBQSxDQUFBUixTQUFBLENBQUFuQyxRQUFBLDRCQUNBMkMsS0FBQSxDQUFBUixTQUFBLENBQUE2RyxHQUFBLHFCQUNBLEdBRUE7QUFDQTtBQUNBLElBQ0EvTyxDQUFBLENBQUF1aUMsT0FBQSxFQUNBbDVCLEVBQUEscUJBQ0FtNUIsS0FBQSxPQUNBQyxNQUFBLE9BQ0FDLFNBQUEsT0FDQSxHQUNBO0FBQ0EsT0FBQXhyQixDQUFBLEVBQ0E7QUFDQXJVLE9BQUEsQ0FBQXcrQixJQUFBLHdDQUFBbnFCLENBQUEsRUFDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQSxTQUFBeXJCLHVCQUFBcEgsUUFBQSxDQUFBanlCLEdBQUEsQ0FBQW15QixVQUFBLENBQUEza0IsS0FBQSxDQUFBNkQsSUFBQSxFQUNBLElBQUF2VSxNQUFBLENBQUFpRCxFQUFBLG1DQUNBLElBQUF1NUIsUUFBQSxDQUFBdjVCLEVBQUEsZ0JBQUFreUIsUUFBQSw2QkFBQUUsVUFBQSxFQUFBbnlCLEdBQUEsTUFDQSxJQUFBK2pCLElBQUEsQ0FBQWhrQixFQUFBLHVDQUVBLElBQUFwSCxHQUFBLENBQUEwWSxJQUFBLEVBQUFBLElBQUEsQ0FBQTFZLEdBQUEsT0FBQTBZLElBQUEsQ0FBQTFZLEdBQUEsR0FDQSxJQUFBQyxHQUFBLENBQUF5WSxJQUFBLEVBQUFBLElBQUEsQ0FBQXpZLEdBQUEsT0FBQXlZLElBQUEsQ0FBQXpZLEdBQUEsS0FDQSxJQUFBMmdDLElBQUEsQ0FBQWxvQixJQUFBLEVBQUFBLElBQUEsQ0FBQWtvQixJQUFBLE9BQUFsb0IsSUFBQSxDQUFBa29CLElBQUEsR0FFQSxJQUFBN3lCLEtBQUEsQ0FBQTNHLEVBQUEscUVBQUFDLEdBQUEsR0FFQSxJQUFBZzBCLEtBQUEsQ0FBQWowQixFQUFBLFVBQ0FHLElBQUEsU0FDQSwyQkFDQSxvQkFDQXZILEdBQUEsQ0FBQXhCLE1BQUEsQ0FBQXdCLEdBQUEsRUFDQUMsR0FBQSxDQUFBekIsTUFBQSxDQUFBeUIsR0FBQSxFQUNBMmdDLElBQUEsQ0FBQXBpQyxNQUFBLENBQUFvaUMsSUFBQSxFQUNBL3JCLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQXFXLEtBQUEsUUFBQUEsS0FBQSxNQUFBN1UsR0FBQSxDQUFBNlUsS0FBQSxDQUNBLEdBRUEsSUFBQWdzQixHQUFBLENBQUF6NUIsRUFBQSxVQUNBM0YsRUFBQSxDQUFBNjNCLFFBQUEsQ0FDQS94QixJQUFBLFVBQ0EsMkNBQ0Esb0JBQ0EscUJBQUFGLEdBQUEsQ0FDQXJILEdBQUEsQ0FBQXhCLE1BQUEsQ0FBQXdCLEdBQUEsRUFDQUMsR0FBQSxDQUFBekIsTUFBQSxDQUFBeUIsR0FBQSxFQUNBMmdDLElBQUEsQ0FBQXBpQyxNQUFBLENBQUFvaUMsSUFBQSxFQUNBL3JCLEtBQUEsQ0FBQUEsS0FBQSxRQUFBQSxLQUFBLE1BQUFyVyxNQUFBLENBQUF3QixHQUFBLEVBQUF4QixNQUFBLENBQUFxVyxLQUFBLENBQ0EsR0FFQTlHLEtBQUEsQ0FBQWlJLFdBQUEsQ0FBQXFsQixLQUFBLEVBQ0F0dEIsS0FBQSxDQUFBaUksV0FBQSxDQUFBNnFCLEdBQUEsRUFDQXpWLElBQUEsQ0FBQXBWLFdBQUEsQ0FBQWpJLEtBQUEsRUFDQTVKLE1BQUEsQ0FBQTZSLFdBQUEsQ0FBQTJxQixRQUFBLEVBQ0F4OEIsTUFBQSxDQUFBNlIsV0FBQSxDQUFBb1YsSUFBQSxFQUNBLE9BQUFqbkIsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQTI4Qix1QkFBQUMsT0FBQSxDQUFBakIsWUFBQSxDQUFBMXRCLElBQUEsQ0FBQXRRLEdBQUEsRUFDQSxJQUFBdUYsR0FBQSxDQUFBMDVCLE9BQUEsQ0FBQTE1QixHQUFBLENBQ0EsSUFBQW15QixVQUFBLENBQUF1SCxPQUFBLENBQUEzM0IsS0FBQSxFQUFBL0IsR0FBQSxLQUNBLElBQUEyNUIsT0FBQSxDQUFBbkIsaUJBQUEsQ0FBQXg0QixHQUFBLENBQUErSyxJQUFBLENBQUEwdEIsWUFBQSxFQUNBLElBQUFtQixVQUFBLENBQUFGLE9BQUEsQ0FBQVosYUFBQSxPQUNBLElBQUFuSixNQUFBLENBQUFrSixTQUFBLENBQUFjLE9BQUEsQ0FBQUMsVUFBQSxFQUVBLElBQUFqN0IsR0FBQSxDQUFBb0IsRUFBQSxtQ0FDQSxJQUFBZ0MsS0FBQSxDQUFBaEMsRUFBQSxzQ0FBQW95QixVQUFBLEVBQ0EsSUFBQXBPLElBQUEsQ0FBQWhrQixFQUFBLHVDQUVBLElBQUE4NUIsS0FBQSxDQUFBNThCLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQTY2QixPQUFBLENBQUFHLEtBQUEsR0FBQUgsT0FBQSxDQUFBRyxLQUFBLENBQUF6K0IsTUFBQSxDQUFBcytCLE9BQUEsQ0FBQUcsS0FBQSx1QkFDQSxJQUFBQyxVQUFBLENBQUFKLE9BQUEsQ0FBQUssTUFBQSxHQUNBLE1BQUFwaEMsR0FBQSxHQUFBQyxHQUFBLEtBQUEyZ0MsSUFBQSxJQUNBLEtBQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLEtBQUEyZ0MsSUFBQSxJQUNBLE9BQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLElBQUEyZ0MsSUFBQSxNQUNBLE1BQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLElBQUEyZ0MsSUFBQSxLQUNBLEVBRUE7QUFDQSxJQUFBN3lCLEtBQUEsQ0FBQTNHLEVBQUEsa0RBQUFDLEdBQUEsR0FFQSxJQUFBZzZCLE1BQUEsQ0FBQWo2QixFQUFBLHVDQUVBLElBQUF5NUIsR0FBQSxDQUFBejVCLEVBQUEsVUFDQUcsSUFBQSxVQUNBLDJCQUNBLG9CQUNBdkgsR0FBQSxLQUNBNGdDLElBQUEsT0FDQS9yQixLQUFBLENBQUFyVyxNQUFBLENBQUF3NEIsTUFBQSxDQUFBbmlCLEtBQUEsQ0FDQSxHQUVBLElBQUFtSyxHQUFBLENBQUE1WCxFQUFBLDJEQUNBODVCLEtBQUEsQ0FBQTE3QixPQUFBLFVBQUE4N0IsQ0FBQSxFQUNBLElBQUFDLEdBQUEsQ0FBQW42QixFQUFBLFdBQUF5TixLQUFBLENBQUF5c0IsQ0FBQSxFQUFBQSxDQUFBLEVBQ0EsR0FBQUEsQ0FBQSxHQUFBdEssTUFBQSxDQUFBc0UsSUFBQSxDQUFBaUcsR0FBQSxDQUFBditCLFlBQUEsd0JBQ0FnYyxHQUFBLENBQUFoSixXQUFBLENBQUF1ckIsR0FBQSxFQUNBLEdBRUFGLE1BQUEsQ0FBQXJyQixXQUFBLENBQUE2cUIsR0FBQSxFQUNBUSxNQUFBLENBQUFyckIsV0FBQSxDQUFBZ0osR0FBQSxFQUVBO0FBQ0EsSUFBQXZXLE9BQUEsQ0FBQTA0QixVQUFBLENBQUFuSyxNQUFBLENBQUFzRSxJQUFBLEdBQUE2RixVQUFBLENBQUFELEtBQUEsS0FDQSxJQUFBN0YsS0FBQSxDQUFBajBCLEVBQUEsVUFDQUcsSUFBQSxTQUNBLDJCQUNBLG9CQUNBdkgsR0FBQSxDQUFBeEIsTUFBQSxDQUFBaUssT0FBQSxDQUFBekksR0FBQSxFQUNBQyxHQUFBLENBQUF6QixNQUFBLENBQUFpSyxPQUFBLENBQUF4SSxHQUFBLEVBQ0EyZ0MsSUFBQSxDQUFBcGlDLE1BQUEsQ0FBQWlLLE9BQUEsQ0FBQW00QixJQUFBLEVBQ0EvckIsS0FBQSxDQUFBclcsTUFBQSxDQUFBNGhDLFNBQUEsQ0FBQXBKLE1BQUEsQ0FBQW5pQixLQUFBLENBQUFwTSxPQUFBLENBQUF6SSxHQUFBLENBQUF5SSxPQUFBLENBQUF4SSxHQUFBLEVBQ0EsR0FFQTtBQUNBLElBQUFrTSxNQUFBLENBQUEvRSxFQUFBLFVBQ0FHLElBQUEsUUFDQSwyQkFDQTdDLEtBQUEsZ0JBQ0EscUJBQ0E4OEIsUUFBQSxNQUNBLy9CLEVBQUEsYUFBQTRGLEdBQUEsS0FBQXZGLEdBQUEsZUFDQSxxQkFBQXVGLEdBQUEsQ0FDQXdOLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQXc0QixNQUFBLENBQUFuaUIsS0FBQSxFQUFBbWlCLE1BQUEsQ0FBQXNFLElBQ0EsR0FFQXZ0QixLQUFBLENBQUFpSSxXQUFBLENBQUFxckIsTUFBQSxFQUNBdHpCLEtBQUEsQ0FBQWlJLFdBQUEsQ0FBQXFsQixLQUFBLEVBQ0F0dEIsS0FBQSxDQUFBaUksV0FBQSxDQUFBN0osTUFBQSxFQUVBaWYsSUFBQSxDQUFBcFYsV0FBQSxDQUFBakksS0FBQSxFQUNBL0gsR0FBQSxDQUFBZ1EsV0FBQSxDQUFBNU0sS0FBQSxFQUNBcEQsR0FBQSxDQUFBZ1EsV0FBQSxDQUFBb1YsSUFBQSxFQUNBLE9BQUFwbEIsR0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQXk3QixlQUFBNzBCLElBQUEsRUFDQSxJQUFBQSxJQUFBLFFBRUEsU0FBQTgwQixXQUFBdDZCLEVBQUEsRUFDQSxPQUFBQSxFQUFBLEVBQUFBLEVBQUEsQ0FBQXNJLE9BQUEsRUFBQXRJLEVBQUEsQ0FBQXNJLE9BQUEsb0JBQ0EsQ0FFQTlDLElBQUEsQ0FBQW5DLGdCQUFBLGtCQUFBd0ssQ0FBQSxFQUNBLElBQUFvQixDQUFBLENBQUFwQixDQUFBLENBQUF1TSxNQUFBLENBQ0E7QUFDQSxHQUFBbkwsQ0FBQSxFQUFBQSxDQUFBLENBQUFrRCxZQUFBLG9CQUNBLElBQUEyaEIsQ0FBQSxDQUFBd0csVUFBQSxDQUFBcnJCLENBQUEsRUFDQSxJQUFBNmtCLENBQUEsUUFDQSxJQUFBMkYsR0FBQSxDQUFBM0YsQ0FBQSxDQUFBbjVCLGFBQUEscUJBQ0EsR0FBQTgrQixHQUFBLEVBQ0FBLEdBQUEsQ0FBQWhzQixLQUFBLENBQUF3QixDQUFBLENBQUF4QixLQUFBLENBQ0EsQ0FDQSxJQUFBOHNCLE1BQUEsQ0FBQXpHLENBQUEsQ0FBQW41QixhQUFBLHlCQUNBLEdBQUE0L0IsTUFBQSxFQUFBQSxNQUFBLENBQUFwNkIsSUFBQSxXQUNBLElBQUErekIsSUFBQSxDQUFBSixDQUFBLENBQUFuNUIsYUFBQSxvQkFDQXU1QixJQUFBLENBQUFBLElBQUEsQ0FBQUEsSUFBQSxDQUFBem1CLEtBQUEsTUFDQThzQixNQUFBLENBQUE5c0IsS0FBQSxDQUFBclcsTUFBQSxDQUFBNlgsQ0FBQSxDQUFBeEIsS0FBQSxFQUFBclcsTUFBQSxDQUFBODhCLElBQUEsRUFDQTtBQUNBcUcsTUFBQSxDQUFBdjNCLGFBQUEsS0FBQThVLEtBQUEsVUFBQTVVLE9BQUEsU0FDQSxNQUNBO0FBQ0EsR0FBQXUyQixHQUFBLEVBQUFBLEdBQUEsQ0FBQXRuQixZQUFBLHdCQUNBc25CLEdBQUEsQ0FBQXoyQixhQUFBLEtBQUE4VSxLQUFBLFVBQUE1VSxPQUFBLFNBQ0EsQ0FDQSxDQUNBLENBRUE7QUFDQSxHQUFBK0wsQ0FBQSxFQUFBQSxDQUFBLENBQUFrRCxZQUFBLG9CQUNBLElBQUEyaEIsQ0FBQSxDQUFBd0csVUFBQSxDQUFBcnJCLENBQUEsRUFDQSxJQUFBNmtCLENBQUEsUUFDQSxJQUFBdHpCLENBQUEsQ0FBQXN6QixDQUFBLENBQUFuNUIsYUFBQSxxQkFDQSxHQUFBNkYsQ0FBQSxFQUNBO0FBQ0EsSUFBQTVILEdBQUEsQ0FBQUgsTUFBQSxDQUFBK0gsQ0FBQSxDQUFBNUgsR0FBQSxFQUNBLElBQUFDLEdBQUEsQ0FBQUosTUFBQSxDQUFBK0gsQ0FBQSxDQUFBM0gsR0FBQSxFQUNBLElBQUF0QixDQUFBLENBQUFrQixNQUFBLENBQUF3VyxDQUFBLENBQUF4QixLQUFBLEVBQ0EsSUFBQW1yQixLQUFBLENBQUFyaEMsQ0FBQSxHQUNBQSxDQUFBLENBQUF5aEMsU0FBQSxDQUFBemhDLENBQUEsQ0FBQXFoQyxLQUFBLENBQUFoZ0MsR0FBQSxFQUFBNlksU0FBQSxDQUFBN1ksR0FBQSxDQUFBZ2dDLEtBQUEsQ0FBQS8vQixHQUFBLEVBQUE0WSxTQUFBLENBQUE1WSxHQUFBLEVBQ0EySCxDQUFBLENBQUFpTixLQUFBLENBQUFyVyxNQUFBLENBQUFHLENBQUEsRUFDQSxHQUFBSCxNQUFBLENBQUFHLENBQUEsSUFBQTBYLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQXdCLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQUcsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxJQUFBZ2pDLE1BQUEsQ0FBQXpHLENBQUEsQ0FBQW41QixhQUFBLHlCQUNBLEdBQUE0L0IsTUFBQSxFQUFBQSxNQUFBLENBQUFwNkIsSUFBQSxXQUNBLElBQUErekIsSUFBQSxDQUFBSixDQUFBLENBQUFuNUIsYUFBQSxvQkFDQXU1QixJQUFBLENBQUFBLElBQUEsQ0FBQUEsSUFBQSxDQUFBem1CLEtBQUEsTUFDQThzQixNQUFBLENBQUE5c0IsS0FBQSxDQUFBclcsTUFBQSxDQUFBNlgsQ0FBQSxDQUFBeEIsS0FBQSxLQUFBclcsTUFBQSxDQUFBODhCLElBQUEsRUFDQXFHLE1BQUEsQ0FBQXYzQixhQUFBLEtBQUE4VSxLQUFBLFVBQUE1VSxPQUFBLFNBQ0EsQ0FDQTtBQUNBLENBQ0EsUUFFQXNDLElBQUEsQ0FBQW5DLGdCQUFBLG1CQUFBd0ssQ0FBQSxFQUNBLElBQUFvQixDQUFBLENBQUFwQixDQUFBLENBQUF1TSxNQUFBLENBQ0E7QUFDQSxHQUFBbkwsQ0FBQSxFQUFBQSxDQUFBLENBQUFrRCxZQUFBLG1CQUNBLElBQUEyaEIsQ0FBQSxDQUFBd0csVUFBQSxDQUFBcnJCLENBQUEsRUFDQSxJQUFBNmtCLENBQUEsUUFFQTtBQUNBO0FBQ0EsSUFBQXR6QixDQUFBLENBQUFzekIsQ0FBQSxDQUFBbjVCLGFBQUEscUJBQ0EsSUFBQTgrQixHQUFBLENBQUEzRixDQUFBLENBQUFuNUIsYUFBQSxxQkFDQSxJQUFBNC9CLE1BQUEsQ0FBQXpHLENBQUEsQ0FBQW41QixhQUFBLHlCQUNBLElBQUF1NUIsSUFBQSxDQUFBamxCLENBQUEsQ0FBQXhCLEtBQUEsT0FFQTtBQUNBLElBQUErc0IsY0FBQSxFQUNBLE1BQUE1aEMsR0FBQSxHQUFBQyxHQUFBLEtBQUEyZ0MsSUFBQSxJQUNBLEtBQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLEtBQUEyZ0MsSUFBQSxJQUNBLE9BQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLElBQUEyZ0MsSUFBQSxNQUNBLE1BQUE1Z0MsR0FBQSxHQUFBQyxHQUFBLElBQUEyZ0MsSUFBQSxLQUNBLEVBQ0EsR0FBQWg1QixDQUFBLEVBQ0EsSUFBQTNDLENBQUEsQ0FBQTI4QixjQUFBLENBQUF0RyxJQUFBLEdBQUFzRyxjQUFBLE9BQ0FoNkIsQ0FBQSxDQUFBNUgsR0FBQSxDQUFBeEIsTUFBQSxDQUFBeUcsQ0FBQSxDQUFBakYsR0FBQSxFQUNBNEgsQ0FBQSxDQUFBM0gsR0FBQSxDQUFBekIsTUFBQSxDQUFBeUcsQ0FBQSxDQUFBaEYsR0FBQSxFQUNBMkgsQ0FBQSxDQUFBZzVCLElBQUEsQ0FBQXBpQyxNQUFBLENBQUF5RyxDQUFBLENBQUEyN0IsSUFBQSxFQUNBO0FBQ0EsSUFBQWppQyxDQUFBLENBQUFrQixNQUFBLENBQUFnaEMsR0FBQSxFQUFBQSxHQUFBLENBQUFoc0IsS0FBQSxDQUFBZ3NCLEdBQUEsQ0FBQWhzQixLQUFBLENBQUFqTixDQUFBLENBQUFpTixLQUFBLEVBQ0EsSUFBQW1yQixLQUFBLENBQUFyaEMsQ0FBQSxHQUNBQSxDQUFBLENBQUF5aEMsU0FBQSxDQUFBemhDLENBQUEsQ0FBQXNHLENBQUEsQ0FBQWpGLEdBQUEsQ0FBQWlGLENBQUEsQ0FBQWhGLEdBQUEsRUFDQTJILENBQUEsQ0FBQWlOLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQUcsQ0FBQSxFQUNBLEdBQUFraUMsR0FBQSxDQUFBQSxHQUFBLENBQUFoc0IsS0FBQSxDQUFBclcsTUFBQSxDQUFBRyxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEdBQUFnakMsTUFBQSxFQUFBQSxNQUFBLENBQUFwNkIsSUFBQSxXQUNBLElBQUE1SSxDQUFBLENBQUFraUMsR0FBQSxFQUFBQSxHQUFBLENBQUFoc0IsS0FBQSxDQUFBZ3NCLEdBQUEsQ0FBQWhzQixLQUFBLENBQUFqTixDQUFBLENBQUFBLENBQUEsQ0FBQWlOLEtBQUEsS0FDQThzQixNQUFBLENBQUE5c0IsS0FBQSxDQUFBclcsTUFBQSxDQUFBRyxDQUFBLEVBQUFILE1BQUEsQ0FBQTg4QixJQUFBLEVBQ0FxRyxNQUFBLENBQUF2M0IsYUFBQSxLQUFBOFUsS0FBQSxVQUFBNVUsT0FBQSxTQUNBLENBQ0EsQ0FDQSxRQUNBLENBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBLFNBQUF1M0IsY0FBQWQsT0FBQSxDQUFBakIsWUFBQSxDQUFBMXRCLElBQUEsQ0FBQXRRLEdBQUEsQ0FBQXVXLEdBQUEsRUFDQSxJQUFBOVEsSUFBQSxDQUFBdzVCLE9BQUEsQ0FBQXg1QixJQUFBLENBQ0EsSUFBQUYsR0FBQSxDQUFBMDVCLE9BQUEsQ0FBQTE1QixHQUFBLENBRUEsSUFBQW15QixVQUFBLENBQUF1SCxPQUFBLENBQUEzM0IsS0FBQSxFQUFBL0IsR0FBQSxLQUNBLElBQUF5NkIsU0FBQSxDQUFBejZCLEdBQUEsQ0FBQXk0QixZQUFBLENBQUF6NEIsR0FBQSxJQUFBRSxJQUFBLFlBQUFBLElBQUEsV0FDQSxJQUFBc04sS0FBQSxDQUFBa3JCLGNBQUEsQ0FBQUYsaUJBQUEsQ0FBQXg0QixHQUFBLENBQUErSyxJQUFBLENBQUEwdEIsWUFBQSxFQUFBZ0MsU0FBQSxDQUFBdjZCLElBQUEsRUFDQTtBQUNBLEdBQUF3NUIsT0FBQSxFQUFBQSxPQUFBLENBQUE1VSxVQUFBLEVBQUFwdUIsQ0FBQSxDQUFBd2hDLHFDQUFBLENBQUF3QixPQUFBLENBQUE1VSxVQUFBLEdBQ0EsSUFDQSxJQUFBK0UsUUFBQSxDQUFBbnpCLENBQUEsQ0FBQXdoQyxxQ0FBQSxDQUFBd0IsT0FBQSxDQUFBNVUsVUFBQSxFQUFBOVQsR0FBQSxNQUNBeEQsS0FBQSxDQUFBa3JCLGNBQUEsQ0FBQTdPLFFBQUEsQ0FBQTRRLFNBQUEsQ0FBQXY2QixJQUFBLEVBQ0EsT0FBQTBOLENBQUEsRUFDQXJVLE9BQUEsQ0FBQXcrQixJQUFBLHlCQUFBMkIsT0FBQSxDQUFBNVUsVUFBQSxDQUFBbFgsQ0FBQSxFQUNBLENBQ0EsQ0FFQSxJQUFBcWtCLFFBQUEsYUFBQWp5QixHQUFBLEtBQUF2RixHQUFBLENBRUEsSUFBQXFDLE1BQUEsQ0FBQWlELEVBQUEsbUNBQ0EsSUFBQXU1QixRQUFBLENBQUF2NUIsRUFBQSxnQkFBQWt5QixRQUFBLDZCQUFBRSxVQUFBLEVBQ0EsSUFBQWEsU0FBQSxDQUFBanpCLEVBQUEsdUNBRUEsSUFBQXpFLFFBQUEsQ0FFQTtBQUNBLEdBQUE0RSxJQUFBLFdBQUF3NUIsT0FBQSxDQUFBaFcsSUFBQSxFQUNBO0FBQ0EsSUFBQWdYLE9BQUEsdUNBQ0EsR0FBQWhCLE9BQUEsQ0FBQWhXLElBQUEsa0JBQUFnWCxPQUFBLGtDQUVBLElBQUFDLFFBQUEsQ0FBQTU2QixFQUFBLGdCQUFBMjZCLE9BQUEsR0FFQSxHQUFBdkksVUFBQSxDQUFBd0ksUUFBQSxDQUFBaHNCLFdBQUEsQ0FBQTVPLEVBQUEsc0NBQUFveUIsVUFBQSxHQUVBO0FBQ0EsSUFBQXlJLFVBQUEsZ0NBQ0EsR0FBQWxCLE9BQUEsQ0FBQWhXLElBQUEsa0JBQUFrWCxVQUFBLGlDQUVBLElBQUFDLFNBQUEsQ0FBQTk2QixFQUFBLE9BQUE2NkIsVUFBQSxFQUNBRCxRQUFBLENBQUFoc0IsV0FBQSxDQUFBa3NCLFNBQUEsRUFFQSxJQUFBQyxPQUFBLENBQUFwa0MsQ0FBQSxDQUFBdWhDLGdDQUFBLENBQUF5QixPQUFBLENBQUFoVyxJQUFBLEVBQ0EsVUFBQW9YLE9BQUEsZUFDQXQwQixVQUFBLFlBQ0EsSUFDQXMwQixPQUFBLENBQUFELFNBQUEsQ0FBQTdwQixHQUFBLE1BQ0EsT0FBQXBELENBQUEsRUFDQXJVLE9BQUEsQ0FBQXcrQixJQUFBLFVBQUEyQixPQUFBLENBQUFoVyxJQUFBLGFBQUE5VixDQUFBLEVBQ0EsQ0FDQSxLQUNBLE1BQ0FpdEIsU0FBQSxDQUFBbHNCLFdBQUEsQ0FBQTVPLEVBQUEscURBQUEyNUIsT0FBQSxDQUFBaFcsSUFBQSxPQUNBLENBQ0EsT0FBQWlYLFFBQUEsQ0FDQSxDQUdBLEdBQUF6NkIsSUFBQSxlQUNBNUUsUUFBQSxDQUFBeUUsRUFBQSxhQUNBM0YsRUFBQSxDQUFBNjNCLFFBQUEsQ0FDQSxxQkFBQWp5QixHQUFBLENBQ0F5VSxJQUFBLENBQUFpbEIsT0FBQSxDQUFBamxCLElBQUEsSUFDQSwwQkFDQSxFQUFBakgsS0FBQSxVQUFBclcsTUFBQSxDQUFBcVcsS0FBQSxHQUNBLFNBQUF0TixJQUFBLGFBQ0E1RSxRQUFBLENBQUF5RSxFQUFBLFdBQ0EzRixFQUFBLENBQUE2M0IsUUFBQSxDQUNBLHFCQUFBanlCLEdBQUEsQ0FDQSwwQkFDQSxHQUNBNDRCLHdCQUFBLENBQUFjLE9BQUEsQ0FBQWprQixPQUFBLE1BQUF0WCxPQUFBLFVBQUErN0IsR0FBQSxFQUNBLElBQUFhLE1BQUEsQ0FBQWg3QixFQUFBLFdBQUF5TixLQUFBLENBQUEwc0IsR0FBQSxDQUFBMXNCLEtBQUEsRUFBQTBzQixHQUFBLENBQUFuNEIsS0FBQSxFQUNBLEdBQUE1SyxNQUFBLENBQUFxVyxLQUFBLElBQUEwc0IsR0FBQSxDQUFBMXNCLEtBQUEsQ0FBQXV0QixNQUFBLENBQUFwL0IsWUFBQSx3QkFDQUwsUUFBQSxDQUFBcVQsV0FBQSxDQUFBb3NCLE1BQUEsRUFDQSxHQUNBLFNBQUE3NkIsSUFBQSxlQUNBO0FBRUE7QUFDQSxPQUFBbzRCLGdCQUFBLENBQUFyRyxRQUFBLENBQUFqeUIsR0FBQSxHQUFBd04sS0FBQSxDQUFBMmtCLFVBQUEsRUFFQSxTQUFBanlCLElBQUEsbUJBQ0E7QUFDQSxJQUFBODZCLEtBQUEsYUFBQWg3QixHQUFBLEtBQUF2RixHQUFBLENBQ0EsSUFBQXdnQyxNQUFBLENBQUF6dEIsS0FBQTtBQUNBLE9BQUE2ckIsc0JBQUEsQ0FBQTJCLEtBQUEsQ0FBQWg3QixHQUFBLENBQUFteUIsVUFBQSxDQUFBOEksTUFBQSxDQUFBdkIsT0FBQSxFQUVBLFNBQUF4NUIsSUFBQSxVQUNBO0FBQ0EsT0FBQXU1QixzQkFBQSxDQUFBQyxPQUFBLENBQUFqQixZQUFBLENBQUExdEIsSUFBQSxDQUFBdFEsR0FBQSxFQUVBLFNBQUF5RixJQUFBLFlBQ0E7QUFDQTVFLFFBQUEsQ0FBQXlFLEVBQUEsVUFDQTNGLEVBQUEsQ0FBQTYzQixRQUFBLENBQ0EveEIsSUFBQSxRQUNBLHFCQUFBRixHQUFBLENBQ0EsOEJBQ0Esa0JBQ0EsMkJBQ0EscUJBQUF3TixLQUFBLFFBQUFBLEtBQUEsTUFBQXJXLE1BQUEsQ0FBQXFXLEtBQUEsRUFBQWtzQixPQUFBLENBQUE3cEIsV0FBQSxJQUNBLEdBQ0EsR0FBQXJDLEtBQUEsT0FDQWxTLFFBQUEsQ0FBQWtTLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQXFXLEtBQUEsRUFDQSxDQUNBLE1BQ0E7QUFDQSxJQUFBMnFCLEtBQUEsRUFDQS85QixFQUFBLENBQUE2M0IsUUFBQSxDQUNBL3hCLElBQUEsQ0FBQUEsSUFBQSw0QkFDQSxxQkFBQUYsR0FBQSxDQUNBLDBCQUNBLEVBQ0E7QUFDQSxHQUFBRSxJQUFBLGFBQ0EsR0FBQWlDLE1BQUEsQ0FBQTJMLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUF5c0IsU0FBQSxRQUFBdEMsS0FBQSxDQUFBeC9CLEdBQUEsQ0FBQThoQyxTQUFBLENBQUE5aEMsR0FBQSxDQUNBLEdBQUF3SixNQUFBLENBQUEyTCxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBeXNCLFNBQUEsUUFBQXRDLEtBQUEsQ0FBQXYvQixHQUFBLENBQUE2aEMsU0FBQSxDQUFBN2hDLEdBQUEsQ0FDQSxHQUFBdUosTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQXlzQixTQUFBLFNBQUF0QyxLQUFBLENBQUFvQixJQUFBLENBQUFrQixTQUFBLENBQUFsQixJQUFBLENBQ0EsR0FBQXAzQixNQUFBLENBQUEyTCxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBMHJCLE9BQUEsUUFBQXZCLEtBQUEsQ0FBQXgvQixHQUFBLENBQUErZ0MsT0FBQSxDQUFBL2dDLEdBQUEsQ0FDQSxHQUFBd0osTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQTByQixPQUFBLFFBQUF2QixLQUFBLENBQUF2L0IsR0FBQSxDQUFBOGdDLE9BQUEsQ0FBQTlnQyxHQUFBLENBQ0EsR0FBQXVKLE1BQUEsQ0FBQTJMLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUEwckIsT0FBQSxTQUFBdkIsS0FBQSxDQUFBb0IsSUFBQSxDQUFBRyxPQUFBLENBQUFILElBQUEsQ0FDQSxDQUNBaitCLFFBQUEsQ0FBQXlFLEVBQUEsU0FBQW80QixLQUFBLEVBQ0EsR0FBQTNxQixLQUFBLE1BQUFsUyxRQUFBLENBQUFrUyxLQUFBLENBQUFyVyxNQUFBLENBQUFxVyxLQUFBLEVBQ0EsQ0FFQXdsQixTQUFBLENBQUFya0IsV0FBQSxDQUFBclQsUUFBQSxFQUNBd0IsTUFBQSxDQUFBNlIsV0FBQSxDQUFBMnFCLFFBQUEsRUFDQXg4QixNQUFBLENBQUE2UixXQUFBLENBQUFxa0IsU0FBQSxFQUNBLE9BQUFsMkIsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQW8rQixZQUFBeDBCLEtBQUEsQ0FBQSt4QixZQUFBLENBQUExdEIsSUFBQSxDQUFBdFEsR0FBQSxDQUFBdVcsR0FBQSxFQUNBLElBQUFtcUIsT0FBQSxHQUFBejBCLEtBQUEsQ0FBQWl4QixJQUFBLENBQ0EsSUFBQTdaLFFBQUEsMkJBQUFyakIsR0FBQSxNQUFBaU0sS0FBQSxDQUFBMUcsR0FBQSxPQUVBLElBQUF5TCxPQUFBLENBQUExTCxFQUFBLFlBQ0EsaUVBQUFvN0IsT0FBQSxnQkFDQSxhQUFBejBCLEtBQUEsQ0FBQTFHLEdBQUEsSUFDQSxHQUVBLElBQUE0akIsVUFBQSxDQUFBN2pCLEVBQUEsV0FDQUcsSUFBQSxVQUNBLHdCQUNBaUYsSUFBQSxVQUNBLGdCQUFBZzJCLE9BQUEsZ0JBQ0EsZ0JBQUFyZCxRQUNBLEdBQ0EvZCxFQUFBLFdBQUEyRyxLQUFBLENBQUF5SyxLQUFBLEVBQUF6SyxLQUFBLENBQUEzRSxLQUFBLEVBQUEyRSxLQUFBLENBQUExRyxHQUFBLE1BQ0FELEVBQUEsa0dBQ0EsRUFFQSxJQUFBcTdCLE1BQUEsQ0FBQXI3QixFQUFBLFFBQ0Esd0JBQ0EzRixFQUFBLENBQUEwakIsUUFBQSxDQUNBLGNBQUFxZCxPQUFBLGVBQ0EsR0FFQSxTQUFBRSxRQUFBQyxDQUFBLEVBQ0EsR0FBQXIrQixLQUFBLENBQUE0QixPQUFBLENBQUF5OEIsQ0FBQSxTQUFBQSxDQUFBLENBQ0EsR0FBQUEsQ0FBQSxTQUFBQSxDQUFBLG1CQUFBbjVCLE1BQUEsQ0FBQW81QixNQUFBLENBQUFELENBQUEsRUFDQSxPQUFBQSxDQUFBLFFBQUFBLENBQUEsS0FDQSxDQUVBRCxPQUFBLENBQUEzMEIsS0FBQSxDQUFBODBCLFFBQUEsRUFBQXI5QixPQUFBLFVBQUF1N0IsT0FBQSxFQUNBMEIsTUFBQSxDQUFBenNCLFdBQUEsQ0FBQTZyQixhQUFBLENBQUFkLE9BQUEsQ0FBQWpCLFlBQUEsQ0FBQTF0QixJQUFBLENBQUF0USxHQUFBLENBQUF1VyxHQUFBLEdBQ0EsR0FFQXZGLE9BQUEsQ0FBQWtELFdBQUEsQ0FBQWlWLFVBQUEsRUFDQW5ZLE9BQUEsQ0FBQWtELFdBQUEsQ0FBQXlzQixNQUFBLEVBQ0EsT0FBQTN2QixPQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLFNBQUFnd0IsYUFBQUMsWUFBQSxDQUFBQyxjQUFBLENBQUFDLGVBQUEsRUFFQUYsWUFBQSxDQUFBQSxZQUFBLEtBQ0FFLGVBQUEsQ0FBQUEsZUFBQSxLQUNBLElBQUFDLE9BQUEsQ0FBQUgsWUFBQSxDQUFBSSxjQUFBLFlBQ0EsSUFBQUMsYUFBQSxDQUFBTCxZQUFBLENBQUFNLGNBQUEsRUFDQUosZUFBQSxDQUFBSSxjQUFBLEVBQ0EsbUVBRUEsSUFBQTdxQixLQUFBLENBQUF1cUIsWUFBQSxDQUFBdnFCLEtBQUEsRUFBQXdxQixjQUFBLEtBQ0EsSUFBQU0sV0FBQSxDQUFBUCxZQUFBLENBQUFPLFdBQUEsS0FFQTtBQUNBLFNBQUFDLFVBQUFDLEdBQUEsQ0FBQUMsT0FBQSxFQUNBLEdBQUFBLE9BQUEsRUFDQSxPQUFBcjhCLEVBQUEsV0FBQUcsSUFBQSw4Q0FBQWk4QixHQUFBLE1BQ0EsQ0FDQTtBQUNBLElBQUFFLE9BQUEsRUFDQSxrQ0FDQSxvREFDQSxrQ0FDQSxzQ0FDQSxvQ0FDQSxrQ0FDQSxFQUNBLElBQUEzQixPQUFBLDBEQUNBLEdBQUF5QixHQUFBLFlBQUF6QixPQUFBLDhDQUVBLElBQUFyYSxHQUFBLENBQUF0Z0IsRUFBQSxXQUNBRyxJQUFBLFVBQ0EsUUFBQXc2QixPQUFBLENBQ0EsY0FBQXlCLEdBQUEsQ0FDQSxhQUFBQSxHQUFBLENBQUEva0MsT0FBQSxVQUNBLEdBRUEsR0FBQStrQyxHQUFBLGFBQ0E5YixHQUFBLENBQUExUixXQUFBLENBQUE1TyxFQUFBLDhDQUNBc2dCLEdBQUEsQ0FBQTFSLFdBQUEsQ0FBQXJTLFFBQUEsQ0FBQWkyQixjQUFBO0FBQ0EsQ0FDQWxTLEdBQUEsQ0FBQTFSLFdBQUEsQ0FBQTVPLEVBQUEsb0NBQUFzOEIsT0FBQSxDQUFBRixHQUFBLFVBQ0EsT0FBQTliLEdBQUEsQ0FDQSxDQUVBO0FBQ0EsR0FBQXdiLE9BQUEsY0FDQSxJQUFBUyxNQUFBLENBQUF2OEIsRUFBQSxtREFDQXU4QixNQUFBLENBQUEzdEIsV0FBQSxDQUFBNU8sRUFBQSxXQUFBb1IsS0FBQSxPQUVBLElBQUFvckIsT0FBQSxDQUFBeDhCLEVBQUEsd0RBQ0FnOEIsYUFBQSxDQUFBNTlCLE9BQUEsVUFBQWcrQixHQUFBLEVBQ0FJLE9BQUEsQ0FBQTV0QixXQUFBLENBQUF1dEIsU0FBQSxDQUFBQyxHQUFBLG1CQUNBLEdBQ0FHLE1BQUEsQ0FBQTN0QixXQUFBLENBQUE0dEIsT0FBQSxFQUNBLE9BQUFELE1BQUEsQ0FDQSxDQUVBO0FBQ0EsSUFBQS8yQixJQUFBLENBQUF4RixFQUFBLDhDQUNBLElBQUFnWCxJQUFBLENBQUFoWCxFQUFBLHFDQUNBLElBQUE0SixJQUFBLENBQUE1SixFQUFBLHlDQUNBLElBQUF5OEIsRUFBQSxDQUFBejhCLEVBQUEsd0JBQUFvUixLQUFBLE1BQ0F4SCxJQUFBLENBQUFnRixXQUFBLENBQUE2dEIsRUFBQSxFQUNBLEdBQUFQLFdBQUEsRUFDQXR5QixJQUFBLENBQUFnRixXQUFBLENBQUE1TyxFQUFBLHdCQUFBazhCLFdBQUEsR0FDQSxDQUVBLElBQUFweUIsS0FBQSxDQUFBOUosRUFBQSw2REFDQSxJQUFBMDhCLEdBQUEsQ0FBQTE4QixFQUFBLG9EQUNBLElBQUEyOEIsR0FBQSxDQUFBMzhCLEVBQUEsNkJBRUE7QUFDQSxJQUFBNDhCLEVBQUEsQ0FBQTU4QixFQUFBLCtCQUNBLElBQUE2OEIsRUFBQSxDQUFBNzhCLEVBQUEsK0JBQ0EsSUFBQTg4QixFQUFBLENBQUE5OEIsRUFBQSwrQkFFQWc4QixhQUFBLENBQUFqaEMsS0FBQSxNQUFBcUQsT0FBQSxVQUFBZytCLEdBQUEsRUFDQVEsRUFBQSxDQUFBaHVCLFdBQUEsQ0FBQXV0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUNBSixhQUFBLENBQUFqaEMsS0FBQSxNQUFBcUQsT0FBQSxVQUFBZytCLEdBQUEsRUFDQVMsRUFBQSxDQUFBanVCLFdBQUEsQ0FBQXV0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUNBSixhQUFBLENBQUFqaEMsS0FBQSxJQUFBcUQsT0FBQSxVQUFBZytCLEdBQUEsRUFDQVUsRUFBQSxDQUFBbHVCLFdBQUEsQ0FBQXV0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUVBTyxHQUFBLENBQUEvdEIsV0FBQSxDQUFBZ3VCLEVBQUEsRUFDQUQsR0FBQSxDQUFBL3RCLFdBQUEsQ0FBQWl1QixFQUFBLEVBQ0FGLEdBQUEsQ0FBQS90QixXQUFBLENBQUFrdUIsRUFBQSxFQUNBSixHQUFBLENBQUE5dEIsV0FBQSxDQUFBK3RCLEdBQUEsRUFDQTd5QixLQUFBLENBQUE4RSxXQUFBLENBQUE4dEIsR0FBQSxFQUVBMWxCLElBQUEsQ0FBQXBJLFdBQUEsQ0FBQWhGLElBQUEsRUFDQW9OLElBQUEsQ0FBQXBJLFdBQUEsQ0FBQTlFLEtBQUEsRUFDQXRFLElBQUEsQ0FBQW9KLFdBQUEsQ0FBQW9JLElBQUEsRUFFQSxPQUFBeFIsSUFBQSxDQUNBLENBR0EsU0FBQXUzQixlQUFBQyxRQUFBLENBQUFuQixlQUFBLENBQUE3d0IsSUFBQSxDQUFBcE8sSUFBQSxFQUNBLElBQUFvZ0MsUUFBQSxRQUFBQSxRQUFBLENBRUFuQixlQUFBLENBQUFBLGVBQUEsS0FDQSxJQUFBbkQsWUFBQSxDQUFBbUQsZUFBQSxDQUFBdFgsTUFBQSxFQUFBc1gsZUFBQSxDQUFBdFgsTUFBQSxDQUFBQyxLQUFBLENBQUFxWCxlQUFBLENBQUF0WCxNQUFBLENBQUFDLEtBQUEsSUFDQSxJQUFBbVgsWUFBQSxDQUFBRSxlQUFBLENBQUFGLFlBQUEsS0FDQSxJQUFBaEksTUFBQSxDQUFBZ0ksWUFBQSxDQUFBaEksTUFBQSxLQUVBLElBQUFzSSxjQUFBLENBQUFOLFlBQUEsQ0FBQU0sY0FBQSxFQUFBSixlQUFBLENBQUFJLGNBQUEsS0FDQSxJQUFBZ0IsVUFBQSxDQUFBcmdDLElBQUEsRUFBQUEsSUFBQSxDQUFBd1UsS0FBQSxFQUFBdXFCLFlBQUEsQ0FBQXZxQixLQUFBLEVBQUF5cUIsZUFBQSxDQUFBNzVCLEtBQUEsRUFBQWdKLElBQUEsRUFBQUEsSUFBQSxDQUFBaEosS0FBQSxLQUVBO0FBQ0EsSUFBQWlQLEdBQUEsRUFDQWpSLEVBQUEsQ0FBQXBELElBQUEsRUFBQUEsSUFBQSxDQUFBb0QsRUFBQSxPQUNBeUQsT0FBQSxDQUFBN0csSUFBQSxFQUFBQSxJQUFBLENBQUE2RyxPQUFBLE9BQ0F0RCxJQUFBLENBQUF2RCxJQUFBLEVBQUFBLElBQUEsQ0FBQXVELElBQUEsT0FDQTZLLElBQUEsQ0FBQUEsSUFBQSxJQUNBLEVBRUE7QUFDQSxNQUFBZ3lCLFFBQUEsQ0FBQTlKLFVBQUEsQ0FBQThKLFFBQUEsQ0FBQXQ0QixXQUFBLENBQUFzNEIsUUFBQSxDQUFBOUosVUFBQSxFQUVBLElBQUF4NEIsR0FBQSxDQUFBNUIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsTUFFQTtBQUNBaWlDLFFBQUEsQ0FBQXB1QixXQUFBLENBQUE4c0IsWUFBQSxDQUFBQyxZQUFBLENBQUFzQixVQUFBLENBQUFwQixlQUFBLEdBR0E7QUFDQWxJLE1BQUEsQ0FBQXYxQixPQUFBLFVBQUEwMUIsQ0FBQSxFQUNBa0osUUFBQSxDQUFBcHVCLFdBQUEsQ0FBQXVzQixXQUFBLENBQUFySCxDQUFBLENBQUE0RSxZQUFBLENBQUExdEIsSUFBQSxLQUFBdFEsR0FBQSxDQUFBdVcsR0FBQSxHQUNBLEdBRUE7QUFDQSxJQUNBO0FBQ0FuYSxFQUFBLENBQUF1OEIsaUJBQUEsQ0FBQTJKLFFBQUEsRUFDQSxJQUNBM0MsY0FBQSxDQUFBMkMsUUFBQSxFQUNBO0FBQ0EvRCxvQkFBQSxDQUFBK0QsUUFBQSxFQUNBLE9BQUEzakMsQ0FBQSxHQUNBLE9BQUFBLENBQUEsR0FFQSxPQUFBMmpDLFFBQUEsQ0FDQSxDQUVBbG1DLEVBQUEsQ0FBQW9tQywwQkFBQSxFQUFBbHNCLE1BQUEsQ0FBQStyQixjQUFBO0FBRUE7QUFFQSxTQUFBSSxrQkFBQUMsSUFBQSxDQUFBbnNCLEdBQUEsRUFDQSxJQUNBLElBQUFvc0IsQ0FBQSxDQUFBMW1DLENBQUEsQ0FBQUUsYUFBQSxFQUFBRixDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxFQUFBSCxDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxDQUFBdW5CLHFCQUFBLENBQ0EsR0FBQWdmLENBQUEsU0FBQUEsQ0FBQSxDQUFBdmQsa0JBQUEsZUFDQXVkLENBQUEsQ0FBQXZkLGtCQUFBLENBQUE3TyxHQUFBLENBQUF4TixPQUFBLENBQUF3TixHQUFBLENBQUFqUixFQUFBLENBQUFvOUIsSUFBQSxFQUNBLE1BQ0FBLElBQUEsQ0FBQXh1QixXQUFBLENBQUFyUyxRQUFBLENBQUFpMkIsY0FBQSxrQ0FDQSxDQUNBLE9BQUEza0IsQ0FBQSxFQUNBclUsT0FBQSxDQUFBdytCLElBQUEsc0NBQUFucUIsQ0FBQSxFQUNBLENBQ0EsQ0FFQWxYLENBQUEsQ0FBQXVoQyxnQ0FBQSxDQUFBb0YsWUFBQSxDQUFBSCxpQkFBQSxDQUVBLFNBQUFJLG1DQUFBdHNCLEdBQUEsRUFDQSxJQUNBLElBQUFyUyxHQUFBLENBQUFxUyxHQUFBLEVBQUFBLEdBQUEsQ0FBQWpSLEVBQUEsRUFBQWlSLEdBQUEsQ0FBQWpSLEVBQUEsQ0FBQXJGLGFBQUEsRUFBQXNXLEdBQUEsQ0FBQWpSLEVBQUEsQ0FBQXJGLGFBQUEsNEJBQ0EsSUFBQWlFLEdBQUEsVUFDQSxJQUFBckcsQ0FBQSxDQUFBcUcsR0FBQSxDQUFBeEQsZ0JBQUEsK0JBQUFDLE1BQUEsSUFDQSxHQUFBOUMsQ0FBQSxHQUFBQSxDQUFBLEdBQ0EsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBLEdBQ0EsT0FBQUEsQ0FBQSxDQUNBLE9BQUFjLENBQUEsRUFDQSxTQUNBLENBQ0EsQ0FFQTFDLENBQUEsQ0FBQXdoQyxxQ0FBQSxDQUFBcUYsdUJBQUEsQ0FBQUQsa0NBQUEsQ0FDQSxDQUVBO0FBRUEsTUFBQS9aLGtCQUFBLENBRUF6cEIsWUFBQWlqQyxRQUFBLENBQUF2NUIsT0FBQSxFQUNBLEtBQUE2USxLQUFBLENBQUEwb0IsUUFBQSxPQUFBUyxzQkFBQSxHQUNBLEtBQUFoNkIsT0FBQSxDQUFBQSxPQUFBLENBQ0EsS0FBQWk2QixXQUFBLE1BQ0EsS0FBQUMsYUFBQSxNQUVBLEtBQUFDLG1CQUFBLENBQUEvdkIsQ0FBQSxPQUFBZ3dCLHlCQUFBLENBQUFod0IsQ0FBQSxFQUNBLEtBQUFpd0Isb0JBQUEsQ0FBQWp3QixDQUFBLE9BQUFnd0IseUJBQUEsQ0FBQWh3QixDQUFBLEVBQ0EsS0FBQXlHLEtBQUEsQ0FBQWpSLGdCQUFBLGNBQUF1NkIsbUJBQUEsT0FDQSxLQUFBdHBCLEtBQUEsQ0FBQWpSLGdCQUFBLGVBQUF5NkIsb0JBQUEsT0FFQSxLQUFBQyxtQkFBQSxDQUFBbHdCLENBQUEsR0FDQSxNQUFBeVMsR0FBQSxDQUFBelMsQ0FBQSxDQUFBdU0sTUFBQSxDQUFBOVIsT0FBQSxrQkFDQSxJQUFBZ1ksR0FBQSxRQUFBaE0sS0FBQSxDQUFBNVgsUUFBQSxDQUFBNGpCLEdBQUEsU0FDQXpTLENBQUEsQ0FBQXdNLGNBQUEsR0FDQXhNLENBQUEsQ0FBQXlNLGVBQUEsR0FFQSxNQUFBQyxNQUFBLENBQUErRixHQUFBLENBQUF0a0IsWUFBQSxnQkFDQSxNQUFBZ0UsRUFBQSxNQUFBMDlCLFdBQUEsQ0FDQSxJQUFBMTlCLEVBQUEsUUFFQXJKLENBQUEsQ0FBQW1oQywwQkFBQSxFQUFBQyxHQUFBLENBQUF4ZCxNQUFBLEVBQ0E5VyxPQUFBLE1BQUFBLE9BQUEsQ0FDQXpELEVBQUEsQ0FDQXNVLEtBQUEsTUFBQUEsS0FBQSxDQUNBK2lCLEtBQUEsQ0FBQXhwQixDQUNBLEdBRUEsR0FBQTBNLE1BQUEsaUJBQUFwTyxLQUFBLEdBQ0EsRUFDQSxLQUFBbUksS0FBQSxDQUFBalIsZ0JBQUEsY0FBQTA2QixtQkFBQSxFQUNBLENBRUFDLGdCQUFBLEVBQ0EsSUFDQSxJQUFBbG5DLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLEVBQUFGLENBQUEsQ0FBQUUsYUFBQSxDQUFBQyxFQUFBLENBQ0EsR0FBQUEsRUFBQSxTQUFBQSxFQUFBLENBQUF1OEIsaUJBQUEsZUFDQXY4QixFQUFBLENBQUF1OEIsaUJBQUEsTUFBQS9lLEtBQUEsRUFDQSxDQUNBO0FBQ0EsSUFDQStsQixjQUFBLE1BQUEvbEIsS0FBQSxFQUNBMmtCLG9CQUFBLE1BQUEza0IsS0FBQSxFQUNBLE9BQUFqYixDQUFBLEVBQ0EsQ0FDQSxPQUFBd1UsQ0FBQSxFQUNBaUksS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLCtCQUFBb1UsQ0FBQSxFQUNBLENBQ0EsQ0FHQWd3QiwwQkFBQWh3QixDQUFBLEVBQ0EsU0FBQXlHLEtBQUEsQ0FBQTVYLFFBQUEsQ0FBQW1SLENBQUEsQ0FBQXVNLE1BQUEsU0FFQSxNQUFBbkwsQ0FBQSxzRUFBQXBCLENBQUEsQ0FBQXVNLE1BQUEsQ0FDQSxNQUFBbmEsR0FBQSxDQUFBZ1AsQ0FBQSxFQUFBeFUsT0FBQSxFQUFBb3FCLFlBQUEsQ0FDQSxJQUFBNWtCLEdBQUEsUUFFQSxNQUFBRCxFQUFBLE1BQUEwOUIsV0FBQSxDQUNBLElBQUExOUIsRUFBQSxHQUFBekQsUUFBQSxDQUFBZ2dCLElBQUEsQ0FBQTdmLFFBQUEsQ0FBQXNELEVBQUEsU0FFQSxJQUFBekksQ0FBQSxDQUNBLEdBQUEwWCxDQUFBLFlBQUFrVyxnQkFBQSxFQUFBbFcsQ0FBQSxDQUFBOU8sSUFBQSxlQUNBNUksQ0FBQSxHQUFBMFgsQ0FBQSxDQUFBdUYsT0FBQSxDQUNBdkYsQ0FBQSxDQUFBclQsWUFBQSxnQkFBQXJFLENBQUE7QUFDQSxTQUFBMFgsQ0FBQSxZQUFBa1csZ0JBQUEsRUFBQWxXLENBQUEsQ0FBQTlPLElBQUEsYUFDQTVJLENBQUEsQ0FBQTBYLENBQUEsQ0FBQXhCLEtBQUEsU0FBQWhWLE1BQUEsQ0FBQXdXLENBQUEsQ0FBQXhCLEtBQUEsRUFDQSxNQUNBbFcsQ0FBQSxDQUFBMFgsQ0FBQSxDQUFBeEIsS0FBQSxDQUNBLENBRUEsR0FBQXhOLEdBQUEsU0FDQSxNQUFBdEUsTUFBQSxNQUFBOEgsT0FBQSxFQUFBcEosRUFBQSxFQUFBaUIsWUFBQSxHQUFBMEUsRUFBQSxDQUFBekksQ0FBQSxFQUNBLEdBQUFvRSxNQUFBLFFBQUFzVCxDQUFBLENBQUF4QixLQUFBLEdBQUE5UixNQUFBLENBQUFzVCxDQUFBLENBQUF4QixLQUFBLENBQUE5UixNQUFBLENBRUEsU0FBQXNFLEdBQUEsV0FDQSxNQUFBdEUsTUFBQSxNQUFBOEgsT0FBQSxFQUFBcEosRUFBQSxFQUFBd0IsY0FBQSxHQUFBbUUsRUFBQSxDQUFBekksQ0FBQSxFQUNBLEdBQUFvRSxNQUFBLFFBQUFzVCxDQUFBLENBQUF4QixLQUFBLEdBQUE5UixNQUFBLENBQUFzVCxDQUFBLENBQUF4QixLQUFBLENBQUE5UixNQUFBLENBRUEsU0FBQXNFLEdBQUEsY0FDQSxNQUFBaW1CLE9BQUEsTUFBQXppQixPQUFBLEVBQUFwSixFQUFBLEVBQUE0QixpQkFBQSxHQUFBK0QsRUFBQSxDQUFBekksQ0FBQSxFQUNBLEdBQUEydUIsT0FBQSxRQUFBalgsQ0FBQSxDQUFBeEIsS0FBQSxHQUFBeVksT0FBQSxDQUFBalgsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBeVksT0FBQSxDQUVBLFNBQUFqbUIsR0FBQSxjQUFBRCxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLHVCQUNBLE1BQUF1aEMsS0FBQSxDQUFBcitCLFFBQUEsQ0FBQXhJLE1BQUEsQ0FBQUcsQ0FBQSxNQUNBLEdBQUFrQixNQUFBLENBQUFDLFFBQUEsQ0FBQXVsQyxLQUFBLEdBQ0EsTUFBQUMsT0FBQSxDQUFBdm5DLENBQUEsQ0FBQUUsYUFBQSxDQUFBRSxpQkFBQSxDQUFBNEIsS0FBQSxDQUFBc2xDLEtBQUEsTUFDQSxLQUFBeDZCLE9BQUEsRUFBQTA2QixtQkFBQSxHQUFBbitCLEVBQUEsQ0FBQWsrQixPQUFBLEVBQ0EsR0FBQTltQyxNQUFBLENBQUE4bUMsT0FBQSxJQUFBanZCLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQXdCLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQXJXLE1BQUEsQ0FBQThtQyxPQUFBLEVBQ0EsQ0FFQSxNQUNBLEdBQUFqdkIsQ0FBQSxZQUFBa1csZ0JBQUEsRUFBQWxXLENBQUEsQ0FBQTlPLElBQUEsZUFDQUgsRUFBQSxDQUFBcEUsWUFBQSxTQUFBcUUsR0FBQSxDQUFBN0ksTUFBQSxHQUFBRyxDQUFBLEdBQ0EsU0FBQTBYLENBQUEsWUFBQWtXLGdCQUFBLEVBQUFsVyxDQUFBLENBQUE5TyxJQUFBLGFBQ0EsR0FBQThPLENBQUEsQ0FBQXhCLEtBQUEsUUFBQWhWLE1BQUEsQ0FBQUMsUUFBQSxDQUFBbkIsQ0FBQSxHQUNBeUksRUFBQSxDQUFBN0QsZUFBQSxTQUFBOEQsR0FBQSxFQUNBLE1BQ0FELEVBQUEsQ0FBQXBFLFlBQUEsU0FBQXFFLEdBQUEsQ0FBQTdJLE1BQUEsQ0FBQUcsQ0FBQSxHQUNBLENBQ0EsU0FBQUEsQ0FBQSxRQUNBeUksRUFBQSxDQUFBN0QsZUFBQSxTQUFBOEQsR0FBQSxFQUNBLE1BQ0FELEVBQUEsQ0FBQXBFLFlBQUEsU0FBQXFFLEdBQUEsUUFBQTFJLENBQUEsWUFBQTRCLElBQUEsQ0FBQUksU0FBQSxDQUFBaEMsQ0FBQSxFQUFBSCxNQUFBLENBQUFHLENBQUEsR0FDQSxDQUNBLENBRUE7QUFDQSxHQUFBeUksRUFBQSxDQUFBbkIsU0FBQSxDQUFBbkMsUUFBQSxxQkFDQSxRQUFBK0csT0FBQSxFQUFBdWlCLFlBQUEsTUFBQXZpQixPQUFBLENBQUF3aUIsY0FBQSxDQUFBam1CLEVBQUEsTUFDQSxNQUFBeUQsT0FBQSxDQUFBMkgsbUJBQUEsQ0FBQXBMLEVBQUEsRUFDQSxNQUNBLEtBQUF5RCxPQUFBLENBQUEySCxtQkFBQSxDQUFBcEwsRUFBQSxFQUNBLENBRUEsUUFBQW8rQixlQUFBLENBQUFwK0IsRUFBQSxDQUFBQyxHQUFBLENBQUE0TixDQUFBLEdBQ0EsS0FBQXd3QixpQ0FBQSxJQUNBLENBQ0EsQ0FFQUQsZ0JBQUFwK0IsRUFBQSxDQUFBQyxHQUFBLENBQUE4UixFQUFBLEVBQ0EsR0FBQS9SLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsdUJBQUF1RCxHQUFBLHlCQUNBLGFBQ0EsQ0FFQXdpQixjQUFBbG5CLFFBQUEsRUFDQSxLQUFBbWlDLFdBQUEsQ0FBQW5pQyxRQUFBLENBQ0EsS0FBQXlWLE1BQUEsR0FDQSxDQUVBN0UsTUFBQSxFQUNBLEtBQUF1eEIsV0FBQSxNQUNBLFFBQUFDLGFBQUEsRUFDQXZ1QixZQUFBLE1BQUF1dUIsYUFBQSxFQUNBLEtBQUFBLGFBQUEsTUFDQSxDQUNBO0FBQ0EsS0FBQXJwQixLQUFBLENBQUFuWSxlQUFBLDBCQUNBLEtBQUFtWSxLQUFBLENBQUFsSCxTQUFBLHFGQUNBLENBRUFpeEIsa0NBQUFDLEtBQUEsTUFDQSxNQUFBaDVCLE1BQUEscUVBQUEvSSxRQUFBLENBQUFvc0IsYUFBQSxDQUNBLE1BQUE0VixTQUFBLENBQUFqNUIsTUFBQSxFQUFBN0ssT0FBQSxFQUFBb3FCLFlBQUEsT0FDQSxJQUFBd0IsUUFBQSxNQUFBRSxNQUFBLE1BRUEsR0FBQWpoQixNQUFBLHFCQUFBQSxNQUFBLG1CQUFBQSxNQUFBLEVBQ0E7QUFDQStnQixRQUFBLENBQUEvZ0IsTUFBQSxDQUFBZ2hCLGNBQUEsQ0FDQTtBQUNBQyxNQUFBLENBQUFqaEIsTUFBQSxDQUFBa2hCLFlBQUEsQ0FDQSxDQUVBLFFBQUFtWCxhQUFBLENBQUF2dUIsWUFBQSxNQUFBdXVCLGFBQUEsRUFDQSxLQUFBQSxhQUFBLHVCQUFBbDNCLFVBQUEsTUFDQSxLQUFBdUssTUFBQSxHQUNBLEdBQUF1dEIsU0FBQSxFQUNBLE1BQUE3WCxJQUFBLHFFQUNBLEtBQUFwUyxLQUFBLENBQUEzWixhQUFBLHlCQUFBNGpDLFNBQUEsS0FDQSxDQUNBLEdBQUE3WCxJQUFBLEVBQ0FBLElBQUEsQ0FBQXRJLEtBQUEsR0FDQSxJQUNBLEdBQUFpSSxRQUFBLFFBQUFFLE1BQUEsZUFBQUcsSUFBQSxDQUFBRCxpQkFBQSxlQUNBO0FBQ0FDLElBQUEsQ0FBQUQsaUJBQUEsQ0FBQUosUUFBQSxDQUFBRSxNQUFBLEVBQ0EsQ0FDQSxPQUFBMVksQ0FBQSxFQUFBaUksS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLGlCQUFBb1UsQ0FBQSxHQUNBLENBQ0EsQ0FDQSxFQUFBeXdCLEtBQUEsRUFDQSxDQUVBdHRCLE9BQUEsRUFFQSxNQUFBaFIsRUFBQSxNQUFBMDlCLFdBQUEsQ0FDQSxJQUFBMTlCLEVBQUEsR0FBQXpELFFBQUEsQ0FBQWdnQixJQUFBLENBQUE3ZixRQUFBLENBQUFzRCxFQUFBLGNBQUFtTSxLQUFBLEdBRUE7QUFDQSxLQUFBbUksS0FBQSxDQUFBblksZUFBQSwwQkFFQSxNQUFBcWlDLFdBQUEsTUFBQWxxQixLQUFBLENBQUFtcUIsU0FBQSxDQUVBO0FBQ0EsR0FBQXorQixFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLHVCQUNBLElBQUFtWixHQUFBLE1BQ0EsSUFDQUEsR0FBQSxDQUFBbGYsQ0FBQSxDQUFBZ2EsRUFBQSxFQUFBQSxFQUFBLENBQUFDLFFBQUEsRUFBQXJVLFFBQUEsQ0FBQUMsY0FBQSxvQ0FBQW1VLEVBQUEsQ0FBQUMsUUFBQSxvQ0FDQSxPQUFBdlgsQ0FBQSxFQUNBd2MsR0FBQSxNQUNBLENBRUEsR0FBQUEsR0FBQSxFQUNBLEtBQUF2QixLQUFBLENBQUFsSCxTQUFBLENBQUF5SSxHQUFBLEtBQ0EsS0FBQTZvQiwyQkFBQSxHQUNBLEtBQUFDLHVCQUFBLENBQUEzK0IsRUFBQSxFQUNBLEtBQUFnK0IsZUFBQSxHQUNBLEtBQUExcEIsS0FBQSxDQUFBbXFCLFNBQUEsQ0FBQUQsV0FBQSxDQUNBLE9BQ0EsQ0FFQSxNQUFBSSxPQUFBLENBQUFqb0MsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsRUFBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQW9tQywwQkFBQSxDQUNBLE1BQUFoWixPQUFBLENBQUF2dEIsQ0FBQSxDQUFBd3RCLGdCQUFBLEtBQ0EsTUFBQTBhLEtBQUEsQ0FBQTNhLE9BQUEsa0JBQ0EsR0FBQTJhLEtBQUEsRUFBQUQsT0FBQSxFQUNBLEtBQUF0cUIsS0FBQSxDQUFBbEgsU0FBQSxJQUNBd3hCLE9BQUEsQ0FBQTV0QixNQUFBLENBQ0EsS0FBQXNELEtBQUEsQ0FDQXVxQixLQUFBLENBQ0EsR0FDQSxDQUFBNytCLEVBQUEsQ0FBQXlELE9BQUEsTUFBQUEsT0FBQSxDQUFBdEQsSUFBQSxXQUFBaVIsS0FBQSxDQUFBeXRCLEtBQUEsQ0FBQTc4QixLQUFBLFlBQ0EsRUFDQSxLQUFBMDhCLDJCQUFBLEdBRUE7QUFDQSxJQUNBLE1BQUFJLFdBQUEsQ0FDQSxLQUFBeHFCLEtBQUEsQ0FBQTNaLGFBQUEsb0NBQ0EsS0FBQTJaLEtBQUEsQ0FBQTNaLGFBQUEsMkRBQ0EsS0FBQTJaLEtBQUEsQ0FBQTNaLGFBQUEsaUNBRUEsTUFBQW9rQyxRQUFBLENBQ0EsT0FBQXpxQixLQUFBLENBQUEzWixhQUFBLDJCQUVBLElBQUFva0MsUUFBQSxFQUNBO0FBQ0EsTUFBQTNCLElBQUEsVUFBQTRCLFdBQUF4NUIsSUFBQSxFQUNBLElBQUF5NUIsQ0FBQSxDQUNBejVCLElBQUEsQ0FBQTdLLGFBQUEsb0NBQ0E2SyxJQUFBLENBQUE3SyxhQUFBLDJEQUNBNkssSUFBQSxDQUFBN0ssYUFBQSxpQ0FDQSxHQUFBc2tDLENBQUEsUUFBQUEsQ0FBQSxDQUNBO0FBQ0EsTUFBQTVELE1BQUEsQ0FDQTcxQixJQUFBLENBQUE3SyxhQUFBLHFFQUNBNkssSUFBQSxDQUFBN0ssYUFBQSxvQkFBQTZLLElBQUEsQ0FDQSxNQUFBNUcsR0FBQSxDQUFBckMsUUFBQSxDQUFBMlEsYUFBQSxRQUNBdE8sR0FBQSxDQUFBdU8sU0FBQSwrQ0FDQSxNQUFBK3hCLEdBQUEsQ0FBQTNpQyxRQUFBLENBQUEyUSxhQUFBLFVBQ0FneUIsR0FBQSxDQUFBL3hCLFNBQUEsb0JBQ0EreEIsR0FBQSxDQUFBdndCLFdBQUEsVUFDQSxNQUFBd3dCLEdBQUEsQ0FBQTVpQyxRQUFBLENBQUEyUSxhQUFBLFFBQ0FpeUIsR0FBQSxDQUFBaHlCLFNBQUEsc0JBQ0E4eEIsQ0FBQSxDQUFBMWlDLFFBQUEsQ0FBQTJRLGFBQUEsUUFDQSt4QixDQUFBLENBQUE5eEIsU0FBQSwwQkFDQTh4QixDQUFBLENBQUFyakMsWUFBQSxpQ0FDQXVqQyxHQUFBLENBQUF2d0IsV0FBQSxDQUFBcXdCLENBQUEsRUFDQXJnQyxHQUFBLENBQUFnUSxXQUFBLENBQUFzd0IsR0FBQSxFQUNBdGdDLEdBQUEsQ0FBQWdRLFdBQUEsQ0FBQXV3QixHQUFBLEVBQ0E5RCxNQUFBLENBQUF6c0IsV0FBQSxDQUFBaFEsR0FBQSxFQUNBLE9BQUFxZ0MsQ0FBQSxDQUNBLE9BQUEzcUIsS0FBQSxFQUVBLE1BQUErb0IsQ0FBQSxDQUFBMW1DLENBQUEsQ0FBQUUsYUFBQSxFQUFBRixDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxFQUFBSCxDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxDQUFBdW5CLHFCQUFBLENBQ0EsR0FBQWdmLENBQUEsU0FBQUEsQ0FBQSxDQUFBdmQsa0JBQUEsZUFDQXNkLElBQUEsQ0FBQWh3QixTQUFBLElBQ0Fpd0IsQ0FBQSxDQUFBdmQsa0JBQUEsTUFBQXJjLE9BQUEsQ0FBQXpELEVBQUEsQ0FBQW85QixJQUFBLEVBQ0EsQ0FDQSxDQUNBLE9BQUF2dkIsQ0FBQSxFQUFBaUksS0FBQSxFQUFBQyxHQUFBLEVBQUF0YyxLQUFBLCtCQUFBb1UsQ0FBQSxHQUVBLEtBQUE4d0IsdUJBQUEsQ0FBQTMrQixFQUFBLEVBQ0EsS0FBQXNVLEtBQUEsQ0FBQW1xQixTQUFBLENBQUFELFdBQUEsQ0FDQSxPQUNBLENBRUEsS0FBQWxxQixLQUFBLENBQUFsSCxTQUFBLHFGQUNBLE9BQ0EsQ0FFQTtBQUNBLElBQUFwTixFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLGdDQUFBeVAsS0FBQSxHQUVBLE1BQUFuQixJQUFBLENBQUFyVSxDQUFBLENBQUFFLGFBQUEsQ0FBQW9VLHdCQUFBLENBQUFDLHVCQUFBLENBQUFsTCxFQUFBLEVBQ0EsTUFBQUcsSUFBQSxDQUFBNkssSUFBQSxDQUFBN0ssSUFBQSxTQUVBLFNBQUFpL0IsU0FBQS9rQyxFQUFBLEVBQ0EsSUFBQTFELENBQUEsQ0FBQWdhLEVBQUEsR0FBQUEsRUFBQSxDQUFBQyxRQUFBLGFBQ0EsSUFBQXJVLFFBQUEsQ0FBQUMsY0FBQSxTQUFBbkMsRUFBQSxjQUNBLElBQ0EsT0FBQXNXLEVBQUEsQ0FBQUMsUUFBQSxDQUFBdlcsRUFBQSxFQUNBLE9BQUF3VCxDQUFBLEVBQ0EsWUFDQSxDQUNBLENBRUEsTUFBQWlKLE1BQUEsdUJBQUEzVyxJQUFBLEdBQ0EsTUFBQTBWLEdBQUEsQ0FBQXVwQixRQUFBLENBQUF0b0IsTUFBQSxFQUNBLE1BQUF1b0IsV0FBQSxDQUFBRCxRQUFBLCtCQUVBLE1BQUFsYixPQUFBLENBQUF2dEIsQ0FBQSxDQUFBd3RCLGdCQUFBLEtBQ0EsTUFBQTBYLGVBQUEsQ0FBQTNYLE9BQUEsQ0FBQS9qQixJQUFBLFFBQ0EsTUFBQXkrQixPQUFBLENBQUFqb0MsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsRUFBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQW9tQywwQkFBQSxDQUVBLEdBQUFybkIsR0FBQSxFQUNBO0FBQ0EsTUFBQTRPLE1BQUEsQ0FBQUMsUUFBQSxDQUFBelcsSUFBQSxDQUFBckQsSUFBQSxDQUFBeEksTUFBQSxDQUFBMkwsU0FBQSxDQUFBQyxjQUFBLEVBQ0EsTUFBQXdXLEtBQUEsQ0FBQXFYLGVBQUEsRUFBQUEsZUFBQSxDQUFBdFgsTUFBQSxFQUFBc1gsZUFBQSxDQUFBdFgsTUFBQSxDQUFBQyxLQUFBLENBQUFxWCxlQUFBLENBQUF0WCxNQUFBLENBQUFDLEtBQUEsSUFDQSxNQUFBOGEsTUFBQSxLQUFBdDBCLElBQUEsRUFDQSxHQUFBd1osS0FBQSxFQUNBcGlCLE1BQUEsQ0FBQWkyQixJQUFBLENBQUE3VCxLQUFBLEVBQUFwbUIsT0FBQSxDQUFBb1MsQ0FBQSxHQUNBLE1BQUFjLElBQUEsQ0FBQWtULEtBQUEsQ0FBQWhVLENBQUEsTUFDQSxJQUFBaVUsTUFBQSxDQUFBelosSUFBQSxDQUFBd0YsQ0FBQSxHQUNBLEdBQUFpVSxNQUFBLENBQUFuVCxJQUFBLGFBQ0E7QUFDQWd1QixNQUFBLENBQUE5dUIsQ0FBQSxFQUFBYyxJQUFBLENBQUFuUixJQUFBLGVBQUFtUixJQUFBLENBQUFzVCxPQUFBLENBQUF0VCxJQUFBLENBQUFzVCxPQUFBLENBQ0EsQ0FDQSxTQUFBdFQsSUFBQSxDQUFBblIsSUFBQSxjQUNBO0FBQ0FtL0IsTUFBQSxDQUFBOXVCLENBQUEsRUFBQTdaLENBQUEsQ0FBQUUsYUFBQSxDQUFBRSxpQkFBQSxDQUFBb0IsY0FBQSxDQUFBNlMsSUFBQSxDQUFBd0YsQ0FBQSxTQUNBLFNBQUF4RixJQUFBLENBQUF3RixDQUFBLFFBQUFpVSxNQUFBLENBQUFuVCxJQUFBLGFBQ0FndUIsTUFBQSxDQUFBOXVCLENBQUEsRUFBQWMsSUFBQSxDQUFBc1QsT0FBQSxDQUNBLENBQ0EsR0FDQSxDQUNBLEtBQUF0USxLQUFBLENBQUFsSCxTQUFBLENBQUF5SSxHQUFBLENBQUF5cEIsTUFBQSxFQUVBLEtBQUF0QixlQUFBLEdBQ0EsU0FBQW5DLGVBQUEsRUFBQStDLE9BQUEsRUFDQSxLQUFBdHFCLEtBQUEsQ0FBQWxILFNBQUEsSUFDQXd4QixPQUFBLENBQUE1dEIsTUFBQSxDQUNBLEtBQUFzRCxLQUFBLENBQ0F1bkIsZUFBQSxDQUNBLElBQUE3d0IsSUFBQSxFQUNBLENBQUFoTCxFQUFBLENBQUF5RCxPQUFBLE1BQUFBLE9BQUEsQ0FBQXRELElBQUEsQ0FBQWlSLEtBQUEsQ0FBQXBHLElBQUEsQ0FBQWhKLEtBQUEsS0FDQSxFQUNBO0FBQ0EsS0FBQWc4QixlQUFBLEdBQ0EsU0FBQXFCLFdBQUEsRUFDQSxLQUFBL3FCLEtBQUEsQ0FBQWxILFNBQUEsQ0FBQWl5QixXQUFBLEtBQUFyMEIsSUFBQSxHQUNBLEtBQUFnekIsZUFBQSxHQUNBLE1BRUEsTUFBQXVCLEdBQUEsd0NBQUF6b0IsTUFBQSx5QkFBQTFmLE1BQUEsQ0FBQStJLElBQUEsa0JBQ0EsS0FBQW1VLEtBQUEsQ0FBQWxILFNBQUEsSUFDQSxNQUFBb3lCLEdBQUEsQ0FBQWpqQyxRQUFBLENBQUEyUSxhQUFBLFFBQ0FzeUIsR0FBQSxDQUFBcnlCLFNBQUEsOEJBQ0FxeUIsR0FBQSxDQUFBN3dCLFdBQUEsQ0FBQTR3QixHQUFBO0FBQ0EsS0FBQWpyQixLQUFBLENBQUExRixXQUFBLENBQUE0d0IsR0FBQSxFQUNBLENBRUEsS0FBQWQsMkJBQUEsR0FDQSxLQUFBcHFCLEtBQUEsQ0FBQW1xQixTQUFBLENBQUFELFdBQUEsQ0FDQSxDQUVBRSw0QkFBQSxFQUNBLE1BQUEvSyxNQUFBLENBQUF6MkIsS0FBQSxDQUFBQyxJQUFBLE1BQUFtWCxLQUFBLENBQUFsWixnQkFBQSxpQ0FDQSxJQUFBdTRCLE1BQUEsQ0FBQXQ0QixNQUFBLFFBRUEsSUFBQVQsS0FBQSxPQUNBKzRCLE1BQUEsQ0FBQXYxQixPQUFBLENBQUEwMUIsQ0FBQSxHQUNBLElBQUFsNUIsS0FBQSxFQUFBazVCLENBQUEsQ0FBQWoxQixTQUFBLENBQUFuQyxRQUFBLGFBQ0E5QixLQUFBLE1BQ0EsTUFDQSxHQUFBazVCLENBQUEsQ0FBQWoxQixTQUFBLENBQUFuQyxRQUFBLGFBQ0FvM0IsQ0FBQSxDQUFBajFCLFNBQUEsQ0FBQThHLE1BQUEsWUFDQW11QixDQUFBLENBQUE5d0IsYUFBQSxLQUFBOFUsS0FBQSwyQkFBQTVVLE9BQUEsU0FDQSxNQUNBNHdCLENBQUEsQ0FBQWoxQixTQUFBLENBQUE4RyxNQUFBLFlBQ0EsQ0FDQSxDQUNBLEdBRUEsSUFBQS9LLEtBQUEsRUFDQSs0QixNQUFBLElBQUE5MEIsU0FBQSxDQUFBNkcsR0FBQSxZQUNBaXVCLE1BQUEsSUFBQTN3QixhQUFBLEtBQUE4VSxLQUFBLDBCQUFBNVUsT0FBQSxTQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0F5N0Isd0JBQUFjLFNBQUEsRUFDQSxJQUNBO0FBQ0EsSUFBQUMsT0FBQSxDQUFBL29DLENBQUEsQ0FBQXdoQyxxQ0FBQSxFQUFBeGhDLENBQUEsQ0FBQXdoQyxxQ0FBQSxDQUFBcUYsdUJBQUEsQ0FFQSxJQUFBdmdDLElBQUEsR0FDQSxVQUFBeWlDLE9BQUEsZUFDQXppQyxJQUFBLENBQUF5aUMsT0FBQSxFQUFBMS9CLEVBQUEsQ0FBQXkvQixTQUFBLE1BQ0EsTUFDQTtBQUNBLElBQUE3Z0MsR0FBQSxDQUFBNmdDLFNBQUEsRUFBQUEsU0FBQSxDQUFBOWtDLGFBQUEsNEJBQ0FzQyxJQUFBLENBQUEyQixHQUFBLENBQUFBLEdBQUEsQ0FBQXhELGdCQUFBLCtCQUFBQyxNQUFBLE1BQ0EsR0FBQTRCLElBQUEsR0FBQUEsSUFBQSxHQUNBLEdBQUFBLElBQUEsR0FBQUEsSUFBQSxHQUNBLENBQ0EsS0FBQXFYLEtBQUEsQ0FBQTFZLFlBQUEseUJBQUF4RSxNQUFBLENBQUE2RixJQUFBLEdBQ0EsT0FBQTVELENBQUEsRUFDQSxDQUNBLENBR0Fva0MsdUJBQUEsRUFDQSxNQUFBamdDLENBQUEsQ0FBQWpCLFFBQUEsQ0FBQTJRLGFBQUEsUUFDQTFQLENBQUEsQ0FBQW5ELEVBQUEsdUJBQ0FtRCxDQUFBLENBQUEyUCxTQUFBLHVCQUNBNVEsUUFBQSxDQUFBZ2dCLElBQUEsQ0FBQTNOLFdBQUEsQ0FBQXBSLENBQUEsRUFDQSxtQ0FBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FFQTtBQUNBN0csQ0FBQSxDQUFBNnNCLGtCQUFBLENBQUFBLGtCQUFBLENBQ0FqbkIsUUFBQSxDQUFBeUcsYUFBQSxLQUFBOFUsS0FBQSw4QkFFQSxHQUFBbFQsTUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
1412 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Rpc3QvYmZiL19vdXQvd3BiY19iZmIuanMiLCJuYW1lcyI6WyJ3IiwiQ29yZSIsIldQQkNfQkZCX0NvcmUiLCJVSSIsIldQQkNfQkZCX1Nhbml0aXplIiwiZXNjX2NzcyIsInMiLCJDU1MiLCJlc2NhcGUiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yIiwidiIsInNhbml0aXplX2h0bWxfaWQiLCJ0cmltIiwidGVzdCIsInNhbml0aXplX2h0bWxfbmFtZSIsImVzY2FwZV9odG1sIiwiZXNjYXBlX3ZhbHVlX2Zvcl9hdHRyIiwic2FuaXRpemVfY3NzX2NsYXNzbGlzdCIsInRvX3Rva2VuIiwidG9fa2ViYWIiLCJ0b0xvd2VyQ2FzZSIsImlzX3RydXRoeSIsImNvZXJjZV9ib29sZWFuIiwiZGVmIiwicGFyc2VfcGVyY2VudCIsImZhbGxiYWNrX3ZhbHVlIiwibiIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsImVzY2FwZV9mb3JfYXR0cl9xdW90ZWQiLCJlc2NhcGVfZm9yX3Nob3J0Y29kZSIsInNhZmVfanNvbl9wYXJzZSIsImZhbGxiYWNrIiwiSlNPTiIsInBhcnNlIiwiXyIsInN0cmluZ2lmeV9kYXRhX3ZhbHVlIiwic3RyaW5naWZ5IiwiY29uc29sZSIsImVycm9yIiwic2FuaXRpemVfY3NzX2xlbiIsIm0iLCJtYXRjaCIsInNhbml0aXplX2hleF9jb2xvciIsIldQQkNfQkZCX0lkU2VydmljZSIsImNvbnN0cnVjdG9yIiwicGFnZXNfY29udGFpbmVyIiwiZW5zdXJlX3VuaXF1ZV9maWVsZF9pZCIsImJhc2VJZCIsImN1cnJlbnRFbCIsImJhc2UiLCJpZCIsImVzYyIsImVzY1VpZCIsIm5vdFNlbGYiLCJkYXRhc2V0IiwidWlkIiwicXVlcnlTZWxlY3RvciIsImZvdW5kIiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsImVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSIsIm5hbWUiLCJzZWxlY3RvciIsImNsYXNoZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwic2V0X2ZpZWxkX2lkIiwiZmllbGRfZWwiLCJuZXdJZFJhdyIsInJlbmRlclByZXZpZXciLCJkZXNpcmVkIiwidW5pcXVlIiwic2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX25hbWUiLCJuZXdOYW1lUmF3IiwicmF3IiwiZ2V0QXR0cmlidXRlIiwic2V0X2ZpZWxkX2h0bWxfaWQiLCJuZXdIdG1sSWRSYXciLCJyZW1vdmVBdHRyaWJ1dGUiLCJodG1sSWQiLCJjbGFzaEluQ2FudmFzIiwiZG9tQ2xhc2giLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZG9tQ2xhc2hJc1NlbGYiLCJjb250YWlucyIsIldQQkNfQkZCX0xheW91dFNlcnZpY2UiLCJvcHRzIiwiY29sX2dhcF9wZXJjZW50IiwiY29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3ciLCJyb3dfZWwiLCJnYXBfcGVyY2VudCIsImNvbHMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJjb2wiLCJzdHlsZSIsImZsZXhCYXNpcyIsInAiLCJOYU4iLCJzdW1fcmF3IiwicmVkdWNlIiwiYSIsImIiLCJncCIsInRvdGFsX2dhcHMiLCJhdmFpbGFibGUiLCJzY2FsZSIsImJhc2VzIiwiYXBwbHlfYmFzZXNfdG9fcm93IiwiZm9yRWFjaCIsImkiLCJzZXRfZXF1YWxfYmFzZXMiLCJlYWNoIiwiZmlsbCIsImFwcGx5X2xheW91dF9wcmVzZXQiLCJzZWN0aW9uT3JSb3ciLCJ3ZWlnaHRzIiwicm93IiwiY2xhc3NMaXN0IiwiaXNBcnJheSIsInN1bSIsImJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMiLCJmb3JtYXRfcHJlc2V0X2xhYmVsIiwicm91bmQiLCJqb2luIiwicGFyc2Vfd2VpZ2h0cyIsImlucHV0Iiwic3BsaXQiLCJmaWx0ZXIiLCJXUEJDX0JGQl9Vc2FnZUxpbWl0U2VydmljZSIsInBhbGV0dGVfdWxzIiwicGFyc2VfdXNhZ2VfbGltaXQiLCJJbmZpbml0eSIsInBhcnNlSW50IiwiY291bnRfdXNhZ2VfYnlfa2V5IiwidXNlZCIsImFsbCIsImVsIiwia2V5IiwidXNhZ2Vfa2V5IiwidHlwZSIsImdldF9saW1pdF9mb3Jfa2V5Iiwicm9vdHMiLCJhbGxQYWxldHRlRmllbGRzIiwiZmxhdE1hcCIsInIiLCJsaW1pdCIsInVzYWdlbnVtYmVyIiwidXBkYXRlX3BhbGV0dGVfdWkiLCJ1c2FnZSIsInBhbGV0dGVzIiwicGFsIiwicGFuZWxfZmllbGQiLCJwYWxldHRlSWQiLCJ1c2FnZUtleSIsInJhd19saW1pdCIsInBlckVsTGltaXQiLCJnbG9iYWxMaW1pdCIsImN1cnJlbnQiLCJkaXNhYmxlIiwicG9pbnRlckV2ZW50cyIsIm9wYWNpdHkiLCJjb3VudF9mb3Jfa2V5IiwibGltaXRfZm9yX2tleSIsInJlbWFpbmluZ19mb3Jfa2V5IiwiY2FuX2FkZCIsImRlbHRhIiwicmVtIiwiZ2F0ZV9vcl9hbGVydCIsImxhYmVsIiwiYWxlcnQiLCJpc191c2FnZV9vayIsIldQQkNfQkZCX0V2ZW50cyIsIk9iamVjdCIsImZyZWV6ZSIsIlNFTEVDVCIsIkNMRUFSX1NFTEVDVElPTiIsIkZJRUxEX0FERCIsIkZJRUxEX1JFTU9WRSIsIlNUUlVDVFVSRV9DSEFOR0UiLCJTVFJVQ1RVUkVfTE9BREVEIiwiV1BCQ19CRkJfRXZlbnRCdXMiLCJzY29wZV9lbCIsImVtaXQiLCJkZXRhaWwiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwib24iLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJXUEJDX0JGQl9Tb3J0YWJsZU1hbmFnZXIiLCJidWlsZGVyIiwiZ2lkIiwiaW5zdGFuY2VfaWQiLCJncm91cE5hbWUiLCJhbmltYXRpb24iLCJnaG9zdENsYXNzIiwiY2hvc2VuQ2xhc3MiLCJkcmFnQ2xhc3MiLCJjYW5kaWRhdGVfZHdlbGxfbXMiLCJjYW5kaWRhdGVfY29tbWl0X2Rpc3RhbmNlIiwiY2FuZGlkYXRlX2R3ZWxsX2Rpc3RhbmNlIiwiX2NvbnRhaW5lcnMiLCJTZXQiLCJfZHJhZ19mYWlsX3NhZmVfYm91bmQiLCJfZHJhZ19zdGF0ZSIsIl9iaW5kX2RyYWdfZmFpbF9zYWZlIiwiX2NsZWFudXBfZHJhZ191aSIsImRyYWdfc3RhdGUiLCJpdGVtIiwicmVtb3ZlIiwic291cmNlX3NwYWNlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIl9yZWxlYXNlX2NhbnZhc19nZW9tZXRyeV9sb2NrcyIsIl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MiLCJfcmVtb3ZlX2RyYWdnaW5nX2NsYXNzIiwiX2NhcHR1cmVfY2FudmFzX2dlb21ldHJ5X2xvY2tzIiwibG9ja19zZWxlY3RvciIsImJsb2NrX3NpemVfcHJvcGVydHkiLCJlbGVtZW50IiwiYmxvY2tfc2l6ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImhhZF9sb2NrX2NsYXNzIiwicHJldmlvdXNfYmxvY2tfc2l6ZSIsImdldFByb3BlcnR5VmFsdWUiLCJwcmV2aW91c19ibG9ja19zaXplX3ByaW9yaXR5IiwiZ2V0UHJvcGVydHlQcmlvcml0eSIsIkJvb2xlYW4iLCJfYXBwbHlfY2FudmFzX2dlb21ldHJ5X2xvY2tzIiwiZ2VvbWV0cnlfbG9ja3MiLCJnZW9tZXRyeV9sb2NrIiwic2V0UHJvcGVydHkiLCJhZGQiLCJyZW1vdmVQcm9wZXJ0eSIsIl9wcmVwYXJlX2RyYWdfc3RhdGUiLCJldnQiLCJzb3VyY2VfcmVjdCIsImZyb21fcGFsZXR0ZSIsImluY2x1ZGVzIiwic291cmNlX3BhcmVudCIsInNvdXJjZV9uZXh0X3NpYmxpbmciLCJuZXh0U2libGluZyIsIndpZHRoIiwiYWNjZXB0ZWRfY2FuZGlkYXRlIiwicGVuZGluZ19jYW5kaWRhdGUiLCJwZW5kaW5nX3NpbmNlIiwicGVuZGluZ19wb2ludGVyIiwiX2NyZWF0ZV9kcmFnX3NvdXJjZV9zcGFjZXIiLCJzcGFjZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmZXJlbmNlX25vZGUiLCJpbnNlcnRCZWZvcmUiLCJfc3RhcnRfZHJhZyIsIl9hZGRfZHJhZ2dpbmdfY2xhc3MiLCJfdGFnX2RyYWdfbWlycm9yIiwiX2ZpbmlzaF9kcmFnIiwiX2FsbG93X2NhbnZhc19tb3ZlIiwib3JpZ2luYWxfZXZlbnQiLCJ0byIsImNsb3Nlc3QiLCJ0b3VjaF9ldmVudCIsInRvdWNoZXMiLCJjaGFuZ2VkVG91Y2hlcyIsImV2ZW50X3giLCJjbGllbnRYIiwiZXZlbnRfeSIsImNsaWVudFkiLCJkcmFnZ2VkX3JlY3QiLCJkcmFnZ2VkUmVjdCIsImRyYWdnZWQiLCJwb2ludGVyX3giLCJsZWZ0IiwicG9pbnRlcl95IiwidG9wIiwiY29udGFpbmVyX3JlY3QiLCJwYWRkaW5nX3giLCJwYWRkaW5nX3kiLCJ2aXN1YWxseV9lbXB0eSIsImlubmVyX3RvcCIsImlubmVyX2JvdHRvbSIsImJvdHRvbSIsImlubmVyX2xlZnQiLCJpbm5lcl9yaWdodCIsInJpZ2h0IiwiY2FuZGlkYXRlIiwicmVsYXRlZCIsIndpbGxfaW5zZXJ0X2FmdGVyIiwid2lsbEluc2VydEFmdGVyIiwiY2FuZGlkYXRlX21hdGNoZXMiLCJmaXJzdCIsInNlY29uZCIsIm5vdyIsIndpbmRvdyIsInBlcmZvcm1hbmNlIiwiRGF0ZSIsIngiLCJ5IiwicG9pbnRlcl9kaXN0YW5jZSIsImh5cG90IiwiY2FuZGlkYXRlX2FnZSIsImNyb3NzZWRfY29tbWl0X2Rpc3RhbmNlIiwiY29tcGxldGVkX2R3ZWxsX21vdmUiLCJmaW5pc2hfZHJhZyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImV2dF9uYW1lIiwiaGlkZGVuIiwiZnJvbVBhbGV0dGUiLCJyb2xlIiwibWlycm9yIiwiYWN0aXZlIiwicm9vdCIsImRvY3VtZW50RWxlbWVudCIsImVuc3VyZV9zaW1wbGVfbGlzdCIsImNvbnRhaW5lciIsImhhbmRsZXJzIiwiU29ydGFibGUiLCJnZXQiLCJjb21tb24iLCJmb3JjZUZhbGxiYWNrIiwiZmFsbGJhY2tPbkJvZHkiLCJmYWxsYmFja1RvbGVyYW5jZSIsInJlbW92ZUNsb25lT25IaWRlIiwib25TdGFydCIsIm9uRW5kIiwic2V0VGltZW91dCIsImNyZWF0ZSIsImdyb3VwIiwicHVsbCIsInB1dCIsInNvcnQiLCJkaXJlY3Rpb24iLCJoYW5kbGUiLCJoYW5kbGVfc2VsZWN0b3IiLCJkcmFnZ2FibGUiLCJkcmFnZ2FibGVfc2VsZWN0b3IiLCJmYWxsYmFja0NsYXNzIiwicHJldmVudE9uRmlsdGVyIiwiaW52ZXJ0U3dhcCIsInN3YXBUaHJlc2hvbGQiLCJpbnZlcnRlZFN3YXBUaHJlc2hvbGQiLCJlbXB0eUluc2VydFRocmVzaG9sZCIsImRyYWdvdmVyQnViYmxlIiwic2Nyb2xsIiwic2Nyb2xsU2Vuc2l0aXZpdHkiLCJzY3JvbGxTcGVlZCIsIm9uVXBkYXRlIiwiZW5zdXJlIiwic29ydGFibGVfa2luZCIsIm9uQ2hvb3NlIiwib25Nb3ZlIiwiZHJhZ2dlZEVsIiwib25BZGQiLCJfb25fYWRkX3NlY3Rpb24iLCJoYW5kbGVfb25fYWRkIiwiYmluZCIsImJ1cyIsInJlYXNvbiIsImRhdGEiLCJXUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIiLCJnZXRfYWxsX2RhdGFfYXR0cmlidXRlcyIsImlzU2VjdGlvbiIsImFkZF9vdmVybGF5X3Rvb2xiYXIiLCJwYWdlc19zZWN0aW9ucyIsImluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXMiLCJjb2x1bW5zIiwic2VsZWN0X2ZpZWxkIiwiYWRkX3NlY3Rpb24iLCJzZWN0aW9uIiwibGFzdEVsZW1lbnRDaGlsZCIsIm5ld0luZGV4IiwiY2hpbGRyZW4iLCJyZWYiLCJkZXN0cm95QWxsIiwiaW5zdCIsImRlc3Ryb3kiLCJjbGVhciIsIldQQkNfQkZCX0RPTSIsIlNFTEVDVE9SUyIsInBhZ2VQYW5lbCIsImZpZWxkIiwidmFsaWRGaWVsZCIsImNvbHVtbiIsIm92ZXJsYXkiLCJDTEFTU0VTIiwic2VsZWN0ZWQiLCJBVFRSIiwiY3JlYXRlX2VsZW1lbnQiLCJ0YWciLCJjbGFzc19uYW1lIiwiaW5uZXJfaHRtbCIsImlubmVySFRNTCIsInNldF9kYXRhX2F0dHJpYnV0ZXMiLCJkYXRhX29iaiIsImVudHJpZXMiLCJ2YWwiLCJ2YWx1ZSIsImF0dHJpYnV0ZXMiLCJhdHRyIiwic3RhcnRzV2l0aCIsImUiLCJoYXNFeHBsaWNpdExhYmVsIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJyZW5kZXJfZmllbGRfaW5uZXJfaHRtbCIsImZpZWxkX2RhdGEiLCJoYXNMYWJlbCIsImlzX3JlcXVpcmVkIiwicmVxdWlyZWQiLCJ3cmFwcGVyIiwic3BhbkxhYmVsIiwidGV4dENvbnRlbnQiLCJhcHBlbmRDaGlsZCIsInNwYW5UeXBlIiwiZGVib3VuY2UiLCJmbiIsIndhaXQiLCJ0IiwiZGVib3VuY2VkIiwiYXJncyIsImNsZWFyVGltZW91dCIsImFwcGx5IiwiV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnkiLCJNYXAiLCJyZWdpc3RlciIsIkNsYXNzUmVmIiwic2V0IiwiV1BCQ19CRkJfRmllbGRfQmFzZSIsImdldF9kZWZhdWx0cyIsImh0bWxfaWQiLCJwbGFjZWhvbGRlciIsIm1pbmxlbmd0aCIsIm1heGxlbmd0aCIsInBhdHRlcm4iLCJjc3NjbGFzcyIsImhlbHAiLCJub3JtYWxpemVfZGF0YSIsImQiLCJkZWZhdWx0cyIsIm91dCIsImsiLCJnZXRfdGVtcGxhdGUiLCJ0ZW1wbGF0ZV9pZCIsIndwIiwidGVtcGxhdGUiLCJkb21JZCIsIl9fYmZiX3RwbF9jYWNoZV9tYXAiLCJjb21waWxlciIsInJlbmRlciIsImN0eCIsImNvbXBpbGUiLCJzYW5pdCIsInRpdGxlIiwib25fZmllbGRfZHJvcCIsIm1ldGEiLCJjb250ZXh0IiwiZGVmcyIsInVuZGVmaW5lZCIsImhhc1ZhbHVlIiwiZGVmYXVsdFZhbCIsIlN0cnVjdHVyZSIsInVwZGF0ZV9maWVsZF9wcm9wIiwiX2lubmVyIiwiX2UiLCJmcmVzaCIsImF1dG9uYW1lIiwid2FzX2xvYWRlZCIsImhhc0F0dHJpYnV0ZSIsIlMiLCJ1bmlxIiwibmFtZV91c2VyX3RvdWNoZWQiLCJuYW1lX2Zyb21fbGFiZWwiLCJtYXliZV9hdXRvbmFtZV9mcm9tX2xhYmVsIiwibGFiZWxWYWwiLCJhbGxvd0F1dG8iLCJ1c2VyVG91Y2hlZCIsImlzTG9hZGVkIiwiaW5zIiwibmFtZUN0cmwiLCJXUEJDX0JGQl9TZWxlY3RfQmFzZSIsIm9wdGlvbl9yb3dfdGVtcGxhdGVfaWQiLCJraW5kIiwiX19yb290X3dpcmVkIiwiX19yb290X25vZGUiLCJ1aSIsImxpc3QiLCJob2xkZXIiLCJ0b2dnbGUiLCJhZGRfYnRuIiwiZHJhZ19oYW5kbGUiLCJtdWx0aXBsZV9jaGsiLCJkZWZhdWx0X3RleHQiLCJwbGFjZWhvbGRlcl9pbnB1dCIsInBsYWNlaG9sZGVyX25vdGUiLCJzaXplX2lucHV0IiwibWVudV9yb290IiwibWVudV90b2dnbGUiLCJtZW51X2FjdGlvbiIsInZhbHVlX2RpZmZlcnNfY2hrIiwiYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCIsImRpZmZlcnMiLCJpc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQiLCJwYW5lbCIsImNoayIsImNoZWNrZWQiLCJzeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5Iiwicm93cyIsImxibF9pbiIsInZhbF9pbiIsImRpc3BsYXkiLCJoYXNDYWNoZSIsImNhY2hlZF92YWx1ZSIsInVzZXJFZGl0ZWQiLCJ2YWx1ZV91c2VyX3RvdWNoZWQiLCJsYmwiLCJtaXJyb3JlZCIsImlzX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQiLCJtYXJrX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQiLCJpbml0X3Jvd19mcmVzaF9mbGFncyIsIm11bHRpcGxlIiwic2l6ZSIsImRlZmF1bHRfdmFsdWUiLCJvcHRpb25zIiwibWluX3dpZHRoIiwidHBsIiwiX3dwYmMiLCJkZXYiLCJXUEJDX0JGQl9PdmVybGF5IiwiaXNfZHJvcCIsIm8iLCJwaCIsImRmbHQiLCJnZXRfcGFuZWxfcm9vdCIsImdldF9saXN0IiwiZ2V0X2hvbGRlciIsIm1ha2VfdWlkIiwiYXBwZW5kX3JvdyIsImlkeCIsInJvd2QiLCJhc3NpZ24iLCJpbmRleCIsInRwbF9pZCIsImh0bWwiLCJ3cmFwIiwibm9kZSIsImZpcnN0RWxlbWVudENoaWxkIiwidmFsSW4iLCJsYmxJbiIsImNsb3NlX2Ryb3Bkb3duIiwiYW5jaG9yX2VsIiwiaW5zZXJ0X2FmdGVyIiwibmV3X25vZGUiLCJyZWZfbm9kZSIsImNvbW1pdF9vcHRpb25zIiwic2VsIiwicHVzaCIsIkV2ZW50Iiwic3luY19kZWZhdWx0X3ZhbHVlX2xvY2siLCJzeW5jX3BsYWNlaG9sZGVyX2xvY2siLCJfX3NlbGVjdGJhc2VfZmllbGQiLCJlbnN1cmVfc29ydGFibGUiLCJleGlzdGluZyIsIndwYmNfYmZiX2FwaSIsImdldF9idWlsZGVyIiwid3BiY19iZmIiLCJzb3J0YWJsZSIsInNvcnRhYmxlX2luaXQiLCJyZWJ1aWxkX2lmX2VtcHR5IiwiaGFzX3Jvd19kZWZhdWx0cyIsImNoZWNrcyIsImlzX211bHRpcGxlX2VuYWJsZWQiLCJoYXNfdGV4dF9kZWZhdWx0X3ZhbHVlIiwiZHYiLCJub3RlIiwibG9jayIsImRpc2FibGVkIiwiaXNNdWx0aXBsZSIsInBsYWNlaG9sZGVyUm93Iiwic2l6ZUlucHV0Iiwic2l6ZVJvdyIsImVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQiLCJjbGlja2VkIiwia2VwdCIsImoiLCJib290c3RyYXBfcGFuZWwiLCJzZWxlY3RiYXNlX2Jvb3RzdHJhcHBlZCIsIndpcmVfb25jZSIsIl9fc2VsZWN0YmFzZV93aXJlZCIsIm9uX3JlYWR5X29yX3JlbmRlciIsImV2Iiwid2lyZV9yb290X2xpc3RlbmVycyIsImlzQ29ubmVjdGVkIiwic2VsZWN0YmFzZV9yb290X3dpcmVkIiwiZ2V0X3BhbmVsIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3Rpb24iLCJwcmV2X2NvdW50IiwiaXNfbGFiZWxfb3JfdmFsdWUiLCJpc190b2dnbGUiLCJpc19tdWx0aXBsZSIsIm1hdGNoZXMiLCJpc19kZWZhdWx0X3RleHQiLCJpc192YWx1ZV9kaWZmZXJzIiwiaXNfbXVsdGkiLCJfcHVsc2VfdGltZXJzIiwiX3B1bHNlX21ldGEiLCJQVUxTRV9USFJPVFRMRV9NUyIsIlBVTFNFX0RFQk9VTkNFX01TIiwiU1RSVUNUVVJFX0NIQU5HRV9ERUJPVU5DRV9NUyIsIlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyIsImNhbmNlbF9wdWxzZSIsImRlbGV0ZSIsInRva2VuIiwiY29sb3Jfc2V0IiwiZGVib3VuY2VfaWQiLCJfcmVzdGFydF9jc3NfYW5pbWF0aW9uIiwiY2xzIiwib2Zmc2V0V2lkdGgiLCJwdWxzZV9vbmNlIiwiZHVyX21zIiwibXMiLCJwdWxzZV9zZXF1ZW5jZSIsInRpbWVzIiwib25fbXMiLCJvZmZfbXMiLCJoZXhfY29sb3IiLCJib2R5IiwiY291bnQiLCJ0aHJvdHRsZV9tcyIsImxhc3RfdHMiLCJoYXZlX2NvbG9yIiwidGljayIsIm0yIiwibTMiLCJwdWxzZV9xdWVyeV9kZWJvdW5jZWQiLCJyb290X29yX3NlbGVjdG9yIiwid2FpdF9tcyIsImMiLCJjb2xvciIsImRlZl9tcyIsInB1bHNlX3F1ZXJ5IiwicHVsc2Vfc2VxdWVuY2Vfc3Ryb25nIiwiV1BCQ19CRkJfTW9kdWxlIiwiaW5pdCIsInN5bmNfc2V0dGluZ3NfYnV0dG9uX3N0YXRlcyIsInNldHRpbmdzX2J1dHRvbnMiLCJpbnNwZWN0b3IiLCJpbnNwZWN0b3JfaXNfb3BlbiIsInNlbGVjdGFibGVfcXVlcnkiLCJidXR0b25zIiwic2V0dGluZ3NfYnV0dG9uIiwib3duZXIiLCJpc19wcmVzc2VkIiwicHJlcGVuZCIsInNldHRpbmdzX2J0biIsIm9uY2xpY2siLCJzY3JvbGxJbnRvVmlldyIsIndwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlIiwicGFuZWxfaWQiLCJ0YWJfaWQiLCJiZWhhdmlvciIsImJsb2NrIiwiZm9jdXNhYmxlIiwiZm9jdXMiLCJXUEJDX0JGQl9MYXlvdXRfQ2hpcHMiLCJfZ2V0X2NvbF9taW5fcHgiLCJnZXRDb21wdXRlZFN0eWxlIiwiX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluIiwiZWZmIiwibGF5b3V0IiwiYXZhaWxQY3QiLCJyb3dQeCIsImF2YWlsUHgiLCJtaW5QY3QiLCJtaW5QeCIsInN1bU1pbiIsIndTdW0iLCJ0YXJnZXRQY3QiLCJsb2NrZWQiLCJsb2NrZWRTdW0iLCJyZW1haW5pbmciLCJmcmVlSWR4IiwiZnJlZVRhcmdldFN1bSIsInJlc3VsdCIsIl9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQiLCJzZWN0aW9uX2VsIiwiZml0dGVkIiwiX2Fubm91bmNlIiwicmVuZGVyX2Zvcl9zZWN0aW9uIiwiaG9zdF9lbCIsIl9tYWtlX2NoaXAiLCJwcmVzZXRzIiwiY3VzdG9tQnRuIiwiZXhhbXBsZSIsInRleHQiLCJwcm9tcHQiLCJidG4iLCJ2aXMiLCJiYXIiLCJmbGV4IiwidG9GaXhlZCIsInR4dCIsInBhcmVudEVsZW1lbnQiLCJXUEJDX0JGQl9TZWxlY3Rpb25fQ29udHJvbGxlciIsIl9zZWxlY3RlZF91aWQiLCJnZXRfc2VsZWN0ZWRfZmllbGQiLCJfb25fY2xlYXIiLCJvbl9jbGVhciIsIl9vbl9wYW5lbF9zaG93biIsIl9zeW5jX3NldHRpbmdzX2J1dHRvbl9zdGF0ZXMiLCJkZWxldGVfaXRlbSIsIm5laWdoYm9yIiwiX2ZpbmRfbmVpZ2hib3Jfc2VsZWN0YWJsZSIsIl9vbl9jYW52YXNfY2xpY2siLCJfaGFuZGxlX2NhbnZhc19jbGljayIsIklHTk9SRSIsImhpdCIsInByZXNlbGVjdF90YWJfa2V5IiwiaW5kZXhPZiIsInNlYyIsImNvbF9zdHlsZXNfYWN0aXZlX3RhYiIsIldQQkNfQkZCX0NvbHVtbl9TdHlsZXMiLCJzZXRfc2VsZWN0ZWRfY29sX2ZsYWciLCJ0YWJzIiwid3BiY191aV90YWJzIiwic2V0X2FjdGl2ZSIsInRhYl9rZXkiLCJwcmV2RWwiLCJjbGVhcl9zZWxlY3RlZF9jb2xfZmxhZyIsInByZXYiLCJwcmV2X3VpZCIsInNvdXJjZSIsImJpbmRfdG9fZmllbGQiLCJJbnNwZWN0b3JFbmhhbmNlcnMiLCJzY2FuIiwiV1BCQ19CRkJfVmFsdWVTbGlkZXIiLCJpbml0X29uIiwiV1BCQ19CRkJfSW5zcGVjdG9yX0JyaWRnZSIsIl9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHMiLCJfaHlkcmF0ZV9zcGVjaWFsX2NvbnRyb2xzIiwiZXNjX2F0dHIiLCJzcmMiLCJfYXR0YWNoX2luc3BlY3RvciIsIl9iaW5kX2lkX3Nhbml0aXplciIsIl9vcGVuX2luc3BlY3Rvcl9hZnRlcl9maWVsZF9hZGRlZCIsIl9iaW5kX2ZvY3VzX3Nob3J0Y3V0cyIsImF0dGFjaCIsIldQQkNfQkZCX0luc3BlY3RvciIsIm9uX2ZvY3VzIiwiZ3JwX2tleSIsInNsb3QiLCJncm91cF93cmFwIiwiaGVhZGVyX2J0biIsIl9vbl9pbnNwZWN0b3JfZm9jdXMiLCJzZXRWYWwiLCJjdHJsIiwiU0tJUCIsInNjaGVtYXMiLCJXUEJDX0JGQl9TY2hlbWFzIiwidHlwZUtleSIsInNjaGVtYUVudHJ5IiwicHJvcHNTY2hlbWEiLCJzY2hlbWEiLCJwcm9wcyIsImhhc093biIsIkZ1bmN0aW9uIiwiZ2V0RGVmYXVsdCIsImRlZmF1bHQiLCJpbnNwZWN0b3JLZXkiLCJkbCIsInZhbHVlX2Zyb20iLCJ2YWx1ZUZyb20iLCJoYXNSYXciLCJkZWZWYWx1ZSIsIkhUTUxJbnB1dEVsZW1lbnQiLCJfX3dwYmNfYmZiX2lkX3Nhbml0aXplcl9ib3VuZCIsIkVWIiwiZW5zdXJlX3NjX2RlYm91bmNlX3N0YXRlIiwiX193cGJjX2JmYl9zY19kZWJvdW5jZV9zdGF0ZSIsInRpbWVyX2lkIiwicGVuZGluZ19wYXlsb2FkIiwiY2FuY2VsX3NjX2RlYm91bmNlZF9lbWl0Iiwic3QiLCJidXNfZW1pdF9jaGFuZ2UiLCJleHRyYSIsImJ1c19lbWl0X2NoYW5nZV9kZWJvdW5jZWQiLCJwYXlsb2FkIiwicHJldmlld19tb2RlIiwicmVuZGVyX3ByZXZpZXciLCJhcHBsaWVkIiwiYmVmb3JlIiwic2FuaXRpemVkIiwic2VsU3RhcnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbEVuZCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwibmV4dCIsImRlc2lyZWRBcnIiLCJkZXNpcmVkU2V0IiwiaXNDb3JlIiwiYmVmb3JlQ2xhc3NlcyIsImN1c3RvbUJlZm9yZSIsImhhcyIsIm1pc3NpbmciLCJhZnRlckNsYXNzZXMiLCJjaGFuZ2VkIiwic29tZSIsInBoYXNlIiwiYXV0b0FjdGl2ZSIsInRvZ2dsZUF0dHJpYnV0ZSIsImkxOG4iLCJhdXRvX2Zyb21fbGFiZWwiLCJzZWxmTG9ja2VkIiwibmV4dFZhbCIsImlzX2dlbl9rZXkiLCJ2aXN1YWxLZXlzIiwiaXNfbGVuX2dyb3VwX2N0cmwiLCJXUEJDX0JGQl9LZXlib2FyZF9Db250cm9sbGVyIiwiX29uX2tleSIsIm9uX2tleSIsImlzX3R5cGluZyIsIl9pc190eXBpbmdfYW55d2hlcmUiLCJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5IiwiZGlyIiwibW92ZV9pdGVtIiwiYWN0aXZlRWxlbWVudCIsInRhZ05hbWUiLCJpc0NvbnRlbnRFZGl0YWJsZSIsIldQQkNfQkZCX1Jlc2l6ZV9Db250cm9sbGVyIiwiaW5pdF9yZXNpemVfaGFuZGxlciIsImhhbmRsZV9yZXNpemUiLCJidXR0b24iLCJyZXNpemVyIiwiY3VycmVudFRhcmdldCIsImxlZnRfY29sIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInJpZ2h0X2NvbCIsIm5leHRFbGVtZW50U2libGluZyIsImxlZnRfaW5kZXgiLCJyaWdodF9pbmRleCIsInN0YXJ0X3giLCJsZWZ0X3N0YXJ0X3B4IiwicmlnaHRfc3RhcnRfcHgiLCJwYWlyX3B4IiwiY29tcHV0ZWQiLCJwYWlyX2F2YWlsIiwicGN0VG9QeCIsInBjdCIsImdlbmVyaWNNaW5QY3QiLCJnZW5lcmljTWluUHgiLCJsZWZ0TWluUHgiLCJyaWdodE1pblB4IiwicHJldl91c2VyX3NlbGVjdCIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJvbl9tb3VzZV9tb3ZlIiwiZGVsdGFfcHgiLCJuZXdMZWZ0UHgiLCJuZXdSaWdodFB4IiwibmV3TGVmdFBjdCIsIm5ld0Jhc2VzIiwib25fbW91c2VfdXAiLCJub3JtYWxpemVkIiwiV1BCQ19CRkJfUGFnZXNfU2VjdGlvbnMiLCJhZGRfcGFnZSIsInJlYnVpbGRfc2VjdGlvbiIsInNlY3Rpb25fZGF0YSIsImluaXRfc2VjdGlvbl9zb3J0YWJsZSIsIl9yZXRhZ191aWRzX2luX3N1YnRyZWUiLCJub2RlcyIsInByZWZpeCIsIl91aWRfY291bnRlciIsIl9tYWtlX3VuaXF1ZSIsInRha2VuIiwic3RlbSIsIl9kZWR1cGVfc3VidHJlZV9zdHJpY3QiLCJ0YWtlbkRhdGFJZCIsInRha2VuRGF0YU5hbWUiLCJ0YWtlbkh0bWxJZCIsInRha2VuRG9tSWQiLCJkaWQiLCJkbmFtIiwiaGlkIiwiaXNGaWVsZCIsImNvbWJpbmVkVGFrZW4iLCJodG1sRm9yIiwiX21ha2VfYWRkX2NvbHVtbnNfY29udHJvbCIsInBhZ2VfZWwiLCJzZWN0aW9uX2NvbnRhaW5lciIsImluc2VydF9wb3MiLCJjb250ZW50IiwiY2xvbmUiLCJjbG9uZU5vZGUiLCJpbnNlcnQiLCJwYWdlX2NvdW50ZXIiLCJjb250cm9sc19odG1sIiwicmVuZGVyX3dwX3RlbXBsYXRlIiwicGFnZV9udW1iZXIiLCJzZWN0aW9uX2NvdW50X29uX2FkZF9wYWdlIiwiY29udHJvbHNfaG9zdF90b3AiLCJjdHJsX3RvcCIsImNvbnRyb2xzX2hvc3RfYm90dG9tIiwiYWZ0ZXIiLCJjdHJsX2JvdHRvbSIsInNlY3Rpb25fY291bnRlciIsImluaXRfc29ydGFibGUiLCJjb2xzX2RhdGEiLCJjb2xfc3R5bGVzIiwianNvbiIsImFyciIsInBhcnNlX2NvbF9zdHlsZXMiLCJjb2xfZGF0YSIsImNvbHVtbnNfb25seSIsIml0ZW1zIiwiYnVpbGRfZmllbGQiLCJ0cmlnZ2VyX2ZpZWxkX2Ryb3BfY2FsbGJhY2siLCJpc19jb2x1bW4iLCJpc190b3BfbGV2ZWwiLCJXUEJDX0JGQl9TdHJ1Y3R1cmVfSU8iLCJnZXRfc3RydWN0dXJlIiwic2VyaWFsaXplIiwibG9hZF9zYXZlZF9zdHJ1Y3R1cmUiLCJkZXNlcmlhbGl6ZSIsIl9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyIsImhhc192YWx1ZV9kaWZmZXJzIiwidmFsdWVfZGlmZmVycyIsIm9wdGlvbl9yZWNvcmQiLCJfbm9ybWFsaXplX2lkcyIsIl9ub3JtYWxpemVfbmFtZXMiLCJwYWdlcyIsInBhZ2VfaW5kZXgiLCJwYWdlIiwiY2hpbGQiLCJzZXJpYWxpemVfc2VjdGlvbiIsImZfZGF0YSIsImNvbF9zdHlsZXNfcmF3IiwiY29sQ291bnQiLCJwYXJzZWQiLCJzdHJ1Y3R1cmUiLCJkZWZlcklmVHlwaW5nIiwiX2lzX3R5cGluZ19pbl9pbnNwZWN0b3IiLCJfZGVmZXJfdGltZXIiLCJwYWdlX2RhdGEiLCJ3YW50IiwiV1BCQ19CRkJfTWluX1dpZHRoX0d1YXJkIiwiX29uX2ZpZWxkX2FkZCIsIl9vbl9maWVsZF9yZW1vdmUiLCJfb25fc3RydWN0dXJlX2xvYWRlZCIsIl9vbl9zdHJ1Y3R1cmVfY2hhbmdlIiwiX29uX3dpbmRvd19yZXNpemUiLCJfcGVuZGluZ19yb3dzIiwiX3BlbmRpbmdfYWxsIiwiX3JhZl9pZCIsInBhc3NpdmUiLCJfc2NoZWR1bGVfcmVmcmVzaF9hbGwiLCJzcmNfZWwiLCJfc2NoZWR1bGVfcmVmcmVzaF9yb3ciLCJfa2lja19yYWYiLCJyZWZyZXNoX2FsbCIsInJlZnJlc2hfcm93IiwiYXBwbHlfY29sX21pbiIsInB4IiwibWluV2lkdGgiLCJhYnMiLCJjb2xfZWwiLCJtYXhfcHgiLCJjb2xSZWN0IiwiZW5kc1dpdGgiLCJwYXJzZV9sZW5fcHgiLCJjcyIsImZvbnRTaXplIiwiV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIiLCJ1cGdyYWRlX2NoZWNrYm94ZXNfaW4iLCJyb290X2VsIiwiaW5wdXRzIiwiaW5wdXRfaWQiLCJnZW5lcmF0ZV91bmlxdWVfaWQiLCJsYWJlbF90ZXh0IiwicmVzb2x2ZV9sYWJlbF90ZXh0IiwiaWNvbl9sYWJlbCIsInRleHRfbGFiZWwiLCJjcmVhdGVUZXh0Tm9kZSIsInJlcGxhY2VkIiwidHJ5X3JlcGxhY2Vfa25vd25fcm93IiwiYXNzb2MiLCJjc3NfZXNjYXBlIiwibmVhcl9sYWJlbCIsImlsIiwidDIiLCJhcmlhIiwiY3RybF93cmFwIiwiZmlyc3RDaGlsZCIsImljb25fbGJsIiwidGV4dF9sYmwiLCJhcHBseV9wb3N0X3JlbmRlciIsIlQiLCJjYiIsIl9fd3BiY19hcmlhX2hvb2tlZCIsInJlZ3MiLCJfX3dwYmNfZWgiLCJncm91cHMiLCJub2RlVHlwZSIsImNvbmNhdCIsImciLCJfX3dwYmNfbGVuX3dpcmVkIiwibnVtYmVyIiwicmFuZ2UiLCJ1bml0Iiwic3luY19yYW5nZV9mcm9tX251bWJlciIsImVtcHR5X3JhbmdlX3ZhbHVlIiwiZGlzcGF0Y2hfaW5wdXQiLCJkaXNwYXRjaF9jaGFuZ2UiLCJwZW5kaW5nX3ZhbCIsInBlbmRpbmdfY2hhbmdlIiwibGFzdF9mbHVzaF90cyIsIm1pbl9pbnRlcnZhbF9tcyIsImxlblRocm90dGxlIiwiZmx1c2hfcmFuZ2VfdG9fbnVtYmVyIiwic2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyIiwiZW1pdF9jaGFuZ2UiLCJvbl9udW1iZXJfaW5wdXQiLCJvbl9udW1iZXJfY2hhbmdlIiwib25fcmFuZ2VfaW5wdXQiLCJvbl9yYW5nZV9jaGFuZ2UiLCJkZXN0cm95X29uIiwiX3Jvb3QiLCJwYXRjaEluc3BlY3RvckVuaGFuY2VycyIsImFwcGx5UGF0Y2giLCJJbnNwZWN0b3IiLCJfX3dwYmNfZW5oYW5jZXJzX3BhdGNoZWQiLCJvcmlnIiwiaW5zRWwiLCJvbmNlIiwid3BiY19iZmJfX2Rpc3BhdGNoX3Nob3dfcGFuZWwiLCJldmVudF9kZXRhaWwiLCJXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMiLCJ0b3BfdGFic19uYXYiLCJhZHZhbmNlZF90YWJfd3JhcCIsImFkdmFuY2VkX3BhbmVsIiwibXV0YXRpb25fb2JzZXJ2ZXIiLCJsYXN0X21vZGUiLCJzeW5jX3JpZ2h0YmFyX21vZGUiLCJoYW5kbGVfY2xpY2siLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImF0dHJpYnV0ZUZpbHRlciIsImdldF9hY3RpdmVfdG9wX3RhYl9pZCIsImFjdGl2ZV90YWJfaWQiLCJhY3RpdmVfbGluayIsImJ1aWxkZXJfcGFuZWwiLCJpc19lbGVtZW50X3Zpc2libGUiLCJ2aXNpYmlsaXR5IiwiaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUiLCJzaG93X2FkdmFuY2VkX3Rvb2xzX3RhYiIsImhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiIiwiaXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlIiwib3Blbl9hZHZhbmNlZF90b29sc19wYW5lbCIsIm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwiLCJpc19hZHZhbmNlZF9tb2RlIiwiZXZlbnQiLCJ0aGlzX29iaiIsInJlYWR5U3RhdGUiLCJfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fIiwiY29uZmlybSIsImlzX2ZpZWxkIiwiTW9kYWxfQ29uZmlybV9EZWxldGUiLCJvcGVuIiwiZHVwbGljYXRlX2l0ZW0iLCJXUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyIsInJ1biIsIndhcm4iLCJFcnJvciIsIndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3Nsb3RzIiwid3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbSIsImF0dHJzIiwia2V5cyIsImRrIiwiYnVpbGRfdG9nZ2xlX3JvdyIsImlucHV0X2VsIiwiZ2V0X2luaXRpYWxfdmFsdWUiLCJwcm9wc19zY2hlbWEiLCJjb2VyY2VfYnlfdHlwZSIsImlzTmFOIiwibm9ybWFsaXplX3NlbGVjdF9vcHRpb25zIiwicGFyc2VfbGVuIiwiZmFsbGJhY2tfdW5pdCIsImNsYW1wX251bSIsImluaXRfY29sb3Jpc19waWNrZXJzIiwiQ29sb3JpcyIsImFscGhhIiwiZm9ybWF0IiwidGhlbWVNb2RlIiwiYnVpbGRfcmFuZ2VfbnVtYmVyX3JvdyIsImxhYmVsX2VsIiwic3RlcCIsIm51bSIsImJ1aWxkX2xlbl9jb21wb3VuZF9yb3ciLCJjb250cm9sIiwiZGVmX3N0ciIsImZhbGxiYWNrX3UiLCJ1bml0cyIsInNsaWRlcl9tYXAiLCJzbGlkZXIiLCJpbmxpbmUiLCJ1Iiwib3B0IiwidGFiaW5kZXgiLCJ3aXJlX2xlbl9ncm91cCIsImZpbmRfZ3JvdXAiLCJ3cml0ZXIiLCJib3VuZHNfYnlfdW5pdCIsImJ1aWxkX2NvbnRyb2wiLCJwcm9wX21ldGEiLCJjbGFzc2VzIiwic2xvdF9yb3ciLCJob3N0X2F0dHJzIiwic2xvdF9ob3N0Iiwic2xvdF9mbiIsIm9wdF9lbCIsInJuX2lkIiwicm5fdmFsIiwiYnVpbGRfZ3JvdXAiLCJpc19vcGVuIiwiZmllbGRzIiwiYXNBcnJheSIsInZhbHVlcyIsImNvbnRyb2xzIiwiYnVpbGRfaGVhZGVyIiwiaW5zcGVjdG9yX3VpIiwidGl0bGVfZmFsbGJhY2siLCJzY2hlbWFfZm9yX3R5cGUiLCJ2YXJpYW50IiwiaGVhZGVyX3ZhcmlhbnQiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyX2FjdGlvbnMiLCJkZXNjcmlwdGlvbiIsImFjdGlvbkJ0biIsImFjdCIsIm1pbmltYWwiLCJpY29uTWFwIiwiaGVhZGVyIiwiYWN0aW9ucyIsImgzIiwidWlDIiwidWlHIiwiZzEiLCJnMiIsImczIiwiZmFjdG9yeV9yZW5kZXIiLCJwYW5lbF9lbCIsInRpdGxlX3RleHQiLCJXUEJDX0JGQl9JbnNwZWN0b3JfRmFjdG9yeSIsInNsb3RfbGF5b3V0X2NoaXBzIiwiaG9zdCIsIkwiLCJsYXlvdXRfY2hpcHMiLCJ2YWx1ZV9mcm9tX2NvbXB1dGVfc2VjdGlvbl9jb2x1bW5zIiwiY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnMiLCJfY3JlYXRlX2ZhbGxiYWNrX3BhbmVsIiwic2VsZWN0ZWRfZWwiLCJfcmVuZGVyX3RpbWVyIiwiX29uX2RlbGVnYXRlZF9pbnB1dCIsIl9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQiLCJfb25fZGVsZWdhdGVkX2NoYW5nZSIsIl9vbl9kZWxlZ2F0ZWRfY2xpY2siLCJfcG9zdF9yZW5kZXJfdWkiLCJ2X2ludCIsImNsYW1wZWQiLCJzZXRfc2VjdGlvbl9jb2x1bW5zIiwiX25lZWRzX3JlcmVuZGVyIiwiX3NjaGVkdWxlX3JlbmRlcl9wcmVzZXJ2aW5nX2ZvY3VzIiwiZGVsYXkiLCJhY3RpdmVLZXkiLCJwcmV2X3Njcm9sbCIsInNjcm9sbFRvcCIsIl9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbiIsIl9zZXRfcGFuZWxfc2VjdGlvbl9jb2xzIiwiRmFjdG9yeSIsImVudHJ5IiwiaGFzU2xvdEhvc3QiLCJoYXNDaGlwcyIsImVuc3VyZUhvc3QiLCJoIiwibGFiIiwiY3RsIiwiX2dldF90cGwiLCJnZW5lcmljX3RwbCIsIm1lcmdlZCIsIm1zZyIsImRpdiIsInNlY3Rpb25FbCIsImNvbXB1dGUiXSwic291cmNlcyI6WyJiZmItY29yZS5qcyIsImJmYi1maWVsZHMuanMiLCJiZmItdWkuanMiLCJiZmItc3luYy1jb2RlLXRvb2xzLXRhYi5qcyIsImJmYi1pbnNwZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWNvcmUuanMgPT0gfCAyMDI1LTA5LTEwIDE1OjQ3XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0Ly8gU2luZ2xlIGdsb2JhbCBuYW1lc3BhY2UgKGlkZW1wb3RlbnQgJiBsb2FkLW9yZGVyIHNhZmUpLlxyXG5cdGNvbnN0IENvcmUgPSAoIHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSApO1xyXG5cdGNvbnN0IFVJICAgPSAoIENvcmUuVUkgPSBDb3JlLlVJIHx8IHt9ICk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvcmUgc2FuaXRpemUvZXNjYXBlL25vcm1hbGl6ZSBoZWxwZXJzLlxyXG5cdCAqIEFsbCBtZXRob2RzIHVzZSBzbmFrZV9jYXNlOyBjYW1lbENhc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfU2FuaXRpemUgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgdGV4dCBmb3Igc2FmZSB1c2UgaW4gQ1NTIHNlbGVjdG9ycy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gcmF3IHNlbGVjdG9yIGZyYWdtZW50XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjX2NzcyhzKSB7XHJcblx0XHRcdHJldHVybiAody5DU1MgJiYgdy5DU1MuZXNjYXBlKSA/IHcuQ1NTLmVzY2FwZSggU3RyaW5nKCBzICkgKSA6IFN0cmluZyggcyApLnJlcGxhY2UoIC8oW15cXHctXSkvZywgJ1xcXFwkMScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBhIHZhbHVlIGZvciBhdHRyaWJ1dGUgc2VsZWN0b3JzLCBlLmcuIFtkYXRhLWlkPVwiPHZhbHVlPlwiXS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKHYpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXFxcL2csICdcXFxcXFxcXCcgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXCIvZywgJ1xcXFxcIicgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxuL2csICdcXFxcQSAnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1xcXS9nLCAnXFxcXF0nICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTYW5pdGl6ZSBpbnRvIGEgYnJvYWRseSBjb21wYXRpYmxlIEhUTUwgaWQ6IGxldHRlcnMsIGRpZ2l0cywgLSBfIDogLiA7IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlci5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB2XHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2FuaXRpemVfaHRtbF9pZCh2KSB7XHJcblx0XHRcdGxldCBzID0gKHYgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCB2ICkpLnRyaW0oKTtcclxuXHRcdFx0cyAgICAgPSBzXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9cXHMrL2csICctJyApXHJcblx0XHRcdFx0LnJlcGxhY2UoIC9bXkEtWmEtejAtOVxcLV9cXDouXS9nLCAnLScgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvLSsvZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL15bLV8uOl0rfFstXy46XSskL2csICcnICk7XHJcblx0XHRcdGlmICggIXMgKSByZXR1cm4gJ2ZpZWxkJztcclxuXHRcdFx0aWYgKCAhL15bQS1aYS16XS8udGVzdCggcyApICkgcyA9ICdmLScgKyBzO1xyXG5cdFx0XHRyZXR1cm4gcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGludG8gYSBzYWZlIEhUTUwgbmFtZSB0b2tlbjogbGV0dGVycywgZGlnaXRzLCBfIC1cclxuXHRcdCAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlcjsgbm8gZG90cy9icmFja2V0cy9zcGFjZXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2h0bWxfbmFtZSh2KSB7XHJcblxyXG5cdFx0XHRsZXQgcyA9ICh2ID09IG51bGwgPyAnJyA6IFN0cmluZyggdiApKS50cmltKCk7XHJcblxyXG5cdFx0XHRzID0gcy5yZXBsYWNlKCAvXFxzKy9nLCAnXycgKS5yZXBsYWNlKCAvW15BLVphLXowLTlfLV0vZywgJ18nICkucmVwbGFjZSggL18rL2csICdfJyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHMgKSB7XHJcblx0XHRcdFx0cyA9ICdmaWVsZCc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAhIC9eW0EtWmEtel0vLnRlc3QoIHMgKSApIHtcclxuXHRcdFx0XHRzID0gJ2ZfJyArIHM7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgZm9yIEhUTUwgdGV4dC9hdHRyaWJ1dGVzIChub3QgVVJMcykuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY2FwZV9odG1sKHYpIHtcclxuXHRcdFx0aWYgKCB2ID09IG51bGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLycvZywgJyYjMDM5OycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvPC9nLCAnJmx0OycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvPi9nLCAnJmd0OycgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVzY2FwZSBtaW5pbWFsIHNldCBmb3IgYXR0cmlidXRlLXNhZmV0eSB3aXRob3V0IHNsdWdnaW5nLlxyXG5cdFx0ICogS2VlcHMgb3JpZ2luYWwgaHVtYW4gdGV4dDsgZXNjYXBlcyAmLCA8LCA+LCBcIiBhbmQgJyBvbmx5LlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfdmFsdWVfZm9yX2F0dHIocykge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBzID09IG51bGwgPyAnJyA6IHMgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvJi9nLCAnJmFtcDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLzwvZywgJyZsdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLz4vZywgJyZndDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1wiL2csICcmcXVvdDsnIClcclxuXHRcdFx0XHQucmVwbGFjZSggLycvZywgJyYjMzk7JyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2FuaXRpemUgYSBzcGFjZS1zZXBhcmF0ZWQgQ1NTIGNsYXNzIGxpc3QuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2Nzc19jbGFzc2xpc3Qodikge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApLnJlcGxhY2UoIC9bXlxcd1xcLSBdKy9nLCAnICcgKS5yZXBsYWNlKCAvXFxzKy9nLCAnICcgKS50cmltKCk7XHJcblx0XHR9XHJcbi8vID09IE5FVyA9PVxyXG5cdFx0LyoqXHJcblx0XHQgKiBUdXJuIGFuIGFyYml0cmFyeSB2YWx1ZSBpbnRvIGEgY29uc2VydmF0aXZlIFwidG9rZW5cIiAodW5kZXJzY29yZXMsIGh5cGhlbnMgYWxsb3dlZCkuXHJcblx0XHQgKiBVc2VmdWwgZm9yIHNob3J0Y29kZSB0b2tlbnMsIGlkcyBpbiBwbGFpbiB0ZXh0LCBldGMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHRvX3Rva2VuKHYpIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiA/PyAnJyApXHJcblx0XHRcdFx0LnRyaW0oKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvXFxzKy9nLCAnXycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15BLVphLXowLTlfXFwtXS9nLCAnJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29udmVydCB0byBrZWJhYi1jYXNlIChsZXR0ZXJzLCBkaWdpdHMsIGh5cGhlbnMpLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB0b19rZWJhYih2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKVxyXG5cdFx0XHRcdC50cmltKClcclxuXHRcdFx0XHQucmVwbGFjZSggL1tfXFxzXSsvZywgJy0nIClcclxuXHRcdFx0XHQucmVwbGFjZSggL1teQS1aYS16MC05LV0vZywgJycgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvLSsvZywgJy0nIClcclxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRydXRoeSBub3JtYWxpemF0aW9uIGZvciBmb3JtLWxpa2UgaW5wdXRzOiB0cnVlLCAndHJ1ZScsIDEsICcxJywgJ3llcycsICdvbicuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBpc190cnV0aHkodikge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSByZXR1cm4gdjtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gcyA9PT0gJ3RydWUnIHx8IHMgPT09ICcxJyB8fCBzID09PSAneWVzJyB8fCBzID09PSAnb24nO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29lcmNlIHRvIGJvb2xlYW4gd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0IGZvciBlbXB0eSB2YWx1ZXMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbZGVmPWZhbHNlXVxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjb2VyY2VfYm9vbGVhbih2LCBkZWYgPSBmYWxzZSkge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCB8fCB2ID09PSAnJyApIHJldHVybiBkZWY7XHJcblx0XHRcdHJldHVybiB0aGlzLmlzX3RydXRoeSggdiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFyc2UgYSBcInBlcmNlbnQtbGlrZVwiIHZhbHVlICgnMzMnfCczMyUnfDMzKSB3aXRoIGZhbGxiYWNrLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkfSB2XHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gZmFsbGJhY2tfdmFsdWVcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBwYXJzZV9wZXJjZW50KHYsIGZhbGxiYWNrX3ZhbHVlKSB7XHJcblx0XHRcdGlmICggdiA9PSBudWxsICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxsYmFja192YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBzID0gU3RyaW5nKCB2ICkudHJpbSgpO1xyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcy5yZXBsYWNlKCAvJS9nLCAnJyApICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gOiBmYWxsYmFja192YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsYW1wIGEgbnVtYmVyIHRvIHRoZSBbbWluLCBtYXhdIHJhbmdlLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IG5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBtaW5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBtYXhcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjbGFtcChuLCBtaW4sIG1heCkge1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbiApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBFc2NhcGUgYSB2YWx1ZSBmb3IgaW5jbHVzaW9uIGluc2lkZSBhIHF1b3RlZCBIVE1MIGF0dHJpYnV0ZSAoZG91YmxlIHF1b3RlcykuXHJcblx0XHQgKiBSZXBsYWNlcyBuZXdsaW5lcyB3aXRoIHNwYWNlcyBhbmQgZG91YmxlIHF1b3RlcyB3aXRoIHNpbmdsZSBxdW90ZXMuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGVzY2FwZV9mb3JfYXR0cl9xdW90ZWQodikge1xyXG5cdFx0XHRpZiAoIHYgPT0gbnVsbCApIHJldHVybiAnJztcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggdiApLnJlcGxhY2UoIC9cXHI/XFxuL2csICcgJyApLnJlcGxhY2UoIC9cIi9nLCAnXFwnJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRXNjYXBlIGZvciBzaG9ydGNvZGUtbGlrZSB0b2tlbnMgd2hlcmUgZG91YmxlIHF1b3RlcyBhbmQgbmV3bGluZXMgc2hvdWxkIGJlIG5ldXRyYWxpemVkLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlc2NhcGVfZm9yX3Nob3J0Y29kZSh2KSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgPz8gJycgKS5yZXBsYWNlKCAvXCIvZywgJ1xcXFxcIicgKS5yZXBsYWNlKCAvXFxyP1xcbi9nLCAnICcgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEpTT04ucGFyc2Ugd2l0aCBmYWxsYmFjayAobm8gdGhyb3cpLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNcclxuXHRcdCAqIEBwYXJhbSB7YW55fSBbZmFsbGJhY2s9bnVsbF1cclxuXHRcdCAqIEByZXR1cm5zIHthbnl9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYWZlX2pzb25fcGFyc2UocywgZmFsbGJhY2sgPSBudWxsKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoIHMgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbGxiYWNrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTdHJpbmdpZnkgZGF0YS0qIGF0dHJpYnV0ZSB2YWx1ZSBzYWZlbHkgKG9iamVjdHMgLT4gSlNPTiwgb3RoZXJzIC0+IFN0cmluZykuXHJcblx0XHQgKiBAcGFyYW0ge2FueX0gdlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHN0cmluZ2lmeV9kYXRhX3ZhbHVlKHYpIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KCB2ICk7XHJcblx0XHRcdFx0fSBjYXRjaCB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCAnV1BCQzogc3RyaW5naWZ5X2RhdGFfdmFsdWUnICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIHYgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBTdHJpY3QgdmFsdWUgZ3VhcmRzIGZvciBDU1MgbGVuZ3RocyBhbmQgaGV4IGNvbG9ycyAoZGVmZW5zZS1pbi1kZXB0aCkuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgQ1NTIGxlbmd0aC4gQWxsb3dzOiBweCwgJSwgcmVtLCBlbSAobG93ZXIvdXBwZXIpLlxyXG5cdFx0ICogUmV0dXJucyBmYWxsYmFjayBpZiBpbnZhbGlkLlxyXG5cdFx0ICogQHBhcmFtIHthbnl9IHZcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmFsbGJhY2s9JzEwMCUnXVxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHNhbml0aXplX2Nzc19sZW4odiwgZmFsbGJhY2sgPSAnMTAwJScpIHtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgbSA9IHMubWF0Y2goIC9eKC0/XFxkKyg/OlxcLlxcZCspPykocHh8JXxyZW18ZW0pJC9pICk7XHJcblx0XHRcdHJldHVybiBtID8gbVswXSA6IFN0cmluZyggZmFsbGJhY2sgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNhbml0aXplIGEgaGV4IGNvbG9yLiBBbGxvd3MgI3JnYiBvciAjcnJnZ2JiIChjYXNlLWluc2Vuc2l0aXZlKS5cclxuXHRcdCAqIFJldHVybnMgZmFsbGJhY2sgaWYgaW52YWxpZC5cclxuXHRcdCAqIEBwYXJhbSB7YW55fSB2XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrPScjZTBlMGUwJ11cclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBzYW5pdGl6ZV9oZXhfY29sb3IodiwgZmFsbGJhY2sgPSAnI2UwZTBlMCcpIHtcclxuXHRcdFx0Y29uc3QgcyA9IFN0cmluZyggdiA/PyAnJyApLnRyaW0oKTtcclxuXHRcdFx0cmV0dXJuIC9eIyg/OlswLTlhLWZdezN9fFswLTlhLWZdezZ9KSQvaS50ZXN0KCBzICkgPyBzIDogU3RyaW5nKCBmYWxsYmFjayApO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgSUQgLyBOYW1lIHNlcnZpY2UuIEdlbmVyYXRlcywgc2FuaXRpemVzLCBhbmQgZW5zdXJlcyB1bmlxdWVuZXNzIGZvciBmaWVsZCBpZHMvbmFtZXMvaHRtbF9pZHMgd2l0aGluIHRoZVxyXG5cdCAqIGNhbnZhcy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0lkU2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IHJvb3QgY29udGFpbmVyIG9mIHRoZSBmb3JtIHBhZ2VzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhZ2VzX2NvbnRhaW5lciAtIFJvb3QgY29udGFpbmVyIG9mIHRoZSBmb3JtIHBhZ2VzLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvciggcGFnZXNfY29udGFpbmVyICkge1xyXG5cdFx0XHR0aGlzLnBhZ2VzX2NvbnRhaW5lciA9IHBhZ2VzX2NvbnRhaW5lcjtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHVuaXF1ZSAqKmludGVybmFsKiogZmllbGQgaWQgKHN0b3JlZCBpbiBkYXRhLWlkKSB3aXRoaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIFN0YXJ0cyBmcm9tIGEgZGVzaXJlZCBpZCAoYWxyZWFkeSBzYW5pdGl6ZWQgb3Igbm90KSBhbmQgYXBwZW5kcyBzdWZmaXhlcyBpZiBuZWVkZWQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGJhc2VJZCAtIERlc2lyZWQgaWQuXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBVbmlxdWUgaWQuXHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV91bmlxdWVfZmllbGRfaWQoYmFzZUlkLCBjdXJyZW50RWwgPSBudWxsKSB7XHJcblx0XHRcdGNvbnN0IGJhc2UgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIGJhc2VJZCApO1xyXG5cdFx0XHRsZXQgaWQgICAgICAgID0gYmFzZSB8fCAnZmllbGQnO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Y29uc3Qgbm90U2VsZiA9IGN1cnJlbnRFbD8uZGF0YXNldD8udWlkID8gYDpub3QoW2RhdGEtdWlkPVwiJHtlc2NVaWQoIGN1cnJlbnRFbC5kYXRhc2V0LnVpZCApfVwiXSlgIDogJyc7XHJcblx0XHRcdHdoaWxlICggdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZCR7bm90U2VsZn1bZGF0YS1pZD1cIiR7ZXNjKGlkKX1cIl0sIC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uJHtub3RTZWxmfVtkYXRhLWlkPVwiJHtlc2MoaWQpfVwiXWBcclxuXHRcdFx0KSApIHtcclxuXHRcdFx0XHQvLyBFeGNsdWRlcyBzZWxmIGJ5IGRhdGEtdWlkIC5cclxuXHRcdFx0XHRjb25zdCBmb3VuZCA9IHRoaXMucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGRbZGF0YS1pZD1cIiR7ZXNjKCBpZCApfVwiXSwgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX3NlY3Rpb25bZGF0YS1pZD1cIiR7ZXNjKCBpZCApfVwiXWAgKTtcclxuXHRcdFx0XHRpZiAoIGZvdW5kICYmIGN1cnJlbnRFbCAmJiBmb3VuZCA9PT0gY3VycmVudEVsICkge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlkID0gYCR7YmFzZSB8fCAnZmllbGQnfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDUgKX1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBpZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBhIHVuaXF1ZSBIVE1MIG5hbWUgYWNyb3NzIHRoZSBmb3JtLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIC0gRGVzaXJlZCBiYXNlIG5hbWUgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fG51bGx9IGN1cnJlbnRFbCAtIElmIHByb3ZpZGVkLCBpZ25vcmUgY29uZmxpY3RzIHdpdGggdGhpcyBlbGVtZW50LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIG5hbWUuXHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV91bmlxdWVfZmllbGRfbmFtZShiYXNlLCBjdXJyZW50RWwgPSBudWxsKSB7XHJcblx0XHRcdGxldCBuYW1lICAgICAgPSBiYXNlIHx8ICdmaWVsZCc7XHJcblx0XHRcdGNvbnN0IGVzYyAgICAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHRcdFx0Y29uc3QgZXNjVWlkICA9ICh2KSA9PiBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmVzY19hdHRyX3ZhbHVlX2Zvcl9zZWxlY3RvciggdiApO1xyXG5cdFx0XHQvLyBFeGNsdWRlIHRoZSBjdXJyZW50IGZpZWxkICphbmQgYW55IERPTSBtaXJyb3JzIG9mIGl0KiAoc2FtZSBkYXRhLXVpZClcclxuXHRcdFx0Y29uc3QgdWlkICAgICA9IGN1cnJlbnRFbD8uZGF0YXNldD8udWlkO1xyXG5cdFx0XHRjb25zdCBub3RTZWxmID0gdWlkID8gYDpub3QoW2RhdGEtdWlkPVwiJHtlc2NVaWQoIHVpZCApfVwiXSlgIDogJyc7XHJcblx0XHRcdHdoaWxlICggdHJ1ZSApIHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3RvciA9IGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGQke25vdFNlbGZ9W2RhdGEtbmFtZT1cIiR7ZXNjKCBuYW1lICl9XCJdYDtcclxuXHRcdFx0XHRjb25zdCBjbGFzaGVzICA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yQWxsKCBzZWxlY3RvciApIHx8IFtdO1xyXG5cdFx0XHRcdGlmICggY2xhc2hlcy5sZW5ndGggPT09IDAgKSBicmVhazsgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHVzZXMgdGhpcyBuYW1lXHJcblx0XHRcdFx0Y29uc3QgbSA9IG5hbWUubWF0Y2goIC8tKFxcZCspJC8gKTtcclxuXHRcdFx0XHRuYW1lICAgID0gbSA/IG5hbWUucmVwbGFjZSggLy1cXGQrJC8sICctJyArIChOdW1iZXIoIG1bMV0gKSArIDEpICkgOiBgJHtiYXNlfS0yYDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIElOVEVSTkFMIGlkIChkYXRhLWlkKSBvbiBhbiBlbGVtZW50LiBFbnN1cmVzIHVuaXF1ZW5lc3MgYW5kIG9wdGlvbmFsbHkgYXNrcyBjYWxsZXIgdG8gcmVmcmVzaFxyXG5cdFx0ICogcHJldmlldy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBmaWVsZF9lbCAtIEZpZWxkIGVsZW1lbnQgaW4gdGhlIGNhbnZhcy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdJZFJhdyAtIERlc2lyZWQgaWQgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gQXBwbGllZCB1bmlxdWUgaWQuXHJcblx0XHQgKi9cclxuXHRcdHNldF9maWVsZF9pZCggZmllbGRfZWwsIG5ld0lkUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IGRlc2lyZWQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIG5ld0lkUmF3ICk7XHJcblx0XHRcdGNvbnN0IHVuaXF1ZSAgPSB0aGlzLmVuc3VyZV91bmlxdWVfZmllbGRfaWQoIGRlc2lyZWQsIGZpZWxkX2VsICk7XHJcblx0XHRcdGZpZWxkX2VsLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCB1bmlxdWUgKTtcclxuXHRcdFx0aWYgKCByZW5kZXJQcmV2aWV3ICkge1xyXG5cdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHVuaXF1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIFJFUVVJUkVEIEhUTUwgbmFtZSAoZGF0YS1uYW1lKS4gRW5zdXJlcyBzYW5pdGl6ZWQgKyB1bmlxdWUgcGVyIGZvcm0uXHJcblx0XHQgKiBGYWxscyBiYWNrIHRvIHNhbml0aXplZCBpbnRlcm5hbCBpZCBpZiB1c2VyIHByb3ZpZGVzIGVtcHR5IHZhbHVlLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGZpZWxkX2VsIC0gRmllbGQgZWxlbWVudCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWVSYXcgLSBEZXNpcmVkIG5hbWUgKHVuL3Nhbml0aXplZCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gQXBwbGllZCB1bmlxdWUgbmFtZS5cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2ZpZWxkX25hbWUoIGZpZWxkX2VsLCBuZXdOYW1lUmF3LCByZW5kZXJQcmV2aWV3ID0gZmFsc2UgKSB7XHJcblx0XHRcdGNvbnN0IHJhdyAgPSAobmV3TmFtZVJhdyA9PSBudWxsID8gJycgOiBTdHJpbmcoIG5ld05hbWVSYXcgKSkudHJpbSgpO1xyXG5cdFx0XHRjb25zdCBiYXNlID0gcmF3XHJcblx0XHRcdFx0PyBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfbmFtZSggcmF3IClcclxuXHRcdFx0XHQ6IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCBmaWVsZF9lbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApIHx8ICdmaWVsZCcgKTtcclxuXHJcblx0XHRcdGNvbnN0IHVuaXF1ZSA9IHRoaXMuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRmaWVsZF9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxdWUgKTtcclxuXHRcdFx0aWYgKCByZW5kZXJQcmV2aWV3ICkge1xyXG5cdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHVuaXF1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBmaWVsZCdzIE9QVElPTkFMIHB1YmxpYyBIVE1MIGlkIChkYXRhLWh0bWxfaWQpLiBFbXB0eSB2YWx1ZSByZW1vdmVzIHRoZSBhdHRyaWJ1dGUuXHJcblx0XHQgKiBFbnN1cmVzIHNhbml0aXphdGlvbiArIHVuaXF1ZW5lc3MgYW1vbmcgb3RoZXIgZGVjbGFyZWQgSFRNTCBpZHMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZmllbGRfZWwgLSBGaWVsZCBlbGVtZW50IGluIHRoZSBjYW52YXMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3SHRtbElkUmF3IC0gRGVzaXJlZCBodG1sX2lkIChvcHRpb25hbCkuXHJcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJQcmV2aWV3PWZhbHNlXSAtIENhbGxlciBjYW4gZGVjaWRlIHRvIHJlLXJlbmRlciBwcmV2aWV3LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIGFwcGxpZWQgaHRtbF9pZCBvciBlbXB0eSBzdHJpbmcgaWYgcmVtb3ZlZC5cclxuXHRcdCAqL1xyXG5cdFx0c2V0X2ZpZWxkX2h0bWxfaWQoIGZpZWxkX2VsLCBuZXdIdG1sSWRSYXcsIHJlbmRlclByZXZpZXcgPSBmYWxzZSApIHtcclxuXHRcdFx0Y29uc3QgcmF3ID0gKG5ld0h0bWxJZFJhdyA9PSBudWxsID8gJycgOiBTdHJpbmcoIG5ld0h0bWxJZFJhdyApKS50cmltKCk7XHJcblxyXG5cdFx0XHRpZiAoIHJhdyA9PT0gJycgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwucmVtb3ZlQXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJyApO1xyXG5cdFx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHRcdC8vIENhbGxlciBkZWNpZGVzIGlmIC8gd2hlbiB0byByZW5kZXIuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZGVzaXJlZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9pZCggcmF3ICk7XHJcblx0XHRcdGxldCBodG1sSWQgICAgPSBkZXNpcmVkO1xyXG5cdFx0XHRjb25zdCBlc2MgICAgID0gKHYpID0+IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCB2ICk7XHJcblx0XHRcdGNvbnN0IGVzY1VpZCAgPSAodikgPT4gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHYgKTtcclxuXHJcblx0XHRcdHdoaWxlICggdHJ1ZSApIHtcclxuXHJcblx0XHRcdFx0Y29uc3QgdWlkICAgICA9IGZpZWxkX2VsPy5kYXRhc2V0Py51aWQ7XHJcblx0XHRcdFx0Y29uc3Qgbm90U2VsZiA9IHVpZCA/IGA6bm90KFtkYXRhLXVpZD1cIiR7ZXNjVWlkKCB1aWQgKX1cIl0pYCA6ICcnO1xyXG5cclxuXHRcdFx0XHRjb25zdCBjbGFzaEluQ2FudmFzID0gdGhpcy5wYWdlc19jb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XHRgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkJHtub3RTZWxmfVtkYXRhLWh0bWxfaWQ9XCIke2VzYyggaHRtbElkICl9XCJdLGAgK1xyXG5cdFx0XHRcdFx0YC53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19zZWN0aW9uJHtub3RTZWxmfVtkYXRhLWh0bWxfaWQ9XCIke2VzYyggaHRtbElkICl9XCJdYFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Y29uc3QgZG9tQ2xhc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaHRtbElkICk7XHJcblxyXG5cdFx0XHRcdC8vIEFsbG93IHdoZW4gdGhlIG9ubHkgXCJjbGFzaFwiIGlzIGluc2lkZSB0aGlzIHNhbWUgZmllbGQgKGUuZy4sIHRoZSBpbnB1dCB5b3UganVzdCByZW5kZXJlZClcclxuXHRcdFx0XHRjb25zdCBkb21DbGFzaElzU2VsZiA9IGRvbUNsYXNoID09PSBmaWVsZF9lbCB8fCAoZG9tQ2xhc2ggJiYgZmllbGRfZWwuY29udGFpbnMoIGRvbUNsYXNoICkpO1xyXG5cclxuXHRcdFx0XHRpZiAoICFjbGFzaEluQ2FudmFzICYmICghZG9tQ2xhc2ggfHwgZG9tQ2xhc2hJc1NlbGYpICkge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBtID0gaHRtbElkLm1hdGNoKCAvLShcXGQrKSQvICk7XHJcblx0XHRcdFx0aHRtbElkICA9IG0gPyBodG1sSWQucmVwbGFjZSggLy1cXGQrJC8sICctJyArIChOdW1iZXIoIG1bMV0gKSArIDEpICkgOiBgJHtkZXNpcmVkfS0yYDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZmllbGRfZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgaHRtbElkICk7XHJcblx0XHRcdGlmICggcmVuZGVyUHJldmlldyApIHtcclxuXHRcdFx0XHQvLyBDYWxsZXIgZGVjaWRlcyBpZiAvIHdoZW4gdG8gcmVuZGVyLlxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBodG1sSWQ7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogV1BCQyBMYXlvdXQgc2VydmljZS4gRW5jYXBzdWxhdGVzIGNvbHVtbiB3aWR0aCBtYXRoIHdpdGggZ2FwIGhhbmRsaW5nLCBwcmVzZXRzLCBhbmQgdXRpbGl0aWVzLlxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfTGF5b3V0U2VydmljZSA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25zdHJ1Y3Rvci4gU2V0IG9wdGlvbnMgd2l0aCBnYXAgYmV0d2VlbiBjb2x1bW5zICglKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3sgY29sX2dhcF9wZXJjZW50PzogbnVtYmVyIH19IFtvcHRzXSAtIE9wdGlvbnMgd2l0aCBnYXAgYmV0d2VlbiBjb2x1bW5zICglKS5cclxuXHRcdCAqL1xyXG5cdFx0Y29uc3RydWN0b3IoIG9wdHMgPSB7fSApIHtcclxuXHRcdFx0dGhpcy5jb2xfZ2FwX3BlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUoICtvcHRzLmNvbF9nYXBfcGVyY2VudCApID8gK29wdHMuY29sX2dhcF9wZXJjZW50IDogMztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbXB1dGUgbm9ybWFsaXplZCBmbGV4LWJhc2lzIHZhbHVlcyBmb3IgYSByb3csIHJlc3BlY3RpbmcgY29sdW1uIGdhcHMuXHJcblx0XHQgKiBSZXR1cm5zIGJhc2VzIHRoYXQgc3VtIHRvIGF2YWlsYWJsZSA9IDEwMCAtIChuLTEpKmdhcC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dfZWwgLSBSb3cgZWxlbWVudCBjb250YWluaW5nIC53cGJjX2JmYl9fY29sdW1uIGNoaWxkcmVuLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtnYXBfcGVyY2VudD10aGlzLmNvbF9nYXBfcGVyY2VudF0gLSBHYXAgcGVyY2VudCBiZXR3ZWVuIGNvbHVtbnMuXHJcblx0XHQgKiBAcmV0dXJucyB7e2F2YWlsYWJsZTpudW1iZXIsYmFzZXM6bnVtYmVyW119fSBBdmFpbGFibGUgc3BhY2UgYW5kIGJhc2lzIHZhbHVlcy5cclxuXHRcdCAqL1xyXG5cdFx0Y29tcHV0ZV9lZmZlY3RpdmVfYmFzZXNfZnJvbV9yb3coIHJvd19lbCwgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3QgY29scyA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0Y29uc3QgcmF3ID0gY29scy5tYXAoICggY29sICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHcgPSBjb2wuc3R5bGUuZmxleEJhc2lzIHx8ICcnO1xyXG5cdFx0XHRcdGNvbnN0IHAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnBhcnNlX3BlcmNlbnQoIHcsIE5hTiApO1xyXG5cdFx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIHAgKSA/IHAgOiAoMTAwIC8gbik7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGNvbnN0IHN1bV9yYXcgICAgPSByYXcucmVkdWNlKCAoIGEsIGIgKSA9PiBhICsgYiwgMCApIHx8IDEwMDtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggK2dhcF9wZXJjZW50ICkgPyArZ2FwX3BlcmNlbnQgOiAzO1xyXG5cdFx0XHRjb25zdCB0b3RhbF9nYXBzID0gTWF0aC5tYXgoIDAsIG4gLSAxICkgKiBncDtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlICA9IE1hdGgubWF4KCAwLCAxMDAgLSB0b3RhbF9nYXBzICk7XHJcblx0XHRcdGNvbnN0IHNjYWxlICAgICAgPSBhdmFpbGFibGUgLyBzdW1fcmF3O1xyXG5cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRhdmFpbGFibGUsXHJcblx0XHRcdFx0YmFzZXM6IHJhdy5tYXAoICggcCApID0+IE1hdGgubWF4KCAwLCBwICogc2NhbGUgKSApXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBcHBseSBjb21wdXRlZCBiYXNlcyB0byB0aGUgcm93J3MgY29sdW1ucyAoc2V0cyBmbGV4LWJhc2lzICUpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd19lbCAtIFJvdyBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gYmFzZXMgLSBBcnJheSBvZiBiYXNpcyB2YWx1ZXMgKHBlcmNlbnQgb2YgZnVsbCAxMDApLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBiYXNlcyApIHtcclxuXHRcdFx0Y29uc3QgY29scyA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKCBjb2wsIGkgKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcCAgICAgICAgICAgICA9IGJhc2VzW2ldID8/IDA7XHJcblx0XHRcdFx0Y29sLnN0eWxlLmZsZXhCYXNpcyA9IGAke3B9JWA7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERpc3RyaWJ1dGUgY29sdW1ucyBldmVubHksIHJlc3BlY3RpbmcgZ2FwLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvd19lbCAtIFJvdyBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtnYXBfcGVyY2VudD10aGlzLmNvbF9nYXBfcGVyY2VudF0gLSBHYXAgcGVyY2VudC5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzZXRfZXF1YWxfYmFzZXMoIHJvd19lbCwgZ2FwX3BlcmNlbnQgPSB0aGlzLmNvbF9nYXBfcGVyY2VudCApIHtcclxuXHRcdFx0Y29uc3QgY29scyAgICAgICA9IEFycmF5LmZyb20oIHJvd19lbD8ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgICAgICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cdFx0XHRjb25zdCBncCAgICAgICAgID0gTnVtYmVyLmlzRmluaXRlKCArZ2FwX3BlcmNlbnQgKSA/ICtnYXBfcGVyY2VudCA6IDM7XHJcblx0XHRcdGNvbnN0IHRvdGFsX2dhcHMgPSBNYXRoLm1heCggMCwgbiAtIDEgKSAqIGdwO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgID0gTWF0aC5tYXgoIDAsIDEwMCAtIHRvdGFsX2dhcHMgKTtcclxuXHRcdFx0Y29uc3QgZWFjaCAgICAgICA9IGF2YWlsYWJsZSAvIG47XHJcblx0XHRcdHRoaXMuYXBwbHlfYmFzZXNfdG9fcm93KCByb3dfZWwsIEFycmF5KCBuICkuZmlsbCggZWFjaCApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBcHBseSBhIHByZXNldCBvZiByZWxhdGl2ZSB3ZWlnaHRzIHRvIGEgcm93L3NlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbk9yUm93IC0gLndwYmNfYmZiX19zZWN0aW9uIG9yIGl0cyBjaGlsZCAud3BiY19iZmJfX3Jvdy5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyW119IHdlaWdodHMgLSBSZWxhdGl2ZSB3ZWlnaHRzIChlLmcuLCBbMSwzLDFdKS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FwX3BlcmNlbnQ9dGhpcy5jb2xfZ2FwX3BlcmNlbnRdIC0gR2FwIHBlcmNlbnQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0YXBwbHlfbGF5b3V0X3ByZXNldCggc2VjdGlvbk9yUm93LCB3ZWlnaHRzLCBnYXBfcGVyY2VudCA9IHRoaXMuY29sX2dhcF9wZXJjZW50ICkge1xyXG5cdFx0XHRjb25zdCByb3cgPSBzZWN0aW9uT3JSb3c/LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fcm93JyApXHJcblx0XHRcdFx0PyBzZWN0aW9uT3JSb3dcclxuXHRcdFx0XHQ6IHNlY3Rpb25PclJvdz8ucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHJvdyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApIHx8IFtdICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0aWYgKCAhIEFycmF5LmlzQXJyYXkoIHdlaWdodHMgKSB8fCB3ZWlnaHRzLmxlbmd0aCAhPT0gbiApIHtcclxuXHRcdFx0XHR0aGlzLnNldF9lcXVhbF9iYXNlcyggcm93LCBnYXBfcGVyY2VudCApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc3VtICAgICAgID0gd2VpZ2h0cy5yZWR1Y2UoICggYSwgYiApID0+IGEgKyBNYXRoLm1heCggMCwgTnVtYmVyKCBiICkgfHwgMCApLCAwICkgfHwgMTtcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgID0gTnVtYmVyLmlzRmluaXRlKCArZ2FwX3BlcmNlbnQgKSA/ICtnYXBfcGVyY2VudCA6IDM7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KCAwLCAxMDAgLSBNYXRoLm1heCggMCwgbiAtIDEgKSAqIGdwICk7XHJcblx0XHRcdGNvbnN0IGJhc2VzICAgICA9IHdlaWdodHMubWFwKCAoIHcgKSA9PiBNYXRoLm1heCggMCwgKE51bWJlciggdyApIHx8IDApIC8gc3VtICogYXZhaWxhYmxlICkgKTtcclxuXHJcblx0XHRcdHRoaXMuYXBwbHlfYmFzZXNfdG9fcm93KCByb3csIGJhc2VzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBwcmVzZXQgd2VpZ2h0IGxpc3RzIGZvciBhIGdpdmVuIGNvbHVtbiBjb3VudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbiAtIENvbHVtbiBjb3VudC5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJbXVtdfSBMaXN0IG9mIHdlaWdodCBhcnJheXMuXHJcblx0XHQgKi9cclxuXHRcdGJ1aWxkX3ByZXNldHNfZm9yX2NvbHVtbnMoIG4gKSB7XHJcblx0XHRcdHN3aXRjaCAoIG4gKSB7XHJcblx0XHRcdFx0Y2FzZSAxOlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxIF0gXTtcclxuXHRcdFx0XHRjYXNlIDI6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBbIDEsIDIgXSwgWyAyLCAxIF0sIFsgMSwgMyBdLCBbIDMsIDEgXSBdO1xyXG5cdFx0XHRcdGNhc2UgMzpcclxuXHRcdFx0XHRcdHJldHVybiBbIFsgMSwgMywgMSBdLCBbIDEsIDIsIDEgXSwgWyAyLCAxLCAxIF0sIFsgMSwgMSwgMiBdIF07XHJcblx0XHRcdFx0Y2FzZSA0OlxyXG5cdFx0XHRcdFx0cmV0dXJuIFsgWyAxLCAyLCAyLCAxIF0sIFsgMiwgMSwgMSwgMSBdLCBbIDEsIDEsIDEsIDIgXSBdO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRyZXR1cm4gWyBBcnJheSggbiApLmZpbGwoIDEgKSBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBGb3JtYXQgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBsaWtlIFwiNTAlLzI1JS8yNSVcIiBmcm9tIHdlaWdodHMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gd2VpZ2h0cyAtIFdlaWdodCBsaXN0LlxyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gTGFiZWwgc3RyaW5nLlxyXG5cdFx0ICovXHJcblx0XHRmb3JtYXRfcHJlc2V0X2xhYmVsKCB3ZWlnaHRzICkge1xyXG5cdFx0XHRjb25zdCBzdW0gPSB3ZWlnaHRzLnJlZHVjZSggKCBhLCBiICkgPT4gYSArIChOdW1iZXIoIGIgKSB8fCAwKSwgMCApIHx8IDE7XHJcblx0XHRcdHJldHVybiB3ZWlnaHRzLm1hcCggKCB3ICkgPT4gTWF0aC5yb3VuZCggKChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSkgKiAxMDAgKSApLmpvaW4oICclLycgKSArICclJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFBhcnNlIGNvbW1hL3NwYWNlIHNlcGFyYXRlZCB3ZWlnaHRzIGludG8gbnVtYmVycy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBVc2VyIGlucHV0IGxpa2UgXCIyMCw2MCwyMFwiLlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcltdfSBQYXJzZWQgd2VpZ2h0cy5cclxuXHRcdCAqL1xyXG5cdFx0cGFyc2Vfd2VpZ2h0cyggaW5wdXQgKSB7XHJcblx0XHRcdGlmICggISBpbnB1dCApIHtcclxuXHRcdFx0XHRyZXR1cm4gW107XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFN0cmluZyggaW5wdXQgKVxyXG5cdFx0XHRcdC5yZXBsYWNlKCAvW15cXGQsLlxcc10vZywgJycgKVxyXG5cdFx0XHRcdC5zcGxpdCggL1tcXHMsXSsvIClcclxuXHRcdFx0XHQubWFwKCAoIHMgKSA9PiBwYXJzZUZsb2F0KCBzICkgKVxyXG5cdFx0XHRcdC5maWx0ZXIoICggbiApID0+IE51bWJlci5pc0Zpbml0ZSggbiApICYmIG4gPj0gMCApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkMgVXNhZ2UgTGltaXQgc2VydmljZS5cclxuXHQgKiBDb3VudHMgZmllbGQgdXNhZ2UgYnkga2V5LCBjb21wYXJlcyB0byBwYWxldHRlIGxpbWl0cywgYW5kIHVwZGF0ZXMgcGFsZXR0ZSBVSS5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlID0gY2xhc3MgIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENvbnN0cnVjdG9yLiBTZXQgcGFnZXNfY29udGFpbmVyIGFuZCBwYWxldHRlX3VsLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhZ2VzX2NvbnRhaW5lciAtIENhbnZhcyByb290IHRoYXQgaG9sZHMgcGxhY2VkIGZpZWxkcy5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXXxudWxsfSBwYWxldHRlX3Vscz86ICAgUGFsZXR0ZXMgVUwgd2l0aCAud3BiY19iZmJfX2ZpZWxkIGl0ZW1zIChtYXkgYmUgbnVsbCkuXHJcblx0XHQgKi9cclxuXHRcdGNvbnN0cnVjdG9yKHBhZ2VzX2NvbnRhaW5lciwgcGFsZXR0ZV91bHMpIHtcclxuXHRcdFx0dGhpcy5wYWdlc19jb250YWluZXIgPSBwYWdlc19jb250YWluZXI7XHJcblx0XHRcdC8vIE5vcm1hbGl6ZSB0byBhbiBhcnJheTsgd2XigJlsbCBzdGlsbCBiZSByb2J1c3QgaWYgbm9uZSBwcm92aWRlZC5cclxuXHRcdFx0dGhpcy5wYWxldHRlX3VscyAgICAgPSBBcnJheS5pc0FycmF5KCBwYWxldHRlX3VscyApID8gcGFsZXR0ZV91bHMgOiAocGFsZXR0ZV91bHMgPyBbIHBhbGV0dGVfdWxzIF0gOiBbXSk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFyc2UgdXNhZ2UgbGltaXQgZnJvbSByYXcgZGF0YXNldCB2YWx1ZS4gTWlzc2luZy9pbnZhbGlkIC0+IEluZmluaXR5LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxudWxsfHVuZGVmaW5lZH0gcmF3IC0gUmF3IGF0dHJpYnV0ZSB2YWx1ZS5cclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9IExpbWl0IG51bWJlciBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHBhcnNlX3VzYWdlX2xpbWl0KCByYXcgKSB7XHJcblx0XHRcdGlmICggcmF3ID09IG51bGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIEluZmluaXR5O1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUludCggcmF3LCAxMCApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogSW5maW5pdHk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb3VudCBob3cgbWFueSBpbnN0YW5jZXMgZXhpc3QgcGVyIHVzYWdlX2tleSBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSBNYXAgb2YgdXNhZ2Vfa2V5IC0+IGNvdW50LlxyXG5cdFx0ICovXHJcblx0XHRjb3VudF91c2FnZV9ieV9rZXkoKSB7XHJcblx0XHRcdGNvbnN0IHVzZWQgPSB7fTtcclxuXHRcdFx0Y29uc3QgYWxsICA9IHRoaXMucGFnZXNfY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkOm5vdCguaXMtaW52YWxpZCknICkgfHwgW107XHJcblx0XHRcdGFsbC5mb3JFYWNoKCAoIGVsICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IGVsLmRhdGFzZXQudXNhZ2Vfa2V5IHx8IGVsLmRhdGFzZXQudHlwZSB8fCBlbC5kYXRhc2V0LmlkO1xyXG5cdFx0XHRcdGlmICggISBrZXkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHVzZWRba2V5XSA9ICh1c2VkW2tleV0gfHwgMCkgKyAxO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiB1c2VkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJuIHBhbGV0dGUgbGltaXQgZm9yIGEgZ2l2ZW4gdXNhZ2Uga2V5IChpZCBvZiB0aGUgcGFsZXR0ZSBpdGVtKS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5LlxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn0gTGltaXQgdmFsdWUgb3IgSW5maW5pdHkuXHJcblx0XHQgKi9cclxuXHRcdGdldF9saW1pdF9mb3Jfa2V5KGtleSkge1xyXG5cdFx0XHRpZiAoICEga2V5ICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBRdWVyeSBhY3Jvc3MgYWxsIHBhbGV0dGVzIHByZXNlbnQgbm93IChzdG9yZWQgKyBhbnkgbmV3bHkgYWRkZWQgaW4gRE9NKS5cclxuXHRcdFx0Y29uc3Qgcm9vdHMgICAgICAgICAgICA9IHRoaXMucGFsZXR0ZV91bHM/Lmxlbmd0aCA/IHRoaXMucGFsZXR0ZV91bHMgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbF9maWVsZF90eXBlc19fdWwnICk7XHJcblx0XHRcdGNvbnN0IGFsbFBhbGV0dGVGaWVsZHMgPSBBcnJheS5mcm9tKCByb290cyApLmZsYXRNYXAoIHIgPT4gQXJyYXkuZnJvbSggci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19maWVsZCcgKSApICk7XHJcblx0XHRcdGxldCBsaW1pdCAgICAgICAgICAgICAgPSBJbmZpbml0eTtcclxuXHJcblx0XHRcdGFsbFBhbGV0dGVGaWVsZHMuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdXNhZ2Vfa2V5ID0gZWwuZGF0YXNldC51c2FnZV9rZXkgfHwgZWwuZGF0YXNldC5pZDtcclxuXHRcdFx0XHRpZiAoIGVsLmRhdGFzZXQuaWQgPT09IGtleSB8fCB1c2FnZV9rZXkgPT09IGtleSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG4gPSBDb3JlLldQQkNfQkZCX1VzYWdlTGltaXRTZXJ2aWNlLnBhcnNlX3VzYWdlX2xpbWl0KCBlbC5kYXRhc2V0LnVzYWdlbnVtYmVyICk7XHJcblx0XHRcdFx0XHQvLyBDaG9vc2UgdGhlIHNtYWxsZXN0IGZpbml0ZSBsaW1pdCAoc2FmZXN0IGlmIHBhbGV0dGVzIGRpc2FncmVlKS5cclxuXHRcdFx0XHRcdGlmICggbiA8IGxpbWl0ICkge1xyXG5cdFx0XHRcdFx0XHRsaW1pdCA9IG47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbGltaXQ7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGlzYWJsZS9lbmFibGUgcGFsZXR0ZSBpdGVtcyBiYXNlZCBvbiBjdXJyZW50IHVzYWdlIGNvdW50cyBhbmQgbGltaXRzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHR1cGRhdGVfcGFsZXR0ZV91aSgpIHtcclxuXHRcdFx0Ly8gQWx3YXlzIGNvbXB1dGUgdXNhZ2UgZnJvbSB0aGUgY2FudmFzOlxyXG5cdFx0XHRjb25zdCB1c2FnZSA9IHRoaXMuY291bnRfdXNhZ2VfYnlfa2V5KCk7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgYWxsIHBhbGV0dGVzIGN1cnJlbnRseSBpbiBET00gKG5vdCBqdXN0IHRoZSBpbml0aWFsbHkgY2FwdHVyZWQgb25lcylcclxuXHRcdFx0Y29uc3QgcGFsZXR0ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbF9maWVsZF90eXBlc19fdWwnICk7XHJcblxyXG5cdFx0XHRwYWxldHRlcy5mb3JFYWNoKCAocGFsKSA9PiB7XHJcblx0XHRcdFx0cGFsLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2ZpZWxkJyApLmZvckVhY2goIChwYW5lbF9maWVsZCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcGFsZXR0ZUlkICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LmlkO1xyXG5cdFx0XHRcdFx0Y29uc3QgdXNhZ2VLZXkgICAgPSBwYW5lbF9maWVsZC5kYXRhc2V0LnVzYWdlX2tleSB8fCBwYWxldHRlSWQ7XHJcblx0XHRcdFx0XHRjb25zdCByYXdfbGltaXQgICA9IHBhbmVsX2ZpZWxkLmRhdGFzZXQudXNhZ2VudW1iZXI7XHJcblx0XHRcdFx0XHRjb25zdCBwZXJFbExpbWl0ICA9IENvcmUuV1BCQ19CRkJfVXNhZ2VMaW1pdFNlcnZpY2UucGFyc2VfdXNhZ2VfbGltaXQoIHJhd19saW1pdCApO1xyXG5cdFx0XHRcdFx0Ly8gRWZmZWN0aXZlIGxpbWl0IGFjcm9zcyBhbGwgcGFsZXR0ZXMgaXMgdGhlIGdsb2JhbCBsaW1pdCBmb3IgdGhpcyBrZXkuXHJcblx0XHRcdFx0XHRjb25zdCBnbG9iYWxMaW1pdCA9IHRoaXMuZ2V0X2xpbWl0X2Zvcl9rZXkoIHVzYWdlS2V5ICk7XHJcblx0XHRcdFx0XHRjb25zdCBsaW1pdCAgICAgICA9IE51bWJlci5pc0Zpbml0ZSggZ2xvYmFsTGltaXQgKSA/IGdsb2JhbExpbWl0IDogcGVyRWxMaW1pdDsgLy8gcHJlZmVyIGdsb2JhbCBtaW5cclxuXHJcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50ID0gdXNhZ2VbdXNhZ2VLZXldIHx8IDA7XHJcblx0XHRcdFx0XHRjb25zdCBkaXNhYmxlID0gTnVtYmVyLmlzRmluaXRlKCBsaW1pdCApICYmIGN1cnJlbnQgPj0gbGltaXQ7XHJcblxyXG5cdFx0XHRcdFx0cGFuZWxfZmllbGQuc3R5bGUucG9pbnRlckV2ZW50cyA9IGRpc2FibGUgPyAnbm9uZScgOiAnJztcclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnN0eWxlLm9wYWNpdHkgICAgICAgPSBkaXNhYmxlID8gJzAuNCcgOiAnJztcclxuXHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnNldEF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnLCBkaXNhYmxlID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBkaXNhYmxlICkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9maWVsZC5zZXRBdHRyaWJ1dGUoICd0YWJpbmRleCcsICctMScgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsX2ZpZWxkLnJlbW92ZUF0dHJpYnV0ZSggJ3RhYmluZGV4JyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJldHVybiBob3cgbWFueSB2YWxpZCBpbnN0YW5jZXMgd2l0aCB0aGlzIHVzYWdlIGtleSBleGlzdCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBDb3VudCBvZiBleGlzdGluZyBub24taW52YWxpZCBpbnN0YW5jZXMuXHJcblx0XHQgKi9cclxuXHRcdGNvdW50X2Zvcl9rZXkoIGtleSApIHtcclxuXHRcdFx0aWYgKCAhIGtleSApIHtcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gKCB0aGlzLnBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIGAud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3IC53cGJjX2JmYl9fZmllbGRbZGF0YS11c2FnZV9rZXk9XCIke0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuZXNjX2F0dHJfdmFsdWVfZm9yX3NlbGVjdG9yKCBrZXkgKX1cIl06bm90KC5pcy1pbnZhbGlkKSwgXHJcbiAgICAgICAgICAgICAgICAgLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkW2RhdGEtdHlwZT1cIiR7Q29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIGtleSApfVwiXTpub3QoLmlzLWludmFsaWQpYFxyXG5cdFx0XHQpIHx8IFtdICkubGVuZ3RoO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQWxpYXMgZm9yIGxpbWl0IGxvb2t1cCAocmVhZGFiaWxpdHkpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBMaW1pdCB2YWx1ZSBvciBJbmZpbml0eS5cclxuXHRcdCAqL1xyXG5cdFx0bGltaXRfZm9yX2tleSgga2V5ICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRfbGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZW1haW5pbmcgc2xvdHMgZm9yIHRoaXMga2V5IChJbmZpbml0eSBpZiB1bmxpbWl0ZWQpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBVc2FnZSBrZXkgb2YgYSBwYWxldHRlIGl0ZW0uXHJcblx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfSBSZW1haW5pbmcgY291bnQgKD49IDApIG9yIEluZmluaXR5LlxyXG5cdFx0ICovXHJcblx0XHRyZW1haW5pbmdfZm9yX2tleSgga2V5ICkge1xyXG5cdFx0XHRjb25zdCBsaW1pdCA9IHRoaXMubGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdGlmICggbGltaXQgPT09IEluZmluaXR5ICkge1xyXG5cdFx0XHRcdHJldHVybiBJbmZpbml0eTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB1c2VkID0gdGhpcy5jb3VudF9mb3Jfa2V5KCBrZXkgKTtcclxuXHRcdFx0cmV0dXJuIE1hdGgubWF4KCAwLCBsaW1pdCAtIHVzZWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRydWUgaWYgeW91IGNhbiBhZGQgYGRlbHRhYCBtb3JlIGl0ZW1zIGZvciB0aGlzIGtleS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YT0xXSAtIEhvdyBtYW55IGl0ZW1zIHlvdSBpbnRlbmQgdG8gYWRkLlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWRkaW5nIGlzIGFsbG93ZWQuXHJcblx0XHQgKi9cclxuXHRcdGNhbl9hZGQoIGtleSwgZGVsdGEgPSAxICkge1xyXG5cdFx0XHRjb25zdCByZW0gPSB0aGlzLnJlbWFpbmluZ19mb3Jfa2V5KCBrZXkgKTtcclxuXHRcdFx0cmV0dXJuICggcmVtID09PSBJbmZpbml0eSApID8gdHJ1ZSA6ICggcmVtID49IGRlbHRhICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVSS1mYWNpbmcgZ2F0ZTogYWxlcnQgd2hlbiBleGNlZWRlZC4gUmV0dXJucyBib29sZWFuIGFsbG93ZWQvYmxvY2tlZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHBhcmFtIHt7bGFiZWw/OiBzdHJpbmcsIGRlbHRhPzogbnVtYmVyfX0gW29wdHM9e31dIC0gT3B0aW9uYWwgVUkgaW5mby5cclxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGFsbG93ZWQsIGZhbHNlIGlmIGJsb2NrZWQuXHJcblx0XHQgKi9cclxuXHRcdGdhdGVfb3JfYWxlcnQoIGtleSwgeyBsYWJlbCA9IGtleSwgZGVsdGEgPSAxIH0gPSB7fSApIHtcclxuXHRcdFx0aWYgKCB0aGlzLmNhbl9hZGQoIGtleSwgZGVsdGEgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBsaW1pdCA9IHRoaXMubGltaXRfZm9yX2tleSgga2V5ICk7XHJcblx0XHRcdGFsZXJ0KCBgT25seSAke2xpbWl0fSBpbnN0YW5jZSR7bGltaXQgPiAxID8gJ3MnIDogJyd9IG9mIFwiJHtsYWJlbH1cIiBhbGxvd2VkLmAgKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQmFja3dhcmQtY29tcGF0aWJsZSBhbGlhcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuICAtIENoZWNrIHdoZXRoZXIgYW5vdGhlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlblxyXG5cdFx0ICogdXNhZ2Uga2V5IGNhbiBiZSBhZGRlZC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVXNhZ2Uga2V5IG9mIGEgcGFsZXR0ZSBpdGVtLlxyXG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWRkaW5nIG9uZSBtb3JlIGlzIGFsbG93ZWQuXHJcblx0XHQgKi9cclxuXHRcdGlzX3VzYWdlX29rKCBrZXkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmNhbl9hZGQoIGtleSwgMSApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdGFudCBldmVudCBuYW1lcyBmb3IgdGhlIGJ1aWxkZXIuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9FdmVudHMgPSBPYmplY3QuZnJlZXplKHtcclxuXHRcdFNFTEVDVCAgICAgICAgICAgIDogJ3dwYmM6YmZiOnNlbGVjdCcsXHJcblx0XHRDTEVBUl9TRUxFQ1RJT04gICA6ICd3cGJjOmJmYjpjbGVhci1zZWxlY3Rpb24nLFxyXG5cdFx0RklFTERfQUREICAgICAgICAgOiAnd3BiYzpiZmI6ZmllbGQ6YWRkJyxcclxuXHRcdEZJRUxEX1JFTU9WRSAgICAgIDogJ3dwYmM6YmZiOmZpZWxkOnJlbW92ZScsXHJcblx0XHRTVFJVQ1RVUkVfQ0hBTkdFICA6ICd3cGJjOmJmYjpzdHJ1Y3R1cmU6Y2hhbmdlJyxcclxuXHRcdFNUUlVDVFVSRV9MT0FERUQgIDogJ3dwYmM6YmZiOnN0cnVjdHVyZTpsb2FkZWQnXHJcblx0fSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZ2h0d2VpZ2h0IGV2ZW50IGJ1cyB0aGF0IGVtaXRzIHRvIGJvdGggdGhlIHBhZ2VzIGNvbnRhaW5lciBhbmQgZG9jdW1lbnQuXHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9FdmVudEJ1cyA9ICBjbGFzcyB7XHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNjb3BlX2VsIC0gRWxlbWVudCB0byBkaXNwYXRjaCBidWJibGVkIGV2ZW50cyBmcm9tLlxyXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3Rvciggc2NvcGVfZWwgKSB7XHJcblx0XHRcdHRoaXMuc2NvcGVfZWwgPSBzY29wZV9lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVtaXQgYSBET00gQ3VzdG9tRXZlbnQgd2l0aCBwYXlsb2FkLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gRXZlbnQgdHlwZSAodXNlIENvcmUuV1BCQ19CRkJfRXZlbnRzLiB3aGVuIHBvc3NpYmxlKS5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBbZGV0YWlsPXt9XSAtIEFyYml0cmFyeSBzZXJpYWxpemFibGUgcGF5bG9hZC5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbWl0KCB0eXBlLCBkZXRhaWwgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIHRoaXMuc2NvcGVfZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2NvcGVfZWwuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGRldGFpbDogeyAuLi5kZXRhaWwgfSwgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN1YnNjcmliZSB0byBhbiBldmVudCBvbiBkb2N1bWVudC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUuXHJcblx0XHQgKiBAcGFyYW0geyhldjpDdXN0b21FdmVudCk9PnZvaWR9IGhhbmRsZXIgLSBIYW5kbGVyIGZ1bmN0aW9uLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdG9uKCB0eXBlLCBoYW5kbGVyICkge1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGVyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50IG9uIGRvY3VtZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gRXZlbnQgdHlwZS5cclxuXHRcdCAqIEBwYXJhbSB7KGV2OkN1c3RvbUV2ZW50KT0+dm9pZH0gaGFuZGxlciAtIEhhbmRsZXIgZnVuY3Rpb24uXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0b2ZmKCB0eXBlLCBoYW5kbGVyICkge1xyXG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGVyICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU29ydGFibGVKUyBtYW5hZ2VyOiBzaW5nbGUgcG9pbnQgZm9yIGNvbnNpc3RlbnQgRG5EIGNvbmZpZy5cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX1NvcnRhYmxlTWFuYWdlciA9IGNsYXNzICB7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyIC0gVGhlIGFjdGl2ZSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdFx0ICogQHBhcmFtIHt7IGdyb3VwTmFtZT86IHN0cmluZywgYW5pbWF0aW9uPzogbnVtYmVyLCBnaG9zdENsYXNzPzogc3RyaW5nLCBjaG9zZW5DbGFzcz86IHN0cmluZywgZHJhZ0NsYXNzPzpcblx0XHQgKiAgICAgc3RyaW5nLCBjYW5kaWRhdGVfZHdlbGxfbXM/OiBudW1iZXIsIGNhbmRpZGF0ZV9jb21taXRfZGlzdGFuY2U/OiBudW1iZXIsXG5cdFx0ICogICAgIGNhbmRpZGF0ZV9kd2VsbF9kaXN0YW5jZT86IG51bWJlciB9fSBbb3B0cz17fV0gLSBWaXN1YWwgYW5kIGRyYWctc3RhYmlsaXR5IG9wdGlvbnMuXG5cdFx0ICovXHJcblx0XHRjb25zdHJ1Y3RvciggYnVpbGRlciwgb3B0cyA9IHt9ICkge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0XHRjb25zdCBnaWQgPSB0aGlzLmJ1aWxkZXI/Lmluc3RhbmNlX2lkIHx8IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dGhpcy5vcHRzID0ge1xyXG5cdFx0XHRcdC8vIGdyb3VwTmFtZSAgOiAnZm9ybScsXHJcblx0XHRcdFx0Z3JvdXBOYW1lOiBgZm9ybS0ke2dpZH1gLFxyXG5cdFx0XHRcdGFuaW1hdGlvbiAgOiAxNTAsXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6ICd3cGJjX2JmYl9fZHJhZy1naG9zdCcsXG5cdFx0XHRcdGNob3NlbkNsYXNzOiAnd3BiY19iZmJfX2hpZ2hsaWdodCcsXG5cdFx0XHRcdGRyYWdDbGFzcyAgOiAnd3BiY19iZmJfX2RyYWctYWN0aXZlJyxcblx0XHRcdFx0Y2FuZGlkYXRlX2R3ZWxsX21zICAgICAgICA6IDkwLFxuXHRcdFx0XHRjYW5kaWRhdGVfY29tbWl0X2Rpc3RhbmNlIDogMTAsXG5cdFx0XHRcdGNhbmRpZGF0ZV9kd2VsbF9kaXN0YW5jZSAgOiAyLFxuXHRcdFx0XHQuLi5vcHRzXG5cdFx0XHR9O1xuXHRcdFx0LyoqIEB0eXBlIHtTZXQ8SFRNTEVsZW1lbnQ+fSAqL1xyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzID0gbmV3IFNldCgpO1xyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEd1YXJkIGFnYWluc3QgbG9zdCBtb3VzZXVwIC8gcG9pbnRlcnVwIGV2ZW50cy5cclxuXHRcdFx0ICpcclxuXHRcdFx0ICogQHR5cGUge2Jvb2xlYW59XHJcblx0XHRcdCAqL1xyXG5cdFx0XHR0aGlzLl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCA9IGZhbHNlO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFN0YXRlIGZvciB0aGUgY3VycmVudCBGb3JtIEJ1aWxkZXIgY2FudmFzIGRyYWcuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUgez9PYmplY3R9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuX2RyYWdfc3RhdGUgPSBudWxsO1xuXHJcblx0XHRcdHRoaXMuX2JpbmRfZHJhZ19mYWlsX3NhZmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsZWFudXAgZHJhZyBVSSBzdGF0ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBUaGlzIGlzIGEgZGVmZW5zaXZlIGNsZWFudXAgZm9yIGNhc2VzIHdoZW4gQ2hyb21lIG9yIGEgYnJvd3NlciBleHRlbnNpb25cclxuXHRcdCAqIGxvc2VzIHRoZSBmaW5hbCBtb3VzZXVwIC8gcG9pbnRlcnVwIGV2ZW50IGR1cmluZyBmYWxsYmFjayBkcmFnZ2luZy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0X2NsZWFudXBfZHJhZ191aSgpIHtcblx0XHRcdGNvbnN0IGRyYWdfc3RhdGUgPSB0aGlzLl9kcmFnX3N0YXRlO1xuXG5cdFx0XHRpZiAoIGRyYWdfc3RhdGU/Lml0ZW0gKSB7XG5cdFx0XHRcdGRyYWdfc3RhdGUuaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCAnd3BiY19iZmJfX2Ryb3AtaW5kaWNhdG9yJyApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBkcmFnX3N0YXRlPy5zb3VyY2Vfc3BhY2VyPy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRkcmFnX3N0YXRlLnNvdXJjZV9zcGFjZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZHJhZ19zdGF0ZS5zb3VyY2Vfc3BhY2VyICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9yZWxlYXNlX2NhbnZhc19nZW9tZXRyeV9sb2NrcyggZHJhZ19zdGF0ZSApO1xuXG5cdFx0XHR0aGlzLl9kcmFnX3N0YXRlID0gbnVsbDtcblx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggZmFsc2UgKTtcblx0XHRcdHRoaXMuYnVpbGRlcj8uX3JlbW92ZV9kcmFnZ2luZ19jbGFzcz8uKCk7XG5cclxuXHRcdFx0Ly8gUmVtb3ZlIG9ubHkgZmFsbGJhY2sgbWlycm9ycy4gRG8gbm90IHRvdWNoIHJlYWwgZHJhZ2dlZCBlbGVtZW50cy5cclxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJy5zb3J0YWJsZS1mYWxsYmFja1tkYXRhLWRyYWctcm9sZV0sIC53cGJjX2JmYl9fc2ltcGxlX2xpc3RfZmFsbGJhY2snIClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdFx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBDYXB0dXJlIHRoZSBibG9jayBzaXplIG9mIGV2ZXJ5IGNhbnZhcyBsYXlvdXQgY29udGFpbmVyIGJlZm9yZSBkcmFnIHJlZmxvdyBzdGFydHMuXG5cdFx0ICpcblx0XHQgKiBTb3J0YWJsZUpTIHRlbXBvcmFyaWx5IG1vdmVzIHRoZSByZWFsIG5vZGUgYmV0d2VlbiBjb250YWluZXJzLiBUaGF0IGNoYW5nZXMgQ1NTXG5cdFx0ICogYDplbXB0eWAgbWF0Y2hpbmcgYW5kIGNhbiBvdGhlcndpc2Ugc2hyaW5rIGFuIGVtcHR5IGRlc3RpbmF0aW9uIHJvdyBvciBncm93IGFcblx0XHQgKiBwb3B1bGF0ZWQgZGVzdGluYXRpb24gYnkgdGhlIGluc2VydGlvbi1saW5lIGhlaWdodC4gVGhlIGNhcHR1cmVkIHZhbHVlcyBhcmVcblx0XHQgKiBhcHBsaWVkIG9ubHkgZm9yIHRoZSBhY3RpdmUgZHJhZyBzZXNzaW9uIGFuZCBuZXZlciBiZWNvbWUgc2F2ZWQgZm9ybSBkYXRhLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge0FycmF5PE9iamVjdD59IFJlc3RvcmFibGUgZ2VvbWV0cnktbG9jayByZWNvcmRzIGZvciB2aXNpYmxlIGNhbnZhcyBjb250YWluZXJzLlxuXHRcdCAqL1xuXHRcdF9jYXB0dXJlX2NhbnZhc19nZW9tZXRyeV9sb2NrcygpIHtcblx0XHRcdGNvbnN0IHBhZ2VzX2NvbnRhaW5lciA9IHRoaXMuYnVpbGRlcj8ucGFnZXNfY29udGFpbmVyO1xuXHRcdFx0aWYgKCAhIHBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBsb2NrX3NlbGVjdG9yID0gW1xuXHRcdFx0XHQnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInLFxuXHRcdFx0XHQnLndwYmNfYmZiX19yb3cnLFxuXHRcdFx0XHQnLndwYmNfYmZiX19jb2x1bW4nXG5cdFx0XHRdLmpvaW4oICcsICcgKTtcblx0XHRcdGNvbnN0IGJsb2NrX3NpemVfcHJvcGVydHkgPSAnLS13cGJjLWJmYi1kcmFnLWxvY2tlZC1ibG9jay1zaXplJztcblxuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20oIHBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCBsb2NrX3NlbGVjdG9yICkgKVxuXHRcdFx0XHQubWFwKCAoIGVsZW1lbnQgKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tfc2l6ZSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0Py4oKS5oZWlnaHQ7XG5cdFx0XHRcdFx0aWYgKCAhIE51bWJlci5pc0Zpbml0ZSggYmxvY2tfc2l6ZSApIHx8IGJsb2NrX3NpemUgPD0gMCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LFxuXHRcdFx0XHRcdFx0YmxvY2tfc2l6ZSAgICAgICAgICAgICAgICAgIDogTWF0aC5yb3VuZCggYmxvY2tfc2l6ZSAqIDEwMDAgKSAvIDEwMDAsXG5cdFx0XHRcdFx0XHRoYWRfbG9ja19jbGFzcyAgICAgICAgICAgICAgOiBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fZHJhZy1nZW9tZXRyeS1sb2NrJyApLFxuXHRcdFx0XHRcdFx0cHJldmlvdXNfYmxvY2tfc2l6ZSAgICAgICAgIDogZWxlbWVudC5zdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZT8uKCBibG9ja19zaXplX3Byb3BlcnR5ICkgfHwgJycsXG5cdFx0XHRcdFx0XHRwcmV2aW91c19ibG9ja19zaXplX3ByaW9yaXR5OiBlbGVtZW50LnN0eWxlPy5nZXRQcm9wZXJ0eVByaW9yaXR5Py4oIGJsb2NrX3NpemVfcHJvcGVydHkgKSB8fCAnJ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQuZmlsdGVyKCBCb29sZWFuICk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRnJlZXplIGNhcHR1cmVkIGNhbnZhcyBjb250YWluZXIgaGVpZ2h0cyBmb3IgdGhlIGFjdGl2ZSBTb3J0YWJsZUpTIHNlc3Npb24uXG5cdFx0ICpcblx0XHQgKiBUaGUgbG9jayBpcyBhcHBsaWVkIGJlZm9yZSBnbG9iYWwgZHJhZyBjbGFzc2VzIG9yIHRoZSBjb21wYWN0IGluc2VydGlvbiBtYXJrZXJcblx0XHQgKiBjYW4gY2hhbmdlIGZsZXggYWxpZ25tZW50IGFuZCBlbXB0eS1jb250YWluZXIgc2VsZWN0b3JzLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0X2FwcGx5X2NhbnZhc19nZW9tZXRyeV9sb2NrcygpIHtcblx0XHRcdGNvbnN0IGdlb21ldHJ5X2xvY2tzID0gdGhpcy5fZHJhZ19zdGF0ZT8uZ2VvbWV0cnlfbG9ja3MgfHwgW107XG5cblx0XHRcdGdlb21ldHJ5X2xvY2tzLmZvckVhY2goICggZ2VvbWV0cnlfbG9jayApID0+IHtcblx0XHRcdFx0Z2VvbWV0cnlfbG9jay5lbGVtZW50LnN0eWxlPy5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHQnLS13cGJjLWJmYi1kcmFnLWxvY2tlZC1ibG9jay1zaXplJyxcblx0XHRcdFx0XHRgJHtnZW9tZXRyeV9sb2NrLmJsb2NrX3NpemV9cHhgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGdlb21ldHJ5X2xvY2suZWxlbWVudC5jbGFzc0xpc3Q/LmFkZCggJ3dwYmNfYmZiX19kcmFnLWdlb21ldHJ5LWxvY2snICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmVzdG9yZSBhbGwgaW5saW5lIHN0YXRlIHVzZWQgYnkgdGhlIGRyYWctc2Vzc2lvbiBnZW9tZXRyeSBsb2NrLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHs/T2JqZWN0fSBkcmFnX3N0YXRlIC0gRHJhZyBzdGF0ZSB3aG9zZSBnZW9tZXRyeSByZWNvcmRzIG11c3QgYmUgcmVzdG9yZWQuXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0X3JlbGVhc2VfY2FudmFzX2dlb21ldHJ5X2xvY2tzKCBkcmFnX3N0YXRlICkge1xuXHRcdFx0Y29uc3QgYmxvY2tfc2l6ZV9wcm9wZXJ0eSA9ICctLXdwYmMtYmZiLWRyYWctbG9ja2VkLWJsb2NrLXNpemUnO1xuXHRcdFx0Y29uc3QgZ2VvbWV0cnlfbG9ja3MgICAgICA9IGRyYWdfc3RhdGU/Lmdlb21ldHJ5X2xvY2tzIHx8IFtdO1xuXG5cdFx0XHRnZW9tZXRyeV9sb2Nrcy5mb3JFYWNoKCAoIGdlb21ldHJ5X2xvY2sgKSA9PiB7XG5cdFx0XHRcdGlmICggZ2VvbWV0cnlfbG9jay5wcmV2aW91c19ibG9ja19zaXplICkge1xuXHRcdFx0XHRcdGdlb21ldHJ5X2xvY2suZWxlbWVudC5zdHlsZT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRibG9ja19zaXplX3Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0Z2VvbWV0cnlfbG9jay5wcmV2aW91c19ibG9ja19zaXplLFxuXHRcdFx0XHRcdFx0Z2VvbWV0cnlfbG9jay5wcmV2aW91c19ibG9ja19zaXplX3ByaW9yaXR5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRnZW9tZXRyeV9sb2NrLmVsZW1lbnQuc3R5bGU/LnJlbW92ZVByb3BlcnR5Py4oIGJsb2NrX3NpemVfcHJvcGVydHkgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggISBnZW9tZXRyeV9sb2NrLmhhZF9sb2NrX2NsYXNzICkge1xuXHRcdFx0XHRcdGdlb21ldHJ5X2xvY2suZWxlbWVudC5jbGFzc0xpc3Q/LnJlbW92ZSggJ3dwYmNfYmZiX19kcmFnLWdlb21ldHJ5LWxvY2snICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBDYXB0dXJlIHRoZSBvcmlnaW5hbCBjYW52YXMgZ2VvbWV0cnkgYmVmb3JlIFNvcnRhYmxlSlMgYXBwbGllcyBpdHMgZ2hvc3QgY2xhc3MuXG5cdFx0ICpcblx0XHQgKiBUaGUgc2F2ZWQgcmVjdGFuZ2xlIGlzIGxhdGVyIHJlcHJlc2VudGVkIGJ5IGEgbm9uLWRhdGEgc3BhY2VyLiBUaGlzIGtlZXBzIHRoZVxuXHRcdCAqIHNvdXJjZSBsYXlvdXQgc3RhYmxlIHdoaWxlIHRoZSByZWFsIGRyYWdnZWQgbm9kZSBiZWNvbWVzIGEgY29tcGFjdCBpbnNlcnRpb25cblx0XHQgKiBpbmRpY2F0b3IgaW4gYW5vdGhlciBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge1NvcnRhYmxlLlNvcnRhYmxlRXZlbnR9IGV2dCAtIFNvcnRhYmxlIGNob29zZSBldmVudC5cblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRfcHJlcGFyZV9kcmFnX3N0YXRlKCBldnQgKSB7XG5cdFx0XHRpZiAoICEgZXZ0Py5pdGVtIHx8ICEgZXZ0Py5mcm9tICkge1xuXHRcdFx0XHR0aGlzLl9kcmFnX3N0YXRlID0gbnVsbDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzb3VyY2VfcmVjdCAgPSBldnQuaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGNvbnN0IGZyb21fcGFsZXR0ZSA9ICEhIHRoaXMuYnVpbGRlcj8ucGFsZXR0ZV91bHM/LmluY2x1ZGVzPy4oIGV2dC5mcm9tICk7XG5cblx0XHRcdHRoaXMuX2RyYWdfc3RhdGUgPSB7XG5cdFx0XHRcdGl0ZW0gICAgICAgICAgICAgICAgOiBldnQuaXRlbSxcblx0XHRcdFx0ZnJvbV9wYWxldHRlICAgICAgICA6IGZyb21fcGFsZXR0ZSxcblx0XHRcdFx0c291cmNlX3BhcmVudCAgICAgICA6IGV2dC5mcm9tLFxuXHRcdFx0XHRzb3VyY2VfbmV4dF9zaWJsaW5nIDogZXZ0Lml0ZW0ubmV4dFNpYmxpbmcsXG5cdFx0XHRcdHNvdXJjZV9yZWN0ICAgICAgICAgOiB7XG5cdFx0XHRcdFx0d2lkdGggOiBzb3VyY2VfcmVjdC53aWR0aCxcblx0XHRcdFx0XHRoZWlnaHQ6IHNvdXJjZV9yZWN0LmhlaWdodFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZW9tZXRyeV9sb2NrcyAgICAgIDogdGhpcy5fY2FwdHVyZV9jYW52YXNfZ2VvbWV0cnlfbG9ja3MoKSxcblx0XHRcdFx0c291cmNlX3NwYWNlciAgICAgICA6IG51bGwsXG5cdFx0XHRcdGFjY2VwdGVkX2NhbmRpZGF0ZSAgOiBudWxsLFxuXHRcdFx0XHRwZW5kaW5nX2NhbmRpZGF0ZSAgIDogbnVsbCxcblx0XHRcdFx0cGVuZGluZ19zaW5jZSAgICAgICA6IDAsXG5cdFx0XHRcdHBlbmRpbmdfcG9pbnRlciAgICAgOiBudWxsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZSBhIG1lYXN1cmVkLCBub24tZGF0YSBmb290cHJpbnQgYXQgdGhlIGRyYWdnZWQgaXRlbSdzIHNvdXJjZSBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqIFRoZSBzcGFjZXIgaW50ZW50aW9uYWxseSBkb2VzIG5vdCB1c2UgZmllbGQgb3Igc2VjdGlvbiBjbGFzc2VzLCBzbyBGb3JtIEJ1aWxkZXJcblx0XHQgKiBzZXJpYWxpemF0aW9uIGFuZCB1c2FnZSBhY2NvdW50aW5nIGNhbm5vdCB0cmVhdCBpdCBhcyBzYXZlZCBmb3JtIGNvbnRlbnQuXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRfY3JlYXRlX2RyYWdfc291cmNlX3NwYWNlcigpIHtcblx0XHRcdGNvbnN0IGRyYWdfc3RhdGUgPSB0aGlzLl9kcmFnX3N0YXRlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEgZHJhZ19zdGF0ZSB8fFxuXHRcdFx0XHRkcmFnX3N0YXRlLmZyb21fcGFsZXR0ZSB8fFxuXHRcdFx0XHQhIGRyYWdfc3RhdGUuaXRlbSB8fFxuXHRcdFx0XHQhIGRyYWdfc3RhdGUuc291cmNlX3BhcmVudCB8fFxuXHRcdFx0XHRkcmFnX3N0YXRlLnNvdXJjZV9zcGFjZXJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNwYWNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XG5cdFx0XHRjb25zdCB3aWR0aCAgPSBNYXRoLm1heCggMSwgZHJhZ19zdGF0ZS5zb3VyY2VfcmVjdD8ud2lkdGggfHwgMSApO1xuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoIDEsIGRyYWdfc3RhdGUuc291cmNlX3JlY3Q/LmhlaWdodCB8fCAxICk7XG5cblx0XHRcdHNwYWNlci5jbGFzc05hbWUgPSAnd3BiY19iZmJfX2RyYWctc291cmNlLXNwYWNlcic7XG5cdFx0XHRzcGFjZXIuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKTtcblx0XHRcdHNwYWNlci5zZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWRyYWctc291cmNlLXNwYWNlcicsICd0cnVlJyApO1xuXHRcdFx0c3BhY2VyLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1kcmFnLXNvdXJjZS1pbmxpbmUtc2l6ZScsIGAke3dpZHRofXB4YCApO1xuXHRcdFx0c3BhY2VyLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1kcmFnLXNvdXJjZS1ibG9jay1zaXplJywgYCR7aGVpZ2h0fXB4YCApO1xuXG5cdFx0XHRjb25zdCByZWZlcmVuY2Vfbm9kZSA9IGRyYWdfc3RhdGUuc291cmNlX25leHRfc2libGluZz8ucGFyZW50Tm9kZSA9PT0gZHJhZ19zdGF0ZS5zb3VyY2VfcGFyZW50XG5cdFx0XHRcdD8gZHJhZ19zdGF0ZS5zb3VyY2VfbmV4dF9zaWJsaW5nXG5cdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0ZHJhZ19zdGF0ZS5zb3VyY2VfcGFyZW50Lmluc2VydEJlZm9yZSggc3BhY2VyLCByZWZlcmVuY2Vfbm9kZSApO1xuXHRcdFx0ZHJhZ19zdGF0ZS5zb3VyY2Vfc3BhY2VyID0gc3BhY2VyO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBzdGFibGUgZHJhZyByZXByZXNlbnRhdGlvbiBhZnRlciBTb3J0YWJsZUpTIGNyZWF0ZXMgaXRzIG9mZi1mbG93IG1pcnJvci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7U29ydGFibGUuU29ydGFibGVFdmVudH0gZXZ0IC0gU29ydGFibGUgc3RhcnQgZXZlbnQuXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0X3N0YXJ0X2RyYWcoIGV2dCApIHtcblx0XHRcdGlmICggISB0aGlzLl9kcmFnX3N0YXRlICkge1xuXHRcdFx0XHR0aGlzLl9wcmVwYXJlX2RyYWdfc3RhdGUoIGV2dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9hcHBseV9jYW52YXNfZ2VvbWV0cnlfbG9ja3MoKTtcblx0XHRcdHRoaXMuYnVpbGRlcj8uX2FkZF9kcmFnZ2luZ19jbGFzcz8uKCk7XG5cblx0XHRcdGNvbnN0IGZyb21fcGFsZXR0ZSA9ICEhIHRoaXMuX2RyYWdfc3RhdGU/LmZyb21fcGFsZXR0ZTtcblx0XHRcdHRoaXMuX3RvZ2dsZV9kbmRfcm9vdF9mbGFncyggdHJ1ZSwgZnJvbV9wYWxldHRlICk7XG5cdFx0XHR0aGlzLl90YWdfZHJhZ19taXJyb3IoIGV2dCApO1xuXG5cdFx0XHRpZiAoICEgZnJvbV9wYWxldHRlICYmIGV2dD8uaXRlbSApIHtcblx0XHRcdFx0dGhpcy5fY3JlYXRlX2RyYWdfc291cmNlX3NwYWNlcigpO1xuXHRcdFx0XHRldnQuaXRlbS5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2Ryb3AtaW5kaWNhdG9yJyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEZpbmlzaCBhIEZvcm0gQnVpbGRlciBkcmFnIGFuZCByZW1vdmUgdHJhbnNpZW50IGxheW91dCBoZWxwZXJzLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0X2ZpbmlzaF9kcmFnKCkge1xuXHRcdFx0dGhpcy5fY2xlYW51cF9kcmFnX3VpKCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQ2hlY2sgd2hldGhlciBhIFNvcnRhYmxlSlMgY2FudmFzIGNhbmRpZGF0ZSBpcyBzdGFibGUgZW5vdWdoIHRvIGFjY2VwdC5cblx0XHQgKlxuXHRcdCAqIFRoZSBjYW5kaWRhdGUgaW5jbHVkZXMgdGhlIGRlc3RpbmF0aW9uIGNvbnRhaW5lciwgcmVsYXRlZCBzaWJsaW5nLCBhbmQgaW5zZXJ0aW9uXG5cdFx0ICogc2lkZS4gQSBuZXcgY2FuZGlkYXRlIG11c3QgcmVjZWl2ZSByZWFsIHBvaW50ZXIgbW92ZW1lbnQgYmVmb3JlIGl0IGNhbiByZXBsYWNlXG5cdFx0ICogdGhlIGFjY2VwdGVkIHBvc2l0aW9uLCBwcmV2ZW50aW5nIGxheW91dCBtb3ZlbWVudCBhbG9uZSBmcm9tIGNhdXNpbmcgZmxpcC1mbG9wcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBTb3J0YWJsZSBtb3ZlIGV2ZW50LlxuXHRcdCAqIEBwYXJhbSB7TW91c2VFdmVudHxQb2ludGVyRXZlbnR8VG91Y2hFdmVudH0gb3JpZ2luYWxfZXZlbnQgLSBPcmlnaW5hbCBwb2ludGVyIGV2ZW50LlxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIFNvcnRhYmxlSlMgbWF5IG1vdmUgdGhlIGluLWZsb3cgaW5zZXJ0aW9uIGluZGljYXRvci5cblx0XHQgKi9cblx0XHRfYWxsb3dfY2FudmFzX21vdmUoIGV2dCwgb3JpZ2luYWxfZXZlbnQgKSB7XG5cdFx0XHRjb25zdCB7IHRvLCBmcm9tIH0gPSBldnQgfHwge307XG5cdFx0XHRpZiAoICEgdG8gfHwgISBmcm9tICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHRvLmNsb3Nlc3QoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdG91Y2hfZXZlbnQgID0gb3JpZ2luYWxfZXZlbnQ/LnRvdWNoZXM/LlswXSB8fCBvcmlnaW5hbF9ldmVudD8uY2hhbmdlZFRvdWNoZXM/LlswXTtcblx0XHRcdGNvbnN0IGV2ZW50X3ggICAgICA9IHRvdWNoX2V2ZW50Py5jbGllbnRYID8/IG9yaWdpbmFsX2V2ZW50Py5jbGllbnRYO1xuXHRcdFx0Y29uc3QgZXZlbnRfeSAgICAgID0gdG91Y2hfZXZlbnQ/LmNsaWVudFkgPz8gb3JpZ2luYWxfZXZlbnQ/LmNsaWVudFk7XG5cdFx0XHRjb25zdCBkcmFnZ2VkX3JlY3QgPSBldnQuZHJhZ2dlZFJlY3QgfHwgZXZ0LmRyYWdnZWQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdD8uKCk7XG5cdFx0XHRjb25zdCBwb2ludGVyX3ggICAgPSBOdW1iZXIuaXNGaW5pdGUoIGV2ZW50X3ggKVxuXHRcdFx0XHQ/IGV2ZW50X3hcblx0XHRcdFx0OiAoZHJhZ2dlZF9yZWN0ID8gZHJhZ2dlZF9yZWN0LmxlZnQgKyAoZHJhZ2dlZF9yZWN0LndpZHRoIC8gMikgOiAwKTtcblx0XHRcdGNvbnN0IHBvaW50ZXJfeSAgICA9IE51bWJlci5pc0Zpbml0ZSggZXZlbnRfeSApXG5cdFx0XHRcdD8gZXZlbnRfeVxuXHRcdFx0XHQ6IChkcmFnZ2VkX3JlY3QgPyBkcmFnZ2VkX3JlY3QudG9wICsgKGRyYWdnZWRfcmVjdC5oZWlnaHQgLyAyKSA6IDApO1xuXG5cdFx0XHQvLyBDcm9zcy1jb250YWluZXIgY29sdW1uIGNoYW5nZXMgcmVxdWlyZSBhIGRlbGliZXJhdGUgbW92ZSBpbnNpZGUgdGhlIG5ldyBjb2x1bW4uXG5cdFx0XHRpZiAoIHRvICE9PSBmcm9tICYmIHRvLmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApICkge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXJfcmVjdCA9IHRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCBwYWRkaW5nX3ggICAgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmNsYW1wKCBjb250YWluZXJfcmVjdC53aWR0aCAqIDAuMjAsIDEyLCAzNiApO1xuXHRcdFx0XHRjb25zdCBwYWRkaW5nX3kgICAgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmNsYW1wKCBjb250YWluZXJfcmVjdC5oZWlnaHQgKiAwLjEwLCA2LCAxNiApO1xuXHRcdFx0XHRjb25zdCB2aXN1YWxseV9lbXB0eSAgPSAhIHRvLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0JzpzY29wZSA+IC53cGJjX2JmYl9fZmllbGQ6bm90KC53cGJjX2JmYl9fZHJvcC1pbmRpY2F0b3IpLCAnICtcblx0XHRcdFx0XHQnOnNjb3BlID4gLndwYmNfYmZiX19zZWN0aW9uOm5vdCgud3BiY19iZmJfX2Ryb3AtaW5kaWNhdG9yKSdcblx0XHRcdFx0KSB8fCBjb250YWluZXJfcmVjdC5oZWlnaHQgPCA2NDtcblx0XHRcdFx0Y29uc3QgaW5uZXJfdG9wICAgICAgID0gY29udGFpbmVyX3JlY3QudG9wICsgKHZpc3VhbGx5X2VtcHR5ID8gNCA6IHBhZGRpbmdfeSk7XG5cdFx0XHRcdGNvbnN0IGlubmVyX2JvdHRvbSAgICA9IGNvbnRhaW5lcl9yZWN0LmJvdHRvbSAtICh2aXN1YWxseV9lbXB0eSA/IDQgOiBwYWRkaW5nX3kpO1xuXHRcdFx0XHRjb25zdCBpbm5lcl9sZWZ0ICAgICAgPSBjb250YWluZXJfcmVjdC5sZWZ0ICsgcGFkZGluZ194O1xuXHRcdFx0XHRjb25zdCBpbm5lcl9yaWdodCAgICAgPSBjb250YWluZXJfcmVjdC5yaWdodCAtIHBhZGRpbmdfeDtcblxuXHRcdFx0XHRpZiAoIHBvaW50ZXJfeCA8PSBpbm5lcl9sZWZ0IHx8IHBvaW50ZXJfeCA+PSBpbm5lcl9yaWdodCB8fCBwb2ludGVyX3kgPD0gaW5uZXJfdG9wIHx8IHBvaW50ZXJfeSA+PSBpbm5lcl9ib3R0b20gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRyYWdfc3RhdGUgPSB0aGlzLl9kcmFnX3N0YXRlO1xuXHRcdFx0aWYgKCAhIGRyYWdfc3RhdGUgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjYW5kaWRhdGUgPSB7XG5cdFx0XHRcdHRvICAgICAgICAgICAgICAgIDogdG8sXG5cdFx0XHRcdHJlbGF0ZWQgICAgICAgICAgIDogZXZ0LnJlbGF0ZWQgfHwgbnVsbCxcblx0XHRcdFx0d2lsbF9pbnNlcnRfYWZ0ZXIgOiAhISBldnQud2lsbEluc2VydEFmdGVyXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlX21hdGNoZXMgPSAoIGZpcnN0LCBzZWNvbmQgKSA9PiAhISBmaXJzdCAmJiAhISBzZWNvbmQgJiZcblx0XHRcdFx0Zmlyc3QudG8gPT09IHNlY29uZC50byAmJlxuXHRcdFx0XHRmaXJzdC5yZWxhdGVkID09PSBzZWNvbmQucmVsYXRlZCAmJlxuXHRcdFx0XHRmaXJzdC53aWxsX2luc2VydF9hZnRlciA9PT0gc2Vjb25kLndpbGxfaW5zZXJ0X2FmdGVyO1xuXG5cdFx0XHRpZiAoIGNhbmRpZGF0ZV9tYXRjaGVzKCBjYW5kaWRhdGUsIGRyYWdfc3RhdGUuYWNjZXB0ZWRfY2FuZGlkYXRlICkgKSB7XG5cdFx0XHRcdGV2dC5kcmFnZ2VkPy5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2Ryb3AtaW5kaWNhdG9yJyApO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgbm93ID0gd2luZG93LnBlcmZvcm1hbmNlPy5ub3c/LigpID8/IERhdGUubm93KCk7XG5cdFx0XHRpZiAoICEgY2FuZGlkYXRlX21hdGNoZXMoIGNhbmRpZGF0ZSwgZHJhZ19zdGF0ZS5wZW5kaW5nX2NhbmRpZGF0ZSApICkge1xuXHRcdFx0XHRkcmFnX3N0YXRlLnBlbmRpbmdfY2FuZGlkYXRlID0gY2FuZGlkYXRlO1xuXHRcdFx0XHRkcmFnX3N0YXRlLnBlbmRpbmdfc2luY2UgICAgID0gbm93O1xuXHRcdFx0XHRkcmFnX3N0YXRlLnBlbmRpbmdfcG9pbnRlciAgID0geyB4OiBwb2ludGVyX3gsIHk6IHBvaW50ZXJfeSB9O1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBvaW50ZXJfZGlzdGFuY2UgPSBNYXRoLmh5cG90KFxuXHRcdFx0XHRwb2ludGVyX3ggLSBkcmFnX3N0YXRlLnBlbmRpbmdfcG9pbnRlci54LFxuXHRcdFx0XHRwb2ludGVyX3kgLSBkcmFnX3N0YXRlLnBlbmRpbmdfcG9pbnRlci55XG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlX2FnZSAgICAgICAgICAgID0gbm93IC0gZHJhZ19zdGF0ZS5wZW5kaW5nX3NpbmNlO1xuXHRcdFx0Y29uc3QgY3Jvc3NlZF9jb21taXRfZGlzdGFuY2UgPSBwb2ludGVyX2Rpc3RhbmNlID49IHRoaXMub3B0cy5jYW5kaWRhdGVfY29tbWl0X2Rpc3RhbmNlO1xuXHRcdFx0Y29uc3QgY29tcGxldGVkX2R3ZWxsX21vdmUgICAgPSBjYW5kaWRhdGVfYWdlID49IHRoaXMub3B0cy5jYW5kaWRhdGVfZHdlbGxfbXMgJiZcblx0XHRcdFx0cG9pbnRlcl9kaXN0YW5jZSA+PSB0aGlzLm9wdHMuY2FuZGlkYXRlX2R3ZWxsX2Rpc3RhbmNlO1xuXG5cdFx0XHRpZiAoICEgY3Jvc3NlZF9jb21taXRfZGlzdGFuY2UgJiYgISBjb21wbGV0ZWRfZHdlbGxfbW92ZSApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRkcmFnX3N0YXRlLmFjY2VwdGVkX2NhbmRpZGF0ZSA9IGNhbmRpZGF0ZTtcblx0XHRcdGRyYWdfc3RhdGUucGVuZGluZ19jYW5kaWRhdGUgID0gbnVsbDtcblx0XHRcdGRyYWdfc3RhdGUucGVuZGluZ19zaW5jZSAgICAgID0gMDtcblx0XHRcdGRyYWdfc3RhdGUucGVuZGluZ19wb2ludGVyICAgID0gbnVsbDtcblx0XHRcdGV2dC5kcmFnZ2VkPy5jbGFzc0xpc3QuYWRkKCAnd3BiY19iZmJfX2Ryb3AtaW5kaWNhdG9yJyApO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQmluZCBnbG9iYWwgZmFpbC1zYWZlIGxpc3RlbmVycyBmb3IgZHJhZyBjbGVhbnVwLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRfYmluZF9kcmFnX2ZhaWxfc2FmZSgpIHtcclxuXHRcdFx0aWYgKCB0aGlzLl9kcmFnX2ZhaWxfc2FmZV9ib3VuZCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuX2RyYWdfZmFpbF9zYWZlX2JvdW5kID0gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IGZpbmlzaF9kcmFnID0gKCkgPT4ge1xyXG5cdFx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuX2NsZWFudXBfZHJhZ191aSgpO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdFsgJ21vdXNldXAnLCAncG9pbnRlcnVwJywgJ3RvdWNoZW5kJywgJ2RyYWdlbmQnIF0uZm9yRWFjaCggKGV2dF9uYW1lKSA9PiB7XHJcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggZXZ0X25hbWUsIGZpbmlzaF9kcmFnLCB0cnVlICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnYmx1cicsIGZpbmlzaF9kcmFnLCB0cnVlICk7XHJcblxyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG5cdFx0XHRcdCd2aXNpYmlsaXR5Y2hhbmdlJyxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiApIHtcclxuXHRcdFx0XHRcdFx0ZmluaXNoX2RyYWcoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRydWVcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRhZyB0aGUgZHJhZyBtaXJyb3IgKGVsZW1lbnQgdW5kZXIgY3Vyc29yKSB3aXRoIHJvbGU6ICdwYWxldHRlJyB8ICdjYW52YXMnLlxyXG5cdFx0ICogV29ya3Mgd2l0aCBTb3J0YWJsZSdzIGZhbGxiYWNrIG1pcnJvciAoLnNvcnRhYmxlLWZhbGxiYWNrIC8gLnNvcnRhYmxlLWRyYWcpIGFuZCB3aXRoIHlvdXIgZHJhZ0NsYXNzXHJcblx0XHQgKiAoLndwYmNfYmZiX19kcmFnLWFjdGl2ZSkuXHJcblx0XHQgKi9cclxuXHRcdF90YWdfZHJhZ19taXJyb3IoIGV2dCApIHtcclxuXHRcdFx0Y29uc3QgZnJvbVBhbGV0dGUgPSB0aGlzLmJ1aWxkZXI/LnBhbGV0dGVfdWxzPy5pbmNsdWRlcz8uKCBldnQuZnJvbSApO1xyXG5cdFx0XHRjb25zdCByb2xlICAgICAgICA9IGZyb21QYWxldHRlID8gJ3BhbGV0dGUnIDogJ2NhbnZhcyc7XHJcblx0XHRcdC8vIFdhaXQgYSB0aWNrIHNvIHRoZSBtaXJyb3IgZXhpc3RzLiAgLSBUaGUgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgpIG1ldGhvZCB0ZWxscyB0aGUgYnJvd3NlciB5b3Ugd2lzaCB0byBwZXJmb3JtIGFuIGFuaW1hdGlvbi5cclxuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCAoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWlycm9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy5zb3J0YWJsZS1mYWxsYmFjaywgLnNvcnRhYmxlLWRyYWcsIC4nICsgdGhpcy5vcHRzLmRyYWdDbGFzcyApO1xuXHRcdFx0XHRpZiAoIG1pcnJvciApIHtcblx0XHRcdFx0XHRtaXJyb3Iuc2V0QXR0cmlidXRlKCAnZGF0YS1kcmFnLXJvbGUnLCByb2xlICk7XG5cdFx0XHRcdFx0bWlycm9yLnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCBhY3RpdmUsIGZyb21fcGFsZXR0ZSA9IGZhbHNlICkge1xyXG5cclxuXHRcdFx0Ly8gc2V0IHRvIHJvb3QgZWxlbWVudCBvZiBhbiBIVE1MIGRvY3VtZW50LCB3aGljaCBpcyB0aGUgPGh0bWw+LlxyXG5cdFx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG5cdFx0XHRpZiAoIGFjdGl2ZSApIHtcclxuXHRcdFx0XHRyb290LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fZG5kLWFjdGl2ZScgKTtcclxuXHRcdFx0XHRpZiAoIGZyb21fcGFsZXR0ZSApIHtcclxuXHRcdFx0XHRcdHJvb3QuY2xhc3NMaXN0LmFkZCggJ3dwYmNfYmZiX19kcmFnLWZyb20tcGFsZXR0ZScgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cm9vdC5jbGFzc0xpc3QucmVtb3ZlKCAnd3BiY19iZmJfX2RuZC1hY3RpdmUnLCAnd3BiY19iZmJfX2RyYWctZnJvbS1wYWxldHRlJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRW5zdXJlIGEgc2ltcGxlIHZlcnRpY2FsIHNvcnRhYmxlIGxpc3QuXHJcblx0XHQgKlxyXG5cdFx0ICogVGhpcyBjb25maWd1cmF0aW9uIGlzIGludGVuZGVkIGZvciBpbnNwZWN0b3Ivc2lkZWJhciBsaXN0cyBzdWNoIGFzOlxyXG5cdFx0ICogLSBkcm9wZG93biBjaG9pY2VzXHJcblx0XHQgKiAtIHJhZGlvIG9wdGlvbnNcclxuXHRcdCAqIC0gY2hlY2tib3ggb3B0aW9uc1xyXG5cdFx0ICpcclxuXHRcdCAqIEl0IGlzIGludGVudGlvbmFsbHkgbXVjaCBzaW1wbGVyIHRoYW4gdGhlIGNhbnZhcyBEbkQgY29uZmlnIGFuZCBkb2VzIG5vdFxyXG5cdFx0ICogdXNlIHRoZSBjb2x1bW4gZWRnZS1mZW5jZSAvIHN0aWNreS10YXJnZXQgbG9naWMuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyIC0gU29ydGFibGUgbGlzdCBjb250YWluZXIuXHJcblx0XHQgKiBAcGFyYW0ge3sgaGFuZGxlX3NlbGVjdG9yPzogc3RyaW5nLCBkcmFnZ2FibGVfc2VsZWN0b3I/OiBzdHJpbmcsIG9uVXBkYXRlPzogRnVuY3Rpb24gfX0gW2hhbmRsZXJzPXt9XSAtXHJcblx0XHQgKiAgICAgT3B0aW9uYWwgaGFuZGxlcnMvc2VsZWN0b3JzLlxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGVuc3VyZV9zaW1wbGVfbGlzdCggY29udGFpbmVyLCBoYW5kbGVycyA9IHt9ICkge1xyXG5cdFx0XHRpZiAoICEgY29udGFpbmVyIHx8IHR5cGVvZiBTb3J0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggU29ydGFibGUuZ2V0Py4oIGNvbnRhaW5lciApICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29tbW9uID0ge1xyXG5cdFx0XHRcdGFuaW1hdGlvbiAgICAgICAgOiB0aGlzLm9wdHMuYW5pbWF0aW9uLFxyXG5cdFx0XHRcdGdob3N0Q2xhc3MgICAgICAgOiB0aGlzLm9wdHMuZ2hvc3RDbGFzcyxcclxuXHRcdFx0XHRjaG9zZW5DbGFzcyAgICAgIDogdGhpcy5vcHRzLmNob3NlbkNsYXNzLFxyXG5cdFx0XHRcdGRyYWdDbGFzcyAgICAgICAgOiB0aGlzLm9wdHMuZHJhZ0NsYXNzLFxyXG5cdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdC8vIEZvciBhIHNpbmdsZSBzY3JvbGxhYmxlIHNpZGViYXIgbGlzdCB0aGlzIGlzIHVzdWFsbHkgbW9yZSBzdGFibGUuXHJcblx0XHRcdFx0ZmFsbGJhY2tPbkJvZHkgICA6IGZhbHNlLFxyXG5cdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlOiA4LFxyXG5cdFx0XHRcdHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxyXG5cdFx0XHRcdG9uU3RhcnQgICAgICAgICAgOiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkZXI/Ll9hZGRfZHJhZ2dpbmdfY2xhc3M/LigpO1xyXG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlX2RuZF9yb290X2ZsYWdzKCB0cnVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b25FbmQgICAgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5fcmVtb3ZlX2RyYWdnaW5nX2NsYXNzPy4oKTtcclxuXHRcdFx0XHRcdH0sIDUwICk7XHJcblx0XHRcdFx0XHR0aGlzLl90b2dnbGVfZG5kX3Jvb3RfZmxhZ3MoIGZhbHNlICk7XHJcblx0XHRcdFx0XHR0aGlzLl9jbGVhbnVwX2RyYWdfdWkoKTtcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0U29ydGFibGUuY3JlYXRlKFxyXG5cdFx0XHRcdGNvbnRhaW5lcixcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHQuLi5jb21tb24sXHJcblx0XHRcdFx0XHRncm91cCAgICAgICAgICAgICAgICAgIDogeyBuYW1lOiB0aGlzLm9wdHMuZ3JvdXBOYW1lLCBwdWxsOiBmYWxzZSwgcHV0OiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0c29ydCAgICAgICAgICAgICAgICAgICA6IHRydWUsXHJcblx0XHRcdFx0XHRkaXJlY3Rpb24gICAgICAgICAgICAgIDogJ3ZlcnRpY2FsJyxcclxuXHRcdFx0XHRcdGhhbmRsZSAgICAgICAgICAgICAgICAgOiBoYW5kbGVycy5oYW5kbGVfc2VsZWN0b3IgfHwgJy53cGJjX2JmYl9fZHJhZy1oYW5kbGUnLFxyXG5cdFx0XHRcdFx0ZHJhZ2dhYmxlICAgICAgICAgICAgICA6IGhhbmRsZXJzLmRyYWdnYWJsZV9zZWxlY3RvciB8fCAnLndwYmNfYmZiX19zb3J0YWJsZS1yb3cnLFxyXG5cdFx0XHRcdFx0ZmFsbGJhY2tDbGFzcyAgICAgICAgICA6ICd3cGJjX2JmYl9fc2ltcGxlX2xpc3RfZmFsbGJhY2snLFxyXG5cdFx0XHRcdFx0ZmlsdGVyICAgICAgICAgICAgICAgICA6IFtcclxuXHRcdFx0XHRcdFx0J2lucHV0JyxcclxuXHRcdFx0XHRcdFx0J3RleHRhcmVhJyxcclxuXHRcdFx0XHRcdFx0J3NlbGVjdCcsXHJcblx0XHRcdFx0XHRcdCdidXR0b24nLFxyXG5cdFx0XHRcdFx0XHQnYScsXHJcblx0XHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZScsXHJcblx0XHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZSAqJ1xyXG5cdFx0XHRcdFx0XS5qb2luKCAnLCcgKSxcclxuXHRcdFx0XHRcdHByZXZlbnRPbkZpbHRlciAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdGludmVydFN3YXAgICAgICAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdHN3YXBUaHJlc2hvbGQgICAgICAgICAgOiAwLjMwLFxyXG5cdFx0XHRcdFx0aW52ZXJ0ZWRTd2FwVGhyZXNob2xkICA6IDAuNjAsXHJcblx0XHRcdFx0XHRlbXB0eUluc2VydFRocmVzaG9sZCAgIDogOCxcclxuXHRcdFx0XHRcdGRyYWdvdmVyQnViYmxlICAgICAgICAgOiBmYWxzZSxcclxuXHRcdFx0XHRcdHNjcm9sbCAgICAgICAgICAgICAgICAgOiB0cnVlLFxyXG5cdFx0XHRcdFx0c2Nyb2xsU2Vuc2l0aXZpdHkgICAgICA6IDYwLFxyXG5cdFx0XHRcdFx0c2Nyb2xsU3BlZWQgICAgICAgICAgICA6IDE0LFxyXG5cdFx0XHRcdFx0b25VcGRhdGUgICAgICAgICAgICAgICA6IGhhbmRsZXJzLm9uVXBkYXRlIHx8IGZ1bmN0aW9uICgpIHt9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5hZGQoIGNvbnRhaW5lciApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSBTb3J0YWJsZSBpcyBhdHRhY2hlZCB0byBhIGNvbnRhaW5lciB3aXRoIHJvbGUgJ3BhbGV0dGUnIG9yICdjYW52YXMnLlxyXG5cdFx0ICpcclxuXHRcdCAqICAtLSBIYW5kbGUgc2VsZWN0b3JzOiBoYW5kbGU6ICAnLnNlY3Rpb24tZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1oYW5kbGUsIC53cGJjX2JmYl9fZHJhZy1hbnl3aGVyZSxcclxuXHRcdCAqIFtkYXRhLWRyYWdnYWJsZT1cInRydWVcIl0nXHJcblx0XHQgKiAgLS0gRHJhZ2dhYmxlIGdhdGU6IGRyYWdnYWJsZSBmaWVsZHMsIHNlY3Rpb25zLCBhbmQgdGhlIHRyYW5zaWVudCBtZWFzdXJlZCBzb3VyY2Ugc3BhY2VyLlxuXHRcdCAqICAtLSBGaWx0ZXIgKG92ZXJsYXktc2FmZSk6ICAgICBpZ25vcmUgZXZlcnl0aGluZyBpbiBvdmVybGF5IGV4Y2VwdCB0aGUgaGFuZGxlIC1cclxuXHRcdCAqICcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHNcclxuXHRcdCAqICo6bm90KC53cGJjX2JmYl9fZHJhZy1oYW5kbGUpOm5vdCguc2VjdGlvbi1kcmFnLWhhbmRsZSk6bm90KC53cGJjX2ljbl9kcmFnX2luZGljYXRvciknXHJcblx0XHQgKiAgLS0gTm8tZHJhZyB3cmFwcGVyOiAgICAgICAgICAgdXNlIC53cGJjX2JmYl9fbm8tZHJhZy16b25lIGluc2lkZSByZW5kZXJlcnMgZm9yIGlucHV0cy93aWRnZXRzLlxyXG5cdFx0ICogIC0tIEZvY3VzIGd1YXJkIChvcHRpb25hbCk6ICAgIGZsaXAgW2RhdGEtZHJhZ2dhYmxlXSBvbiBmb2N1c2luL2ZvY3Vzb3V0IHRvIHByZXZlbnQgYWNjaWRlbnRhbCBkcmFncyB3aGlsZVxyXG5cdFx0ICogdHlwaW5nLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFRoZSBlbGVtZW50IHRvIGVuaGFuY2Ugd2l0aCBTb3J0YWJsZS5cclxuXHRcdCAqIEBwYXJhbSB7J3BhbGV0dGUnfCdjYW52YXMnfSByb2xlIC0gQmVoYXZpb3IgcHJvZmlsZSB0byBhcHBseS5cclxuXHRcdCAqIEBwYXJhbSB7eyBvbkFkZD86IEZ1bmN0aW9uIH19IFtoYW5kbGVycz17fV0gLSBPcHRpb25hbCBoYW5kbGVycy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRlbnN1cmUoIGNvbnRhaW5lciwgcm9sZSwgaGFuZGxlcnMgPSB7fSApIHtcclxuXHRcdFx0aWYgKCAhIGNvbnRhaW5lciB8fCB0eXBlb2YgU29ydGFibGUgPT09ICd1bmRlZmluZWQnICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIFNvcnRhYmxlLmdldD8uKCBjb250YWluZXIgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHNvcnRhYmxlX2tpbmQgPSBoYW5kbGVycy5zb3J0YWJsZV9raW5kIHx8ICcnO1xyXG5cclxuXHRcdFx0aWYgKCBzb3J0YWJsZV9raW5kID09PSAnc2ltcGxlX2xpc3QnICkge1xyXG5cdFx0XHRcdHRoaXMuZW5zdXJlX3NpbXBsZV9saXN0KCBjb250YWluZXIsIGhhbmRsZXJzICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb21tb24gPSB7XHJcblx0XHRcdFx0YW5pbWF0aW9uICA6IHRoaXMub3B0cy5hbmltYXRpb24sXHJcblx0XHRcdFx0Z2hvc3RDbGFzcyA6IHRoaXMub3B0cy5naG9zdENsYXNzLFxyXG5cdFx0XHRcdGNob3NlbkNsYXNzOiB0aGlzLm9wdHMuY2hvc2VuQ2xhc3MsXHJcblx0XHRcdFx0ZHJhZ0NsYXNzICA6IHRoaXMub3B0cy5kcmFnQ2xhc3MsXHJcblx0XHRcdFx0Ly8gPT0gRWxlbWVudCB1bmRlciB0aGUgY3Vyc29yICA9PSBFbnN1cmUgd2UgZHJhZyBhIHJlYWwgRE9NIG1pcnJvciB5b3UgY2FuIHN0eWxlIHZpYSBDU1MgKGNyb3NzLWJyb3dzZXIpLlxyXG5cdFx0XHRcdGZvcmNlRmFsbGJhY2sgICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrT25Cb2R5ICAgOiB0cnVlLFxyXG5cdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlOiA4LFxyXG5cdFx0XHRcdHJlbW92ZUNsb25lT25IaWRlOiB0cnVlLFxuXHRcdFx0XHRvbkNob29zZTogKGV2dCkgPT4gdGhpcy5fcHJlcGFyZV9kcmFnX3N0YXRlKCBldnQgKSxcblx0XHRcdFx0b25TdGFydCA6IChldnQpID0+IHRoaXMuX3N0YXJ0X2RyYWcoIGV2dCApLFxuXHRcdFx0XHRvbkVuZCAgIDogKCkgPT4gdGhpcy5fZmluaXNoX2RyYWcoKSxcblx0XHRcdFx0b25Nb3ZlICA6IChldnQsIG9yaWdpbmFsX2V2ZW50KSA9PiB0aGlzLl9hbGxvd19jYW52YXNfbW92ZSggZXZ0LCBvcmlnaW5hbF9ldmVudCApXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKCByb2xlID09PSAncGFsZXR0ZScgKSB7XHJcblx0XHRcdFx0U29ydGFibGUuY3JlYXRlKCBjb250YWluZXIsIHtcclxuXHRcdFx0XHRcdC4uLmNvbW1vbixcclxuXHRcdFx0XHRcdGdyb3VwICAgOiB7IG5hbWU6IHRoaXMub3B0cy5ncm91cE5hbWUsIHB1bGw6ICdjbG9uZScsIHB1dDogZmFsc2UgfSxcclxuXHRcdFx0XHRcdHNvcnQgICAgOiBmYWxzZVxyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHR0aGlzLl9jb250YWluZXJzLmFkZCggY29udGFpbmVyICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyByb2xlID09PSAnY2FudmFzJy5cclxuXHRcdFx0U29ydGFibGUuY3JlYXRlKCBjb250YWluZXIsIHtcblx0XHRcdFx0Li4uY29tbW9uLFxuXHRcdFx0XHQvLyBTdGFibGUgaW5zZXJ0aW9uIGdlb21ldHJ5IGlzIHByZWZlcmFibGUgdG8gYW5pbWF0aW5nIGhpdC10ZXN0IHRhcmdldHMuXG5cdFx0XHRcdGFuaW1hdGlvbjogMCxcblx0XHRcdFx0Z3JvdXAgICAgOiB7XG5cdFx0XHRcdFx0bmFtZTogdGhpcy5vcHRzLmdyb3VwTmFtZSxcclxuXHRcdFx0XHRcdHB1bGw6IHRydWUsXHJcblx0XHRcdFx0XHRwdXQgOiAodG8sIGZyb20sIGRyYWdnZWRFbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZHJhZ2dlZEVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdCAgIGRyYWdnZWRFbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0gRG5EIEhhbmRsZXJzIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgIC8vIEdyYWIgYW55d2hlcmUgb24gZmllbGRzIHRoYXQgb3B0LWluIHdpdGggdGhlIGNsYXNzIG9yIGF0dHJpYnV0ZS4gIC0gU2VjdGlvbnMgc3RpbGwgcmVxdWlyZSB0aGVpciBkZWRpY2F0ZWQgaGFuZGxlLlxyXG5cdFx0XHRcdGhhbmRsZSAgIDogJy5zZWN0aW9uLWRyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctaGFuZGxlLCAud3BiY19iZmJfX2RyYWctYW55d2hlcmUsIFtkYXRhLWRyYWdnYWJsZT1cInRydWVcIl0nLFxyXG5cdFx0XHRcdC8vIFRoZSB0cmFuc2llbnQgc3BhY2VyIHBhcnRpY2lwYXRlcyBpbiBoaXQgdGVzdGluZyBidXQgbmV2ZXIgc2VyaWFsaXphdGlvbi5cblx0XHRcdFx0ZHJhZ2dhYmxlOiBbXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fZmllbGQ6bm90KFtkYXRhLWRyYWdnYWJsZT1cImZhbHNlXCJdKScsXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fc2VjdGlvbicsXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fZHJhZy1zb3VyY2Utc3BhY2VyJ1xuXHRcdFx0XHRdLmpvaW4oICcsICcgKSxcblx0XHRcdFx0Ly8gLS0tLS0tLS0tLSBGaWx0ZXJzIC0gTm8gRG5EIC0tLS0tLS0tLS0gICAgICAgICAgICAgICAgLy8gRGVjbGFyYXRpdmUg4oCcbm8tZHJhZyB6b25lc+KAnTogYW55dGhpbmcgaW5zaWRlIHRoZXNlIHdyYXBwZXJzIHdvbuKAmXQgc3RhcnQgYSBkcmFnLlxyXG5cdFx0XHRcdGZpbHRlcjogW1xyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fbm8tZHJhZy16b25lJyxcclxuXHRcdFx0XHRcdCcud3BiY19iZmJfX25vLWRyYWctem9uZSAqJyxcclxuXHRcdFx0XHRcdCcud3BiY19iZmJfX2NvbHVtbi1yZXNpemVyJywgIC8vIElnbm9yZSB0aGUgcmVzaXplciByYWlscyBkdXJpbmcgRG5EIChwcmV2ZW50cyBlZGdlIOKAnHNuYXDigJ0pLlxyXG5cdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIG92ZXJsYXkgdG9vbGJhciwgYmxvY2sgZXZlcnl0aGluZyBFWENFUFQgdGhlIGRyYWcgaGFuZGxlIChhbmQgaXRzIGljb24pLlxyXG5cdFx0XHRcdFx0Jy53cGJjX2JmYl9fb3ZlcmxheS1jb250cm9scyAqOm5vdCgud3BiY19iZmJfX2RyYWctaGFuZGxlKTpub3QoLnNlY3Rpb24tZHJhZy1oYW5kbGUpOm5vdCgud3BiY19pY25fZHJhZ19pbmRpY2F0b3IpJ1xyXG5cdFx0XHRcdF0uam9pbiggJywnICksXHJcblx0XHRcdFx0cHJldmVudE9uRmlsdGVyICA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Ly8gLS0tLS0tLS0tLSBhbnRpLWppdHRlciB0dW5pbmcgLS0tLS0tLS0tLVxyXG5cdFx0XHRcdGRpcmVjdGlvbiAgICAgICAgICAgIDogJ3ZlcnRpY2FsJywgICAgICAgICAgIC8vIGNvbHVtbnMgYXJlIHZlcnRpY2FsIGxpc3RzLlxyXG5cdFx0XHRcdGludmVydFN3YXAgICAgICAgICAgIDogdHJ1ZSwgICAgICAgICAgICAgICAgIC8vIHVzZSBzd2FwIG9uIGludmVydGVkIG92ZXJsYXAuXHJcblx0XHRcdFx0c3dhcFRocmVzaG9sZCAgICAgICAgOiAwLjY1LCAgICAgICAgICAgICAgICAgLy8gYmUgbGVzcyBlYWdlciB0byBzd2FwLlxyXG5cdFx0XHRcdGludmVydGVkU3dhcFRocmVzaG9sZDogMC44NSwgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGVlcGVyIG92ZXJsYXAgd2hlbiBpbnZlcnRlZC5cclxuXHRcdFx0XHRlbXB0eUluc2VydFRocmVzaG9sZCA6IDI0LCAgICAgICAgICAgICAgICAgICAvLyBkb27igJl0IGp1bXAgaW50byBlbXB0eSBjb250YWluZXJzIHRvbyBlYXJseS5cclxuXHRcdFx0XHRkcmFnb3ZlckJ1YmJsZSAgICAgICA6IGZhbHNlLCAgICAgICAgICAgICAgICAvLyBrZWVwIGRyYWdvdmVyIGxvY2FsLlxyXG5cdFx0XHRcdHNjcm9sbCAgICAgICAgICAgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRzY3JvbGxTZW5zaXRpdml0eSAgICA6IDQwLFxyXG5cdFx0XHRcdHNjcm9sbFNwZWVkICAgICAgICAgIDogMTAsXG5cdFx0XHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0XHQvLyBvbkFkZDogaGFuZGxlcnMub25BZGQgfHwgdGhpcy5idWlsZGVyLmhhbmRsZV9vbl9hZGQuYmluZCggdGhpcy5idWlsZGVyIClcclxuXHRcdFx0XHRvbkFkZDogKGV2dCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLl9vbl9hZGRfc2VjdGlvbiggZXZ0ICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrOiBvcmlnaW5hbCBoYW5kbGVyIGZvciBub3JtYWwgZmllbGRzLlxyXG5cdFx0XHRcdFx0KGhhbmRsZXJzLm9uQWRkIHx8IHRoaXMuYnVpbGRlci5oYW5kbGVfb25fYWRkLmJpbmQoIHRoaXMuYnVpbGRlciApKSggZXZ0ICk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvblVwZGF0ZTogKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TVFJVQ1RVUkVfQ0hBTkdFLCB7IHJlYXNvbjogJ3NvcnQtdXBkYXRlJyB9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR0aGlzLl9jb250YWluZXJzLmFkZCggY29udGFpbmVyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIYW5kbGUgYWRkaW5nL21vdmluZyBzZWN0aW9ucyB2aWEgU29ydGFibGUgb25BZGQuXHJcblx0XHQgKiBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZCAoaS5lLiwgaXQgd2FzIGEgc2VjdGlvbiksIGZhbHNlIHRvIGxldCB0aGUgZGVmYXVsdCBmaWVsZCBoYW5kbGVyIHJ1bi5cclxuXHRcdCAqXHJcblx0XHQgKiAtIFBhbGV0dGUgLT4gY2FudmFzOiByZW1vdmUgdGhlIHBsYWNlaG9sZGVyIGNsb25lIGFuZCBidWlsZCBhIGZyZXNoIHNlY3Rpb24gdmlhIGFkZF9zZWN0aW9uKClcclxuXHRcdCAqIC0gQ2FudmFzIC0+IGNhbnZhczoga2VlcCB0aGUgbW92ZWQgRE9NIChhbmQgaXRzIGNoaWxkcmVuKSwganVzdCByZS13aXJlIG92ZXJsYXlzL3NvcnRhYmxlcy9tZXRhZGF0YVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7U29ydGFibGUuU29ydGFibGVFdmVudH0gZXZ0XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0X29uX2FkZF9zZWN0aW9uKGV2dCkge1xyXG5cclxuXHRcdFx0Y29uc3QgaXRlbSA9IGV2dC5pdGVtO1xyXG5cdFx0XHRpZiAoICEgaXRlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElkZW50aWZ5IHNlY3Rpb25zIGJvdGggZnJvbSBwYWxldHRlIGl0ZW1zIChsaSBjbG9uZXMpIGFuZCByZWFsIGNhbnZhcyBub2Rlcy5cclxuXHRcdFx0Y29uc3QgZGF0YSAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGl0ZW0gKTtcclxuXHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCAoZGF0YT8udHlwZSB8fCBpdGVtLmRhdGFzZXQ/LnR5cGUpID09PSAnc2VjdGlvbic7XHJcblxyXG5cdFx0XHRpZiAoICEgaXNTZWN0aW9uICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZnJvbVBhbGV0dGUgPSB0aGlzLmJ1aWxkZXI/LnBhbGV0dGVfdWxzPy5pbmNsdWRlcz8uKCBldnQuZnJvbSApID09PSB0cnVlO1xyXG5cclxuXHRcdFx0aWYgKCAhIGZyb21QYWxldHRlICkge1xyXG5cdFx0XHRcdC8vIENhbnZhcyAtPiBjYW52YXMgbW92ZTogRE8gTk9UIHJlYnVpbGQvcmVtb3ZlOyBwcmVzZXJ2ZSBjaGlsZHJlbi5cclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhcj8uKCBpdGVtICk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgb3ZlcmxheSBleGlzdHNcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnM/LmluaXRfYWxsX25lc3RlZF9zb3J0YWJsZXM/LiggaXRlbSApOyAvLyBlbnN1cmUgaW5uZXIgc29ydGFibGVzXHJcblxyXG5cdFx0XHRcdC8vIEVuc3VyZSBtZXRhZGF0YSBwcmVzZW50L3VwZGF0ZWRcclxuXHRcdFx0XHRpdGVtLmRhdGFzZXQudHlwZSAgICA9ICdzZWN0aW9uJztcclxuXHRcdFx0XHRjb25zdCBjb2xzICAgICAgICAgICA9IGl0ZW0ucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93ID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDE7XHJcblx0XHRcdFx0aXRlbS5kYXRhc2V0LmNvbHVtbnMgPSBTdHJpbmcoIGNvbHMgKTtcclxuXHJcblx0XHRcdFx0Ly8gU2VsZWN0ICYgbm90aWZ5IHN1YnNjcmliZXJzIChsYXlvdXQvbWluIGd1YXJkcywgZXRjLilcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIGl0ZW0gKTtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzPy5lbWl0Py4oIENvcmUuV1BCQ19CRkJfRXZlbnRzLlNUUlVDVFVSRV9DSEFOR0UsIHsgZWw6IGl0ZW0sIHJlYXNvbjogJ3NlY3Rpb24tbW92ZScgfSApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci51c2FnZT8udXBkYXRlX3BhbGV0dGVfdWk/LigpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlOyAvLyBoYW5kbGVkLlxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBQYWxldHRlIC0+IGNhbnZhczogYnVpbGQgYSBicmFuZC1uZXcgc2VjdGlvbiB1c2luZyB0aGUgc2FtZSBwYXRoIGFzIHRoZSBkcm9wZG93bi9tZW51XHJcblx0XHRcdGNvbnN0IHRvICAgPSBldnQudG8/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fY29sdW1uLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKSB8fCBldnQudG87XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBwYXJzZUludCggZGF0YT8uY29sdW1ucyB8fCBpdGVtLmRhdGFzZXQuY29sdW1ucyB8fCAxLCAxMCApIHx8IDE7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgdGhlIHBhbGV0dGUgY2xvbmUgcGxhY2Vob2xkZXIuXHJcblx0XHRcdGl0ZW0ucGFyZW50Tm9kZSAmJiBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGl0ZW0gKTtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSB0aGUgcmVhbCBzZWN0aW9uLlxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIucGFnZXNfc2VjdGlvbnMuYWRkX3NlY3Rpb24oIHRvLCBjb2xzICk7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnQgYXQgdGhlIHByZWNpc2UgZHJvcCBpbmRleC5cclxuXHRcdFx0Y29uc3Qgc2VjdGlvbiA9IHRvLmxhc3RFbGVtZW50Q2hpbGQ7IC8vIGFkZF9zZWN0aW9uIGFwcGVuZHMgdG8gZW5kLlxyXG5cdFx0XHRpZiAoIGV2dC5uZXdJbmRleCAhPSBudWxsICYmIGV2dC5uZXdJbmRleCA8IHRvLmNoaWxkcmVuLmxlbmd0aCAtIDEgKSB7XHJcblx0XHRcdFx0Y29uc3QgcmVmID0gdG8uY2hpbGRyZW5bZXZ0Lm5ld0luZGV4XSB8fCBudWxsO1xyXG5cdFx0XHRcdHRvLmluc2VydEJlZm9yZSggc2VjdGlvbiwgcmVmICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmFsaXplOiBvdmVybGF5LCBzZWxlY3Rpb24sIGV2ZW50cywgdXNhZ2UgcmVmcmVzaC5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmFkZF9vdmVybGF5X3Rvb2xiYXI/Liggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuc2VsZWN0X2ZpZWxkPy4oIHNlY3Rpb24gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cz8uZW1pdD8uKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5GSUVMRF9BREQsIHtcclxuXHRcdFx0XHRlbCA6IHNlY3Rpb24sXHJcblx0XHRcdFx0aWQgOiBzZWN0aW9uLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0dWlkOiBzZWN0aW9uLmRhdGFzZXQudWlkXHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLnVzYWdlPy51cGRhdGVfcGFsZXR0ZV91aT8uKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlc3Ryb3kgYWxsIFNvcnRhYmxlIGluc3RhbmNlcyBjcmVhdGVkIGJ5IHRoaXMgbWFuYWdlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0ZGVzdHJveUFsbCgpIHtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5mb3JFYWNoKCAoIGVsICkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGluc3QgPSBTb3J0YWJsZS5nZXQ/LiggZWwgKTtcclxuXHRcdFx0XHRpZiAoIGluc3QgKSB7XHJcblx0XHRcdFx0XHRpbnN0LmRlc3Ryb3koKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0dGhpcy5fY29udGFpbmVycy5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNtYWxsIERPTSBjb250cmFjdCBhbmQgcmVuZGVyZXIgaGVscGVyXHJcblx0ICpcclxuXHQgKiBAdHlwZSB7UmVhZG9ubHk8e1xyXG5cdCAqICAgICAgICAgICAgICAgICAgU0VMRUNUT1JTOiB7cGFnZVBhbmVsOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIHZhbGlkRmllbGQ6IHN0cmluZywgc2VjdGlvbjogc3RyaW5nLCBjb2x1bW46XHJcblx0ICogICAgIHN0cmluZywgcm93OiBzdHJpbmcsIG92ZXJsYXk6IHN0cmluZ30sIENMQVNTRVM6IHtzZWxlY3RlZDogc3RyaW5nfSwgQVRUUjoge2lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaHRtbElkOlxyXG5cdCAqICAgICBzdHJpbmcsIHVzYWdlS2V5OiBzdHJpbmcsIHVpZDogc3RyaW5nfX1cclxuXHQgKiAgICAgICAgPn1cclxuXHQgKi9cclxuXHRDb3JlLldQQkNfQkZCX0RPTSA9IE9iamVjdC5mcmVlemUoIHtcclxuXHRcdFNFTEVDVE9SUzoge1xyXG5cdFx0XHRwYWdlUGFuZWwgOiAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldycsXHJcblx0XHRcdGZpZWxkICAgICA6ICcud3BiY19iZmJfX2ZpZWxkJyxcclxuXHRcdFx0dmFsaWRGaWVsZDogJy53cGJjX2JmYl9fZmllbGQ6bm90KC5pcy1pbnZhbGlkKScsXHJcblx0XHRcdHNlY3Rpb24gICA6ICcud3BiY19iZmJfX3NlY3Rpb24nLFxyXG5cdFx0XHRjb2x1bW4gICAgOiAnLndwYmNfYmZiX19jb2x1bW4nLFxyXG5cdFx0XHRyb3cgICAgICAgOiAnLndwYmNfYmZiX19yb3cnLFxyXG5cdFx0XHRvdmVybGF5ICAgOiAnLndwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJ1xyXG5cdFx0fSxcclxuXHRcdENMQVNTRVMgIDoge1xyXG5cdFx0XHRzZWxlY3RlZDogJ2lzLXNlbGVjdGVkJ1xyXG5cdFx0fSxcclxuXHRcdEFUVFIgICAgIDoge1xyXG5cdFx0XHRpZCAgICAgIDogJ2RhdGEtaWQnLFxyXG5cdFx0XHRuYW1lICAgIDogJ2RhdGEtbmFtZScsXHJcblx0XHRcdGh0bWxJZCAgOiAnZGF0YS1odG1sX2lkJyxcclxuXHRcdFx0dXNhZ2VLZXk6ICdkYXRhLXVzYWdlX2tleScsXHJcblx0XHRcdHVpZCAgICAgOiAnZGF0YS11aWQnXHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHRDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhbiBIVE1MIGVsZW1lbnQuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIEhUTUwgdGFnIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXNzX25hbWU9JyddIC0gT3B0aW9uYWwgQ1NTIGNsYXNzIG5hbWUuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gW2lubmVyX2h0bWw9JyddIC0gT3B0aW9uYWwgaW5uZXJIVE1MLlxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fSBDcmVhdGVkIGVsZW1lbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBjcmVhdGVfZWxlbWVudCggdGFnLCBjbGFzc19uYW1lID0gJycsIGlubmVyX2h0bWwgPSAnJyApIHtcclxuXHRcdFx0Y29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKTtcclxuXHRcdFx0aWYgKCBjbGFzc19uYW1lICkge1xyXG5cdFx0XHRcdGVsLmNsYXNzTmFtZSA9IGNsYXNzX25hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbm5lcl9odG1sICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGlubmVyX2h0bWw7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGVsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2V0IG11bHRpcGxlIGBkYXRhLSpgIGF0dHJpYnV0ZXMgb24gYSBnaXZlbiBlbGVtZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gVGFyZ2V0IGVsZW1lbnQuXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YV9vYmogLSBLZXktdmFsdWUgcGFpcnMgZm9yIGRhdGEgYXR0cmlidXRlcy5cclxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgc2V0X2RhdGFfYXR0cmlidXRlcyggZWwsIGRhdGFfb2JqICkge1xyXG5cdFx0XHRPYmplY3QuZW50cmllcyggZGF0YV9vYmogKS5mb3JFYWNoKCAoIFsga2V5LCB2YWwgXSApID0+IHtcclxuXHRcdFx0XHQvLyBQcmV2aW91c2x5OiAyMDI1LTA5LTAxIDE3OjA5OlxyXG5cdFx0XHRcdC8vIGNvbnN0IHZhbHVlID0gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KCB2YWwgKSA6IHZhbDtcclxuXHRcdFx0XHQvL05ldzpcclxuXHRcdFx0XHRsZXQgdmFsdWU7XHJcblx0XHRcdFx0aWYgKCB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KCB2YWwgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSwgdmFsdWUgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFsbCBgZGF0YS0qYCBhdHRyaWJ1dGVzIGZyb20gYW4gZWxlbWVudCBhbmQgcGFyc2UgSlNPTiB3aGVyZSBwb3NzaWJsZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIEVsZW1lbnQgdG8gZXh0cmFjdCBkYXRhIGZyb20uXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fSBQYXJzZWQga2V5LXZhbHVlIG1hcCBvZiBkYXRhIGF0dHJpYnV0ZXMuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcclxuXHJcblx0XHRcdGlmICggISBlbCB8fCAhIGVsLmF0dHJpYnV0ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LmZyb20oIGVsLmF0dHJpYnV0ZXMgKS5mb3JFYWNoKFxyXG5cdFx0XHRcdCggYXR0ciApID0+IHtcclxuXHRcdFx0XHRcdGlmICggYXR0ci5uYW1lLnN0YXJ0c1dpdGgoICdkYXRhLScgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYXR0ci5uYW1lLnJlcGxhY2UoIC9eZGF0YS0vLCAnJyApO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IEpTT04ucGFyc2UoIGF0dHIudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YVtrZXldID0gYXR0ci52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIE9ubHkgZGVmYXVsdCB0aGUgbGFiZWwgaWYgaXQncyB0cnVseSBhYnNlbnQgKHVuZGVmaW5lZC9udWxsKSwgbm90IHdoZW4gaXQncyBhbiBlbXB0eSBzdHJpbmcuXHJcblx0XHRcdGNvbnN0IGhhc0V4cGxpY2l0TGFiZWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKTtcclxuXHRcdFx0aWYgKCAhIGhhc0V4cGxpY2l0TGFiZWwgJiYgZGF0YS5pZCApIHtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGF0YS5pZC5jaGFyQXQoIDAgKS50b1VwcGVyQ2FzZSgpICsgZGF0YS5pZC5zbGljZSggMSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlbmRlciBhIHNpbXBsZSBsYWJlbCArIHR5cGUgcHJldmlldyAodXNlZCBmb3IgdW5rbm93biBvciBmYWxsYmFjayBmaWVsZHMpLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZF9kYXRhIC0gRmllbGQgZGF0YSBvYmplY3QuXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIGNvbnRlbnQuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZmllbGRfZGF0YSApIHtcclxuXHRcdFx0Ly8gTWFrZSB0aGUgZmFsbGJhY2sgcHJldmlldyByZXNwZWN0IGFuIGVtcHR5IGxhYmVsLlxyXG5cdFx0XHRjb25zdCBoYXNMYWJlbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ2xhYmVsJyApO1xyXG5cdFx0XHRjb25zdCBsYWJlbCAgICA9IGhhc0xhYmVsID8gU3RyaW5nKCBmaWVsZF9kYXRhLmxhYmVsICkgOiBTdHJpbmcoIGZpZWxkX2RhdGEuaWQgfHwgJyhubyBsYWJlbCknICk7XHJcblxyXG5cdFx0XHRjb25zdCB0eXBlICAgICAgICA9IFN0cmluZyggZmllbGRfZGF0YS50eXBlIHx8ICd1bmtub3duJyApO1xyXG5cdFx0XHRjb25zdCBpc19yZXF1aXJlZCA9IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IHRydWUgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJ3RydWUnIHx8IGZpZWxkX2RhdGEucmVxdWlyZWQgPT09IDEgfHwgZmllbGRfZGF0YS5yZXF1aXJlZCA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuTGFiZWwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTtcclxuXHRcdFx0c3BhbkxhYmVsLmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19maWVsZC1sYWJlbCc7XHJcblx0XHRcdHNwYW5MYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsICsgKGlzX3JlcXVpcmVkID8gJyAqJyA6ICcnKTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhbkxhYmVsICk7XHJcblxyXG5cdFx0XHRjb25zdCBzcGFuVHlwZSAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApO1xyXG5cdFx0XHRzcGFuVHlwZS5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fZmllbGQtdHlwZSc7XHJcblx0XHRcdHNwYW5UeXBlLnRleHRDb250ZW50ID0gdHlwZTtcclxuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZCggc3BhblR5cGUgKTtcclxuXHJcblx0XHRcdHJldHVybiB3cmFwcGVyLmlubmVySFRNTDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlYm91bmNlIGEgZnVuY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBGdW5jdGlvbiB0byBkZWJvdW5jZS5cclxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IC0gRGVsYXkgaW4gbXMuXHJcblx0XHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IERlYm91bmNlZCBmdW5jdGlvbi5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGRlYm91bmNlKCBmbiwgd2FpdCA9IDEyMCApIHtcclxuXHRcdFx0bGV0IHQgPSBudWxsO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVib3VuY2VkKCAuLi5hcmdzICkge1xyXG5cdFx0XHRcdGlmICggdCApIHtcclxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggdCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0ID0gc2V0VGltZW91dCggKCkgPT4gZm4uYXBwbHkoIHRoaXMsIGFyZ3MgKSwgd2FpdCApO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvLyBSZW5kZXJlciByZWdpc3RyeS4gQWxsb3dzIGxhdGUgcmVnaXN0cmF0aW9uIGFuZCBhdm9pZHMgdGlnaHQgY291cGxpbmcgdG8gYSBnbG9iYWwgbWFwLlxyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfUmVuZGVyZXJfUmVnaXN0cnkgPSAoZnVuY3Rpb24gKCkge1xyXG5cdFx0Y29uc3QgbWFwID0gbmV3IE1hcCgpO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVnaXN0ZXIoIHR5cGUsIENsYXNzUmVmICkge1xyXG5cdFx0XHRcdG1hcC5zZXQoIFN0cmluZyggdHlwZSApLCBDbGFzc1JlZiApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRnZXQoIHR5cGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1hcC5nZXQoIFN0cmluZyggdHlwZSApICk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSkoKTtcclxuXHJcbn0oIHdpbmRvdyApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWZpZWxkcy5qcyA9PSB8IDIwMjUtMDktMTAgMTU6NDdcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbihmdW5jdGlvbiAoIHcgKSB7XHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHQvLyBTaW5nbGUgZ2xvYmFsIG5hbWVzcGFjZSAoaWRlbXBvdGVudCAmIGxvYWQtb3JkZXIgc2FmZSkuXHJcblx0Y29uc3QgQ29yZSA9ICggdy5XUEJDX0JGQl9Db3JlID0gdy5XUEJDX0JGQl9Db3JlIHx8IHt9ICk7XHJcblx0Y29uc3QgVUkgICA9ICggQ29yZS5VSSA9IENvcmUuVUkgfHwge30gKTtcclxuXHJcblx0LyoqXHJcblx0ICogQmFzZSBjbGFzcyBmb3IgZmllbGQgcmVuZGVyZXJzIChzdGF0aWMtb25seSBjb250cmFjdCkuXHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqIENvbnRyYWN0IGV4cG9zZWQgdG8gdGhlIGJ1aWxkZXIgKHN0YXRpYyBtZXRob2RzIG9uIHRoZSBDTEFTUyBpdHNlbGYpOlxyXG5cdCAqICAgLSByZW5kZXIoZWwsIGRhdGEsIGN0eCkgICAgICAgICAgICAgIC8vIFJFUVVJUkVEXHJcblx0ICogICAtIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpICAgICAgLy8gT1BUSU9OQUwgKGRlZmF1bHQgcHJvdmlkZWQpXHJcblx0ICpcclxuXHQgKiBIZWxwZXJzIGZvciBzdWJjbGFzc2VzOlxyXG5cdCAqICAgLSBnZXRfZGVmYXVsdHMoKSAgICAgLT4gcGVyLWZpZWxkIGRlZmF1bHRzIChNVVNUIG92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHNldCB0eXBlL2xhYmVsKVxyXG5cdCAqICAgLSBub3JtYWxpemVfZGF0YShkKSAgLT4gc2hhbGxvdyBtZXJnZSB3aXRoIGRlZmF1bHRzXHJcblx0ICogICAtIGdldF90ZW1wbGF0ZShpZCkgICAtPiBwZXItaWQgY2FjaGVkIHdwLnRlbXBsYXRlIGNvbXBpbGVyXHJcblx0ICpcclxuXHQgKiBTdWJjbGFzcyB1c2FnZTpcclxuXHQgKiAgIGNsYXNzIFdQQkNfQkZCX0ZpZWxkX1RleHQgZXh0ZW5kcyBDb3JlLldQQkNfQkZCX0ZpZWxkX0Jhc2UgeyBzdGF0aWMgZ2V0X2RlZmF1bHRzKCl7IC4uLiB9IH1cclxuXHQgKiAgIFdQQkNfQkZCX0ZpZWxkX1RleHQudGVtcGxhdGVfaWQgPSAnd3BiYy1iZmItZmllbGQtdGV4dCc7XHJcblx0ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdCAqL1xyXG5cdENvcmUuV1BCQ19CRkJfRmllbGRfQmFzZSA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlZmF1bHQgZmllbGQgZGF0YSAoZ2VuZXJpYyBiYXNlbGluZSkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIE1VU1Qgb3ZlcnJpZGUgdG8gcHJvdmlkZSB7IHR5cGUsIGxhYmVsIH0gYXBwcm9wcmlhdGUgZm9yIHRoZSBmaWVsZC5cclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfZGVmYXVsdHMoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgOiAnZmllbGQnLFxyXG5cdFx0XHRcdGxhYmVsICAgICAgIDogJ0ZpZWxkJyxcclxuXHRcdFx0XHRuYW1lICAgICAgICA6ICdmaWVsZCcsXHJcblx0XHRcdFx0aHRtbF9pZCAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciA6ICcnLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgIDogZmFsc2UsXHJcblx0XHRcdFx0bWlubGVuZ3RoICAgOiAnJyxcclxuXHRcdFx0XHRtYXhsZW5ndGggICA6ICcnLFxyXG5cdFx0XHRcdHBhdHRlcm4gICAgIDogJycsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgOiAnJyxcclxuXHRcdFx0XHRoZWxwICAgICAgICA6ICcnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaGFsbG93LW1lcmdlIGluY29taW5nIGRhdGEgd2l0aCBkZWZhdWx0cy5cclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgbm9ybWFsaXplX2RhdGEoIGRhdGEgKSB7XHJcblx0XHRcdHZhciBkICAgICAgICA9IGRhdGEgfHwge307XHJcblx0XHRcdHZhciBkZWZhdWx0cyA9IHRoaXMuZ2V0X2RlZmF1bHRzKCk7XHJcblx0XHRcdHZhciBvdXQgICAgICA9IHt9O1xyXG5cdFx0XHR2YXIgaztcclxuXHJcblx0XHRcdGZvciAoIGsgaW4gZGVmYXVsdHMgKSB7XHJcblx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRlZmF1bHRzLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkZWZhdWx0c1trXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggayBpbiBkICkge1xyXG5cdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkLCBrICkgKSB7XHJcblx0XHRcdFx0XHRvdXRba10gPSBkW2tdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb3V0O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ29tcGlsZSBhbmQgY2FjaGUgYSB3cC50ZW1wbGF0ZSBieSBpZCAocGVyLWlkIGNhY2hlKS5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZV9pZFxyXG5cdFx0ICogQHJldHVybnMge0Z1bmN0aW9ufG51bGx9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZXRfdGVtcGxhdGUodGVtcGxhdGVfaWQpIHtcclxuXHJcblx0XHRcdC8vIEFjY2VwdCBlaXRoZXIgXCJ3cGJjLWJmYi1maWVsZC10ZXh0XCIgb3IgXCJ0bXBsLXdwYmMtYmZiLWZpZWxkLXRleHRcIi5cclxuXHRcdFx0aWYgKCAhIHRlbXBsYXRlX2lkIHx8ICEgd2luZG93LndwIHx8ICEgd3AudGVtcGxhdGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZG9tSWQgPSB0ZW1wbGF0ZV9pZC5zdGFydHNXaXRoKCAndG1wbC0nICkgPyB0ZW1wbGF0ZV9pZCA6ICgndG1wbC0nICsgdGVtcGxhdGVfaWQpO1xyXG5cdFx0XHRpZiAoICEgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGRvbUlkICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggISBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXAgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwID0ge307XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5vcm1hbGl6ZSBpZCBmb3IgdGhlIGNvbXBpbGVyICYgY2FjaGUuIC8vIHdwLnRlbXBsYXRlIGV4cGVjdHMgaWQgV0lUSE9VVCB0aGUgXCJ0bXBsLVwiIHByZWZpeCAhXHJcblx0XHRcdGNvbnN0IGtleSA9IHRlbXBsYXRlX2lkLnJlcGxhY2UoIC9edG1wbC0vLCAnJyApO1xyXG5cdFx0XHRpZiAoIENvcmUuX19iZmJfdHBsX2NhY2hlX21hcFtrZXldICkge1xyXG5cdFx0XHRcdHJldHVybiBDb3JlLl9fYmZiX3RwbF9jYWNoZV9tYXBba2V5XTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29tcGlsZXIgPSB3cC50ZW1wbGF0ZSgga2V5ICk7ICAgICAvLyA8LS0gbm9ybWFsaXplZCBpZCBoZXJlXHJcblx0XHRcdGlmICggY29tcGlsZXIgKSB7XHJcblx0XHRcdFx0Q29yZS5fX2JmYl90cGxfY2FjaGVfbWFwW2tleV0gPSBjb21waWxlcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGNvbXBpbGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUkVRVUlSRUQ6IHJlbmRlciBwcmV2aWV3IGludG8gaG9zdCBlbGVtZW50IChmdWxsIHJlZHJhdzsgaWRlbXBvdGVudCkuXHJcblx0XHQgKiBTdWJjbGFzc2VzIHNob3VsZCBzZXQgc3RhdGljIGB0ZW1wbGF0ZV9pZGAgdG8gYSB2YWxpZCB3cC50ZW1wbGF0ZSBpZC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gICAgICBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3ttb2RlPzpzdHJpbmcsYnVpbGRlcj86YW55LHRwbD86RnVuY3Rpb24sc2FuaXQ/OmFueX19IGN0eFxyXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyByZW5kZXIoIGVsLCBkYXRhLCBjdHggKSB7XHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBjb21waWxlID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0dmFyIGQgICAgICAgPSB0aGlzLm5vcm1hbGl6ZV9kYXRhKCBkYXRhICk7XHJcblxyXG5cdFx0XHR2YXIgcyA9IChjdHggJiYgY3R4LnNhbml0KSA/IGN0eC5zYW5pdCA6IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHQvLyBTYW5pdGl6ZSBjcml0aWNhbCBhdHRyaWJ1dGVzIGJlZm9yZSB0ZW1wbGF0aW5nLlxyXG5cdFx0XHRpZiAoIHMgKSB7XHJcblx0XHRcdFx0ZC5odG1sX2lkID0gZC5odG1sX2lkID8gcy5zYW5pdGl6ZV9odG1sX2lkKCBTdHJpbmcoIGQuaHRtbF9pZCApICkgOiAnJztcclxuXHRcdFx0XHRkLm5hbWUgICAgPSBzLnNhbml0aXplX2h0bWxfbmFtZSggU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICkgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkLmh0bWxfaWQgPSBkLmh0bWxfaWQgPyBTdHJpbmcoIGQuaHRtbF9pZCApIDogJyc7XHJcblx0XHRcdFx0ZC5uYW1lICAgID0gU3RyaW5nKCBkLm5hbWUgfHwgZC5pZCB8fCAnZmllbGQnICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZhbGwgYmFjayB0byBnZW5lcmljIHByZXZpZXcgaWYgdGVtcGxhdGUgbm90IGF2YWlsYWJsZS5cclxuXHRcdFx0aWYgKCBjb21waWxlICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9IGNvbXBpbGUoIGQgKTtcclxuXHJcblx0XHRcdFx0Ly8gQWZ0ZXIgcmVuZGVyLCBzZXQgYXR0cmlidXRlIHZhbHVlcyB2aWEgRE9NIHNvIHF1b3Rlcy9uZXdsaW5lcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXHJcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnICk7XHJcblx0XHRcdFx0aWYgKCBpbnB1dCApIHtcclxuXHRcdFx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgaW5wdXQuc2V0QXR0cmlidXRlKCAncGxhY2Vob2xkZXInLCBTdHJpbmcoIGQucGxhY2Vob2xkZXIgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBkLnRpdGxlICE9IG51bGwgKSBpbnB1dC5zZXRBdHRyaWJ1dGUoICd0aXRsZScsIFN0cmluZyggZC50aXRsZSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbC5pbm5lckhUTUwgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5yZW5kZXJfZmllbGRfaW5uZXJfaHRtbCggZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbC5kYXRhc2V0LnR5cGUgPSBkLnR5cGUgfHwgJ2ZpZWxkJztcclxuXHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIChkLmxhYmVsICE9IG51bGwgPyBTdHJpbmcoIGQubGFiZWwgKSA6ICcnKSApOyAvLyBhbGxvdyBcIlwiLlxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9QVElPTkFMIGhvb2sgZXhlY3V0ZWQgYWZ0ZXIgZmllbGQgaXMgZHJvcHBlZC9sb2FkZWQvcHJldmlldy5cclxuXHRcdCAqIERlZmF1bHQgZXh0ZW5kZWQ6XHJcblx0XHQgKiAtIE9uIGZpcnN0IGRyb3A6IHN0YW1wIGRlZmF1bHQgbGFiZWwgKGV4aXN0aW5nIGJlaGF2aW9yKSBhbmQgbWFyayBmaWVsZCBhcyBcImZyZXNoXCIgZm9yIGF1dG8tbmFtZS5cclxuXHRcdCAqIC0gT24gbG9hZDogbWFyayBhcyBsb2FkZWQgc28gbGF0ZXIgbGFiZWwgZWRpdHMgZG8gbm90IHJlbmFtZSB0aGUgc2F2ZWQgbmFtZS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHJcblx0XHRcdGNvbnN0IGNvbnRleHQgPSAobWV0YSAmJiBtZXRhLmNvbnRleHQpID8gU3RyaW5nKCBtZXRhLmNvbnRleHQgKSA6ICcnO1xyXG5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Ly8gTkVXOiBTZWVkIGRlZmF1bHQgXCJoZWxwXCIgKGFuZCBrZWVwIGl0IGluIFN0cnVjdHVyZSkgZm9yIGFsbCBmaWVsZCBwYWNrcyB0aGF0IGRlZmluZSBpdC5cclxuXHRcdFx0Ly8gVGhpcyBmaXhlcyB0aGUgbWlzbWF0Y2ggd2hlcmU6XHJcblx0XHRcdC8vICAgLSBVSSBzaG93cyBkZWZhdWx0IGhlbHAgdmlhIG5vcm1hbGl6ZV9kYXRhKCkgLyB0ZW1wbGF0ZXNcclxuXHRcdFx0Ly8gICAtIGJ1dCBnZXRfc3RydWN0dXJlKCkgLyBleHBvcnRlcnMgc2VlIGBoZWxwYCBhcyB1bmRlZmluZWQvZW1wdHkuXHJcblx0XHRcdC8vXHJcblx0XHRcdC8vIEJlaGF2aW9yOlxyXG5cdFx0XHQvLyAgIC0gUnVucyBPTkxZIG9uIGluaXRpYWwgZHJvcCAoY29udGV4dCA9PT0gJ2Ryb3AnKS5cclxuXHRcdFx0Ly8gICAtIElmIGdldF9kZWZhdWx0cygpIGV4cG9zZXMgYSBub24tZW1wdHkgXCJoZWxwXCIsIGFuZCBkYXRhLmhlbHAgaXNcclxuXHRcdFx0Ly8gICAgIG1pc3NpbmcgLyBudWxsIC8gZW1wdHkgc3RyaW5nIC0+IHdlIHBlcnNpc3QgdGhlIGRlZmF1bHQgaW50byBgZGF0YWBcclxuXHRcdFx0Ly8gICAgIGFuZCBub3RpZnkgU3RydWN0dXJlIHNvIGV4cG9ydHMgc2VlIGl0LlxyXG5cdFx0XHQvLyAgIC0gT24gXCJsb2FkXCIgd2UgZG8gbm90aGluZywgc28gZXhpc3RpbmcgZm9ybXMgd2hlcmUgdXNlciAqY2xlYXJlZCpcclxuXHRcdFx0Ly8gICAgIGhlbHAgd2lsbCBub3QgYmUgb3ZlcnJpZGRlbi5cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0aWYgKCBjb250ZXh0ID09PSAnZHJvcCcgJiYgZGF0YSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVmcyA9ICh0eXBlb2YgdGhpcy5nZXRfZGVmYXVsdHMgPT09ICdmdW5jdGlvbicpID8gdGhpcy5nZXRfZGVmYXVsdHMoKSA6IG51bGw7XHJcblx0XHRcdFx0XHRpZiAoIGRlZnMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBkZWZzLCAnaGVscCcgKSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudCAgICA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZGF0YSwgJ2hlbHAnICkgPyBkYXRhLmhlbHAgOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGhhc1ZhbHVlICAgPSAoY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnQgIT09IG51bGwgJiYgU3RyaW5nKCBjdXJyZW50ICkgIT09ICcnKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbCA9IGRlZnMuaGVscDtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggISBoYXNWYWx1ZSAmJiBkZWZhdWx0VmFsICE9IG51bGwgJiYgU3RyaW5nKCBkZWZhdWx0VmFsICkgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIDEpIHBlcnNpc3QgaW50byBkYXRhIG9iamVjdCAodXNlZCBieSBTdHJ1Y3R1cmUpLlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaGVscCA9IGRlZmF1bHRWYWw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIDIpIG1pcnJvciBpbnRvIGRhdGFzZXQgKGZvciBhbnkgRE9NLWJhc2VkIGNvbnN1bWVycykuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVsLmRhdGFzZXQuaGVscCA9IFN0cmluZyggZGVmYXVsdFZhbCApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIDMpIG5vdGlmeSBTdHJ1Y3R1cmUgLyBsaXN0ZW5lcnMgKGlmIGF2YWlsYWJsZSkuXHJcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZWwsICdoZWxwJywgZGVmYXVsdFZhbCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5kaXNwYXRjaEV2ZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSwgZGV0YWlsIDogeyBrZXk6ICdoZWxwJywgdmFsdWU6IGRlZmF1bHRWYWwgfSB9IClcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfaW5uZXIgKSB7fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRcdGlmICggY29udGV4dCA9PT0gJ2Ryb3AnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsICdsYWJlbCcgKSApIHtcclxuXHRcdFx0XHRjb25zdCBkZWZzID0gdGhpcy5nZXRfZGVmYXVsdHMoKTtcclxuXHRcdFx0XHRkYXRhLmxhYmVsID0gZGVmcy5sYWJlbCB8fCAnRmllbGQnO1xyXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCBkYXRhLmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gTWFyayBwcm92ZW5hbmNlIGZsYWdzLlxyXG5cdFx0XHRpZiAoIGNvbnRleHQgPT09ICdkcm9wJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMSc7ICAgLy8gY2FuIGF1dG8tbmFtZSBvbiBmaXJzdCBsYWJlbCBlZGl0LlxyXG5cdFx0XHRcdGVsLmRhdGFzZXQuYXV0b25hbWUgICA9ICcxJztcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lndhc19sb2FkZWQgPSAnMCc7XHJcblx0XHRcdFx0Ly8gU2VlZCBhIHByb3Zpc2lvbmFsIHVuaXF1ZSBuYW1lIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCBiID0gbWV0YT8uYnVpbGRlcjtcclxuXHRcdFx0XHRcdGlmICggYj8uaWQgJiYgKCFlbC5oYXNBdHRyaWJ1dGUoICdkYXRhLW5hbWUnICkgfHwgIWVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScgKSkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IFMgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlID0gUy5zYW5pdGl6ZV9odG1sX25hbWUoIGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaWQnICkgfHwgZGF0YT8uaWQgfHwgZGF0YT8udHlwZSB8fCAnZmllbGQnICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfbmFtZSggYmFzZSwgZWwgKTtcclxuXHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJywgdW5pcSApO1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID0gJzAnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQgPT09ICdsb2FkJyApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0LmZyZXNoICAgICAgPSAnMCc7XHJcblx0XHRcdFx0ZWwuZGF0YXNldC5hdXRvbmFtZSAgID0gJzAnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQud2FzX2xvYWRlZCA9ICcxJzsgICAvLyBuZXZlciByZW5hbWUgbmFtZXMgZm9yIGxvYWRlZCBmaWVsZHMuXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0gQXV0byBSZW5hbWUgXCJGcmVzaFwiIGZpZWxkLCAgb24gZW50ZXJpbmcgdGhlIG5ldyBMYWJlbCAtLS1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSBhIGNvbnNlcnZhdGl2ZSBmaWVsZCBcIm5hbWVcIiBmcm9tIGEgaHVtYW4gbGFiZWwuXHJcblx0XHQgKiBVc2VzIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFzIHNhbml0aXplX2h0bWxfbmFtZSAobGV0dGVycy9kaWdpdHMvXy0gYW5kIGxlYWRpbmcgbGV0dGVyKS5cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG5hbWVfZnJvbV9sYWJlbChsYWJlbCkge1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIFN0cmluZyggbGFiZWwgPz8gJycgKSApO1xyXG5cdFx0XHRyZXR1cm4gcy50b0xvd2VyQ2FzZSgpIHx8ICdmaWVsZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBdXRvLWZpbGwgZGF0YS1uYW1lIGZyb20gbGFiZWwgT05MWSBmb3IgZnJlc2hseSBkcm9wcGVkIGZpZWxkcyB0aGF0IHdlcmUgbm90IGVkaXRlZCB5ZXQuXHJcblx0XHQgKiAtIE5ldmVyIHJ1bnMgZm9yIHNlY3Rpb25zLlxyXG5cdFx0ICogLSBOZXZlciBydW5zIGZvciBsb2FkZWQvZXhpc3RpbmcgZmllbGRzLlxyXG5cdFx0ICogLSBTdG9wcyBhcyBzb29uIGFzIHVzZXIgZWRpdHMgdGhlIE5hbWUgbWFudWFsbHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgIC0gLndwYmNfYmZiX19maWVsZCBlbGVtZW50XHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxWYWxcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoYnVpbGRlciwgZWwsIGxhYmVsVmFsKSB7XHJcblx0XHRcdGlmICggIWJ1aWxkZXIgfHwgIWVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgYWxsb3dBdXRvID0gZWwuZGF0YXNldC5hdXRvbmFtZSA9PT0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgdXNlclRvdWNoZWQgPSBlbC5kYXRhc2V0Lm5hbWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblx0XHRcdGNvbnN0IGlzTG9hZGVkICAgID0gZWwuZGF0YXNldC53YXNfbG9hZGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRpZiAoICFhbGxvd0F1dG8gfHwgdXNlclRvdWNoZWQgfHwgaXNMb2FkZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBPbmx5IG92ZXJyaWRlIHBsYWNlaG9sZGVyLXkgbmFtZXNcclxuXHRcdFx0Y29uc3QgUyA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemU7XHJcblxyXG5cdFx0XHRjb25zdCBiYXNlICAgPSB0aGlzLm5hbWVfZnJvbV9sYWJlbCggbGFiZWxWYWwgKTtcclxuXHRcdFx0Y29uc3QgdW5pcXVlID0gYnVpbGRlci5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbmFtZScsIHVuaXF1ZSApO1xyXG5cclxuXHRcdFx0Y29uc3QgaW5zICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdGlmICggbmFtZUN0cmwgJiYgJ3ZhbHVlJyBpbiBuYW1lQ3RybCAmJiBuYW1lQ3RybC52YWx1ZSAhPT0gdW5pcXVlICkgbmFtZUN0cmwudmFsdWUgPSB1bmlxdWU7XHJcblx0XHR9XHJcblxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZWxlY3RfQmFzZSAoc2hhcmVkIGJhc2UgZm9yIHNlbGVjdC1saWtlIHBhY2tzKVxyXG5cdCAqXHJcblx0ICogQHR5cGUge0NvcmUuV1BCQ19CRkJfU2VsZWN0X0Jhc2V9XHJcblx0ICovXHJcblx0Q29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZSA9IGNsYXNzIGV4dGVuZHMgQ29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlIHtcclxuXHJcblx0XHRzdGF0aWMgdGVtcGxhdGVfaWQgICAgICAgICAgICA9IG51bGw7ICAgICAgICAgICAgICAgICAvLyBtYWluIHByZXZpZXcgdGVtcGxhdGUgaWRcclxuXHRcdHN0YXRpYyBvcHRpb25fcm93X3RlbXBsYXRlX2lkID0gJ3dwYmMtYmZiLWluc3BlY3Rvci1zZWxlY3Qtb3B0aW9uLXJvdyc7IC8vIHJvdyB0cGwgaWRcclxuXHRcdHN0YXRpYyBraW5kICAgICAgICAgICAgICAgICAgID0gJ3NlbGVjdCc7XHJcblx0XHRzdGF0aWMgX19yb290X3dpcmVkICAgICAgICAgICA9IGZhbHNlO1xyXG5cdFx0c3RhdGljIF9fcm9vdF9ub2RlICAgICAgICAgICAgPSBudWxsO1xyXG5cclxuXHRcdC8vIFNpbmdsZSBzb3VyY2Ugb2Ygc2VsZWN0b3JzIHVzZWQgYnkgdGhlIGluc3BlY3RvciBVSS5cclxuXHRcdHN0YXRpYyB1aSA9IHtcclxuXHRcdFx0bGlzdCAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19saXN0JyxcclxuXHRcdFx0aG9sZGVyIDogJy53cGJjX2JmYl9fb3B0aW9uc19zdGF0ZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJvcHRpb25zXCJdJyxcclxuXHRcdFx0cm93ICAgIDogJy53cGJjX2JmYl9fb3B0aW9uc19yb3cnLFxyXG5cdFx0XHRsYWJlbCAgOiAnLndwYmNfYmZiX19vcHQtbGFiZWwnLFxyXG5cdFx0XHR2YWx1ZSAgOiAnLndwYmNfYmZiX19vcHQtdmFsdWUnLFxyXG5cdFx0XHR0b2dnbGUgOiAnLndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyxcclxuXHRcdFx0YWRkX2J0bjogJy5qcy1hZGQtb3B0aW9uJyxcclxuXHJcblx0XHRcdGRyYWdfaGFuZGxlICAgICAgOiAnLndwYmNfYmZiX19kcmFnLWhhbmRsZScsXHJcblx0XHRcdG11bHRpcGxlX2NoayAgICAgOiAnLmpzLW9wdC1tdWx0aXBsZVtkYXRhLWluc3BlY3Rvci1rZXk9XCJtdWx0aXBsZVwiXScsXHJcblx0XHRcdGRlZmF1bHRfdGV4dCAgICAgOiAnLmpzLWRlZmF1bHQtdmFsdWVbZGF0YS1pbnNwZWN0b3Ita2V5PVwiZGVmYXVsdF92YWx1ZVwiXScsXHJcblx0XHRcdHBsYWNlaG9sZGVyX2lucHV0OiAnLmpzLXBsYWNlaG9sZGVyW2RhdGEtaW5zcGVjdG9yLWtleT1cInBsYWNlaG9sZGVyXCJdJyxcclxuXHRcdFx0cGxhY2Vob2xkZXJfbm90ZSA6ICcuanMtcGxhY2Vob2xkZXItbm90ZScsXHJcblx0XHRcdHNpemVfaW5wdXQgICAgICAgOiAnLmluc3BlY3Rvcl9faW5wdXRbZGF0YS1pbnNwZWN0b3Ita2V5PVwic2l6ZVwiXScsXHJcblxyXG5cdFx0XHQvLyBEcm9wZG93biBtZW51IGludGVncmF0aW9uLlxyXG5cdFx0XHRtZW51X3Jvb3QgIDogJy53cGJjX3VpX2VsX19kcm9wZG93bicsXHJcblx0XHRcdG1lbnVfdG9nZ2xlOiAnW2RhdGEtdG9nZ2xlPVwid3BiY19kcm9wZG93blwiXScsXHJcblx0XHRcdG1lbnVfYWN0aW9uOiAnLnVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uW2RhdGEtYWN0aW9uXScsXHJcblx0XHRcdC8vIFZhbHVlLWRpZmZlcnMgdG9nZ2xlLlxyXG5cdFx0XHR2YWx1ZV9kaWZmZXJzX2NoazogJy5qcy12YWx1ZS1kaWZmZXJzW2RhdGEtaW5zcGVjdG9yLWtleT1cInZhbHVlX2RpZmZlcnNcIl0nLFxyXG5cdFx0fTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIG9wdGlvbiB2YWx1ZSBmcm9tIGxhYmVsLlxyXG5cdFx0ICogLSBJZiBgZGlmZmVycyA9PT0gdHJ1ZWAgLT4gZ2VuZXJhdGUgdG9rZW4gKHNsdWctbGlrZSBtYWNoaW5lIHZhbHVlKS5cclxuXHRcdCAqIC0gSWYgYGRpZmZlcnMgPT09IGZhbHNlYCAtPiBrZWVwIGh1bWFuIHRleHQ7IGVzY2FwZSBvbmx5IGRhbmdlcm91cyBjaGFycy5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxyXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBkaWZmZXJzXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgYnVpbGRfdmFsdWVfZnJvbV9sYWJlbChsYWJlbCwgZGlmZmVycykge1xyXG5cdFx0XHRjb25zdCBTID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0aWYgKCBkaWZmZXJzICkge1xyXG5cdFx0XHRcdHJldHVybiAoUyAmJiB0eXBlb2YgUy50b190b2tlbiA9PT0gJ2Z1bmN0aW9uJylcclxuXHRcdFx0XHRcdD8gUy50b190b2tlbiggU3RyaW5nKCBsYWJlbCB8fCAnJyApIClcclxuXHRcdFx0XHRcdDogU3RyaW5nKCBsYWJlbCB8fCAnJyApLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIC9cXHMrL2csICdfJyApLnJlcGxhY2UoIC9bXlxcdy1dL2csICcnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IGtlZXAgaHVtYW4gdGV4dDsgdGVtcGxhdGUgd2lsbCBlc2NhcGUgc2FmZWx5LlxyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBsYWJlbCA9PSBudWxsID8gJycgOiBsYWJlbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSXMgdGhlIOKAnHZhbHVlIGRpZmZlcnMgZnJvbSBsYWJlbOKAnSB0b2dnbGUgZW5hYmxlZD9cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZV9kaWZmZXJzX2NoayApO1xyXG5cdFx0XHRyZXR1cm4gISEoY2hrICYmIGNoay5jaGVja2VkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEVuc3VyZSB2aXNpYmlsaXR5L2VuYWJsZWQgc3RhdGUgb2YgVmFsdWUgaW5wdXRzIGJhc2VkIG9uIHRoZSB0b2dnbGUuXHJcblx0XHQgKiBXaGVuIGRpc2FibGVkIC0+IGhpZGUgVmFsdWUgaW5wdXRzIGFuZCBrZWVwIHRoZW0gbWlycm9yZWQgZnJvbSBMYWJlbC5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhbmVsXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCByb3dzICAgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICkgfHwgW107XHJcblxyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IHIgICAgICA9IHJvd3NbaV07XHJcblx0XHRcdFx0Y29uc3QgbGJsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmxhYmVsICk7XHJcblx0XHRcdFx0Y29uc3QgdmFsX2luID0gci5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdFx0aWYgKCAhdmFsX2luICkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICggZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdC8vIFJlLWVuYWJsZSAmIHNob3cgdmFsdWUgaW5wdXRcclxuXHRcdFx0XHRcdHZhbF9pbi5yZW1vdmVBdHRyaWJ1dGUoICdkaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRcdHZhbF9pbi5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIGNhY2hlZCBjdXN0b20gdmFsdWUgYW5kIHRoZSByb3cgd2Fzbid0IGVkaXRlZCB3aGlsZSBPRkYsIHJlc3RvcmUgaXRcclxuXHRcdFx0XHRcdGNvbnN0IGhhc0NhY2hlICAgPSAhIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZTtcclxuXHRcdFx0XHRcdGNvbnN0IHVzZXJFZGl0ZWQgPSByLmRhdGFzZXQudmFsdWVfdXNlcl90b3VjaGVkID09PSAnMSc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBoYXNDYWNoZSAmJiAhdXNlckVkaXRlZCApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWhhc0NhY2hlICkge1xyXG5cdFx0XHRcdFx0XHQvLyBObyBjYWNoZTogaWYgdmFsdWUgaXMganVzdCBhIG1pcnJvcmVkIGxhYmVsLCBvZmZlciBhIHRva2VuaXplZCBkZWZhdWx0XHJcblx0XHRcdFx0XHRcdGNvbnN0IGxibCAgICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG1pcnJvcmVkID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBsYmwsIC8qZGlmZmVycz0qL2ZhbHNlICk7XHJcblx0XHRcdFx0XHRcdGlmICggdmFsX2luLnZhbHVlID09PSBtaXJyb3JlZCApIHtcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIE9OIC0+IE9GRjogY2FjaGUgb25jZSwgdGhlbiBtaXJyb3JcclxuXHRcdFx0XHRcdGlmICggIXZhbF9pbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSApIHtcclxuXHRcdFx0XHRcdFx0dmFsX2luLmRhdGFzZXQuY2FjaGVkX3ZhbHVlID0gdmFsX2luLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgbGJsICAgID0gbGJsX2luID8gbGJsX2luLnZhbHVlIDogJyc7XHJcblx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibCwgLypkaWZmZXJzPSovZmFsc2UgKTtcclxuXHJcblx0XHRcdFx0XHR2YWxfaW4uc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHR2YWxfaW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdC8vIE5PVEU6IGRvIE5PVCBtYXJrIGFzIHVzZXJfdG91Y2hlZCBoZXJlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUmV0dXJuIHdoZXRoZXIgdGhpcyByb3figJlzIHZhbHVlIGhhcyBiZWVuIGVkaXRlZCBieSB1c2VyLlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93XHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGlzX3Jvd192YWx1ZV91c2VyX3RvdWNoZWQocm93KSB7XHJcblx0XHRcdHJldHVybiByb3c/LmRhdGFzZXQ/LnZhbHVlX3VzZXJfdG91Y2hlZCA9PT0gJzEnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogTWFyayB0aGlzIHJvd+KAmXMgdmFsdWUgYXMgZWRpdGVkIGJ5IHVzZXIuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIG1hcmtfcm93X3ZhbHVlX3VzZXJfdG91Y2hlZChyb3cpIHtcclxuXHRcdFx0aWYgKCByb3cgKSByb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMSc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBJbml0aWFsaXplIOKAnGZyZXNobmVzc+KAnSBmbGFncyBvbiBhIHJvdyAodmFsdWUgdW50b3VjaGVkKS5cclxuXHRcdCAqIENhbGwgb24gY3JlYXRpb24vYXBwZW5kIG9mIHJvd3MuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb3dcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGluaXRfcm93X2ZyZXNoX2ZsYWdzKHJvdykge1xyXG5cdFx0XHRpZiAoIHJvdyApIHtcclxuXHRcdFx0XHRpZiAoICFyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgKSB7XHJcblx0XHRcdFx0XHRyb3cuZGF0YXNldC52YWx1ZV91c2VyX3RvdWNoZWQgPSAnMCc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkZWZhdWx0cyAocGFja3MgY2FuIG92ZXJyaWRlKSAtLS0tXHJcblx0XHRzdGF0aWMgZ2V0X2RlZmF1bHRzKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICA6IHRoaXMua2luZCxcclxuXHRcdFx0XHRsYWJlbCAgICAgICAgOiAnU2VsZWN0JyxcclxuXHRcdFx0XHRuYW1lICAgICAgICAgOiAnJyxcclxuXHRcdFx0XHRodG1sX2lkICAgICAgOiAnJyxcclxuXHRcdFx0XHRwbGFjZWhvbGRlciAgOiAnLS0tIFNlbGVjdCAtLS0nLFxyXG5cdFx0XHRcdHJlcXVpcmVkICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdG11bHRpcGxlICAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdHNpemUgICAgICAgICA6IG51bGwsXHJcblx0XHRcdFx0Y3NzY2xhc3MgICAgIDogJycsXHJcblx0XHRcdFx0aGVscCAgICAgICAgIDogJycsXHJcblx0XHRcdFx0ZGVmYXVsdF92YWx1ZTogJycsXHJcblx0XHRcdFx0b3B0aW9ucyAgICAgIDogW1xyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAxJywgdmFsdWU6ICdPcHRpb24gMScsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAyJywgdmFsdWU6ICdPcHRpb24gMicsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiAzJywgdmFsdWU6ICdPcHRpb24gMycsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRcdFx0eyBsYWJlbDogJ09wdGlvbiA0JywgdmFsdWU6ICdPcHRpb24gNCcsIHNlbGVjdGVkOiBmYWxzZSB9XHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRtaW5fd2lkdGggICAgOiAnMjQwcHgnXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBwcmV2aWV3IHJlbmRlciAoaWRlbXBvdGVudCkgLS0tLVxyXG5cdFx0c3RhdGljIHJlbmRlcihlbCwgZGF0YSwgY3R4KSB7XHJcblx0XHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgZCA9IHRoaXMubm9ybWFsaXplX2RhdGEoIGRhdGEgKTtcclxuXHJcblx0XHRcdGlmICggZC5taW5fd2lkdGggIT0gbnVsbCApIHtcclxuXHRcdFx0XHRlbC5kYXRhc2V0Lm1pbl93aWR0aCA9IFN0cmluZyggZC5taW5fd2lkdGggKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtY29sLW1pbicsIFN0cmluZyggZC5taW5fd2lkdGggKSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGQuaHRtbF9pZCAhPSBudWxsICkgZWwuZGF0YXNldC5odG1sX2lkID0gU3RyaW5nKCBkLmh0bWxfaWQgfHwgJycgKTtcclxuXHRcdFx0aWYgKCBkLmNzc2NsYXNzICE9IG51bGwgKSBlbC5kYXRhc2V0LmNzc2NsYXNzID0gU3RyaW5nKCBkLmNzc2NsYXNzIHx8ICcnICk7XHJcblx0XHRcdGlmICggZC5wbGFjZWhvbGRlciAhPSBudWxsICkgZWwuZGF0YXNldC5wbGFjZWhvbGRlciA9IFN0cmluZyggZC5wbGFjZWhvbGRlciB8fCAnJyApO1xyXG5cclxuXHRcdFx0Y29uc3QgdHBsID0gdGhpcy5nZXRfdGVtcGxhdGUoIHRoaXMudGVtcGxhdGVfaWQgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgdHBsICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+VGVtcGxhdGUgbm90IGZvdW5kOiAnICsgdGhpcy50ZW1wbGF0ZV9pZCArICcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuaW5uZXJIVE1MID0gdHBsKCBkICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdHdpbmRvdy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnU2VsZWN0X0Jhc2UucmVuZGVyJywgZSApO1xyXG5cdFx0XHRcdGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Vycm9yXCIgcm9sZT1cImFsZXJ0XCI+RXJyb3IgcmVuZGVyaW5nIGZpZWxkIHByZXZpZXcuPC9kaXY+JztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsLmRhdGFzZXQudHlwZSA9IGQudHlwZSB8fCB0aGlzLmtpbmQ7XHJcblx0XHRcdGVsLnNldEF0dHJpYnV0ZSggJ2RhdGEtbGFiZWwnLCAoZC5sYWJlbCAhPSBudWxsID8gU3RyaW5nKCBkLmxhYmVsICkgOiAnJykgKTtcclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Q29yZS5VST8uV1BCQ19CRkJfT3ZlcmxheT8uZW5zdXJlPy4oIGN0eD8uYnVpbGRlciwgZWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggIWVsLmRhdGFzZXQub3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KCBkLm9wdGlvbnMgKSAmJiBkLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRlbC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggZC5vcHRpb25zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBkcm9wIHNlZWRpbmcgKG9wdGlvbnMgKyBwbGFjZWhvbGRlcikgLS0tLVxyXG5cdFx0c3RhdGljIG9uX2ZpZWxkX2Ryb3AoZGF0YSwgZWwsIG1ldGEpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRzdXBlci5vbl9maWVsZF9kcm9wPy4oIGRhdGEsIGVsLCBtZXRhICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBpc19kcm9wID0gKG1ldGEgJiYgbWV0YS5jb250ZXh0ID09PSAnZHJvcCcpO1xyXG5cclxuXHRcdFx0aWYgKCBpc19kcm9wICkge1xyXG5cdFx0XHRcdGlmICggIUFycmF5LmlzQXJyYXkoIGRhdGEub3B0aW9ucyApIHx8ICFkYXRhLm9wdGlvbnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgb3B0cyAgID0gKHRoaXMuZ2V0X2RlZmF1bHRzKCkub3B0aW9ucyB8fCBbXSkubWFwKCAobykgPT4gKHtcclxuXHRcdFx0XHRcdFx0bGFiZWwgICA6IG8ubGFiZWwsXHJcblx0XHRcdFx0XHRcdHZhbHVlICAgOiBvLnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogISFvLnNlbGVjdGVkXHJcblx0XHRcdFx0XHR9KSApO1xyXG5cdFx0XHRcdFx0ZGF0YS5vcHRpb25zID0gb3B0cztcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFzZXQub3B0aW9ucyA9IEpTT04uc3RyaW5naWZ5KCBvcHRzICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdvcHRpb25zJyxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvcHRzXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0XHRcdFx0Q29yZS5TdHJ1Y3R1cmU/LnVwZGF0ZV9maWVsZF9wcm9wPy4oIGVsLCAnb3B0aW9ucycsIG9wdHMgKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgcGggPSAoZGF0YS5wbGFjZWhvbGRlciA/PyAnJykudG9TdHJpbmcoKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAhcGggKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkZmx0ICAgICAgID0gdGhpcy5nZXRfZGVmYXVsdHMoKS5wbGFjZWhvbGRlciB8fCAnLS0tIFNlbGVjdCAtLS0nO1xyXG5cdFx0XHRcdFx0ZGF0YS5wbGFjZWhvbGRlciA9IGRmbHQ7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRlbC5kYXRhc2V0LnBsYWNlaG9sZGVyID0gU3RyaW5nKCBkZmx0ICk7XHJcblx0XHRcdFx0XHRcdGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHsgYnViYmxlczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5ICA6ICdwbGFjZWhvbGRlcicsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZGZsdFxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSApICk7XHJcblx0XHRcdFx0XHRcdENvcmUuU3RydWN0dXJlPy51cGRhdGVfZmllbGRfcHJvcD8uKCBlbCwgJ3BsYWNlaG9sZGVyJywgZGZsdCApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblx0XHQvLyBJbnNwZWN0b3IgaGVscGVycyAoc25ha2VfY2FzZSlcclxuXHRcdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0c3RhdGljIGdldF9wYW5lbF9yb290KGVsKSB7XHJcblx0XHRcdHJldHVybiBlbD8uY2xvc2VzdD8uKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApIHx8IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGdldF9saXN0KHBhbmVsKSB7XHJcblx0XHRcdHJldHVybiBwYW5lbCA/IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGlzdCApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgZ2V0X2hvbGRlcihwYW5lbCkge1xyXG5cdFx0XHRyZXR1cm4gcGFuZWwgPyBwYW5lbC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLmhvbGRlciApIDogbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgbWFrZV91aWQoKSB7XHJcblx0XHRcdHJldHVybiAnd3BiY19pbnNfYXV0b19vcHRfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDEwICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGFwcGVuZF9yb3cocGFuZWwsIGRhdGEpIHtcclxuXHRcdFx0Y29uc3QgbGlzdCA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBpZHggID0gbGlzdC5jaGlsZHJlbi5sZW5ndGg7XHJcblx0XHRcdGNvbnN0IHJvd2QgPSBPYmplY3QuYXNzaWduKCB7IGxhYmVsOiAnJywgdmFsdWU6ICcnLCBzZWxlY3RlZDogZmFsc2UsIGluZGV4OiBpZHggfSwgKGRhdGEgfHwge30pICk7XHJcblx0XHRcdGlmICggIXJvd2QudWlkICkgcm93ZC51aWQgPSB0aGlzLm1ha2VfdWlkKCk7XHJcblxyXG5cdFx0XHRjb25zdCB0cGxfaWQgPSB0aGlzLm9wdGlvbl9yb3dfdGVtcGxhdGVfaWQ7XHJcblx0XHRcdGNvbnN0IHRwbCAgICA9ICh3aW5kb3cud3AgJiYgd3AudGVtcGxhdGUpID8gd3AudGVtcGxhdGUoIHRwbF9pZCApIDogbnVsbDtcclxuXHRcdFx0Y29uc3QgaHRtbCAgID0gdHBsID8gdHBsKCByb3dkICkgOiBudWxsO1xyXG5cclxuXHRcdFx0Ly8gSW4gYXBwZW5kX3JvdygpIC0+IGZhbGxiYWNrIEhUTUwuXHJcblx0XHRcdGNvbnN0IHdyYXAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0d3JhcC5pbm5lckhUTUwgPSBodG1sIHx8IChcclxuXHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHRpb25zX3Jvd1wiIGRhdGEtaW5kZXg9XCInICsgKHJvd2QuaW5kZXggfHwgMCkgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2JmYl9fZHJhZy1oYW5kbGVcIj48c3BhbiBjbGFzcz1cIndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yXCI+PC9zcGFuPjwvc3Bhbj4nICtcclxuXHRcdFx0XHRcdCc8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtbGFiZWxcIiBwbGFjZWhvbGRlcj1cIkxhYmVsXCIgdmFsdWU9XCInICsgKHJvd2QubGFiZWwgfHwgJycpICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwid3BiY19iZmJfX29wdC12YWx1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiB2YWx1ZT1cIicgKyAocm93ZC52YWx1ZSB8fCAnJykgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWRcIj4nICtcclxuXHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIndwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrIGluc3BlY3Rvcl9faW5wdXRcIiBpZD1cIicgKyByb3dkLnVpZCArICdcIiByb2xlPVwic3dpdGNoXCIgJyArIChyb3dkLnNlbGVjdGVkID8gJ2NoZWNrZWQgYXJpYS1jaGVja2VkPVwidHJ1ZVwiJyA6ICdhcmlhLWNoZWNrZWQ9XCJmYWxzZVwiJykgKyAnPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvbl9yYWRpb1wiIGZvcj1cIicgKyByb3dkLnVpZCArICdcIj48L2xhYmVsPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfbGFiZWxcIiBmb3I9XCInICsgcm93ZC51aWQgKyAnXCI+RGVmYXVsdDwvbGFiZWw+JyArXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHRcdC8vIDMtZG90IGRyb3Bkb3duICh1c2VzIGV4aXN0aW5nIHBsdWdpbiBkcm9wZG93biBKUykuXHJcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIndwYmNfdWlfZWwgd3BiY191aV9lbF9jb250YWluZXIgd3BiY191aV9lbF9fZHJvcGRvd25cIj4nICtcclxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBkYXRhLXRvZ2dsZT1cIndwYmNfZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfdG9nZ2xlXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fbW9yZV92ZXJ0XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHQnPHVsIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudVwiIHJvbGU9XCJtZW51XCIgc3R5bGU9XCJyaWdodDowcHg7IGxlZnQ6YXV0bztcIj4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzxhIGNsYXNzPVwidWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25cIiBkYXRhLWFjdGlvbj1cImFkZF9hZnRlclwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0FkZCBOZXcnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fYWRkX2NpcmNsZVwiPjwvaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8L2E+JyArXHJcblx0XHRcdFx0XHRcdFx0JzwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJkdXBsaWNhdGVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdEdXBsaWNhdGUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fY29udGVudF9jb3B5XCI+PC9pPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0JzwvYT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPC9saT4nICtcclxuXHRcdFx0XHRcdFx0XHQnPGxpIGNsYXNzPVwiZGl2aWRlclwiPjwvbGk+JyArXHJcblx0XHRcdFx0XHRcdFx0JzxsaT4nICtcclxuXHRcdFx0XHRcdFx0XHRcdCc8YSBjbGFzcz1cInVsX2Ryb3Bkb3duX21lbnVfbGlfYWN0aW9uXCIgZGF0YS1hY3Rpb249XCJyZW1vdmVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdSZW1vdmUnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwibWVudV9pY29uIGljb24tMXggd3BiY19pY25fZGVsZXRlX291dGxpbmVcIj48L2k+JyArXHJcblx0XHRcdFx0XHRcdFx0XHQnPC9hPicgK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2xpPicgK1xyXG5cdFx0XHRcdFx0XHQnPC91bD4nICtcclxuXHRcdFx0XHRcdCc8L2Rpdj4nICtcclxuXHRcdFx0XHQnPC9kaXY+J1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Y29uc3Qgbm9kZSA9IHdyYXAuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdCBpZiAoISBub2RlKSB7XHJcblx0XHRcdFx0IHJldHVybjtcclxuXHRcdFx0IH1cclxuXHRcdFx0Ly8gcHJlLWhpZGUgVmFsdWUgaW5wdXQgaWYgdG9nZ2xlIGlzIE9GRiAqKmJlZm9yZSoqIGFwcGVuZGluZy5cclxuXHRcdFx0Y29uc3QgZGlmZmVycyA9IHRoaXMuaXNfdmFsdWVfZGlmZmVyc19lbmFibGVkKCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCB2YWxJbiAgID0gbm9kZS5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnZhbHVlICk7XHJcblx0XHRcdGNvbnN0IGxibEluICAgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkubGFiZWwgKTtcclxuXHJcblx0XHRcdGlmICggIWRpZmZlcnMgJiYgdmFsSW4gKSB7XHJcblx0XHRcdFx0aWYgKCAhdmFsSW4uZGF0YXNldC5jYWNoZWRfdmFsdWUgKSB7XHJcblx0XHRcdFx0XHR2YWxJbi5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IHZhbEluLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIGxibEluICkgdmFsSW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGxibEluLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdHZhbEluLnNldEF0dHJpYnV0ZSggJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyApO1xyXG5cdFx0XHRcdHZhbEluLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHR0aGlzLmluaXRfcm93X2ZyZXNoX2ZsYWdzKCBub2RlICk7XHJcblx0XHRcdGxpc3QuYXBwZW5kQ2hpbGQoIG5vZGUgKTtcclxuXHJcblx0XHRcdC8vIEtlZXAgeW91ciBleGlzdGluZyBwb3N0LWFwcGVuZCBzeW5jIGFzIGEgc2FmZXR5IG5ldFxyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGNsb3NlX2Ryb3Bkb3duKGFuY2hvcl9lbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciByb290ID0gYW5jaG9yX2VsPy5jbG9zZXN0Py4oIHRoaXMudWkubWVudV9yb290ICk7XHJcblx0XHRcdFx0aWYgKCByb290ICkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgeW91ciBkcm9wZG93biB0b2dnbGVyIHRvZ2dsZXMgYSBjbGFzcyBsaWtlICdvcGVuJywgY2xvc2UgaXQuXHJcblx0XHRcdFx0XHRyb290LmNsYXNzTGlzdC5yZW1vdmUoICdvcGVuJyApO1xyXG5cdFx0XHRcdFx0Ly8gT3IgaWYgaXQgcmVsaWVzIG9uIGFyaWEtZXhwYW5kZWQgb24gdGhlIHRvZ2dsZS5cclxuXHRcdFx0XHRcdHZhciB0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLm1lbnVfdG9nZ2xlICk7XHJcblx0XHRcdFx0XHRpZiAoIHQgKSB7XHJcblx0XHRcdFx0XHRcdHQuc2V0QXR0cmlidXRlKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkgeyB9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGluc2VydF9hZnRlcihuZXdfbm9kZSwgcmVmX25vZGUpIHtcclxuXHRcdFx0aWYgKCByZWZfbm9kZT8ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRpZiAoIHJlZl9ub2RlLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRcdFx0cmVmX25vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5ld19ub2RlLCByZWZfbm9kZS5uZXh0U2libGluZyApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWZfbm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKCBuZXdfbm9kZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBjb21taXRfb3B0aW9ucyhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBsaXN0ICAgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRjb25zdCBob2xkZXIgPSB0aGlzLmdldF9ob2xkZXIoIHBhbmVsICk7XHJcblx0XHRcdGlmICggIWxpc3QgfHwgIWhvbGRlciApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGRpZmZlcnMgPSB0aGlzLmlzX3ZhbHVlX2RpZmZlcnNfZW5hYmxlZCggcGFuZWwgKTtcclxuXHJcblx0XHRcdGNvbnN0IHJvd3MgICAgPSBsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkucm93ICk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRjb25zdCByICAgICAgPSByb3dzW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxibF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS5sYWJlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHZhbF9pbiA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS52YWx1ZSApO1xyXG5cdFx0XHRcdGNvbnN0IGNoayAgICA9IHIucXVlcnlTZWxlY3RvciggdGhpcy51aS50b2dnbGUgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbGJsID0gKGxibF9pbiAmJiBsYmxfaW4udmFsdWUpIHx8ICcnO1xyXG5cdFx0XHRcdGxldCB2YWwgICA9ICh2YWxfaW4gJiYgdmFsX2luLnZhbHVlKSB8fCAnJztcclxuXHJcblx0XHRcdFx0Ly8gSWYgc2luZ2xlLWlucHV0IG1vZGUgLT4gaGFyZCBtaXJyb3IgdG8gbGFiZWwuXHJcblx0XHRcdFx0aWYgKCAhIGRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHQvLyBzaW5nbGUtaW5wdXQgbW9kZTogbWlycm9yIExhYmVsLCBtaW5pbWFsIGVzY2FwaW5nIChubyBzbHVnKS5cclxuXHRcdFx0XHRcdHZhbCA9IHRoaXMuYnVpbGRfdmFsdWVfZnJvbV9sYWJlbCggbGJsLCAvKmRpZmZlcnM9Ki9mYWxzZSApO1xyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdHZhbF9pbi52YWx1ZSA9IHZhbDsgICAvLyBrZWVwIGhpZGRlbiBpbnB1dCBpbiBzeW5jIGZvciBhbnkgcHJldmlld3MvZGVidWcuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBzZWwgPSAhIShjaGsgJiYgY2hrLmNoZWNrZWQpO1xyXG5cdFx0XHRcdG9wdGlvbnMucHVzaCggeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRob2xkZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdHBhbmVsLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDoge1xyXG5cdFx0XHRcdFx0XHRrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnNcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICkgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cclxuXHRcdFx0Ly8gTWlycm9yIHRvIHRoZSBzZWxlY3RlZCBmaWVsZCBlbGVtZW50IHNvIGNhbnZhcy9leHBvcnQgc2VlcyBjdXJyZW50IG9wdGlvbnMgaW1tZWRpYXRlbHkuXHJcblx0XHRcdGNvbnN0IGZpZWxkID0gcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkXHJcblx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZmllbGQuaXMtc2VsZWN0ZWQsIC53cGJjX2JmYl9fZmllbGQtLXNlbGVjdGVkJyApO1xyXG5cdFx0XHRpZiAoIGZpZWxkICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhc2V0Lm9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSggb3B0aW9ucyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRDb3JlLlN0cnVjdHVyZT8udXBkYXRlX2ZpZWxkX3Byb3A/LiggZmllbGQsICdvcHRpb25zJywgb3B0aW9ucyApO1xyXG5cdFx0XHRcdGZpZWxkLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmNfYmZiX2ZpZWxkX2RhdGFfY2hhbmdlZCcsIHtcclxuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsIGRldGFpbDogeyBrZXk6ICdvcHRpb25zJywgdmFsdWU6IG9wdGlvbnMgfVxyXG5cdFx0XHRcdH0gKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdHN0YXRpYyBlbnN1cmVfc29ydGFibGUocGFuZWwpIHtcclxuXHJcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmdldF9saXN0KCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoICEgbGlzdCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmcgPSB3aW5kb3cuU29ydGFibGU/LmdldD8uKCBsaXN0ICk7XHJcblx0XHRcdFx0aWYgKCBleGlzdGluZyApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1aWxkZXIgPSB3aW5kb3cud3BiY19iZmJfYXBpPy5nZXRfYnVpbGRlcj8uKCkgfHwgd2luZG93LndwYmNfYmZiIHx8IG51bGw7XHJcblxyXG5cdFx0XHRcdC8vIFByZWZlciB0aGUgc2hhcmVkIFNvcnRhYmxlIG1hbmFnZXIgc28gdGhlIHNpZGViYXIgbGlzdCB1c2VzXHJcblx0XHRcdFx0Ly8gdGhlIGRlZGljYXRlZCBcInNpbXBsZV9saXN0XCIgY29uZmlnIGluc3RlYWQgb2YgdGhlIGNhbnZhcyBjb25maWcuXHJcblx0XHRcdFx0aWYgKCBidWlsZGVyICYmIGJ1aWxkZXIuc29ydGFibGUgJiYgdHlwZW9mIGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlID09PSAnZnVuY3Rpb24nICkge1xyXG5cclxuXHRcdFx0XHRcdGJ1aWxkZXIuc29ydGFibGUuZW5zdXJlKFxyXG5cdFx0XHRcdFx0XHRsaXN0LFxyXG5cdFx0XHRcdFx0XHQnY2FudmFzJyxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRhYmxlX2tpbmQgICAgIDogJ3NpbXBsZV9saXN0JyxcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVfc2VsZWN0b3IgICA6IHRoaXMudWkuZHJhZ19oYW5kbGUsXHJcblx0XHRcdFx0XHRcdFx0ZHJhZ2dhYmxlX3NlbGVjdG9yOiB0aGlzLnVpLnJvdyxcclxuXHRcdFx0XHRcdFx0XHRvblVwZGF0ZSAgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB3aW5kb3cuU29ydGFibGU/LmNyZWF0ZSApIHtcclxuXHRcdFx0XHRcdC8vIEZhbGxiYWNrIGlmIGJ1aWxkZXIgaXMgbm90IHJlYWR5IGZvciBzb21lIHJlYXNvbi5cclxuXHRcdFx0XHRcdHdpbmRvdy5Tb3J0YWJsZS5jcmVhdGUoXHJcblx0XHRcdFx0XHRcdGxpc3QsXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGUgICAgICAgICAgIDogdGhpcy51aS5kcmFnX2hhbmRsZSxcclxuXHRcdFx0XHRcdFx0XHRkcmFnZ2FibGUgICAgICAgIDogdGhpcy51aS5yb3csXHJcblx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uICAgICAgICA6IDEyMCxcclxuXHRcdFx0XHRcdFx0XHRmb3JjZUZhbGxiYWNrICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRmYWxsYmFja09uQm9keSAgIDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0ZmFsbGJhY2tUb2xlcmFuY2U6IDgsXHJcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ2xvbmVPbkhpZGU6IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0b25VcGRhdGUgICAgICAgICA6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bGlzdC5kYXRhc2V0LnNvcnRhYmxlX2luaXQgPSAnMSc7XHJcblxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3aW5kb3cuX3dwYmM/LmRldj8uZXJyb3I/LiggJ1NlbGVjdF9CYXNlLmVuc3VyZV9zb3J0YWJsZScsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyByZWJ1aWxkX2lmX2VtcHR5KHBhbmVsKSB7XHJcblx0XHRcdGNvbnN0IGxpc3QgICA9IHRoaXMuZ2V0X2xpc3QoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IGhvbGRlciA9IHRoaXMuZ2V0X2hvbGRlciggcGFuZWwgKTtcclxuXHRcdFx0aWYgKCAhbGlzdCB8fCAhaG9sZGVyIHx8IGxpc3QuY2hpbGRyZW4ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0bGV0IGRhdGEgPSBbXTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRkYXRhID0gSlNPTi5wYXJzZSggaG9sZGVyLnZhbHVlIHx8ICdbXScgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdFx0ZGF0YSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICFBcnJheS5pc0FycmF5KCBkYXRhICkgfHwgIWRhdGEubGVuZ3RoICkge1xyXG5cdFx0XHRcdGRhdGEgPSAodGhpcy5nZXRfZGVmYXVsdHMoKS5vcHRpb25zIHx8IFtdKS5zbGljZSggMCApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRob2xkZXIudmFsdWUgPSBKU09OLnN0cmluZ2lmeSggZGF0YSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwge1xyXG5cdFx0XHRcdFx0bGFiZWwgICA6IGRhdGFbaV0/LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdFx0dmFsdWUgICA6IGRhdGFbaV0/LnZhbHVlIHx8ICcnLFxyXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6ICEhZGF0YVtpXT8uc2VsZWN0ZWQsXHJcblx0XHRcdFx0XHRpbmRleCAgIDogaSxcclxuXHRcdFx0XHRcdHVpZCAgICAgOiB0aGlzLm1ha2VfdWlkKClcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuc3luY19kZWZhdWx0X3ZhbHVlX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc19yb3dfZGVmYXVsdHMocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXS5jaGVja2VkICkgcmV0dXJuIHRydWU7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgaXNfbXVsdGlwbGVfZW5hYmxlZChwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBjaGsgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0cmV0dXJuICEhKGNoayAmJiBjaGsuY2hlY2tlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIGhhc190ZXh0X2RlZmF1bHRfdmFsdWUocGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgZHYgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0cmV0dXJuICEhKGR2ICYmIFN0cmluZyggZHYudmFsdWUgfHwgJycgKS50cmltKCkubGVuZ3RoKTtcclxuXHRcdH1cclxuXHJcblx0XHRzdGF0aWMgc3luY19kZWZhdWx0X3ZhbHVlX2xvY2socGFuZWwpIHtcclxuXHRcdFx0Y29uc3QgaW5wdXQgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5kZWZhdWx0X3RleHQgKTtcclxuXHRcdFx0Y29uc3Qgbm90ZSAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggJy5qcy1kZWZhdWx0LXZhbHVlLW5vdGUnICk7XHJcblx0XHRcdGlmICggIWlucHV0ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgbG9jayAgICAgPSB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICk7XHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlucHV0LnJlbW92ZUF0dHJpYnV0ZSggJ2FyaWEtZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0aWYgKCBub3RlICkgbm90ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHN5bmNfcGxhY2Vob2xkZXJfbG9jayhwYW5lbCkge1xyXG5cdFx0XHRjb25zdCBpbnB1dCA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yKCB0aGlzLnVpLnBsYWNlaG9sZGVyX2lucHV0ICk7XHJcblx0XHRcdGNvbnN0IG5vdGUgID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3IoIHRoaXMudWkucGxhY2Vob2xkZXJfbm90ZSApO1xyXG5cclxuXHRcdFx0Ly8gTkVXOiBjb21wdXRlIG11bHRpcGxlIGFuZCB0b2dnbGUgcm93IHZpc2liaWxpdHlcclxuXHRcdFx0Y29uc3QgaXNNdWx0aXBsZSAgICAgPSB0aGlzLmlzX211bHRpcGxlX2VuYWJsZWQoIHBhbmVsICk7XHJcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyUm93ID0gaW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZUlucHV0ICAgICAgPSBwYW5lbD8ucXVlcnlTZWxlY3RvciggdGhpcy51aS5zaXplX2lucHV0ICkgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgc2l6ZVJvdyAgICAgICAgPSBzaXplSW5wdXQ/LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19yb3cnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIFNob3cgcGxhY2Vob2xkZXIgb25seSBmb3Igc2luZ2xlLXNlbGVjdDsgc2hvdyBzaXplIG9ubHkgZm9yIG11bHRpcGxlXHJcblx0XHRcdGlmICggcGxhY2Vob2xkZXJSb3cgKSBwbGFjZWhvbGRlclJvdy5zdHlsZS5kaXNwbGF5ID0gaXNNdWx0aXBsZSA/ICdub25lJyA6ICcnO1xyXG5cdFx0XHRpZiAoIHNpemVSb3cgKSBzaXplUm93LnN0eWxlLmRpc3BsYXkgPSBpc011bHRpcGxlID8gJycgOiAnbm9uZSc7XHJcblxyXG5cdFx0XHQvLyBFeGlzdGluZyBiZWhhdmlvciAoa2VlcCBhcy1pcylcclxuXHRcdFx0aWYgKCAhaW5wdXQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsb2NrID0gaXNNdWx0aXBsZSB8fCB0aGlzLmhhc19yb3dfZGVmYXVsdHMoIHBhbmVsICkgfHwgdGhpcy5oYXNfdGV4dF9kZWZhdWx0X3ZhbHVlKCBwYW5lbCApO1xyXG5cdFx0XHRpZiAoIG5vdGUgJiYgIW5vdGUuaWQgKSBub3RlLmlkID0gJ3dwYmNfcGxhY2Vob2xkZXJfbm90ZV8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgMTAgKTtcclxuXHJcblx0XHRcdGlucHV0LmRpc2FibGVkID0gISFsb2NrO1xyXG5cdFx0XHRpZiAoIGxvY2sgKSB7XHJcblx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIHtcclxuXHRcdFx0XHRcdG5vdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCAnYXJpYS1kZXNjcmliZWRieScsIG5vdGUuaWQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aW5wdXQucmVtb3ZlQXR0cmlidXRlKCAnYXJpYS1kaXNhYmxlZCcgKTtcclxuXHRcdFx0XHRpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoICdhcmlhLWRlc2NyaWJlZGJ5JyApO1xyXG5cdFx0XHRcdGlmICggbm90ZSApIG5vdGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHN0YXRpYyBlbmZvcmNlX3NpbmdsZV9kZWZhdWx0KHBhbmVsLCBjbGlja2VkKSB7XHJcblx0XHRcdGlmICggdGhpcy5pc19tdWx0aXBsZV9lbmFibGVkKCBwYW5lbCApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgY2hlY2tzID0gcGFuZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMudWkudG9nZ2xlICk7XHJcblx0XHRcdGlmICggIWNoZWNrcz8ubGVuZ3RoICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0aWYgKCBjbGlja2VkICYmIGNsaWNrZWQuY2hlY2tlZCApIHtcclxuXHRcdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKysgKSBpZiAoIGNoZWNrc1tpXSAhPT0gY2xpY2tlZCApIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tpXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3NbaV0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjbGlja2VkLnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IGtlcHQgPSBmYWxzZTtcclxuXHRcdFx0Zm9yICggbGV0IGogPSAwOyBqIDwgY2hlY2tzLmxlbmd0aDsgaisrICkgaWYgKCBjaGVja3Nbal0uY2hlY2tlZCApIHtcclxuXHRcdFx0XHRpZiAoICFrZXB0ICkge1xyXG5cdFx0XHRcdFx0a2VwdCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNoZWNrc1tqXS5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjaGVja3Nbal0uc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gLS0tLSBvbmUtdGltZSBib290c3RyYXAgb2YgYSBwYW5lbCAtLS0tXHJcblx0XHRzdGF0aWMgYm9vdHN0cmFwX3BhbmVsKHBhbmVsKSB7XHJcblx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cdFx0XHRpZiAoICFwYW5lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19vcHRpb25zX2VkaXRvcicgKSApIHJldHVybjsgLy8gb25seSBzZWxlY3QtbGlrZSBVSXNcclxuXHRcdFx0aWYgKCBwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID09PSAnMScgKSB7XHJcblx0XHRcdFx0dGhpcy5lbnN1cmVfc29ydGFibGUoIHBhbmVsICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnJlYnVpbGRfaWZfZW1wdHkoIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuZW5zdXJlX3NvcnRhYmxlKCBwYW5lbCApO1xyXG5cdFx0XHRwYW5lbC5kYXRhc2V0LnNlbGVjdGJhc2VfYm9vdHN0cmFwcGVkID0gJzEnO1xyXG5cclxuXHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0dGhpcy5zeW5jX3BsYWNlaG9sZGVyX2xvY2soIHBhbmVsICk7XHJcblx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAtLS0tIGhvb2sgaW50byBpbnNwZWN0b3IgbGlmZWN5Y2xlIChmaXJlcyBPTkNFKSAtLS0tXHJcblx0XHRzdGF0aWMgd2lyZV9vbmNlKCkge1xyXG5cdFx0XHRpZiAoIENvcmUuX19zZWxlY3RiYXNlX3dpcmVkICkgcmV0dXJuO1xyXG5cdFx0XHRDb3JlLl9fc2VsZWN0YmFzZV93aXJlZCA9IHRydWU7XHJcblxyXG5cdFx0XHRjb25zdCBvbl9yZWFkeV9vcl9yZW5kZXIgPSAoZXYpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGV2Py5kZXRhaWw/LnBhbmVsO1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gZXY/LmRldGFpbD8uZWwgfHwgZXY/LmRldGFpbD8uZmllbGQgfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoICFwYW5lbCApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGZpZWxkICkgcGFuZWwuX19zZWxlY3RiYXNlX2ZpZWxkID0gZmllbGQ7XHJcblx0XHRcdFx0dGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdFx0Ly8gSWYgdGhlIGluc3BlY3RvciByb290IHdhcyByZW1vdW50ZWQsIGVuc3VyZSByb290IGxpc3RlbmVycyBhcmUgKHJlKWJvdW5kLlxyXG5cdFx0XHRcdHRoaXMud2lyZV9yb290X2xpc3RlbmVycygpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlbmRlcicsIG9uX3JlYWR5X29yX3JlbmRlciApO1xyXG5cclxuXHRcdFx0dGhpcy53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RhdGljIHdpcmVfcm9vdF9saXN0ZW5lcnMoKSB7XHJcblxyXG5cdFx0XHQvLyBJZiBhbHJlYWR5IHdpcmVkIEFORCB0aGUgc3RvcmVkIHJvb3QgaXMgc3RpbGwgaW4gdGhlIERPTSwgYmFpbCBvdXQuXHJcblx0XHRcdGlmICggdGhpcy5fX3Jvb3Rfd2lyZWQgJiYgdGhpcy5fX3Jvb3Rfbm9kZT8uaXNDb25uZWN0ZWQgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICFyb290ICkge1xyXG5cdFx0XHRcdC8vIFJvb3QgbWlzc2luZyAoZS5nLiwgU1BBIHJlLXJlbmRlcikg4oCUIGNsZWFyIGZsYWdzIHNvIHdlIGNhbiB3aXJlIGxhdGVyLlxyXG5cdFx0XHRcdHRoaXMuX19yb290X3dpcmVkID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgPSBudWxsO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5fX3Jvb3Rfbm9kZSAgICAgICAgICAgICAgICAgICA9IHJvb3Q7XHJcblx0XHRcdHRoaXMuX19yb290X3dpcmVkICAgICAgICAgICAgICAgICAgPSB0cnVlO1xyXG5cdFx0XHRyb290LmRhdGFzZXQuc2VsZWN0YmFzZV9yb290X3dpcmVkID0gJzEnO1xyXG5cclxuXHRcdFx0Y29uc3QgZ2V0X3BhbmVsID0gKHRhcmdldCkgPT5cclxuXHRcdFx0XHR0YXJnZXQ/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9faW5zcGVjdG9yX19ib2R5JyApIHx8XHJcblx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2JvZHknICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIENsaWNrIGhhbmRsZXJzOiBhZGQgLyBkZWxldGUgLyBkdXBsaWNhdGVcclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHR0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdWkgPSB0aGlzLnVpO1xyXG5cclxuXHRcdFx0XHQvLyBFeGlzdGluZyBcIkFkZCBvcHRpb25cIiBidXR0b24gKHRvcCB0b29sYmFyKVxyXG5cdFx0XHRcdGNvbnN0IGFkZCA9IGUudGFyZ2V0LmNsb3Nlc3Q/LiggdWkuYWRkX2J0biApO1xyXG5cdFx0XHRcdGlmICggYWRkICkge1xyXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogJycsIHZhbHVlOiAnJywgc2VsZWN0ZWQ6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBEcm9wZG93biBtZW51IGFjdGlvbnMuXHJcblx0XHRcdFx0Y29uc3QgbWVudV9hY3Rpb24gPSBlLnRhcmdldC5jbG9zZXN0Py4oIHVpLm1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0aWYgKCBtZW51X2FjdGlvbiApIHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uID0gKG1lbnVfYWN0aW9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtYWN0aW9uJyApIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ICAgID0gbWVudV9hY3Rpb24uY2xvc2VzdD8uKCB1aS5yb3cgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICdhZGRfYWZ0ZXInID09PSBhY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdC8vIEFkZCBlbXB0eSByb3cgYWZ0ZXIgY3VycmVudFxyXG5cdFx0XHRcdFx0XHRjb25zdCBwcmV2X2NvdW50ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKT8uY2hpbGRyZW4ubGVuZ3RoIHx8IDA7XHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kX3JvdyggcGFuZWwsIHsgbGFiZWw6ICcnLCB2YWx1ZTogJycsIHNlbGVjdGVkOiBmYWxzZSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIE1vdmUgdGhlIG5ld2x5IGFkZGVkIGxhc3Qgcm93IGp1c3QgYWZ0ZXIgY3VycmVudCByb3cgdG8gcHJlc2VydmUgXCJhZGQgYWZ0ZXJcIlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBsaXN0ICYmIGxpc3QubGFzdEVsZW1lbnRDaGlsZCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgIT09IHJvdyApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmluc2VydF9hZnRlciggbGlzdC5sYXN0RWxlbWVudENoaWxkLCByb3cgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAnZHVwbGljYXRlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBsYmwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLmxhYmVsICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB2YWwgPSAocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICkgfHwge30pLnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzZWwgPSAhISgocm93LnF1ZXJ5U2VsZWN0b3IoIHVpLnRvZ2dsZSApIHx8IHt9KS5jaGVja2VkKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBlbmRfcm93KCBwYW5lbCwgeyBsYWJlbDogbGJsLCB2YWx1ZTogdmFsLCBzZWxlY3RlZDogc2VsLCB1aWQ6IHRoaXMubWFrZV91aWQoKSB9ICk7XHJcblx0XHRcdFx0XHRcdC8vIFBsYWNlIHRoZSBuZXcgcm93IHJpZ2h0IGFmdGVyIHRoZSBjdXJyZW50LlxyXG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0ID0gdGhpcy5nZXRfbGlzdCggcGFuZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggbGlzdCAmJiBsaXN0Lmxhc3RFbGVtZW50Q2hpbGQgJiYgbGlzdC5sYXN0RWxlbWVudENoaWxkICE9PSByb3cgKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pbnNlcnRfYWZ0ZXIoIGxpc3QubGFzdEVsZW1lbnRDaGlsZCwgcm93ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy5lbmZvcmNlX3NpbmdsZV9kZWZhdWx0KCBwYW5lbCwgbnVsbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN5bmNfdmFsdWVfaW5wdXRzX3Zpc2liaWxpdHkoIHBhbmVsICk7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAncmVtb3ZlJyA9PT0gYWN0aW9uICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHJvdyAmJiByb3cucGFyZW50Tm9kZSApIHJvdy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByb3cgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zeW5jX3ZhbHVlX2lucHV0c192aXNpYmlsaXR5KCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VfZHJvcGRvd24oIG1lbnVfYWN0aW9uICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHJcblx0XHRcdC8vIElucHV0IGRlbGVnYXRpb24uXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoICEgcGFuZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHVpICAgICAgICAgICAgICAgID0gdGhpcy51aTtcclxuXHRcdFx0XHRjb25zdCBpc19sYWJlbF9vcl92YWx1ZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LWxhYmVsJyApIHx8IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSAgICAgICAgID0gZS50YXJnZXQuY2xhc3NMaXN0Py5jb250YWlucyggJ3dwYmNfYmZiX19vcHQtc2VsZWN0ZWQtY2hrJyApO1xyXG5cdFx0XHRcdGNvbnN0IGlzX211bHRpcGxlICAgICAgID0gZS50YXJnZXQubWF0Y2hlcz8uKCB1aS5tdWx0aXBsZV9jaGsgKTtcclxuXHRcdFx0XHRjb25zdCBpc19kZWZhdWx0X3RleHQgICA9IGUudGFyZ2V0Lm1hdGNoZXM/LiggdWkuZGVmYXVsdF90ZXh0ICk7XHJcblx0XHRcdFx0Y29uc3QgaXNfdmFsdWVfZGlmZmVycyAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLnZhbHVlX2RpZmZlcnNfY2hrICk7XHJcblxyXG5cdFx0XHRcdC8vIEhhbmRsZSBcInZhbHVlIGRpZmZlcnNcIiB0b2dnbGUgbGl2ZVxyXG5cdFx0XHRcdGlmICggaXNfdmFsdWVfZGlmZmVycyApIHtcclxuXHRcdFx0XHRcdHRoaXMuc3luY192YWx1ZV9pbnB1dHNfdmlzaWJpbGl0eSggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0X29wdGlvbnMoIHBhbmVsICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUcmFjayB3aGVuIHRoZSB1c2VyIGVkaXRzIFZBTFVFIGV4cGxpY2l0bHlcclxuXHRcdFx0XHRpZiAoIGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgcm93ID0gZS50YXJnZXQuY2xvc2VzdCggdGhpcy51aS5yb3cgKTtcclxuXHRcdFx0XHRcdHRoaXMubWFya19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKTtcclxuXHRcdFx0XHRcdC8vIEtlZXAgdGhlIGNhY2hlIHVwZGF0ZWQgc28gdG9nZ2xpbmcgT0ZGL09OIGxhdGVyIHJlc3RvcmVzIHRoZSBsYXRlc3QgY3VzdG9tIHZhbHVlXHJcblx0XHRcdFx0XHRlLnRhcmdldC5kYXRhc2V0LmNhY2hlZF92YWx1ZSA9IGUudGFyZ2V0LnZhbHVlIHx8ICcnO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXV0by1maWxsIFZBTFVFIGZyb20gTEFCRUwgaWYgdmFsdWUgaXMgZnJlc2ggKGFuZCBkaWZmZXJzIGlzIE9OKTsgaWYgZGlmZmVycyBpcyBPRkYsIHdlIG1pcnJvciBhbnl3YXkgaW4gY29tbWl0XHJcblx0XHRcdFx0aWYgKCBlLnRhcmdldC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX29wdC1sYWJlbCcgKSApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHJvdyAgICAgPSBlLnRhcmdldC5jbG9zZXN0KCB1aS5yb3cgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbF9pbiAgPSByb3c/LnF1ZXJ5U2VsZWN0b3IoIHVpLnZhbHVlICk7XHJcblx0XHRcdFx0XHRjb25zdCBkaWZmZXJzID0gdGhpcy5pc192YWx1ZV9kaWZmZXJzX2VuYWJsZWQoIHBhbmVsICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWxfaW4gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggIWRpZmZlcnMgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gc2luZ2xlLWlucHV0IG1vZGU6IG1pcnJvciBodW1hbiBsYWJlbCB3aXRoIG1pbmltYWwgZXNjYXBpbmdcclxuXHRcdFx0XHRcdFx0XHR2YWxfaW4udmFsdWUgPSB0aGlzLmJ1aWxkX3ZhbHVlX2Zyb21fbGFiZWwoIGUudGFyZ2V0LnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhdGhpcy5pc19yb3dfdmFsdWVfdXNlcl90b3VjaGVkKCByb3cgKSApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBzZXBhcmF0ZS12YWx1ZSBtb2RlLCBvbmx5IHdoaWxlIGZyZXNoXHJcblx0XHRcdFx0XHRcdFx0dmFsX2luLnZhbHVlID0gdGhpcy5idWlsZF92YWx1ZV9mcm9tX2xhYmVsKCBlLnRhcmdldC52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0aWYgKCBpc19sYWJlbF9vcl92YWx1ZSB8fCBpc190b2dnbGUgfHwgaXNfbXVsdGlwbGUgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSApIGUudGFyZ2V0LnNldEF0dHJpYnV0ZSggJ2FyaWEtY2hlY2tlZCcsIGUudGFyZ2V0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRpZiAoIGlzX3RvZ2dsZSB8fCBpc19tdWx0aXBsZSApIHRoaXMuZW5mb3JjZV9zaW5nbGVfZGVmYXVsdCggcGFuZWwsIGlzX3RvZ2dsZSA/IGUudGFyZ2V0IDogbnVsbCApO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21taXRfb3B0aW9ucyggcGFuZWwgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggaXNfZGVmYXVsdF90ZXh0ICkge1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jX2RlZmF1bHRfdmFsdWVfbG9jayggcGFuZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMuc3luY19wbGFjZWhvbGRlcl9sb2NrKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgaG9sZGVyID0gdGhpcy5nZXRfaG9sZGVyKCBwYW5lbCApO1xyXG5cdFx0XHRcdFx0aWYgKCBob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdGhvbGRlci5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdFx0aG9sZGVyLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblxyXG5cdFx0XHQvLyBDaGFuZ2UgZGVsZWdhdGlvblxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHBhbmVsID0gZ2V0X3BhbmVsKCBlLnRhcmdldCApO1xyXG5cdFx0XHRcdGlmICggIXBhbmVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCB1aSAgICAgICAgPSB0aGlzLnVpO1xyXG5cdFx0XHRcdGNvbnN0IGlzX3RvZ2dsZSA9IGUudGFyZ2V0LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fb3B0LXNlbGVjdGVkLWNoaycgKTtcclxuXHRcdFx0XHRjb25zdCBpc19tdWx0aSAgPSBlLnRhcmdldC5tYXRjaGVzPy4oIHVpLm11bHRpcGxlX2NoayApO1xyXG5cdFx0XHRcdGlmICggIWlzX3RvZ2dsZSAmJiAhaXNfbXVsdGkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmICggaXNfdG9nZ2xlICkgZS50YXJnZXQuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgZS50YXJnZXQuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR0aGlzLmVuZm9yY2Vfc2luZ2xlX2RlZmF1bHQoIHBhbmVsLCBpc190b2dnbGUgPyBlLnRhcmdldCA6IG51bGwgKTtcclxuXHRcdFx0XHR0aGlzLmNvbW1pdF9vcHRpb25zKCBwYW5lbCApO1xyXG5cdFx0XHR9LCB0cnVlICk7XHJcblxyXG5cdFx0XHQvLyBMYXp5IGJvb3RzdHJhcFxyXG5cdFx0XHRyb290LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZWVudGVyJywgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYW5lbCA9IGdldF9wYW5lbCggZS50YXJnZXQgKTtcclxuXHRcdFx0XHRpZiAoIHBhbmVsICYmIGUudGFyZ2V0Py5jbG9zZXN0Py4oIHRoaXMudWkubGlzdCApICkgdGhpcy5ib290c3RyYXBfcGFuZWwoIHBhbmVsICk7XHJcblx0XHRcdH0sIHRydWUgKTtcclxuXHJcblx0XHRcdHJvb3QuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZG93bicsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSBnZXRfcGFuZWwoIGUudGFyZ2V0ICk7XHJcblx0XHRcdFx0aWYgKCBwYW5lbCAmJiBlLnRhcmdldD8uY2xvc2VzdD8uKCB0aGlzLnVpLmRyYWdfaGFuZGxlICkgKSB0aGlzLmJvb3RzdHJhcF9wYW5lbCggcGFuZWwgKTtcclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHR0cnkgeyBDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfb25jZSgpOyB9IGNhdGNoIChfKSB7fVxyXG5cdC8vIFRyeSBpbW1lZGlhdGVseSAoaWYgcm9vdCBpcyBhbHJlYWR5IGluIERPTSksIHRoZW4gYWdhaW4gb24gRE9NQ29udGVudExvYWRlZC5cclxuXHRDb3JlLldQQkNfQkZCX1NlbGVjdF9CYXNlLndpcmVfcm9vdF9saXN0ZW5lcnMoKTtcclxuXHJcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHsgQ29yZS5XUEJDX0JGQl9TZWxlY3RfQmFzZS53aXJlX3Jvb3RfbGlzdGVuZXJzKCk7ICB9KTtcclxuXHJcbn0oIHdpbmRvdyApKTsiLCIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPT0gRmlsZSAgL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL19vdXQvY29yZS9iZmItdWkuanMgPT0gfCAyMDI1LTA5LTEwIDE1OjQ3XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIFNpbmdsZSBnbG9iYWwgbmFtZXNwYWNlIChpZGVtcG90ZW50ICYgbG9hZC1vcmRlciBzYWZlKS5cclxuXHRjb25zdCBDb3JlID0gKHcuV1BCQ19CRkJfQ29yZSA9IHcuV1BCQ19CRkJfQ29yZSB8fCB7fSk7XHJcblx0Y29uc3QgVUkgICA9IChDb3JlLlVJID0gQ29yZS5VSSB8fCB7fSk7XHJcblxyXG5cdC8vIC0tLSBIaWdobGlnaHQgRWxlbWVudCwgIGxpa2UgR2VuZXJhdG9yIGJybiAgLSAgVGlueSBVSSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdFVJLl9wdWxzZV90aW1lcnMgPSBVSS5fcHVsc2VfdGltZXJzIHx8IG5ldyBNYXAoKTsgLy8gZWwgLT4gdGltZXJfaWRcclxuXHRVSS5fcHVsc2VfbWV0YSAgID0gVUkuX3B1bHNlX21ldGEgICB8fCBuZXcgTWFwKCk7IC8vIGVsIC0+IHsgdG9rZW4sIGxhc3RfdHMsIGRlYm91bmNlX2lkLCBjb2xvcl9zZXQgfVxyXG5cdC8vIFB1bHNlIHR1bmluZyAobWlsbGlzZWNvbmRzKS5cclxuXHRVSS5QVUxTRV9USFJPVFRMRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDUwMDtcclxuXHRVSS5QVUxTRV9ERUJPVU5DRV9NUyAgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX0RFQk9VTkNFX01TICkgPyBVSS5QVUxTRV9ERUJPVU5DRV9NUyA6IDc1MDtcclxuXHJcblx0Ly8gRGVib3VuY2UgU1RSVUNUVVJFX0NIQU5HRSBmb3IgY29udGludW91cyBpbnNwZWN0b3IgY29udHJvbHMgKHNsaWRlcnMgLyBzY3J1YmJpbmcpLlxyXG5cdC8vIFR1bmU6IDE4MC4uMzUwIGlzIHVzdWFsbHkgYSBzd2VldCBzcG90LlxyXG5cdFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAxODA7XHJcblx0Ly8gQ2hhbmdlIHRoaXMgdG8gdHVuZSBzcGVlZDogNTAuLjEyMCBtcyBpcyBhIGdvb2QgcmFuZ2UuIENhbiBiZSBjb25maWd1cmVkIGluIDxkaXYgZGF0YS1sZW4tZ3JvdXAgZGF0YS1sZW4tdGhyb3R0bGU9XCIxODBcIj4uLi48L2Rpdj4uXHJcblx0VUkuVkFMVUVfU0xJREVSX1RIUk9UVExFX01TID0gTnVtYmVyLmlzRmluaXRlKCBVSS5WQUxVRV9TTElERVJfVEhST1RUTEVfTVMgKSA/IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHJcblx0LyoqXHJcblx0ICogQ2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIHNlcXVlbmNlIGZvciBhbiBlbGVtZW50LlxyXG5cdCAqIFVzZXMgdG9rZW4gaW52YWxpZGF0aW9uIHNvIGFscmVhZHktc2NoZWR1bGVkIGNhbGxiYWNrcyBiZWNvbWUgbm8tb3BzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHQgKi9cclxuXHRVSS5jYW5jZWxfcHVsc2UgPSBmdW5jdGlvbiAoZWwpIHtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCggVUkuX3B1bHNlX3RpbWVycy5nZXQoIGVsICkgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFVJLl9wdWxzZV90aW1lcnMuZGVsZXRlKCBlbCApO1xyXG5cclxuXHRcdHZhciBtZXRhID0gVUkuX3B1bHNlX21ldGEuZ2V0KCBlbCApIHx8IHt9O1xyXG5cdFx0bWV0YS50b2tlbiA9IChOdW1iZXIuaXNGaW5pdGUoIG1ldGEudG9rZW4gKSA/IG1ldGEudG9rZW4gOiAwKSArIDE7XHJcblx0XHRtZXRhLmNvbG9yX3NldCA9IGZhbHNlO1xyXG5cdFx0dHJ5IHsgZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnLCAnd3BiY19iZmJfX2hpZ2hsaWdodC1wdWxzZScgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0dHJ5IHsgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApOyB9IGNhdGNoICggXyApIHt9XHJcblx0XHRVSS5fcHVsc2VfbWV0YS5zZXQoIGVsLCBtZXRhICk7XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IDA7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9yY2UtcmVzdGFydCBhIENTUyBhbmltYXRpb24gb24gYSBjbGFzcy5cclxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjbHNcclxuXHQgKi9cclxuXHRVSS5fcmVzdGFydF9jc3NfYW5pbWF0aW9uID0gZnVuY3Rpb24gKGVsLCBjbHMpIHtcclxuXHRcdGlmICggISBlbCApIHsgcmV0dXJuOyB9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdC8vIEZvcmNlIHJlZmxvdyBzbyB0aGUgbmV4dCBhZGQoKSByZXRyaWdnZXJzIHRoZSBrZXlmcmFtZXMuXHJcblx0XHR2b2lkIGVsLm9mZnNldFdpZHRoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZWwuY2xhc3NMaXN0LmFkZCggY2xzICk7XHJcblx0XHR9IGNhdGNoICggXyApIHt9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRTaW5nbGUgcHVsc2UgKGJhY2stY29tcGF0KS5cclxuXHRcdEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXHJcblx0XHRAcGFyYW0ge251bWJlcn0gZHVyX21zXHJcblx0ICovXHJcblx0VUkucHVsc2Vfb25jZSA9IGZ1bmN0aW9uIChlbCwgZHVyX21zKSB7XHJcblx0XHRpZiAoICEgZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGNscyA9ICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJztcclxuXHRcdHZhciBtcyAgPSBOdW1iZXIuaXNGaW5pdGUoIGR1cl9tcyApID8gZHVyX21zIDogNzAwO1xyXG5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHR2YXIgbWV0YSAgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdFVJLl9yZXN0YXJ0X2Nzc19hbmltYXRpb24oIGVsLCBjbHMgKTtcclxuXHRcdHZhciB0ID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQvLyBpZ25vcmUgaWYgYSBuZXdlciBwdWxzZSBzdGFydGVkLlxyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHR9LCBtcyApO1xyXG5cdFx0VUkuX3B1bHNlX3RpbWVycy5zZXQoIGVsLCB0ICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0XHRNdWx0aS1ibGluayBzZXF1ZW5jZSB3aXRoIG9wdGlvbmFsIHBlci1jYWxsIGNvbG9yIG92ZXJyaWRlLlxyXG5cdFx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbdGltZXM9M11cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbb25fbXM9MjgwXVxyXG5cdFx0QHBhcmFtIHtudW1iZXJ9IFtvZmZfbXM9MTgwXVxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtoZXhfY29sb3JdIE9wdGlvbmFsIENTUyBjb2xvciAoZS5nLiAnI2ZmNGQ0Zicgb3IgJ3JnYiguLi4pJykuXHJcblx0ICovXHJcblx0VUkucHVsc2Vfc2VxdWVuY2UgPSBmdW5jdGlvbiAoZWwsIHRpbWVzLCBvbl9tcywgb2ZmX21zLCBoZXhfY29sb3IpIHtcclxuXHRcdGlmICggIWVsIHx8ICFkLmJvZHkuY29udGFpbnMoIGVsICkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHZhciBjbHMgICA9ICd3cGJjX2JmYl9faGlnaGxpZ2h0LXB1bHNlJztcclxuXHRcdHZhciBjb3VudCA9IE51bWJlci5pc0Zpbml0ZSggdGltZXMgKSA/IHRpbWVzIDogMjtcclxuXHRcdHZhciBvbiAgICA9IE51bWJlci5pc0Zpbml0ZSggb25fbXMgKSA/IG9uX21zIDogMjgwO1xyXG5cdFx0dmFyIG9mZiAgID0gTnVtYmVyLmlzRmluaXRlKCBvZmZfbXMgKSA/IG9mZl9tcyA6IDE4MDtcclxuXHJcblx0XHQvLyBUaHJvdHRsZTogYXZvaWQgcmVmbG93IHNwYW0gaWYgY2FsbGVkIHJlcGVhdGVkbHkgd2hpbGUgdHlwaW5nL2RyYWdnaW5nLlxyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR2YXIgbm93ICA9IERhdGUubm93KCk7XHJcblx0XHR2YXIgdGhyb3R0bGVfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIFVJLlBVTFNFX1RIUk9UVExFX01TICkgPyBVSS5QVUxTRV9USFJPVFRMRV9NUyA6IDEyMDtcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBtZXRhLmxhc3RfdHMgKSAmJiAobm93IC0gbWV0YS5sYXN0X3RzKSA8IHRocm90dGxlX21zICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRtZXRhLmxhc3RfdHMgPSBub3c7XHJcblxyXG5cdFx0Ly8gY2FuY2VsIGFueSBydW5uaW5nIHB1bHNlIGFuZCByZXNldCBjbGFzcyAodG9rZW4gaW52YWxpZGF0aW9uKS5cclxuXHRcdFVJLmNhbmNlbF9wdWxzZSggZWwgKTtcclxuXHJcblx0XHQvLyBuZXcgdG9rZW4gZm9yIHRoaXMgcnVuXHJcblx0XHR2YXIgdG9rZW4gPSAoTnVtYmVyLmlzRmluaXRlKCBtZXRhLnRva2VuICkgPyBtZXRhLnRva2VuIDogMCkgKyAxO1xyXG5cdFx0bWV0YS50b2tlbiA9IHRva2VuO1xyXG5cclxuXHRcdHZhciBoYXZlX2NvbG9yID0gISFoZXhfY29sb3IgJiYgdHlwZW9mIGhleF9jb2xvciA9PT0gJ3N0cmluZyc7XHJcblx0XHRpZiAoIGhhdmVfY29sb3IgKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZWwuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJywgaGV4X2NvbG9yICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0bWV0YS5jb2xvcl9zZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0VUkuX3B1bHNlX21ldGEuc2V0KCBlbCwgbWV0YSApO1xyXG5cclxuXHRcdHZhciBpID0gMDtcclxuXHRcdChmdW5jdGlvbiB0aWNrKCkge1xyXG5cdFx0XHR2YXIgbSA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0aWYgKCBtLnRva2VuICE9PSB0b2tlbiApIHtcclxuXHRcdFx0XHQvLyBjYW5jZWxlZC9yZXBsYWNlZFxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGkgPj0gY291bnQgKSB7XHJcblx0XHRcdFx0VUkuX3B1bHNlX3RpbWVycy5kZWxldGUoIGVsICk7XHJcblx0XHRcdFx0aWYgKCBoYXZlX2NvbG9yICkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLXB1bHNlLWNvbG9yJyApO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0VUkuX3Jlc3RhcnRfY3NzX2FuaW1hdGlvbiggZWwsIGNscyApO1xyXG5cdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgICAgIC8vIE9OIC0+IE9GRlxyXG5cdFx0XHRcdHZhciBtMiA9IFVJLl9wdWxzZV9tZXRhLmdldCggZWwgKSB8fCB7fTtcclxuXHRcdFx0XHRpZiAoIG0yLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUoIGNscyApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRVSS5fcHVsc2VfdGltZXJzLnNldCggZWwsIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsgLy8gT0ZGIGdhcCAtPiBuZXh0XHJcblx0XHRcdFx0XHR2YXIgbTMgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHRcdFx0XHRpZiAoIG0zLnRva2VuICE9PSB0b2tlbiApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0XHRpKys7XHJcblx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0fSwgb2ZmICkgKTtcclxuXHRcdFx0fSwgb24gKSApO1xyXG5cdFx0fSkoKTtcclxuXHR9O1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRGVib3VuY2VkIHF1ZXJ5ICsgcHVsc2UuXHJcblx0ICogVXNlZnVsIGZvciBgaW5wdXRgIGV2ZW50cyAoc2xpZGVycyAvIHR5cGluZykgdG8gYXZvaWQgZm9yY2VkIHJlZmxvdyBzcGFtLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IHJvb3Rfb3Jfc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge251bWJlcn0gd2FpdF9tc1xyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHQgKiBAcGFyYW0ge251bWJlcn0gW2JdXHJcblx0ICogQHBhcmFtIHtudW1iZXJ9IFtjXVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbY29sb3JdXHJcblx0ICovXHJcblx0VUkucHVsc2VfcXVlcnlfZGVib3VuY2VkID0gZnVuY3Rpb24gKHJvb3Rfb3Jfc2VsZWN0b3IsIHNlbGVjdG9yLCB3YWl0X21zLCBhLCBiLCBjLCBjb2xvcikge1xyXG5cdFx0dmFyIHJvb3QgPSAodHlwZW9mIHJvb3Rfb3Jfc2VsZWN0b3IgPT09ICdzdHJpbmcnKSA/IGQgOiAocm9vdF9vcl9zZWxlY3RvciB8fCBkKTtcclxuXHRcdHZhciBzZWwgID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyByb290X29yX3NlbGVjdG9yIDogc2VsZWN0b3I7XHJcblx0XHRpZiAoICFzZWwgKSB7IHJldHVybjsgfVxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkgeyByZXR1cm47IH1cclxuXHJcblx0XHR2YXIgZGVmX21zID0gTnVtYmVyLmlzRmluaXRlKCBVSS5QVUxTRV9ERUJPVU5DRV9NUyApID8gVUkuUFVMU0VfREVCT1VOQ0VfTVMgOiAxMjA7XHJcblx0XHR2YXIgbXMgICAgID0gTnVtYmVyLmlzRmluaXRlKCB3YWl0X21zICkgPyB3YWl0X21zIDogZGVmX21zO1xyXG5cdFx0dmFyIG1ldGEgPSBVSS5fcHVsc2VfbWV0YS5nZXQoIGVsICkgfHwge307XHJcblx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIG1ldGEuZGVib3VuY2VfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0bWV0YS5kZWJvdW5jZV9pZCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0VUkucHVsc2Vfc2VxdWVuY2UoIGVsLCBhLCBiLCBjLCBjb2xvciApO1xyXG5cdFx0fSwgbXMgKTtcclxuXHRcdFVJLl9wdWxzZV9tZXRhLnNldCggZWwsIG1ldGEgKTtcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHRcdFF1ZXJ5ICsgcHVsc2U6XHJcblx0XHQoQkMpIElmIG9ubHkgM3JkIGFyZyBpcyBhIG51bWJlciBhbmQgbm8gNHRoLzV0aCAtPiBzaW5nbGUgbG9uZyBwdWxzZS5cclxuXHRcdE90aGVyd2lzZSAtPiBzdHJvbmcgc2VxdWVuY2UgKGRlZmF1bHRzIDPDlzI4MC8xODApLlxyXG5cdFx0T3B0aW9uYWwgNnRoIGFyZzogY29sb3IuXHJcblx0XHRAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gcm9vdF9vcl9zZWxlY3RvclxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYV1cclxuXHRcdEBwYXJhbSB7bnVtYmVyfSBbYl1cclxuXHJcblx0XHRAcGFyYW0ge251bWJlcn0gW2NdXHJcblxyXG5cdFx0QHBhcmFtIHtzdHJpbmd9IFtjb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9xdWVyeSA9IGZ1bmN0aW9uIChyb290X29yX3NlbGVjdG9yLCBzZWxlY3RvciwgYSwgYiwgYywgY29sb3IpIHtcclxuXHRcdHZhciByb290ID0gKHR5cGVvZiByb290X29yX3NlbGVjdG9yID09PSAnc3RyaW5nJykgPyBkIDogKHJvb3Rfb3Jfc2VsZWN0b3IgfHwgZCk7XHJcblx0XHR2YXIgc2VsICA9ICh0eXBlb2Ygcm9vdF9vcl9zZWxlY3RvciA9PT0gJ3N0cmluZycpID8gcm9vdF9vcl9zZWxlY3RvciA6IHNlbGVjdG9yO1xyXG5cdFx0aWYgKCAhc2VsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGVsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCBzZWwgKTtcclxuXHRcdGlmICggIWVsICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG4vLyBCYWNrLWNvbXBhdDogVUkucHVsc2VRdWVyeShyb290LCBzZWwsIGR1cl9tcylcclxuXHRcdGlmICggTnVtYmVyLmlzRmluaXRlKCBhICkgJiYgYiA9PT0gdW5kZWZpbmVkICYmIGMgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0cmV0dXJuIFVJLnB1bHNlX29uY2UoIGVsLCBhICk7XHJcblx0XHR9XHJcbi8vIE5ldzogc2VxdWVuY2U7IHBhcmFtcyBvcHRpb25hbDsgc3VwcG9ydHMgb3B0aW9uYWwgY29sb3IuXHJcblx0XHRVSS5wdWxzZV9zZXF1ZW5jZSggZWwsIGEsIGIsIGMsIGNvbG9yICk7XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0Q29udmVuaWVuY2UgaGVscGVyIChzbmFrZV9jYXNlKSB0byBjYWxsIGEgc3Ryb25nIHB1bHNlIHdpdGggb3B0aW9ucy5cclxuXHJcblx0QHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcclxuXHJcblx0QHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG5cclxuXHRAcGFyYW0ge251bWJlcn0gW29wdHMudGltZXM9M11cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9uX21zPTI4MF1cclxuXHJcblx0QHBhcmFtIHtudW1iZXJ9IFtvcHRzLm9mZl9tcz0xODBdXHJcblxyXG5cdEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb2xvcl1cclxuXHQgKi9cclxuXHRVSS5wdWxzZV9zZXF1ZW5jZV9zdHJvbmcgPSBmdW5jdGlvbiAoZWwsIG9wdHMpIHtcclxuXHRcdG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cdFx0VUkucHVsc2Vfc2VxdWVuY2UoXHJcblx0XHRcdGVsLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMudGltZXMgKSA/IG9wdHMudGltZXMgOiAzLFxyXG5cdFx0XHROdW1iZXIuaXNGaW5pdGUoIG9wdHMub25fbXMgKSA/IG9wdHMub25fbXMgOiAyODAsXHJcblx0XHRcdE51bWJlci5pc0Zpbml0ZSggb3B0cy5vZmZfbXMgKSA/IG9wdHMub2ZmX21zIDogMTgwLFxyXG5cdFx0XHRvcHRzLmNvbG9yXHJcblx0XHQpO1xyXG5cdH07XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBCYXNlIGNsYXNzIGZvciBCRkIgbW9kdWxlcy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Nb2R1bGUgPSBjbGFzcyB7XHJcblx0XHQvKiogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAqL1xyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBJbml0aWFsaXplIHRoZSBtb2R1bGUuICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBDbGVhbnVwIHRoZSBtb2R1bGUuICovXHJcblx0XHRkZXN0cm95KCkge1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENlbnRyYWwgb3ZlcmxheS9jb250cm9scyBtYW5hZ2VyIGZvciBmaWVsZHMvc2VjdGlvbnMuXHJcblx0ICogUHVyZSBVSSBjb21wb3NpdGlvbjsgYWxsIGFjdGlvbnMgcm91dGUgYmFjayBpbnRvIHRoZSBidWlsZGVyIGluc3RhbmNlLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX092ZXJsYXkgPSBjbGFzcyB7XG5cblx0XHQvKipcblx0XHQgKiBTeW5jaHJvbml6ZSBldmVyeSBvdmVybGF5IHNldHRpbmdzIGJ1dHRvbiB3aXRoIHRoZSByZWFsIEluc3BlY3RvciBzdGF0ZS5cblx0XHQgKlxuXHRcdCAqIEEgc2VsZWN0ZWQgY2FudmFzIGl0ZW0gY2FuIHJlbWFpbiBzZWxlY3RlZCB3aGlsZSBhbm90aGVyIHJpZ2h0LWJhciBwYW5lbCBpc1xuXHRcdCAqIHZpc2libGUuIENvbWJpbmluZyBib3RoIHN0YXRlcyBwcmV2ZW50cyBhIHN0YWxlIHByZXNzZWQgYnV0dG9uIGFmdGVyIHRoZVxuXHRcdCAqIGFkbWluaXN0cmF0b3Igc3dpdGNoZXMgYXdheSBmcm9tIHRoZSBJbnNwZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyIC0gQWN0aXZlIEZvcm0gQnVpbGRlciBpbnN0YW5jZS5cblx0XHQgKiBAcGFyYW0ge0hUTUxCdXR0b25FbGVtZW50W118Tm9kZUxpc3RPZjxIVE1MQnV0dG9uRWxlbWVudD58bnVsbH0gW3NldHRpbmdzX2J1dHRvbnM9bnVsbF1cblx0XHQgKiAgICAgT3B0aW9uYWwgYm91bmRlZCBjb250cm9scyB0byByZWNvbmNpbGUgZHVyaW5nIGluY3JlbWVudGFsIHJlbmRlcmluZy5cblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRzdGF0aWMgc3luY19zZXR0aW5nc19idXR0b25fc3RhdGVzKGJ1aWxkZXIsIHNldHRpbmdzX2J1dHRvbnMgPSBudWxsKSB7XG5cblx0XHRcdGNvbnN0IHBhZ2VzX2NvbnRhaW5lciA9IGJ1aWxkZXI/LnBhZ2VzX2NvbnRhaW5lcjtcblx0XHRcdGlmICggIXBhZ2VzX2NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnNwZWN0b3IgICAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcblx0XHRcdGNvbnN0IGluc3BlY3Rvcl9pc19vcGVuID0gISFpbnNwZWN0b3Jcblx0XHRcdFx0JiYgIWluc3BlY3Rvci5oYXNBdHRyaWJ1dGUoICdoaWRkZW4nIClcblx0XHRcdFx0JiYgaW5zcGVjdG9yLmdldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJyApICE9PSAndHJ1ZSc7XG5cdFx0XHRjb25zdCBzZWxlY3RhYmxlX3F1ZXJ5ICA9IGAke0NvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy5maWVsZH0sICR7Q29yZS5XUEJDX0JGQl9ET00uU0VMRUNUT1JTLnNlY3Rpb259YDtcblxuXHRcdFx0Y29uc3QgYnV0dG9ucyA9IHNldHRpbmdzX2J1dHRvbnMgfHwgcGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NldHRpbmdzLWJ0bicgKTtcblxuXHRcdFx0QXJyYXkuZnJvbSggYnV0dG9ucyApLmZvckVhY2goIChzZXR0aW5nc19idXR0b24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb3duZXIgICAgICA9IHNldHRpbmdzX2J1dHRvbi5jbG9zZXN0KCBzZWxlY3RhYmxlX3F1ZXJ5ICk7XG5cdFx0XHRcdGNvbnN0IGlzX3ByZXNzZWQgPSBpbnNwZWN0b3JfaXNfb3BlblxuXHRcdFx0XHRcdCYmICEhb3duZXI/LmNsYXNzTGlzdD8uY29udGFpbnMoIENvcmUuV1BCQ19CRkJfRE9NLkNMQVNTRVMuc2VsZWN0ZWQgKTtcblxuXHRcdFx0XHRzZXR0aW5nc19idXR0b24uc2V0QXR0cmlidXRlKCAnYXJpYS1wcmVzc2VkJywgaXNfcHJlc3NlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBFbnN1cmUgYW4gb3ZlcmxheSBleGlzdHMgYW5kIGlzIHdpcmVkIHVwIG9uIHRoZSBlbGVtZW50LlxuXHRcdCAqIEBwYXJhbSB7V1BCQ19Gb3JtX0J1aWxkZXJ9IGJ1aWxkZXJcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gZmllbGQgb3Igc2VjdGlvbiBlbGVtZW50XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBlbnN1cmUoYnVpbGRlciwgZWwpIHtcclxuXHJcblx0XHRcdGlmICggIWVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc1NlY3Rpb24gPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHJcblx0XHRcdC8vIGxldCBvdmVybGF5ID0gZWwucXVlcnlTZWxlY3RvciggQ29yZS5XUEJDX0JGQl9ET00uU0VMRUNUT1JTLm92ZXJsYXkgKTtcclxuXHRcdFx0bGV0IG92ZXJsYXkgPSBlbC5xdWVyeVNlbGVjdG9yKCBgOnNjb3BlID4gJHtDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMub3ZlcmxheX1gICk7XHJcblx0XHRcdGlmICggIW92ZXJsYXkgKSB7XHJcblx0XHRcdFx0b3ZlcmxheSA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnZGl2JywgJ3dwYmNfYmZiX19vdmVybGF5LWNvbnRyb2xzJyApO1xyXG5cdFx0XHRcdGVsLnByZXBlbmQoIG92ZXJsYXkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRHJhZyBoYW5kbGUuXHJcblx0XHRcdGlmICggIW92ZXJsYXkucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZHJhZy1oYW5kbGUnICkgKSB7XHJcblx0XHRcdFx0Y29uc3QgZHJhZ0NsYXNzID0gaXNTZWN0aW9uID8gJ3dwYmNfYmZiX19kcmFnLWhhbmRsZSBzZWN0aW9uLWRyYWctaGFuZGxlJyA6ICd3cGJjX2JmYl9fZHJhZy1oYW5kbGUnO1xyXG5cdFx0XHRcdG92ZXJsYXkuYXBwZW5kQ2hpbGQoXHJcblx0XHRcdFx0XHRDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ3NwYW4nLCBkcmFnQ2xhc3MsICc8c3BhbiBjbGFzcz1cIndwYmNfaWNuX2RyYWdfaW5kaWNhdG9yXCI+PC9zcGFuPicgKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cblxuXHRcdFx0Ly8gU0VUVElOR1MgYnV0dG9uIChzaG93biBmb3IgYm90aCBmaWVsZHMgJiBzZWN0aW9ucykuXG5cdFx0XHRsZXQgc2V0dGluZ3NfYnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19zZXR0aW5ncy1idG4nICk7XG5cdFx0XHRpZiAoICFzZXR0aW5nc19idG4gKSB7XG5cdFx0XHRcdHNldHRpbmdzX2J0biAgICAgICAgID0gQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuY3JlYXRlX2VsZW1lbnQoICdidXR0b24nLCAnd3BiY19iZmJfX3NldHRpbmdzLWJ0bicsICc8aSBjbGFzcz1cIm1lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX25lYXJfbWUgd3BiY19pY25fcm90YXRlXzI3MFwiPjwvaT4nICk7XG5cdFx0XHRcdHNldHRpbmdzX2J0bi50eXBlICAgID0gJ2J1dHRvbic7XG5cdFx0XHRcdHNldHRpbmdzX2J0bi50aXRsZSAgID0gJ09wZW4gc2V0dGluZ3MnO1xuXHRcdFx0XHRzZXR0aW5nc19idG4uc2V0QXR0cmlidXRlKCAnYXJpYS1sYWJlbCcsIHNldHRpbmdzX2J0bi50aXRsZSApO1xuXHRcdFx0XHRzZXR0aW5nc19idG4uc2V0QXR0cmlidXRlKCAnYXJpYS1jb250cm9scycsICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xuXHRcdFx0XHRzZXR0aW5nc19idG4uc2V0QXR0cmlidXRlKCAnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyApO1xuXHRcdFx0XHRzZXR0aW5nc19idG4ub25jbGljayA9IChlKSA9PiB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0Ly8gU2VsZWN0IFRISVMgZWxlbWVudCBhbmQgc2Nyb2xsIGl0IGludG8gdmlldy5cclxuXHRcdFx0XHRcdGJ1aWxkZXIuc2VsZWN0X2ZpZWxkKCBlbCwgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSB9ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQXV0by1vcGVuIEluc3BlY3RvciBmcm9tIHRoZSBvdmVybGF5IOKAnFNldHRpbmdz4oCdIGJ1dHRvbi5cclxuXHRcdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0XHQnd3BiY19iZmI6c2hvd19wYW5lbCcsXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0XHRcdHRhYl9pZCAgOiAnd3BiY190YWJfaW5zcGVjdG9yJ1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFRyeSB0byBicmluZyB0aGUgaW5zcGVjdG9yIGludG8gdmlldyAvIGZvY3VzIGZpcnN0IGlucHV0LlxyXG5cdFx0XHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0aWYgKCBpbnMgKSB7XHJcblx0XHRcdFx0XHRcdGlucy5zY3JvbGxJbnRvVmlldyggeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSApO1xyXG5cdFx0XHRcdFx0XHQvLyBGb2N1cyBmaXJzdCBpbnRlcmFjdGl2ZSBjb250cm9sIChiZXN0LWVmZm9ydCkuXHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBmb2N1c2FibGUgPSBpbnMucXVlcnlTZWxlY3RvciggJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sW2NvbnRlbnRlZGl0YWJsZV0sW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyApO1xyXG5cdFx0XHRcdFx0XHRcdGZvY3VzYWJsZT8uZm9jdXM/LigpO1xyXG5cdFx0XHRcdFx0XHR9LCAyNjAgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRvdmVybGF5LmFwcGVuZENoaWxkKCBzZXR0aW5nc19idG4gKTtcclxuXHRcdFx0fVxyXG5cblx0XHRcdG92ZXJsYXkuc2V0QXR0cmlidXRlKCAncm9sZScsICd0b29sYmFyJyApO1xuXHRcdFx0b3ZlcmxheS5zZXRBdHRyaWJ1dGUoICdhcmlhLWxhYmVsJywgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgPyAnU2VjdGlvbiB0b29scycgOiAnRmllbGQgdG9vbHMnICk7XG5cdFx0XHRVSS5XUEJDX0JGQl9PdmVybGF5LnN5bmNfc2V0dGluZ3NfYnV0dG9uX3N0YXRlcyggYnVpbGRlciwgWyBzZXR0aW5nc19idG4gXSApO1xuXG5cdFx0XHRyZXR1cm4gb3ZlcmxheTtcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogV1BCQyBMYXlvdXQgQ2hpcHMgaGVscGVyIC0gdmlzdWFsIGxheW91dCBwaWNrZXIgKGNoaXBzKSwgZS5nLiwgXCI1MCUvNTAlXCIsIHRvIGEgc2VjdGlvbiBvdmVybGF5LlxyXG5cdCAqXHJcblx0ICogUmVuZGVycyBFcXVhbC9QcmVzZXRzL0N1c3RvbSBjaGlwcyBpbnRvIGEgaG9zdCBjb250YWluZXIgYW5kIHdpcmVzIHRoZW0gdG8gYXBwbHkgdGhlIGxheW91dC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMgPSBjbGFzcyB7XHJcblxyXG5cdFx0LyoqIFJlYWQgcGVyLWNvbHVtbiBtaW4gKHB4KSBmcm9tIENTUyB2YXIgc2V0IGJ5IHRoZSBndWFyZC4gKi9cclxuXHRcdHN0YXRpYyBfZ2V0X2NvbF9taW5fcHgoY29sKSB7XHJcblx0XHRcdGNvbnN0IHYgPSBnZXRDb21wdXRlZFN0eWxlKCBjb2wgKS5nZXRQcm9wZXJ0eVZhbHVlKCAnLS13cGJjLWNvbC1taW4nICkgfHwgJzAnO1xyXG5cdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggdiApO1xyXG5cdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBNYXRoLm1heCggMCwgbiApIDogMDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFR1cm4gcmF3IHdlaWdodHMgKGUuZy4gWzEsMV0sIFsyLDEsMV0pIGludG8gZWZmZWN0aXZlIFwiYXZhaWxhYmxlLSVcIiBiYXNlcyB0aGF0XHJcblx0XHQgKiAoYSkgc3VtIHRvIHRoZSByb3cncyBhdmFpbGFibGUgJSwgYW5kIChiKSBtZWV0IGV2ZXJ5IGNvbHVtbidzIG1pbiBweC5cclxuXHRcdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgYmFzZXMgKG51bWJlcnMpIG9yIG51bGwgaWYgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IG1pbnMuXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBfZml0X3dlaWdodHNfcmVzcGVjdGluZ19taW4oYnVpbGRlciwgcm93LCB3ZWlnaHRzKSB7XHJcblx0XHRcdGNvbnN0IGNvbHMgPSBBcnJheS5mcm9tKCByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApICk7XHJcblx0XHRcdGNvbnN0IG4gICAgPSBjb2xzLmxlbmd0aDtcclxuXHRcdFx0aWYgKCAhbiApIHJldHVybiBudWxsO1xyXG5cdFx0XHRpZiAoICFBcnJheS5pc0FycmF5KCB3ZWlnaHRzICkgfHwgd2VpZ2h0cy5sZW5ndGggIT09IG4gKSByZXR1cm4gbnVsbDtcclxuXHJcblx0XHRcdC8vIGF2YWlsYWJsZSAlIGFmdGVyIGdhcHMgKGZyb20gTGF5b3V0U2VydmljZSlcclxuXHRcdFx0Y29uc3QgZ3AgICAgICAgPSBidWlsZGVyLmNvbF9nYXBfcGVyY2VudDtcclxuXHRcdFx0Y29uc3QgZWZmICAgICAgPSBidWlsZGVyLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93LCBncCApO1xyXG5cdFx0XHRjb25zdCBhdmFpbFBjdCA9IGVmZi5hdmFpbGFibGU7ICAgICAgICAgICAgICAgLy8gZS5nLiA5NCBpZiAyIGNvbHMgYW5kIDMlIGdhcFxyXG5cdFx0XHRjb25zdCByb3dQeCAgICA9IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgYXZhaWxQeCAgPSByb3dQeCAqIChhdmFpbFBjdCAvIDEwMCk7XHJcblxyXG5cdFx0XHQvLyBjb2xsZWN0IG1pbmltYSBpbiAlIG9mIFwiYXZhaWxhYmxlXCJcclxuXHRcdFx0Y29uc3QgbWluUGN0ID0gY29scy5tYXAoIChjKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbWluUHggPSBVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2dldF9jb2xfbWluX3B4KCBjICk7XHJcblx0XHRcdFx0aWYgKCBhdmFpbFB4IDw9IDAgKSByZXR1cm4gMDtcclxuXHRcdFx0XHRyZXR1cm4gKG1pblB4IC8gYXZhaWxQeCkgKiBhdmFpbFBjdDtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Ly8gSWYgbWlucyBhbG9uZSBkb24ndCBmaXQsIGJhaWwuXHJcblx0XHRcdGNvbnN0IHN1bU1pbiA9IG1pblBjdC5yZWR1Y2UoIChhLCBiKSA9PiBhICsgYiwgMCApO1xyXG5cdFx0XHRpZiAoIHN1bU1pbiA+IGF2YWlsUGN0IC0gMWUtNiApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDsgLy8gaW1wb3NzaWJsZSB0byByZXNwZWN0IG1pbnM7IGRvbid0IGFwcGx5IHByZXNldFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUYXJnZXQgcGVyY2VudGFnZXMgZnJvbSB3ZWlnaHRzLCBub3JtYWxpemVkIHRvIGF2YWlsUGN0LlxyXG5cdFx0XHRjb25zdCB3U3VtICAgICAgPSB3ZWlnaHRzLnJlZHVjZSggKGEsIHcpID0+IGEgKyAoTnVtYmVyKCB3ICkgfHwgMCksIDAgKSB8fCBuO1xyXG5cdFx0XHRjb25zdCB0YXJnZXRQY3QgPSB3ZWlnaHRzLm1hcCggKHcpID0+ICgoTnVtYmVyKCB3ICkgfHwgMCkgLyB3U3VtKSAqIGF2YWlsUGN0ICk7XHJcblxyXG5cdFx0XHQvLyBMb2NrIGNvbHVtbnMgdGhhdCB3b3VsZCBiZSBiZWxvdyBtaW4sIHRoZW4gZGlzdHJpYnV0ZSB0aGUgcmVtYWluZGVyXHJcblx0XHRcdC8vIGFjcm9zcyB0aGUgcmVtYWluaW5nIGNvbHVtbnMgcHJvcG9ydGlvbmFsbHkgdG8gdGhlaXIgdGFyZ2V0UGN0LlxyXG5cdFx0XHRjb25zdCBsb2NrZWQgID0gbmV3IEFycmF5KCBuICkuZmlsbCggZmFsc2UgKTtcclxuXHRcdFx0bGV0IGxvY2tlZFN1bSA9IDA7XHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG47IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIHRhcmdldFBjdFtpXSA8IG1pblBjdFtpXSApIHtcclxuXHRcdFx0XHRcdGxvY2tlZFtpXSA9IHRydWU7XHJcblx0XHRcdFx0XHRsb2NrZWRTdW0gKz0gbWluUGN0W2ldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IHJlbWFpbmluZyAgICAgPSBhdmFpbFBjdCAtIGxvY2tlZFN1bTtcclxuXHRcdFx0Y29uc3QgZnJlZUlkeCAgICAgPSBbXTtcclxuXHRcdFx0bGV0IGZyZWVUYXJnZXRTdW0gPSAwO1xyXG5cdFx0XHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBuOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCAhbG9ja2VkW2ldICkge1xyXG5cdFx0XHRcdFx0ZnJlZUlkeC5wdXNoKCBpICk7XHJcblx0XHRcdFx0XHRmcmVlVGFyZ2V0U3VtICs9IHRhcmdldFBjdFtpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSggbiApLmZpbGwoIDAgKTtcclxuXHRcdFx0Ly8gU2VlZCBsb2NrZWQgd2l0aCB0aGVpciBtaW5pbWEuXHJcblx0XHRcdGZvciAoIGxldCBpID0gMDsgaSA8IG47IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIGxvY2tlZFtpXSApIHJlc3VsdFtpXSA9IG1pblBjdFtpXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBmcmVlSWR4Lmxlbmd0aCA9PT0gMCApIHtcclxuXHRcdFx0XHQvLyBldmVyeXRoaW5nIGxvY2tlZCBleGFjdGx5IGF0IG1pbjsgYW55IGxlZnRvdmVyIChzaG91bGRuJ3QgaGFwcGVuKVxyXG5cdFx0XHRcdC8vIHdvdWxkIGJlIGlnbm9yZWQgdG8ga2VlcCBzaW1wbGljaXR5IGFuZCBzdGFiaWxpdHkuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCByZW1haW5pbmcgPD0gMCApIHtcclxuXHRcdFx0XHQvLyBub3RoaW5nIGxlZnQgdG8gZGlzdHJpYnV0ZTsga2VlcCBleGFjdGx5IG1pbnMgb24gbG9ja2VkLFxyXG5cdFx0XHRcdC8vIG5vdGhpbmcgZm9yIGZyZWUgKGRlZ2VuZXJhdGUgYnV0IGNvbnNpc3RlbnQpXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBmcmVlVGFyZ2V0U3VtIDw9IDAgKSB7XHJcblx0XHRcdFx0Ly8gZGlzdHJpYnV0ZSBlcXVhbGx5IGFtb25nIGZyZWUgY29sdW1uc1xyXG5cdFx0XHRcdGNvbnN0IGVhY2ggPSByZW1haW5pbmcgLyBmcmVlSWR4Lmxlbmd0aDtcclxuXHRcdFx0XHRmcmVlSWR4LmZvckVhY2goIChpKSA9PiAocmVzdWx0W2ldID0gZWFjaCkgKTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEaXN0cmlidXRlIHJlbWFpbmluZyBwcm9wb3J0aW9uYWxseSB0byBmcmVlIGNvbHVtbnMnIHRhcmdldFBjdFxyXG5cdFx0XHRmcmVlSWR4LmZvckVhY2goIChpKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2ldID0gcmVtYWluaW5nICogKHRhcmdldFBjdFtpXSAvIGZyZWVUYXJnZXRTdW0pO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEFwcGx5IGEgcHJlc2V0IGJ1dCBndWFyZCBpdCBieSBtaW5pbWE7IHJldHVybnMgdHJ1ZSBpZiBhcHBsaWVkLCBmYWxzZSBpZiBza2lwcGVkLiAqL1xyXG5cdFx0c3RhdGljIF9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cykge1xyXG5cdFx0XHRjb25zdCByb3cgPSBzZWN0aW9uX2VsLnF1ZXJ5U2VsZWN0b3IoICc6c2NvcGUgPiAud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0aWYgKCAhcm93ICkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0Y29uc3QgZml0dGVkID0gVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9maXRfd2VpZ2h0c19yZXNwZWN0aW5nX21pbiggYnVpbGRlciwgcm93LCB3ZWlnaHRzICk7XHJcblx0XHRcdGlmICggIWZpdHRlZCApIHtcclxuXHRcdFx0XHRidWlsZGVyPy5fYW5ub3VuY2U/LiggJ05vdCBlbm91Z2ggc3BhY2UgZm9yIHRoaXMgbGF5b3V0IGJlY2F1c2Ugb2YgZmllbGRz4oCZIG1pbmltdW0gd2lkdGhzLicgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGBmaXR0ZWRgIGFscmVhZHkgc3VtcyB0byB0aGUgcm934oCZcyBhdmFpbGFibGUgJSwgc28gd2UgY2FuIGFwcGx5IGJhc2VzIGRpcmVjdGx5LlxyXG5cdFx0XHRidWlsZGVyLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvdywgZml0dGVkICk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkIGFuZCBhcHBlbmQgbGF5b3V0IGNoaXBzIGZvciBhIHNlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlciAtIFRoZSBmb3JtIGJ1aWxkZXIgaW5zdGFuY2UuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzZWN0aW9uX2VsIC0gVGhlIC53cGJjX2JmYl9fc2VjdGlvbiBlbGVtZW50LlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaG9zdF9lbCAtIENvbnRhaW5lciB3aGVyZSBjaGlwcyBzaG91bGQgYmUgcmVuZGVyZWQuXHJcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHJlbmRlcl9mb3Jfc2VjdGlvbihidWlsZGVyLCBzZWN0aW9uX2VsLCBob3N0X2VsKSB7XHJcblxyXG5cdFx0XHRpZiAoICFidWlsZGVyIHx8ICFzZWN0aW9uX2VsIHx8ICFob3N0X2VsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdGlmICggIXJvdyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmxlbmd0aCB8fCAxO1xyXG5cclxuXHRcdFx0Ly8gQ2xlYXIgaG9zdC5cclxuXHRcdFx0aG9zdF9lbC5pbm5lckhUTUwgPSAnJztcclxuXHJcblx0XHRcdC8vIEVxdWFsIGNoaXAuXHJcblx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoXHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9tYWtlX2NoaXAoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIEFycmF5KCBjb2xzICkuZmlsbCggMSApLCAnRXF1YWwnIClcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdC8vIFByZXNldHMgYmFzZWQgb24gY29sdW1uIGNvdW50LlxyXG5cdFx0XHRjb25zdCBwcmVzZXRzID0gYnVpbGRlci5sYXlvdXQuYnVpbGRfcHJlc2V0c19mb3JfY29sdW1ucyggY29scyApO1xyXG5cdFx0XHRwcmVzZXRzLmZvckVhY2goICh3ZWlnaHRzKSA9PiB7XHJcblx0XHRcdFx0aG9zdF9lbC5hcHBlbmRDaGlsZChcclxuXHRcdFx0XHRcdFVJLldQQkNfQkZCX0xheW91dF9DaGlwcy5fbWFrZV9jaGlwKCBidWlsZGVyLCBzZWN0aW9uX2VsLCB3ZWlnaHRzLCBudWxsIClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBDdXN0b20gY2hpcC5cclxuXHRcdFx0Y29uc3QgY3VzdG9tQnRuICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2J1dHRvbicgKTtcclxuXHRcdFx0Y3VzdG9tQnRuLnR5cGUgICAgICAgID0gJ2J1dHRvbic7XHJcblx0XHRcdGN1c3RvbUJ0bi5jbGFzc05hbWUgICA9ICd3cGJjX2JmYl9fbGF5b3V0X2NoaXAnO1xyXG5cdFx0XHRjdXN0b21CdG4udGV4dENvbnRlbnQgPSAnQ3VzdG9t4oCmJztcclxuXHRcdFx0Y3VzdG9tQnRuLnRpdGxlICAgICAgID0gYEVudGVyICR7Y29sc30gcGVyY2VudGFnZXNgO1xyXG5cdFx0XHRjdXN0b21CdG4uYWRkRXZlbnRMaXN0ZW5lciggJ2NsaWNrJywgKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGV4YW1wbGUgPSAoY29scyA9PT0gMikgPyAnNTAsNTAnIDogKGNvbHMgPT09IDMgPyAnMjAsNjAsMjAnIDogJzI1LDI1LDI1LDI1Jyk7XHJcblx0XHRcdFx0Y29uc3QgdGV4dCAgICA9IHByb21wdCggYEVudGVyICR7Y29sc30gcGVyY2VudGFnZXMgKGNvbW1hIG9yIHNwYWNlIHNlcGFyYXRlZCk6YCwgZXhhbXBsZSApO1xyXG5cdFx0XHRcdGlmICggdGV4dCA9PSBudWxsICkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IHdlaWdodHMgPSBidWlsZGVyLmxheW91dC5wYXJzZV93ZWlnaHRzKCB0ZXh0ICk7XHJcblx0XHRcdFx0aWYgKCB3ZWlnaHRzLmxlbmd0aCAhPT0gY29scyApIHtcclxuXHRcdFx0XHRcdGFsZXJ0KCBgUGxlYXNlIGVudGVyIGV4YWN0bHkgJHtjb2xzfSBudW1iZXJzLmAgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gT0xEOlxyXG5cdFx0XHRcdC8vIGJ1aWxkZXIubGF5b3V0LmFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25fZWwsIHdlaWdodHMsIGJ1aWxkZXIuY29sX2dhcF9wZXJjZW50ICk7XHJcblx0XHRcdFx0Ly8gR3VhcmRlZCBhcHBseTouXHJcblx0XHRcdFx0aWYgKCAhVUkuV1BCQ19CRkJfTGF5b3V0X0NoaXBzLl9hcHBseV9wcmVzZXRfd2l0aF9taW5fZ3VhcmQoIGJ1aWxkZXIsIHNlY3Rpb25fZWwsIHdlaWdodHMgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aG9zdF9lbC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19sYXlvdXRfY2hpcCcgKS5mb3JFYWNoKCBjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSggJ2lzLWFjdGl2ZScgKSApO1xyXG5cdFx0XHRcdGN1c3RvbUJ0bi5jbGFzc0xpc3QuYWRkKCAnaXMtYWN0aXZlJyApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGhvc3RfZWwuYXBwZW5kQ2hpbGQoIGN1c3RvbUJ0biApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ3JlYXRlIGEgc2luZ2xlIGxheW91dCBjaGlwIGJ1dHRvbi5cclxuXHRcdCAqXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VjdGlvbl9lbFxyXG5cdFx0ICogQHBhcmFtIHtudW1iZXJbXX0gd2VpZ2h0c1xyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gbGFiZWxcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MQnV0dG9uRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9tYWtlX2NoaXAoYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cywgbGFiZWwgPSBudWxsKSB7XHJcblxyXG5cdFx0XHRjb25zdCBidG4gICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2J1dHRvbicgKTtcclxuXHRcdFx0YnRuLnR5cGUgICAgICA9ICdidXR0b24nO1xyXG5cdFx0XHRidG4uY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcCc7XHJcblxyXG5cdFx0XHRjb25zdCB0aXRsZSA9IGxhYmVsIHx8IGJ1aWxkZXIubGF5b3V0LmZvcm1hdF9wcmVzZXRfbGFiZWwoIHdlaWdodHMgKTtcclxuXHRcdFx0YnRuLnRpdGxlICAgPSB0aXRsZTtcclxuXHJcblx0XHRcdC8vIFZpc3VhbCBtaW5pYXR1cmUuXHJcblx0XHRcdGNvbnN0IHZpcyAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHR2aXMuY2xhc3NOYW1lID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcC12aXMnO1xyXG5cdFx0XHRjb25zdCBzdW0gICAgID0gd2VpZ2h0cy5yZWR1Y2UoIChhLCBiKSA9PiBhICsgKE51bWJlciggYiApIHx8IDApLCAwICkgfHwgMTtcclxuXHRcdFx0d2VpZ2h0cy5mb3JFYWNoKCAodykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGJhciAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7XHJcblx0XHRcdFx0YmFyLnN0eWxlLmZsZXggPSBgMCAwIGNhbGMoICR7KChOdW1iZXIoIHcgKSB8fCAwKSAvIHN1bSAqIDEwMCkudG9GaXhlZCggMyApfSUgLSAxLjVweCApYDtcclxuXHRcdFx0XHR2aXMuYXBwZW5kQ2hpbGQoIGJhciApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggdmlzICk7XHJcblxyXG5cdFx0XHRjb25zdCB0eHQgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTtcclxuXHRcdFx0dHh0LmNsYXNzTmFtZSAgID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcC1sYWJlbCc7XHJcblx0XHRcdHR4dC50ZXh0Q29udGVudCA9IGxhYmVsIHx8IGJ1aWxkZXIubGF5b3V0LmZvcm1hdF9wcmVzZXRfbGFiZWwoIHdlaWdodHMgKTtcclxuXHRcdFx0YnRuLmFwcGVuZENoaWxkKCB0eHQgKTtcclxuXHJcblx0XHRcdGJ0bi5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdFx0Ly8gT0xEOlxyXG5cdFx0XHRcdC8vIGJ1aWxkZXIubGF5b3V0LmFwcGx5X2xheW91dF9wcmVzZXQoIHNlY3Rpb25fZWwsIHdlaWdodHMsIGJ1aWxkZXIuY29sX2dhcF9wZXJjZW50ICk7XHJcblxyXG5cdFx0XHRcdC8vIE5FVzpcclxuXHRcdFx0XHRpZiAoICFVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2FwcGx5X3ByZXNldF93aXRoX21pbl9ndWFyZCggYnVpbGRlciwgc2VjdGlvbl9lbCwgd2VpZ2h0cyApICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBkbyBub3QgdG9nZ2xlIGFjdGl2ZSBpZiB3ZSBkaWRuJ3QgY2hhbmdlIGxheW91dFxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnRuLnBhcmVudEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2xheW91dF9jaGlwJyApLmZvckVhY2goIGMgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtYWN0aXZlJyApICk7XHJcblx0XHRcdFx0YnRuLmNsYXNzTGlzdC5hZGQoICdpcy1hY3RpdmUnICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHJldHVybiBidG47XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VsZWN0aW9uIGNvbnRyb2xsZXIgZm9yIGZpZWxkcyBhbmQgYW5ub3VuY2VtZW50cy5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9TZWxlY3Rpb25fQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHJcblx0XHRpbml0KCkge1xyXG5cclxuXHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkICAgICAgICAgICAgICA9IG51bGw7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5zZWxlY3RfZmllbGQgICAgICAgPSB0aGlzLnNlbGVjdF9maWVsZC5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc2VsZWN0ZWRfZmllbGQgPSB0aGlzLmdldF9zZWxlY3RlZF9maWVsZC5iaW5kKCB0aGlzICk7XG5cdFx0XHR0aGlzLl9vbl9jbGVhciAgICAgICAgICAgICAgICAgID0gdGhpcy5vbl9jbGVhci5iaW5kKCB0aGlzICk7XG5cdFx0XHR0aGlzLl9vbl9wYW5lbF9zaG93biAgICAgICAgICAgID0gdGhpcy5fc3luY19zZXR0aW5nc19idXR0b25fc3RhdGVzLmJpbmQoIHRoaXMgKTtcblxyXG5cdFx0XHQvLyBDZW50cmFsaXplZCBkZWxldGUgY29tbWFuZCB1c2VkIGJ5IGtleWJvYXJkICsgaW5zcGVjdG9yICsgb3ZlcmxheS5cclxuXHRcdFx0dGhpcy5idWlsZGVyLmRlbGV0ZV9pdGVtID0gKGVsKSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhZWwgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYiAgICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdFx0Y29uc3QgbmVpZ2hib3IgPSBiLl9maW5kX25laWdoYm9yX3NlbGVjdGFibGU/LiggZWwgKSB8fCBudWxsO1xyXG5cdFx0XHRcdGVsLnJlbW92ZSgpO1xyXG5cdFx0XHRcdC8vIFVzZSBsb2NhbCBDb3JlIGNvbnN0YW50cyAobm90IGEgZ2xvYmFsKSB0byBhdm9pZCBSZWZlcmVuY2VFcnJvcnMuXHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuRklFTERfUkVNT1ZFLCB7IGVsLCBpZDogZWw/LmRhdGFzZXQ/LmlkLCB1aWQ6IGVsPy5kYXRhc2V0Py51aWQgfSApO1xyXG5cdFx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0XHQvLyBOb3RpZnkgZ2VuZXJpYyBzdHJ1Y3R1cmUgbGlzdGVuZXJzLCB0b286XHJcblx0XHRcdFx0Yi5idXM/LmVtaXQ/LiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0NIQU5HRSwgeyByZWFzb246ICdkZWxldGUnLCBlbCB9ICk7XHJcblx0XHRcdFx0Ly8gRGVmZXIgc2VsZWN0aW9uIGEgdGljayBzbyB0aGUgRE9NIGlzIGZ1bGx5IHNldHRsZWQgYmVmb3JlIEluc3BlY3RvciBoeWRyYXRlcy5cclxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcclxuXHRcdFx0XHRcdC8vIFRoaXMgY2FsbHMgaW5zcGVjdG9yLmJpbmRfdG9fZmllbGQoKSBhbmQgb3BlbnMgdGhlIEluc3BlY3RvciBwYW5lbC5cclxuXHRcdFx0XHRcdGIuc2VsZWN0X2ZpZWxkPy4oIG5laWdoYm9yIHx8IG51bGwsIHsgc2Nyb2xsSW50b1ZpZXc6ICEhbmVpZ2hib3IgfSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRyZXR1cm4gbmVpZ2hib3I7XHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub24oIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5vbiggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fY2xlYXIgKTtcclxuXHRcdFx0Ly8gZGVsZWdhdGVkIGNsaWNrIHNlbGVjdGlvbiAoY2FwdHVyZSBlbnN1cmVzIHdlIHdpbiBiZWZvcmUgYnViYmxpbmcgdG8gY29udGFpbmVycykuXHJcblx0XHRcdHRoaXMuX29uX2NhbnZhc19jbGljayA9IHRoaXMuX2hhbmRsZV9jYW52YXNfY2xpY2suYmluZCggdGhpcyApO1xuXHRcdFx0dGhpcy5idWlsZGVyLnBhZ2VzX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLl9vbl9jYW52YXNfY2xpY2ssIHRydWUgKTtcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYjpwYW5lbF9zaG93bicsIHRoaXMuX29uX3BhbmVsX3Nob3duICk7XG5cdFx0XHR0aGlzLl9zeW5jX3NldHRpbmdzX2J1dHRvbl9zdGF0ZXMoKTtcblx0XHR9XG5cclxuXHRcdGRlc3Ryb3koKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5idXMub2ZmKCBDb3JlLldQQkNfQkZCX0V2ZW50cy5DTEVBUl9TRUxFQ1RJT04sIHRoaXMuX29uX2NsZWFyICk7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMuX29uX2NhbnZhc19jbGljayApIHtcblx0XHRcdFx0dGhpcy5idWlsZGVyLnBhZ2VzX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLl9vbl9jYW52YXNfY2xpY2ssIHRydWUgKTtcblx0XHRcdFx0dGhpcy5fb25fY2FudmFzX2NsaWNrID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLl9vbl9wYW5lbF9zaG93biApIHtcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiOnBhbmVsX3Nob3duJywgdGhpcy5fb25fcGFuZWxfc2hvd24gKTtcblx0XHRcdFx0dGhpcy5fb25fcGFuZWxfc2hvd24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJlZnJlc2ggb3ZlcmxheSBidXR0b24gc3RhdGUgYWZ0ZXIgc2VsZWN0aW9uIG9yIHJpZ2h0LWJhciBwYW5lbCBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0X3N5bmNfc2V0dGluZ3NfYnV0dG9uX3N0YXRlcygpIHtcblx0XHRcdFVJLldQQkNfQkZCX092ZXJsYXkuc3luY19zZXR0aW5nc19idXR0b25fc3RhdGVzKCB0aGlzLmJ1aWxkZXIgKTtcblx0XHR9XG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRGVsZWdhdGVkIGNhbnZhcyBjbGljayAtPiBzZWxlY3QgY2xvc2VzdCBmaWVsZC9zZWN0aW9uIChpbm5lciBiZWF0cyBvdXRlcikuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlXHJcblx0XHQgKi9cclxuXHRcdF9oYW5kbGVfY2FudmFzX2NsaWNrKGUpIHtcclxuXHRcdFx0Y29uc3Qgcm9vdCA9IHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXI7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBJZ25vcmUgY2xpY2tzIG9uIGNvbnRyb2xzL2hhbmRsZXMvcmVzaXplcnMsIGV0Yy5cclxuXHRcdFx0Y29uc3QgSUdOT1JFID0gW1xyXG5cdFx0XHRcdCcud3BiY19iZmJfX292ZXJsYXktY29udHJvbHMnLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2xheW91dF9waWNrZXInLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2RyYWctaGFuZGxlJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1yZW1vdmUtYnRuJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1tb3ZlLXVwJyxcclxuXHRcdFx0XHQnLndwYmNfYmZiX19maWVsZC1tb3ZlLWRvd24nLFxyXG5cdFx0XHRcdCcud3BiY19iZmJfX2NvbHVtbi1yZXNpemVyJ1xyXG5cdFx0XHRdLmpvaW4oICcsJyApO1xyXG5cclxuXHRcdFx0aWYgKCBlLnRhcmdldC5jbG9zZXN0KCBJR05PUkUgKSApIHtcclxuXHRcdFx0XHRyZXR1cm47IC8vIGxldCB0aG9zZSBjb250cm9scyBkbyB0aGVpciBvd24gdGhpbmcuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbmQgdGhlIGNsb3Nlc3Qgc2VsZWN0YWJsZSAoZmllbGQgT1Igc2VjdGlvbikgZnJvbSB0aGUgY2xpY2sgdGFyZ2V0LlxyXG5cdFx0XHRsZXQgaGl0ID0gZS50YXJnZXQuY2xvc2VzdD8uKFxyXG5cdFx0XHRcdGAke0NvcmUuV1BCQ19CRkJfRE9NLlNFTEVDVE9SUy52YWxpZEZpZWxkfSwgJHtDb3JlLldQQkNfQkZCX0RPTS5TRUxFQ1RPUlMuc2VjdGlvbn0sIC53cGJjX2JmYl9fY29sdW1uYFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aWYgKCAhaGl0IHx8ICFyb290LmNvbnRhaW5zKCBoaXQgKSApIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdF9maWVsZCggbnVsbCApOyAgICAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIG9uIGJsYW5rIGNsaWNrLlxyXG5cdFx0XHRcdHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbXB0eSBzcGFjZSBpcyBoYW5kbGVkIGVsc2V3aGVyZS5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiBpZiB1c2VyIGNsaWNrZWQgYSBDT0xVTU4gLT4gcmVtZW1iZXIgdGFiIGtleSBvbiBpdHMgU0VDVElPTiwgYnV0IHN0aWxsIHNlbGVjdCB0aGUgc2VjdGlvbi5cclxuXHRcdFx0bGV0IHByZXNlbGVjdF90YWJfa2V5ID0gbnVsbDtcclxuXHRcdFx0aWYgKCBoaXQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKSApIHtcclxuXHRcdFx0XHRjb25zdCByb3cgID0gaGl0LmNsb3Nlc3QoICcud3BiY19iZmJfX3JvdycgKTtcclxuXHRcdFx0XHRjb25zdCBjb2xzID0gcm93ID8gQXJyYXkuZnJvbSggcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKSApIDogW107XHJcblx0XHRcdFx0Y29uc3QgaWR4ICA9IE1hdGgubWF4KCAwLCBjb2xzLmluZGV4T2YoIGhpdCApICk7XHJcblx0XHRcdFx0Y29uc3Qgc2VjICA9IGhpdC5jbG9zZXN0KCAnLndwYmNfYmZiX19zZWN0aW9uJyApO1xyXG5cdFx0XHRcdGlmICggc2VjICkge1xyXG5cdFx0XHRcdFx0cHJlc2VsZWN0X3RhYl9rZXkgPSBTdHJpbmcoIGlkeCArIDEgKTsgICAgICAgICAgICAgIC8vIHRhYnMgYXJlIDEtYmFzZWQgaW4gdWktY29sdW1uLXN0eWxlcy5qc1xyXG5cdFx0XHRcdFx0Ly8gSGludCBmb3IgdGhlIHJlbmRlcmVyIChpdCByZWFkcyB0aGlzIEJFRk9SRSByZW5kZXJpbmcgYW5kIHJlc3RvcmVzIHRoZSB0YWIpLlxyXG5cdFx0XHRcdFx0c2VjLmRhdGFzZXQuY29sX3N0eWxlc19hY3RpdmVfdGFiID0gcHJlc2VsZWN0X3RhYl9rZXk7XHJcblx0XHRcdFx0XHQvLyBwcm9tb3RlIHNlbGVjdGlvbiB0byB0aGUgc2VjdGlvbiAoc2FtZSBVWCBhcyBiZWZvcmUpLlxyXG5cdFx0XHRcdFx0aGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2VjO1xyXG5cdFx0XHRcdFx0Ly8gTkVXOiB2aXN1YWxseSBtYXJrIHdoaWNoIGNvbHVtbiBpcyBiZWluZyBlZGl0ZWRcclxuXHRcdFx0XHRcdGlmICggVUkgJiYgVUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcyAmJiBVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLnNldF9zZWxlY3RlZF9jb2xfZmxhZyApIHtcclxuXHRcdFx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5zZXRfc2VsZWN0ZWRfY29sX2ZsYWcoIHNlYywgcHJlc2VsZWN0X3RhYl9rZXkgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNlbGVjdCBhbmQgc3RvcCBidWJibGluZyBzbyBvdXRlciBjb250YWluZXJzIGRvbuKAmXQgcmVzZWxlY3QgYSBwYXJlbnQuXHJcblx0XHRcdHRoaXMuc2VsZWN0X2ZpZWxkKCBoaXQgKTtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdC8vIEFsc28gc2V0IHRoZSB0YWIgYWZ0ZXIgdGhlIGluc3BlY3RvciByZW5kZXJzICh3b3JrcyBldmVuIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW4pLlxyXG5cdFx0XHRpZiAoIHByZXNlbGVjdF90YWJfa2V5ICkge1xyXG5cdFx0XHRcdCh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHNldFRpbWVvdXQpKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbnMgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0YWJzID0gaW5zICYmIGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJjb2x1bW5fc3R5bGVzXCJdIFtkYXRhLXdwYmMtdGFic10nICk7XHJcblx0XHRcdFx0XHRcdGlmICggdGFicyAmJiB3aW5kb3cud3BiY191aV90YWJzICYmIHR5cGVvZiB3aW5kb3cud3BiY191aV90YWJzLnNldF9hY3RpdmUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0d2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlKCB0YWJzLCBwcmVzZWxlY3RfdGFiX2tleSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSwgMCApO1xyXG5cclxuXHRcdFx0XHQvLyBQb2xpdGVseSBhc2sgdGhlIEluc3BlY3RvciB0byBmb2N1cy9vcGVuIHRoZSBcIkNvbHVtbiBTdHlsZXNcIiBncm91cCBhbmQgdGFiLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOmluc3BlY3Rvcl9mb2N1cycsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGdyb3VwICA6ICdjb2x1bW5fc3R5bGVzJyxcclxuXHRcdFx0XHRcdFx0dGFiX2tleTogcHJlc2VsZWN0X3RhYl9rZXlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2VsZWN0IGEgZmllbGQgZWxlbWVudCBvciBjbGVhciBzZWxlY3Rpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBmaWVsZF9lbFxyXG5cdFx0ICogQHBhcmFtIHt7c2Nyb2xsSW50b1ZpZXc/OiBib29sZWFufX0gW29wdHMgPSB7fV1cclxuXHRcdCAqL1xyXG5cdFx0c2VsZWN0X2ZpZWxkKGZpZWxkX2VsLCB7IHNjcm9sbEludG9WaWV3ID0gZmFsc2UgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IHJvb3QgICA9IHRoaXMuYnVpbGRlci5wYWdlc19jb250YWluZXI7XHJcblx0XHRcdGNvbnN0IHByZXZFbCA9IHRoaXMuZ2V0X3NlbGVjdGVkX2ZpZWxkPy4oKSB8fCBudWxsOyAgIC8vIHRoZSBvbmUgd2XigJlyZSBsZWF2aW5nLlxyXG5cclxuXHRcdFx0Ly8gSWdub3JlIGVsZW1lbnRzIG5vdCBpbiB0aGUgY2FudmFzLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsICYmICFyb290LmNvbnRhaW5zKCBmaWVsZF9lbCApICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsID0gbnVsbDsgLy8gdHJlYXQgYXMgXCJubyBzZWxlY3Rpb25cIi5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTkVXOiBpZiB3ZSBhcmUgbGVhdmluZyBhIHNlY3Rpb24sIGNsZWFyIGl0cyBjb2x1bW4gaGlnaGxpZ2h0XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRwcmV2RWwgJiYgcHJldkVsICE9PSBmaWVsZF9lbCAmJlxyXG5cdFx0XHRcdHByZXZFbC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiZcclxuXHRcdFx0XHRVST8uV1BCQ19CRkJfQ29sdW1uX1N0eWxlcz8uY2xlYXJfc2VsZWN0ZWRfY29sX2ZsYWdcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0VUkuV1BCQ19CRkJfQ29sdW1uX1N0eWxlcy5jbGVhcl9zZWxlY3RlZF9jb2xfZmxhZyggcHJldkVsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIHdlJ3JlIGxlYXZpbmcgYSBmaWVsZCwgcGVybWFuZW50bHkgc3RvcCBhdXRvLW5hbWUgZm9yIGl0LlxyXG5cdFx0XHRpZiAoIHByZXZFbCAmJiBwcmV2RWwgIT09IGZpZWxkX2VsICYmIHByZXZFbC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdHByZXZFbC5kYXRhc2V0LmF1dG9uYW1lID0gJzAnO1xyXG5cdFx0XHRcdHByZXZFbC5kYXRhc2V0LmZyZXNoICAgID0gJzAnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcuaXMtc2VsZWN0ZWQnICkuZm9yRWFjaCggKG4pID0+IHtcclxuXHRcdFx0XHRuLmNsYXNzTGlzdC5yZW1vdmUoICdpcy1zZWxlY3RlZCcgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRpZiAoICFmaWVsZF9lbCApIHtcclxuXHRcdFx0XHRjb25zdCBwcmV2ICAgICAgICAgPSB0aGlzLl9zZWxlY3RlZF91aWQgfHwgbnVsbDtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZF91aWQgPSBudWxsO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5pbnNwZWN0b3I/LmNsZWFyPy4oKTtcclxuXHRcdFx0XHRyb290LmNsYXNzTGlzdC5yZW1vdmUoICdoYXMtc2VsZWN0aW9uJyApO1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRlci5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuQ0xFQVJfU0VMRUNUSU9OLCB7IHByZXZfdWlkOiBwcmV2LCBzb3VyY2U6ICdidWlsZGVyJyB9ICk7XHJcblxyXG5cdFx0XHRcdC8vIEF1dG8tb3BlbiBcIkFkZCBGaWVsZHNcIiB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQuXHJcblx0XHRcdFx0d3BiY19iZmJfX2Rpc3BhdGNoX2V2ZW50X3NhZmUoXG5cdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0cGFuZWxfaWQ6ICd3cGJjX2JmYl9fcGFsZXR0ZV9hZGRfbmV3JyxcclxuXHRcdFx0XHRcdFx0dGFiX2lkICA6ICd3cGJjX3RhYl9saWJyYXJ5J1xyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9zeW5jX3NldHRpbmdzX2J1dHRvbl9zdGF0ZXMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XHJcblx0XHRcdGZpZWxkX2VsLmNsYXNzTGlzdC5hZGQoICdpcy1zZWxlY3RlZCcgKTtcclxuXHRcdFx0dGhpcy5fc2VsZWN0ZWRfdWlkID0gZmllbGRfZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS11aWQnICkgfHwgbnVsbDtcclxuXHJcblx0XHRcdC8vIEZhbGxiYWNrOiBlbnN1cmUgc2VjdGlvbnMgYW5ub3VuY2UgdGhlbXNlbHZlcyBhcyB0eXBlPVwic2VjdGlvblwiLlxyXG5cdFx0XHRpZiAoIGZpZWxkX2VsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApICYmICFmaWVsZF9lbC5kYXRhc2V0LnR5cGUgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwuZGF0YXNldC50eXBlID0gJ3NlY3Rpb24nO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNjcm9sbEludG9WaWV3ICkge1xyXG5cdFx0XHRcdGZpZWxkX2VsLnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5zcGVjdG9yPy5iaW5kX3RvX2ZpZWxkPy4oIGZpZWxkX2VsICk7XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjazogZW5zdXJlIGluc3BlY3RvciBlbmhhbmNlcnMgKGluY2wuIFZhbHVlU2xpZGVyKSBydW4gZXZlcnkgYmluZC5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InIClcclxuXHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRpZiAoIGlucyApIHtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2Vycz8uc2Nhbj8uKCBpbnMgKTsgICAgICAgICAgICAgIC8vIHJ1bnMgYWxsIGVuaGFuY2Vyc1xyXG5cdFx0XHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXI/LmluaXRfb24/LiggaW5zICk7ICAgICAgICAgLy8gZXh0cmEgYmVsdC1hbmQtc3VzcGVuZGVyc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIF8gKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5FVzogd2hlbiBzZWxlY3RpbmcgYSBzZWN0aW9uLCByZWZsZWN0IGl0cyBhY3RpdmUgdGFiIGFzIHRoZSBoaWdobGlnaHRlZCBjb2x1bW4uXHJcblx0XHRcdGlmICggZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgJiZcclxuXHRcdFx0XHRVST8uV1BCQ19CRkJfQ29sdW1uX1N0eWxlcz8uc2V0X3NlbGVjdGVkX2NvbF9mbGFnICkge1xyXG5cdFx0XHRcdHZhciBrID0gKGZpZWxkX2VsLmRhdGFzZXQgJiYgZmllbGRfZWwuZGF0YXNldC5jb2xfc3R5bGVzX2FjdGl2ZV90YWIpXHJcblx0XHRcdFx0XHQ/IGZpZWxkX2VsLmRhdGFzZXQuY29sX3N0eWxlc19hY3RpdmVfdGFiIDogJzEnO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0NvbHVtbl9TdHlsZXMuc2V0X3NlbGVjdGVkX2NvbF9mbGFnKCBmaWVsZF9lbCwgayApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBLZWVwIHNlY3Rpb25zICYgZmllbGRzIGluIHRoZSBzYW1lIGZsb3c6XHJcblx0XHRcdC8vIDEpIEdlbmVyaWMgaHlkcmF0b3IgZm9yIHNpbXBsZSBkYXRhc2V0LWJhY2tlZCBjb250cm9scy5cclxuXHRcdFx0aWYgKCBmaWVsZF9lbCApIHtcclxuXHRcdFx0XHRVSS5XUEJDX0JGQl9JbnNwZWN0b3JfQnJpZGdlLl9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHM/LiggdGhpcy5idWlsZGVyLCBmaWVsZF9lbCApO1xyXG5cdFx0XHRcdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UuX2h5ZHJhdGVfc3BlY2lhbF9jb250cm9scz8uKCB0aGlzLmJ1aWxkZXIsIGZpZWxkX2VsICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEF1dG8tb3BlbiBJbnNwZWN0b3Igd2hlbiBhIHVzZXIgc2VsZWN0cyBhIGZpZWxkL3NlY3Rpb24gLlxyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZShcblx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0dGFiX2lkICA6ICd3cGJjX3RhYl9pbnNwZWN0b3InXHJcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuX3N5bmNfc2V0dGluZ3NfYnV0dG9uX3N0YXRlcygpO1xuXG5cdFx0XHRyb290LmNsYXNzTGlzdC5hZGQoICdoYXMtc2VsZWN0aW9uJyApO1xuXHRcdFx0dGhpcy5idWlsZGVyLmJ1cy5lbWl0KCBDb3JlLldQQkNfQkZCX0V2ZW50cy5TRUxFQ1QsIHsgdWlkOiB0aGlzLl9zZWxlY3RlZF91aWQsIGVsOiBmaWVsZF9lbCB9ICk7XHJcblx0XHRcdGNvbnN0IGxhYmVsID0gZmllbGRfZWw/LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApPy50ZXh0Q29udGVudCB8fCAoZmllbGRfZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgPyAnc2VjdGlvbicgOiAnJykgfHwgZmllbGRfZWw/LmRhdGFzZXQ/LmlkIHx8ICdpdGVtJztcclxuXHRcdFx0dGhpcy5idWlsZGVyLl9hbm5vdW5jZSggJ1NlbGVjdGVkICcgKyBsYWJlbCArICcuJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH0gKi9cclxuXHRcdGdldF9zZWxlY3RlZF9maWVsZCgpIHtcclxuXHRcdFx0aWYgKCAhdGhpcy5fc2VsZWN0ZWRfdWlkICkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGVzY19hdHRyID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5lc2NfYXR0cl92YWx1ZV9mb3Jfc2VsZWN0b3IoIHRoaXMuX3NlbGVjdGVkX3VpZCApO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZGVyLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCBgLndwYmNfYmZiX19maWVsZFtkYXRhLXVpZD1cIiR7ZXNjX2F0dHJ9XCJdLCAud3BiY19iZmJfX3NlY3Rpb25bZGF0YS11aWQ9XCIke2VzY19hdHRyfVwiXWAgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQHBhcmFtIHtDdXN0b21FdmVudH0gZXYgKi9cclxuXHRcdG9uX2NsZWFyKGV2KSB7XHJcblx0XHRcdGNvbnN0IHNyYyA9IGV2Py5kZXRhaWw/LnNvdXJjZSA/PyBldj8uc291cmNlO1xyXG5cdFx0XHRpZiAoIHNyYyAhPT0gJ2J1aWxkZXInICkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0X2ZpZWxkKCBudWxsICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQnJpZGdlcyB0aGUgYnVpbGRlciB3aXRoIHRoZSBJbnNwZWN0b3IgYW5kIHNhbml0aXplcyBpZC9uYW1lIGVkaXRzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX0luc3BlY3Rvcl9CcmlkZ2UgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0dGhpcy5fYXR0YWNoX2luc3BlY3RvcigpO1xyXG5cdFx0XHR0aGlzLl9iaW5kX2lkX3Nhbml0aXplcigpO1xyXG5cdFx0XHR0aGlzLl9vcGVuX2luc3BlY3Rvcl9hZnRlcl9maWVsZF9hZGRlZCgpO1xyXG5cdFx0XHR0aGlzLl9iaW5kX2ZvY3VzX3Nob3J0Y3V0cygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9hdHRhY2hfaW5zcGVjdG9yKCkge1xyXG5cdFx0XHRjb25zdCBiICAgICAgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcclxuXHRcdFx0XHRpZiAoIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfSW5zcGVjdG9yID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0Yi5pbnNwZWN0b3IgPSBuZXcgV1BCQ19CRkJfSW5zcGVjdG9yKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICksIGIgKTtcclxuXHRcdFx0XHRcdHRoaXMuX2JpbmRfaWRfc2FuaXRpemVyKCk7XHJcblx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JywgYXR0YWNoICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBFbnN1cmUgd2UgYmluZCBhZnRlciBsYXRlIHJlYWR5IGFzIHdlbGwuXHJcblx0XHRcdGlmICggdHlwZW9mIHdpbmRvdy5XUEJDX0JGQl9JbnNwZWN0b3IgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0YXR0YWNoKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Yi5pbnNwZWN0b3IgPSB7XHJcblx0XHRcdFx0XHRiaW5kX3RvX2ZpZWxkKCkge1xyXG5cdFx0XHRcdFx0fSwgY2xlYXIoKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd3BiY19iZmJfaW5zcGVjdG9yX3JlYWR5JywgYXR0YWNoICk7XHJcblx0XHRcdFx0c2V0VGltZW91dCggYXR0YWNoLCAwICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIExpc3RlbiBmb3IgXCJmb2N1c1wiIGhpbnRzIGZyb20gdGhlIGNhbnZhcyBhbmQgb3BlbiB0aGUgcmlnaHQgZ3JvdXAvdGFiLlxyXG5cdFx0ICogLSBTdXBwb3J0czogZ3JvdXAgPT09ICdjb2x1bW5fc3R5bGVzJ1xyXG5cdFx0ICogLSBBbHNvIHNjcm9sbHMgdGhlIGdyb3VwIGludG8gdmlldy5cclxuXHRcdCAqL1xyXG5cdFx0X2JpbmRfZm9jdXNfc2hvcnRjdXRzKCkge1xyXG5cdFx0XHQvKiogQHBhcmFtIHtDdXN0b21FdmVudH0gZSAqL1xyXG5cdFx0XHRjb25zdCBvbl9mb2N1cyA9IChlKSA9PiB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IGdycF9rZXkgPSBlICYmIGUuZGV0YWlsICYmIGUuZGV0YWlsLmdyb3VwO1xyXG5cdFx0XHRcdFx0Y29uc3QgdGFiX2tleSA9IGUgJiYgZS5kZXRhaWwgJiYgZS5kZXRhaWwudGFiX2tleTtcclxuXHRcdFx0XHRcdGlmICggIWdycF9rZXkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaW5zICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBncnBfa2V5ID09PSAnY29sdW1uX3N0eWxlcycgKSB7XHJcblx0XHRcdFx0XHRcdC8vIEZpbmQgdGhlIENvbHVtbiBTdHlsZXMgc2xvdC9ncm91cC5cclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2xvdCA9IGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtYmZiLXNsb3Q9XCJjb2x1bW5fc3R5bGVzXCJdJyApIHx8IGlucy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWdyb3VwLWtleT1cImNvbHVtbl9zdHlsZXNcIl0nICk7XHJcblx0XHRcdFx0XHRcdGlmICggc2xvdCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBPcGVuIGNvbGxhcHNpYmxlIGNvbnRhaW5lciBpZiBwcmVzZW50LlxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwX3dyYXAgPSBzbG90LmNsb3Nlc3QoICcuaW5zcGVjdG9yX19ncm91cCcgKSB8fCBzbG90LmNsb3Nlc3QoICdbZGF0YS1pbnNwZWN0b3ItZ3JvdXBdJyApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggZ3JvdXBfd3JhcCAmJiAhZ3JvdXBfd3JhcC5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1vcGVuJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBfd3JhcC5jbGFzc0xpc3QuYWRkKCAnaXMtb3BlbicgKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIE1pcnJvciBBUklBIHN0YXRlIGlmIHlvdXIgaGVhZGVyIHVzZXMgYXJpYS1leHBhbmRlZC5cclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhlYWRlcl9idG4gPSBncm91cF93cmFwLnF1ZXJ5U2VsZWN0b3IoICdbYXJpYS1leHBhbmRlZF0nICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGhlYWRlcl9idG4gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcl9idG4uc2V0QXR0cmlidXRlKCAnYXJpYS1leHBhbmRlZCcsICd0cnVlJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWw6IHNldCB0aGUgcmVxdWVzdGVkIHRhYiBrZXkgaWYgdGFicyBleGlzdCBpbiB0aGlzIGdyb3VwLlxyXG5cdFx0XHRcdFx0XHRcdGlmICggdGFiX2tleSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRhYnMgPSBzbG90LnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLXRhYnNdJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0YWJzICYmIHdpbmRvdy53cGJjX3VpX3RhYnMgJiYgdHlwZW9mIHdpbmRvdy53cGJjX3VpX3RhYnMuc2V0X2FjdGl2ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93LndwYmNfdWlfdGFicy5zZXRfYWN0aXZlKCB0YWJzLCBTdHJpbmcoIHRhYl9rZXkgKSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gQnJpbmcgaW50byB2aWV3IGZvciBjb252ZW5pZW5jZS5cclxuXHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVW5jb21tZW50IChPbmx5ICBpZiBuZWVkZWQpIHRoaXMgdG8gQVVUTyBTQ1JPTEwgdG8gIHNwZWNpZmljIENPTFVNTiBpbiB0aGUgc2VjdGlvbjouXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBzbG90LnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9ICk7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHt9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHR0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMgPSBvbl9mb2N1cztcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmNfYmZiOmluc3BlY3Rvcl9mb2N1cycsIG9uX2ZvY3VzLCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRpZiAoIHRoaXMuX29uX2luc3BlY3Rvcl9mb2N1cyApIHtcclxuXHRcdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3cGJjX2JmYjppbnNwZWN0b3JfZm9jdXMnLCB0aGlzLl9vbl9pbnNwZWN0b3JfZm9jdXMsIHRydWUgKTtcclxuXHRcdFx0XHRcdHRoaXMuX29uX2luc3BlY3Rvcl9mb2N1cyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBIeWRyYXRlIGluc3BlY3RvciBpbnB1dHMgZm9yIFwic3BlY2lhbFwiIGtleXMgdGhhdCB3ZSBoYW5kbGUgZXhwbGljaXRseS5cclxuXHRcdCAqIFdvcmtzIGZvciBib3RoIGZpZWxkcyBhbmQgc2VjdGlvbnMuXHJcblx0XHQgKiBAcGFyYW0ge1dQQkNfRm9ybV9CdWlsZGVyfSBidWlsZGVyXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzZWxcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9oeWRyYXRlX3NwZWNpYWxfY29udHJvbHMoYnVpbGRlciwgc2VsKSB7XHJcblx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0aWYgKCAhaW5zIHx8ICFzZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBzZXRWYWwgPSAoa2V5LCB2YWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjdHJsID0gaW5zLnF1ZXJ5U2VsZWN0b3IoIGBbZGF0YS1pbnNwZWN0b3Ita2V5PVwiJHtrZXl9XCJdYCApO1xyXG5cdFx0XHRcdGlmICggY3RybCAmJiAndmFsdWUnIGluIGN0cmwgKSBjdHJsLnZhbHVlID0gU3RyaW5nKCB2YWwgPz8gJycgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEludGVybmFsIGlkIC8gbmFtZSAvIHB1YmxpYyBodG1sX2lkLlxyXG5cdFx0XHRzZXRWYWwoICdpZCcsIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ25hbWUnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApIHx8ICcnICk7XHJcblx0XHRcdHNldFZhbCggJ2h0bWxfaWQnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJyApIHx8ICcnICk7XHJcblxyXG5cdFx0XHQvLyBTZWN0aW9uLW9ubHkgZXh0cmFzIGFyZSBoYXJtbGVzcyB0byBzZXQgZm9yIGZpZWxkcyAoY29udHJvbHMgbWF5IG5vdCBleGlzdCkuXHJcblx0XHRcdHNldFZhbCggJ2Nzc2NsYXNzJywgc2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY3NzY2xhc3MnICkgfHwgJycgKTtcclxuXHRcdFx0c2V0VmFsKCAnbGFiZWwnLCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcgKSB8fCAnJyApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEh5ZHJhdGUgaW5zcGVjdG9yIGlucHV0cyB0aGF0IGRlY2xhcmUgYSBnZW5lcmljIGRhdGFzZXQgbWFwcGluZyB2aWFcclxuXHRcdCAqIFtkYXRhLWluc3BlY3Rvci1rZXldIGJ1dCBkbyBOT1QgZGVjbGFyZSBhIGN1c3RvbSB2YWx1ZV9mcm9tIGFkYXB0ZXIuXHJcblx0XHQgKiBUaGlzIG1ha2VzIHNlY3Rpb25zIGZvbGxvdyB0aGUgc2FtZSBkYXRhIGZsb3cgYXMgZmllbGRzIHdpdGggYWxtb3N0IG5vIGdsdWUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtXUEJDX0Zvcm1fQnVpbGRlcn0gYnVpbGRlclxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VsIC0gY3VycmVudGx5IHNlbGVjdGVkIGZpZWxkL3NlY3Rpb25cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIF9nZW5lcmljX2h5ZHJhdGVfY29udHJvbHMoYnVpbGRlciwgc2VsKSB7XHJcblx0XHRcdGNvbnN0IGlucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0aWYgKCAhaW5zIHx8ICFzZWwgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBTS0lQID0gL14oaWR8bmFtZXxodG1sX2lkfGNzc2NsYXNzfGxhYmVsKSQvOyAvLyBoYW5kbGVkIGJ5IF9oeWRyYXRlX3NwZWNpYWxfY29udHJvbHNcclxuXHJcblx0XHRcdC8vIE5FVzogcmVhZCBzY2hlbWEgZm9yIHRoZSBzZWxlY3RlZCBlbGVtZW504oCZcyB0eXBlLlxyXG5cdFx0XHRjb25zdCBzY2hlbWFzICAgICA9IHdpbmRvdy5XUEJDX0JGQl9TY2hlbWFzIHx8IHt9O1xyXG5cdFx0XHRjb25zdCB0eXBlS2V5ICAgICA9IChzZWwuZGF0YXNldCAmJiBzZWwuZGF0YXNldC50eXBlKSB8fCAnJztcclxuXHRcdFx0Y29uc3Qgc2NoZW1hRW50cnkgPSBzY2hlbWFzW3R5cGVLZXldIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IHByb3BzU2NoZW1hID0gKHNjaGVtYUVudHJ5ICYmIHNjaGVtYUVudHJ5LnNjaGVtYSAmJiBzY2hlbWFFbnRyeS5zY2hlbWEucHJvcHMpID8gc2NoZW1hRW50cnkuc2NoZW1hLnByb3BzIDoge307XHJcblx0XHRcdGNvbnN0IGhhc093biAgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZCggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSApO1xyXG5cdFx0XHRjb25zdCBnZXREZWZhdWx0ICA9IChrZXkpID0+IHtcclxuXHRcdFx0XHRjb25zdCBtZXRhID0gcHJvcHNTY2hlbWFba2V5XTtcclxuXHRcdFx0XHRyZXR1cm4gKG1ldGEgJiYgaGFzT3duKCBtZXRhLCAnZGVmYXVsdCcgKSkgPyBtZXRhLmRlZmF1bHQgOiB1bmRlZmluZWQ7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpbnMucXVlcnlTZWxlY3RvckFsbCggJ1tkYXRhLWluc3BlY3Rvci1rZXldJyApLmZvckVhY2goIChjdHJsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKCBjdHJsLmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCAha2V5IHx8IFNLSVAudGVzdCgga2V5ICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdC8vIEVsZW1lbnQtbGV2ZWwgbG9jay5cclxuXHRcdFx0XHRjb25zdCBkbCA9IChjdHJsLmRhdGFzZXQ/LmxvY2tlZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYgKCBkbCA9PT0gJzEnIHx8IGRsID09PSAndHJ1ZScgfHwgZGwgPT09ICd5ZXMnICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBSZXNwZWN0IGV4cGxpY2l0IGFkYXB0ZXJzLlxyXG5cdFx0XHRcdGlmICggY3RybC5kYXRhc2V0Py52YWx1ZV9mcm9tIHx8IGN0cmwuZGF0YXNldD8udmFsdWVGcm9tICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCByYXcgICAgICA9IHNlbC5kYXRhc2V0ID8gc2VsLmRhdGFzZXRba2V5XSA6IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRjb25zdCBoYXNSYXcgICA9IHNlbC5kYXRhc2V0ID8gaGFzT3duKCBzZWwuZGF0YXNldCwga2V5ICkgOiBmYWxzZTtcclxuXHRcdFx0XHRjb25zdCBkZWZWYWx1ZSA9IGdldERlZmF1bHQoIGtleSApO1xyXG5cclxuXHRcdFx0XHQvLyBCZXN0LWVmZm9ydCBjb250cm9sIHR5cGluZyB3aXRoIHNjaGVtYSBkZWZhdWx0IGZhbGxiYWNrIHdoZW4gdmFsdWUgaXMgYWJzZW50LlxyXG5cclxuXHRcdFx0XHRpZiAoIGN0cmwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIChjdHJsLnR5cGUgPT09ICdjaGVja2JveCcgfHwgY3RybC50eXBlID09PSAncmFkaW8nKSApIHtcclxuXHRcdFx0XHRcdC8vIElmIGRhdGFzZXQgaXMgbWlzc2luZyB0aGUga2V5IGVudGlyZWx5IC0+IHVzZSBzY2hlbWEgZGVmYXVsdCAoYm9vbGVhbikuXHJcblx0XHRcdFx0XHRpZiAoICFoYXNSYXcgKSB7XHJcblx0XHRcdFx0XHRcdGN0cmwuY2hlY2tlZCA9ICEhZGVmVmFsdWU7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBBbiBleHBsaWNpdCBlbXB0eSB2YWx1ZSBpcyB0aGUgbGVnYWN5IHBlcnNpc3RlZCByZXByZXNlbnRhdGlvbiBvZiBmYWxzZS5cclxuXHRcdFx0XHRcdFx0Y3RybC5jaGVja2VkID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5jb2VyY2VfYm9vbGVhbiggcmF3LCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoICd2YWx1ZScgaW4gY3RybCApIHtcclxuXHRcdFx0XHRcdGlmICggaGFzUmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjdHJsLnZhbHVlID0gKHJhdyAhPSBudWxsKSA/IFN0cmluZyggcmF3ICkgOiAnJztcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGN0cmwudmFsdWUgPSAoZGVmVmFsdWUgPT0gbnVsbCkgPyAnJyA6IFN0cmluZyggZGVmVmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRfYmluZF9pZF9zYW5pdGl6ZXIoKSB7XHJcblx0XHRcdGNvbnN0IGIgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgaW5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRpZiAoICEgaW5zICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucy5fX3dwYmNfYmZiX2lkX3Nhbml0aXplcl9ib3VuZCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zLl9fd3BiY19iZmJfaWRfc2FuaXRpemVyX2JvdW5kID0gdHJ1ZTtcclxuXHJcblx0XHRcdGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xyXG5cclxuXHRcdFx0XHRjb25zdCB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0aWYgKCAhdCB8fCAhKCd2YWx1ZScgaW4gdCkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGtleSAgICAgICA9ICh0LmRhdGFzZXQ/Lmluc3BlY3RvcktleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRjb25zdCBzZWwgICAgICAgPSBiLmdldF9zZWxlY3RlZF9maWVsZD8uKCk7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gc2VsPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblx0XHRcdFx0aWYgKCAhc2VsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyBVbmlmaWVkIGVtaXR0ZXIgdGhhdCBhbHdheXMgaW5jbHVkZXMgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG5cdFx0XHRcdGNvbnN0IEVWICAgICAgICAgICAgICA9IENvcmUuV1BCQ19CRkJfRXZlbnRzO1xyXG5cdFx0XHRcdC8vIFNUUlVDVFVSRV9DSEFOR0UgY2FuIGJlIFwiZXhwZW5zaXZlXCIgYmVjYXVzZSBvdGhlciBsaXN0ZW5lcnMgbWF5IHRyaWdnZXIgZnVsbCBjYW52YXMgcmVmcmVzaC5cclxuXHRcdFx0XHQvLyBEZWJvdW5jZSBvbmx5IGNvbnRpbnVvdXMgY29udHJvbHMgKGUuZy4gdmFsdWUgc2xpZGVyIHNjcnViYmluZykgb24gdGhlIElOUFVUIHBoYXNlLlxyXG5cdFx0XHRcdGNvbnN0IGVuc3VyZV9zY19kZWJvdW5jZV9zdGF0ZSA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGlmICggYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Yi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlID0geyB0aW1lcl9pZDogMCwgcGVuZGluZ19wYXlsb2FkOiBudWxsIH07XHJcblx0XHRcdFx0XHRyZXR1cm4gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGNhbmNlbF9zY19kZWJvdW5jZWRfZW1pdCA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gYi5fX3dwYmNfYmZiX3NjX2RlYm91bmNlX3N0YXRlO1xyXG5cdFx0XHRcdFx0aWYgKCAhc3QgKSByZXR1cm47XHJcblx0XHRcdFx0XHR0cnkgeyBjbGVhclRpbWVvdXQoIHN0LnRpbWVyX2lkICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHRcdFx0XHRcdHN0LnRpbWVyX2lkICAgICAgICA9IDA7XHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSBudWxsO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1c19lbWl0X2NoYW5nZSA9IChyZWFzb24sIGV4dHJhID0ge30pID0+IHtcclxuXHRcdFx0XHRcdC8vIElmIHdl4oCZcmUgY29tbWl0dGluZyBzb21ldGhpbmcgKGNoYW5nZS9ibHVyL2V0YyksIGRyb3AgYW55IHBlbmRpbmcgXCJpbnB1dFwiIGVtaXQuXHJcblx0XHRcdFx0XHRjYW5jZWxfc2NfZGVib3VuY2VkX2VtaXQoKTtcclxuXHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHsgcmVhc29uLCBlbDogc2VsLCAuLi5leHRyYSB9ICk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYnVzX2VtaXRfY2hhbmdlX2RlYm91bmNlZCA9IChyZWFzb24sIGV4dHJhID0ge30sIHdhaXRfbXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHN0ID0gZW5zdXJlX3NjX2RlYm91bmNlX3N0YXRlKCk7XHJcblx0XHRcdFx0XHRjb25zdCBtcyA9IE51bWJlci5pc0Zpbml0ZSggd2FpdF9tcyApXHJcblx0XHRcdFx0XHRcdD8gd2FpdF9tc1xyXG5cdFx0XHRcdFx0XHQ6IChOdW1iZXIuaXNGaW5pdGUoIFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgKSA/IFVJLlNUUlVDVFVSRV9DSEFOR0VfREVCT1VOQ0VfTVMgOiAyNDApO1xyXG5cclxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIENVUlJFTlQgc2VsZWN0ZWQgZWxlbWVudCBpbnRvIHRoZSBwYXlsb2FkIG5vdyAoc3RhYmxlIHJlZikuXHJcblx0XHRcdFx0XHRzdC5wZW5kaW5nX3BheWxvYWQgPSB7IHJlYXNvbiwgZWw6IHNlbCwgLi4uZXh0cmEsIGRlYm91bmNlZDogdHJ1ZSB9O1xyXG5cclxuXHRcdFx0XHRcdHRyeSB7IGNsZWFyVGltZW91dCggc3QudGltZXJfaWQgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdFx0c3QudGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHN0LnRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHN0LnBlbmRpbmdfcGF5bG9hZDtcclxuXHRcdFx0XHRcdFx0c3QucGVuZGluZ19wYXlsb2FkID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0aWYgKCBwYXlsb2FkICkge1xyXG5cdFx0XHRcdFx0XHRcdGIuYnVzPy5lbWl0Py4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHBheWxvYWQgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgbXMgKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEL1NFQ1RJT046IGludGVybmFsIGlkIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2lkJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSA9IGIuaWQuc2V0X2ZpZWxkX2lkKCBzZWwsIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgJiYgIWlzU2VjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHtcclxuXHRcdFx0XHRcdFx0dC52YWx1ZSA9IHVuaXF1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2lkLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gRklFTEQvU0VDVElPTjogcHVibGljIEhUTUwgaWQgLS0tLVxyXG5cdFx0XHRcdGlmICgga2V5ID09PSAnaHRtbF9pZCcgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBhcHBsaWVkID0gYi5pZC5zZXRfZmllbGRfaHRtbF9pZCggc2VsLCB0LnZhbHVlICk7XHJcblx0XHRcdFx0XHQvLyBGb3Igc2VjdGlvbnMsIGFsc28gc2V0IHRoZSByZWFsIERPTSBpZCBzbyBhbmNob3JzL0NTUyBjYW4gdGFyZ2V0IGl0LlxyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdHNlbC5pZCA9IGFwcGxpZWQgfHwgJyc7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBiLnByZXZpZXdfbW9kZSApIHtcclxuXHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IGFwcGxpZWQgKSB7XHJcblx0XHRcdFx0XHRcdHQudmFsdWUgPSBhcHBsaWVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnaHRtbC1pZC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIEZJRUxEUyBPTkxZOiBuYW1lIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ25hbWUnICYmICFpc1NlY3Rpb24gKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTGl2ZSB0eXBpbmc6IHNhbml0aXplIG9ubHkgKE5PIHVuaXF1ZW5lc3MgeWV0KSB0byBhdm9pZCBcIi0yXCIgc3BhbVxyXG5cdFx0XHRcdFx0aWYgKCBlLnR5cGUgPT09ICdpbnB1dCcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJlZm9yZSAgICA9IHQudmFsdWU7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCBiZWZvcmUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBiZWZvcmUgIT09IHNhbml0aXplZCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBvcHRpb25hbDogcHJlc2VydmUgY2FyZXQgdG8gYXZvaWQganVtcFxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbFN0YXJ0ID0gdC5zZWxlY3Rpb25TdGFydCwgc2VsRW5kID0gdC5zZWxlY3Rpb25FbmQ7XHJcblx0XHRcdFx0XHRcdFx0dC52YWx1ZSAgICAgICAgPSBzYW5pdGl6ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHQuc2V0U2VsZWN0aW9uUmFuZ2UoIHNlbFN0YXJ0LCBzZWxFbmQgKTtcclxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuOyAvLyB1bmlxdWVuZXNzIG9uIGNoYW5nZS9ibHVyXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29tbWl0IChjaGFuZ2UvYmx1cilcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IFN0cmluZyggdC52YWx1ZSA/PyAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoICFyYXcgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFJFU0VFRDoga2VlcCBuYW1lIG5vbi1lbXB0eSBhbmQgcHJvdmlzaW9uYWwgKGF1dG9uYW1lIHN0YXlzIE9OKVxyXG5cdFx0XHRcdFx0XHRjb25zdCBTICAgID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYmFzZSA9IFMuc2FuaXRpemVfaHRtbF9uYW1lKCBzZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCBzZWwuZGF0YXNldC5pZCB8fCBzZWwuZGF0YXNldC50eXBlIHx8ICdmaWVsZCcgKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdW5pcSA9IGIuaWQuZW5zdXJlX3VuaXF1ZV9maWVsZF9uYW1lKCBiYXNlLCBzZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdHNlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzEnO1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcwJztcclxuXHJcblx0XHRcdFx0XHRcdC8vIEtlZXAgRE9NIGluIHN5bmMgaWYgd2XigJlyZSBub3QgcmUtcmVuZGVyaW5nXHJcblx0XHRcdFx0XHRcdGlmICggIWIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGN0cmwgKSBjdHJsLnNldEF0dHJpYnV0ZSggJ25hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICggdC52YWx1ZSAhPT0gdW5pcSApIHQudmFsdWUgPSB1bmlxO1xyXG5cdFx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLXJlc2VlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE5vbi1lbXB0eSBjb21taXQ6IHVzZXIgdGFrZXMgY29udHJvbDsgZGlzYWJsZSBhdXRvbmFtZSBnb2luZyBmb3J3YXJkXHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCA9ICcxJztcclxuXHRcdFx0XHRcdHNlbC5kYXRhc2V0LmF1dG9uYW1lICAgICAgICAgID0gJzAnO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHNhbml0aXplZCA9IENvcmUuV1BCQ19CRkJfU2FuaXRpemUuc2FuaXRpemVfaHRtbF9uYW1lKCByYXcgKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXF1ZSAgICA9IGIuaWQuc2V0X2ZpZWxkX25hbWUoIHNlbCwgc2FuaXRpemVkICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCAhYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGN0cmwgPSBzZWwucXVlcnlTZWxlY3RvciggJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBjdHJsICkgY3RybC5zZXRBdHRyaWJ1dGUoICduYW1lJywgdW5pcXVlICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBzZWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHQudmFsdWUgIT09IHVuaXF1ZSApIHQudmFsdWUgPSB1bmlxdWU7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICduYW1lLWNoYW5nZScgKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIC0tLS0gU0VDVElPTlMgJiBGSUVMRFM6IGNzc2NsYXNzIChsaXZlIGFwcGx5OyBubyByZS1yZW5kZXIpIC0tLS1cclxuXHRcdFx0XHRpZiAoIGtleSA9PT0gJ2Nzc2NsYXNzJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5leHQgICAgICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2Nzc19jbGFzc2xpc3QoIHQudmFsdWUgfHwgJycgKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRBcnIgPSBuZXh0LnNwbGl0KCAvXFxzKy8gKS5maWx0ZXIoIEJvb2xlYW4gKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRlc2lyZWRTZXQgPSBuZXcgU2V0KCBkZXNpcmVkQXJyICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29yZSBjbGFzc2VzIGFyZSBuZXZlciB0b3VjaGVkLlxyXG5cdFx0XHRcdFx0Y29uc3QgaXNDb3JlID0gKGNscykgPT4gY2xzID09PSAnaXMtc2VsZWN0ZWQnIHx8IGNscy5zdGFydHNXaXRoKCAnd3BiY18nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gU25hcHNob3QgYmVmb3JlIG11dGF0aW5nIChET01Ub2tlbkxpc3QgaXMgbGl2ZSkuXHJcblx0XHRcdFx0XHRjb25zdCBiZWZvcmVDbGFzc2VzID0gQXJyYXkuZnJvbSggc2VsLmNsYXNzTGlzdCApO1xyXG5cdFx0XHRcdFx0Y29uc3QgY3VzdG9tQmVmb3JlICA9IGJlZm9yZUNsYXNzZXMuZmlsdGVyKCAoYykgPT4gIWlzQ29yZSggYyApICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHN0cmF5IG5vbi1jb3JlIGNsYXNzZXMgbm90IGluIGRlc2lyZWQuXHJcblx0XHRcdFx0XHRjdXN0b21CZWZvcmUuZm9yRWFjaCggKGMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhZGVzaXJlZFNldC5oYXMoIGMgKSApIHNlbC5jbGFzc0xpc3QucmVtb3ZlKCBjICk7XHJcblx0XHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRkIG1pc3NpbmcgZGVzaXJlZCBjbGFzc2VzIGluIG9uZSBnby5cclxuXHRcdFx0XHRcdGNvbnN0IG1pc3NpbmcgPSBkZXNpcmVkQXJyLmZpbHRlciggKGMpID0+ICFjdXN0b21CZWZvcmUuaW5jbHVkZXMoIGMgKSApO1xyXG5cdFx0XHRcdFx0aWYgKCBtaXNzaW5nLmxlbmd0aCApIHNlbC5jbGFzc0xpc3QuYWRkKCAuLi5taXNzaW5nICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gS2VlcCBkYXRhc2V0IGluIHN5bmMgKGF2b2lkIHVzZWxlc3MgYXR0cmlidXRlIHdyaXRlcykuXHJcblx0XHRcdFx0XHRpZiAoIHNlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJyApICE9PSBuZXh0ICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1jc3NjbGFzcycsIG5leHQgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBFbWl0IG9ubHkgaWYgc29tZXRoaW5nIGFjdHVhbGx5IGNoYW5nZWQuXHJcblx0XHRcdFx0XHRjb25zdCBhZnRlckNsYXNzZXMgPSBBcnJheS5mcm9tKCBzZWwuY2xhc3NMaXN0ICk7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkICAgICAgPSBhZnRlckNsYXNzZXMubGVuZ3RoICE9PSBiZWZvcmVDbGFzc2VzLmxlbmd0aCB8fCBiZWZvcmVDbGFzc2VzLnNvbWUoIChjLCBpKSA9PiBjICE9PSBhZnRlckNsYXNzZXNbaV0gKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBkZXRhaWwgPSB7IGtleTogJ2Nzc2NsYXNzJywgcGhhc2U6IGUudHlwZSB9O1xyXG5cdFx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ2Nzc2NsYXNzLWNoYW5nZScsIGRldGFpbCApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAncHJvcC1jaGFuZ2UnLCBkZXRhaWwgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHQvLyAtLS0tIFNFQ1RJT05TOiBsYWJlbCAtLS0tXHJcblx0XHRcdFx0aWYgKCBpc1NlY3Rpb24gJiYga2V5ID09PSAnbGFiZWwnICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1sYWJlbCcsIHZhbCApO1xyXG5cdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlKCAnbGFiZWwtY2hhbmdlJyApO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBGSUVMRFM6IGxhYmVsIChhdXRvLW5hbWUgd2hpbGUgdHlwaW5nOyBmcmVlemUgb24gY29tbWl0KSAtLS0tXHJcblx0XHRcdFx0aWYgKCAhaXNTZWN0aW9uICYmIGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbCAgICAgICAgID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHRzZWwuZGF0YXNldC5sYWJlbCA9IHZhbDtcclxuXHJcblx0XHRcdFx0XHQvLyB3aGlsZSB0eXBpbmcsIGFsbG93IGF1dG8tbmFtZSAoaWYgZmxhZ3MgcGVybWl0KVxyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0Q29yZS5XUEJDX0JGQl9GaWVsZF9CYXNlLm1heWJlX2F1dG9uYW1lX2Zyb21fbGFiZWwoIGIsIHNlbCwgdmFsICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBpZiB1c2VyIGNvbW1pdHRlZCB0aGUgbGFiZWwgKGJsdXIvY2hhbmdlKSwgZnJlZXplIGZ1dHVyZSBhdXRvLW5hbWVcclxuXHRcdFx0XHRcdGlmICggZS50eXBlICE9PSAnaW5wdXQnICkge1xyXG5cdFx0XHRcdFx0XHRzZWwuZGF0YXNldC5hdXRvbmFtZSA9ICcwJzsgICAvLyBzdG9wIGZ1dHVyZSBsYWJlbC0+bmFtZSBzeW5jXHJcblx0XHRcdFx0XHRcdHNlbC5kYXRhc2V0LmZyZXNoICAgID0gJzAnOyAgIC8vIGFsc28ga2lsbCB0aGUgXCJmcmVzaFwiIGVzY2FwZSBoYXRjaFxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE9wdGlvbmFsIFVJIG5pY2V0eTogZGlzYWJsZSBOYW1lIHdoZW4gYXV0byBpcyBPTiwgZW5hYmxlIHdoZW4gT0ZGXHJcblx0XHRcdFx0XHRjb25zdCBpbnMgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hbWVDdHJsID0gaW5zPy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleT1cIm5hbWVcIl0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG5hbWVDdHJsICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhdXRvQWN0aXZlID1cclxuXHRcdFx0XHRcdFx0XHRcdCAgKHNlbC5kYXRhc2V0LmF1dG9uYW1lID8/ICcxJykgIT09ICcwJyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBzZWwuZGF0YXNldC5uYW1lX3VzZXJfdG91Y2hlZCAhPT0gJzEnICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIHNlbC5kYXRhc2V0Lndhc19sb2FkZWQgIT09ICcxJztcclxuXHRcdFx0XHRcdFx0bmFtZUN0cmwudG9nZ2xlQXR0cmlidXRlKCAnZGlzYWJsZWQnLCBhdXRvQWN0aXZlICk7XHJcblx0XHRcdFx0XHRcdGlmICggYXV0b0FjdGl2ZSAmJiAhbmFtZUN0cmwucGxhY2Vob2xkZXIgKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZUN0cmwucGxhY2Vob2xkZXIgPSBiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICggIWF1dG9BY3RpdmUgJiYgbmFtZUN0cmwucGxhY2Vob2xkZXIgPT09IChiPy5pMThuPy5hdXRvX2Zyb21fbGFiZWwgPz8gJ2F1dG8g4oCUIGZyb20gbGFiZWwnKSApIHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lQ3RybC5wbGFjZWhvbGRlciA9ICcnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHJlLXJlbmRlciB0aGUgcHJldmlldyBzbyBsYWJlbCBjaGFuZ2VzIGFyZSB2aXNpYmxlIGltbWVkaWF0ZWx5LlxyXG5cdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRidXNfZW1pdF9jaGFuZ2UoICdsYWJlbC1jaGFuZ2UnICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0Ly8gLS0tLSBERUZBVUxUIChHRU5FUklDKTogZGF0YXNldCB3cml0ZXIgZm9yIGJvdGggZmllbGRzICYgc2VjdGlvbnMgLS0tLVxyXG5cdFx0XHRcdC8vIEFueSBpbnNwZWN0b3IgY29udHJvbCB3aXRoIFtkYXRhLWluc3BlY3Rvci1rZXldIHRoYXQgZG9lc24ndCBoYXZlIGEgY3VzdG9tXHJcblx0XHRcdFx0Ly8gYWRhcHRlci92YWx1ZV9mcm9tIHdpbGwgc2ltcGx5IHJlYWQvd3JpdGUgc2VsLmRhdGFzZXRba2V5XS5cclxuXHRcdFx0XHRpZiAoIGtleSApIHtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBzZWxmTG9ja2VkID0gL14oMXx0cnVlfHllcykkL2kudGVzdCggKHQuZGF0YXNldD8ubG9ja2VkIHx8ICcnKS50cmltKCkgKTtcclxuXHRcdFx0XHRcdGlmICggc2VsZkxvY2tlZCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFNraXAga2V5cyB3ZSBoYW5kbGVkIGFib3ZlIHRvIGF2b2lkIGRvdWJsZSB3b3JrLlxyXG5cdFx0XHRcdFx0aWYgKCBrZXkgPT09ICdpZCcgfHwga2V5ID09PSAnbmFtZScgfHwga2V5ID09PSAnaHRtbF9pZCcgfHwga2V5ID09PSAnY3NzY2xhc3MnIHx8IGtleSA9PT0gJ2xhYmVsJyApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bGV0IG5leHRWYWwgPSAnJztcclxuXHRcdFx0XHRcdGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgKHQudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0LnR5cGUgPT09ICdyYWRpbycpICkge1xyXG5cdFx0XHRcdFx0XHQvLyBQZXJzaXN0IGJvdGggYm9vbGVhbiBzdGF0ZXMgZXhwbGljaXRseSBzbyBzY2hlbWEgZGVmYXVsdHMgY2Fubm90IHJlcGxhY2UgZmFsc2UuXHJcblx0XHRcdFx0XHRcdG5leHRWYWwgPSB0LmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggJ3ZhbHVlJyBpbiB0ICkge1xyXG5cdFx0XHRcdFx0XHRuZXh0VmFsID0gU3RyaW5nKCB0LnZhbHVlID8/ICcnICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBQZXJzaXN0IHRvIGRhdGFzZXQuXHJcblx0XHRcdFx0XHRpZiAoIHNlbD8uZGF0YXNldCApIHNlbC5kYXRhc2V0W2tleV0gPSBuZXh0VmFsO1xyXG5cclxuXHRcdFx0XHRcdC8vIEdlbmVyYXRvciBjb250cm9scyBhcmUgXCJVSSBpbnB1dHNcIiDigJQgYXZvaWQgU1RSVUNUVVJFX0NIQU5HRSBzcGFtIHdoaWxlIGRyYWdnaW5nL3R5cGluZy5cclxuXHRcdFx0XHRcdGNvbnN0IGlzX2dlbl9rZXkgPSAoa2V5LmluZGV4T2YoICdnZW5fJyApID09PSAwKTtcclxuXHJcblx0XHRcdFx0XHQvLyBSZS1yZW5kZXIgb24gdmlzdWFsIGtleXMgc28gcHJldmlldyBzdGF5cyBpbiBzeW5jIChjYWxlbmRhciBsYWJlbC9oZWxwLCBldGMuKS5cclxuXHRcdFx0XHRcdGNvbnN0IHZpc3VhbEtleXMgPSBuZXcgU2V0KCBbICdoZWxwJywgJ3BsYWNlaG9sZGVyJywgJ21pbl93aWR0aCcsICdjc3NjbGFzcycgXSApO1xyXG5cdFx0XHRcdFx0aWYgKCAhaXNTZWN0aW9uICYmICh2aXN1YWxLZXlzLmhhcygga2V5ICkgfHwga2V5LnN0YXJ0c1dpdGgoICd1aV8nICkpICkge1xyXG5cdFx0XHRcdFx0XHQvLyBMaWdodCBoZXVyaXN0aWM6IG9ubHkgcmUtcmVuZGVyIG9uIGNvbW1pdCBmb3IgaGVhdnkgaW5wdXRzOyBsaXZlIGZvciBzaG9ydCBvbmVzIGlzIGZpbmUuXHJcblx0XHRcdFx0XHRcdGlmICggZS50eXBlID09PSAnY2hhbmdlJyB8fCBrZXkgPT09ICdoZWxwJyB8fCBrZXkgPT09ICdwbGFjZWhvbGRlcicgKSB7XHJcblx0XHRcdFx0XHRcdFx0Yi5yZW5kZXJfcHJldmlldyggc2VsICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoICEoaXNfZ2VuX2tleSAmJiBlLnR5cGUgPT09ICdpbnB1dCcpICkge1xyXG5cdFx0XHRcdFx0XHQvLyBEZWJvdW5jZSBjb250aW51b3VzIHZhbHVlIHNsaWRlciBpbnB1dCBldmVudHMgdG8gYXZvaWQgZnVsbC1jYW52YXMgcmVmcmVzaCBzcGFtLlxyXG5cdFx0XHRcdFx0XHQvLyBXZSBkZXRlY3QgdGhlIHNsaWRlciBncm91cCB2aWEgW2RhdGEtbGVuLWdyb3VwXSB3cmFwcGVyLlxyXG5cdFx0XHRcdFx0XHRjb25zdCBpc19sZW5fZ3JvdXBfY3RybCA9ICEhKHQgJiYgdC5jbG9zZXN0ICYmIHQuY2xvc2VzdCggJ1tkYXRhLWxlbi1ncm91cF0nICkpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBpc19sZW5fZ3JvdXBfY3RybCAmJiBlLnR5cGUgPT09ICdpbnB1dCcgKSB7XHJcblx0XHRcdFx0XHRcdFx0YnVzX2VtaXRfY2hhbmdlX2RlYm91bmNlZCggJ3Byb3AtY2hhbmdlJywgeyBrZXksIHBoYXNlOiBlLnR5cGUgfSApO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGJ1c19lbWl0X2NoYW5nZSggJ3Byb3AtY2hhbmdlJywgeyBrZXksIHBoYXNlOiBlLnR5cGUgfSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aW5zLmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBoYW5kbGVyLCB0cnVlICk7XHJcblx0XHRcdC8vIHJlZmxlY3QgaW5zdGFudGx5IHdoaWxlIHR5cGluZyBhcyB3ZWxsLlxyXG5cdFx0XHRpbnMuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgaGFuZGxlciwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT3BlbiBJbnNwZWN0b3IgYWZ0ZXIgYSBmaWVsZCBpcyBhZGRlZC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKi9cclxuXHRcdF9vcGVuX2luc3BlY3Rvcl9hZnRlcl9maWVsZF9hZGRlZCgpIHtcclxuXHRcdFx0Y29uc3QgRVYgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLkZJRUxEX0FERCwgKGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlbCA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0XHRpZiAoIGVsICYmIHRoaXMuYnVpbGRlcj8uc2VsZWN0X2ZpZWxkICkge1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyLnNlbGVjdF9maWVsZCggZWwsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBTaG93IEluc3BlY3RvciBQYWxldHRlLlxyXG5cdFx0XHRcdHdwYmNfYmZiX19kaXNwYXRjaF9ldmVudF9zYWZlKFxyXG5cdFx0XHRcdFx0J3dwYmNfYmZiOnNob3dfcGFuZWwnLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRwYW5lbF9pZDogJ3dwYmNfYmZiX19pbnNwZWN0b3InLFxyXG5cdFx0XHRcdFx0XHR0YWJfaWQgIDogJ3dwYmNfdGFiX2luc3BlY3RvcidcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogS2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBzZWxlY3Rpb24sIGRlbGV0aW9uLCBhbmQgbW92ZW1lbnQuXHJcblx0ICovXHJcblx0VUkuV1BCQ19CRkJfS2V5Ym9hcmRfQ29udHJvbGxlciA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuX29uX2tleSA9IHRoaXMub25fa2V5LmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCB0aGlzLl9vbl9rZXksIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHRkZXN0cm95KCkge1xyXG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAna2V5ZG93bicsIHRoaXMuX29uX2tleSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGUgKi9cclxuXHRcdG9uX2tleShlKSB7XHJcblx0XHRcdGNvbnN0IGIgICAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgaXNfdHlwaW5nID0gdGhpcy5faXNfdHlwaW5nX2FueXdoZXJlKCk7XHJcblx0XHRcdGlmICggZS5rZXkgPT09ICdFc2NhcGUnICkge1xyXG5cdFx0XHRcdGlmICggaXNfdHlwaW5nICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYnVzLmVtaXQoIENvcmUuV1BCQ19CRkJfRXZlbnRzLkNMRUFSX1NFTEVDVElPTiwgeyBzb3VyY2U6ICdlc2MnIH0gKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBiLmdldF9zZWxlY3RlZF9maWVsZD8uKCk7XHJcblx0XHRcdGlmICggIXNlbGVjdGVkIHx8IGlzX3R5cGluZyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRiLmRlbGV0ZV9pdGVtPy4oIHNlbGVjdGVkICk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpICYmIChlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dEb3duJykgJiYgIWUuc2hpZnRLZXkgKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGRpciA9IChlLmtleSA9PT0gJ0Fycm93VXAnKSA/ICd1cCcgOiAnZG93bic7XHJcblx0XHRcdFx0Yi5tb3ZlX2l0ZW0/Liggc2VsZWN0ZWQsIGRpciApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGUua2V5ID09PSAnRW50ZXInICkge1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRiLnNlbGVjdF9maWVsZCggc2VsZWN0ZWQsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xyXG5cdFx0X2lzX3R5cGluZ19hbnl3aGVyZSgpIHtcclxuXHRcdFx0Y29uc3QgYSAgID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHRcdFx0Y29uc3QgdGFnID0gYT8udGFnTmFtZTtcclxuXHRcdFx0aWYgKCB0YWcgPT09ICdJTlBVVCcgfHwgdGFnID09PSAnVEVYVEFSRUEnIHx8IHRhZyA9PT0gJ1NFTEVDVCcgfHwgKGE/LmlzQ29udGVudEVkaXRhYmxlID09PSB0cnVlKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdHJldHVybiAhIShpbnMgJiYgYSAmJiBpbnMuY29udGFpbnMoIGEgKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29sdW1uIHJlc2l6ZSBsb2dpYyBmb3Igc2VjdGlvbiByb3dzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1Jlc2l6ZV9Db250cm9sbGVyID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cdFx0aW5pdCgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmluaXRfcmVzaXplX2hhbmRsZXIgPSB0aGlzLmhhbmRsZV9yZXNpemUuYmluZCggdGhpcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogcmVhZCB0aGUgQ1NTIHZhciAoa2VwdCBsb2NhbCBzbyBpdCBkb2VzbuKAmXQgZGVwZW5kIG9uIHRoZSBNaW4tV2lkdGggbW9kdWxlKVxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSBjb2xcclxuXHRcdCAqIEByZXR1cm5zIHtudW1iZXJ8bnVtYmVyfVxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqL1xyXG5cdFx0X2dldF9jb2xfbWluX3B4KGNvbCkge1xyXG5cdFx0XHRjb25zdCB2ID0gZ2V0Q29tcHV0ZWRTdHlsZSggY29sICkuZ2V0UHJvcGVydHlWYWx1ZSggJy0td3BiYy1jb2wtbWluJyApIHx8ICcwJztcclxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHYgKTtcclxuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gTWF0aC5tYXgoIDAsIG4gKSA6IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7TW91c2VFdmVudH0gZSAqL1xyXG5cdFx0aGFuZGxlX3Jlc2l6ZShlKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0aWYgKCBlLmJ1dHRvbiAhPT0gMCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHJlc2l6ZXIgICA9IGUuY3VycmVudFRhcmdldDtcclxuXHRcdFx0Y29uc3Qgcm93X2VsICAgID0gcmVzaXplci5wYXJlbnRFbGVtZW50O1xyXG5cdFx0XHRjb25zdCBjb2xzICAgICAgPSBBcnJheS5mcm9tKCByb3dfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApICk7XHJcblx0XHRcdGNvbnN0IGxlZnRfY29sICA9IHJlc2l6ZXI/LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcblx0XHRcdGNvbnN0IHJpZ2h0X2NvbCA9IHJlc2l6ZXI/Lm5leHRFbGVtZW50U2libGluZztcclxuXHRcdFx0aWYgKCAhbGVmdF9jb2wgfHwgIXJpZ2h0X2NvbCB8fCAhbGVmdF9jb2wuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2NvbHVtbicgKSB8fCAhcmlnaHRfY29sLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19jb2x1bW4nICkgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBsZWZ0X2luZGV4ICA9IGNvbHMuaW5kZXhPZiggbGVmdF9jb2wgKTtcclxuXHRcdFx0Y29uc3QgcmlnaHRfaW5kZXggPSBjb2xzLmluZGV4T2YoIHJpZ2h0X2NvbCApO1xyXG5cdFx0XHRpZiAoIGxlZnRfaW5kZXggPT09IC0xIHx8IHJpZ2h0X2luZGV4ICE9PSBsZWZ0X2luZGV4ICsgMSApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHN0YXJ0X3ggICAgICAgID0gZS5jbGllbnRYO1xyXG5cdFx0XHRjb25zdCBsZWZ0X3N0YXJ0X3B4ICA9IGxlZnRfY29sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG5cdFx0XHRjb25zdCByaWdodF9zdGFydF9weCA9IHJpZ2h0X2NvbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHRcdFx0Y29uc3QgcGFpcl9weCAgICAgICAgPSBNYXRoLm1heCggMCwgbGVmdF9zdGFydF9weCArIHJpZ2h0X3N0YXJ0X3B4ICk7XHJcblxyXG5cdFx0XHRjb25zdCBncCAgICAgICAgID0gYi5jb2xfZ2FwX3BlcmNlbnQ7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGVkICAgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93X2VsLCBncCApO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGUgID0gY29tcHV0ZWQuYXZhaWxhYmxlOyAgICAgICAgICAgICAgICAgLy8gJSBvZiB0aGUg4oCcZnVsbCAxMDDigJ0gYWZ0ZXIgZ2Fwc1xyXG5cdFx0XHRjb25zdCBiYXNlcyAgICAgID0gY29tcHV0ZWQuYmFzZXMuc2xpY2UoIDAgKTsgICAgICAgICAgICAvLyBjdXJyZW50IGVmZmVjdGl2ZSAlXHJcblx0XHRcdGNvbnN0IHBhaXJfYXZhaWwgPSBiYXNlc1tsZWZ0X2luZGV4XSArIGJhc2VzW3JpZ2h0X2luZGV4XTtcclxuXHJcblx0XHRcdC8vIEJhaWwgaWYgd2UgY2Fu4oCZdCBjb21wdXRlIHNhbmUgZGVsdGFzLlxyXG5cdFx0XHRpZiAoIXBhaXJfcHggfHwgIU51bWJlci5pc0Zpbml0ZShwYWlyX2F2YWlsKSB8fCBwYWlyX2F2YWlsIDw9IDApIHJldHVybjtcclxuXHJcblx0XHRcdC8vIC0tLSBNSU4gQ0xBTVBTIChwaXhlbHMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdFx0Y29uc3QgcGN0VG9QeCAgICAgICA9IChwY3QpID0+IChwYWlyX3B4ICogKHBjdCAvIHBhaXJfYXZhaWwpKTsgLy8gcGFpci1sb2NhbCBwZXJjZW50IC0+IHB4XHJcblx0XHRcdGNvbnN0IGdlbmVyaWNNaW5QY3QgPSBNYXRoLm1pbiggMC4xLCBhdmFpbGFibGUgKTsgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCAwLjElIGZsb29yIChpbiDigJxhdmFpbGFibGUgJeKAnSBzcGFjZSlcclxuXHRcdFx0Y29uc3QgZ2VuZXJpY01pblB4ICA9IHBjdFRvUHgoIGdlbmVyaWNNaW5QY3QgKTtcclxuXHJcblx0XHRcdGNvbnN0IGxlZnRNaW5QeCAgPSBNYXRoLm1heCggdGhpcy5fZ2V0X2NvbF9taW5fcHgoIGxlZnRfY29sICksIGdlbmVyaWNNaW5QeCApO1xyXG5cdFx0XHRjb25zdCByaWdodE1pblB4ID0gTWF0aC5tYXgoIHRoaXMuX2dldF9jb2xfbWluX3B4KCByaWdodF9jb2wgKSwgZ2VuZXJpY01pblB4ICk7XHJcblxyXG5cdFx0XHQvLyBmcmVlemUgdGV4dCBzZWxlY3Rpb24gKyBjdXJzb3JcclxuXHRcdFx0Y29uc3QgcHJldl91c2VyX3NlbGVjdCAgICAgICAgID0gZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0O1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XHJcblx0XHRcdHJvd19lbC5zdHlsZS5jdXJzb3IgICAgICAgICAgICA9ICdjb2wtcmVzaXplJztcclxuXHJcblx0XHRcdGNvbnN0IG9uX21vdXNlX21vdmUgPSAoZXYpID0+IHtcclxuXHRcdFx0XHRpZiAoICFwYWlyX3B4ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHQvLyB3b3JrIGluIHBpeGVscywgY2xhbXAgYnkgZWFjaCBzaWRl4oCZcyBtaW5cclxuXHRcdFx0XHRjb25zdCBkZWx0YV9weCAgID0gZXYuY2xpZW50WCAtIHN0YXJ0X3g7XHJcblx0XHRcdFx0bGV0IG5ld0xlZnRQeCAgICA9IGxlZnRfc3RhcnRfcHggKyBkZWx0YV9weDtcclxuXHRcdFx0XHRuZXdMZWZ0UHggICAgICAgID0gTWF0aC5tYXgoIGxlZnRNaW5QeCwgTWF0aC5taW4oIHBhaXJfcHggLSByaWdodE1pblB4LCBuZXdMZWZ0UHggKSApO1xyXG5cdFx0XHRcdGNvbnN0IG5ld1JpZ2h0UHggPSBwYWlyX3B4IC0gbmV3TGVmdFB4O1xyXG5cclxuXHRcdFx0XHQvLyB0cmFuc2xhdGUgYmFjayB0byBwYWlyLWxvY2FsIHBlcmNlbnRhZ2VzXHJcblx0XHRcdFx0Y29uc3QgbmV3TGVmdFBjdCAgICAgID0gKG5ld0xlZnRQeCAvIHBhaXJfcHgpICogcGFpcl9hdmFpbDtcclxuXHRcdFx0XHRjb25zdCBuZXdCYXNlcyAgICAgICAgPSBiYXNlcy5zbGljZSggMCApO1xyXG5cdFx0XHRcdG5ld0Jhc2VzW2xlZnRfaW5kZXhdICA9IG5ld0xlZnRQY3Q7XHJcblx0XHRcdFx0bmV3QmFzZXNbcmlnaHRfaW5kZXhdID0gcGFpcl9hdmFpbCAtIG5ld0xlZnRQY3Q7XHJcblxyXG5cdFx0XHRcdGIubGF5b3V0LmFwcGx5X2Jhc2VzX3RvX3Jvdyggcm93X2VsLCBuZXdCYXNlcyApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Y29uc3Qgb25fbW91c2VfdXAgPSAoKSA9PiB7XHJcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNlbW92ZScsIG9uX21vdXNlX21vdmUgKTtcclxuXHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2V1cCcsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnbW91c2VsZWF2ZScsIG9uX21vdXNlX3VwICk7XHJcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gcHJldl91c2VyX3NlbGVjdCB8fCAnJztcclxuXHRcdFx0XHRyb3dfZWwuc3R5bGUuY3Vyc29yICAgICAgICAgICAgPSAnJztcclxuXHJcblx0XHRcdFx0Ly8gbm9ybWFsaXplIHRvIHRoZSByb3figJlzIGF2YWlsYWJsZSAlIGFnYWluXHJcblx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGIubGF5b3V0LmNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdwICk7XHJcblx0XHRcdFx0Yi5sYXlvdXQuYXBwbHlfYmFzZXNfdG9fcm93KCByb3dfZWwsIG5vcm1hbGl6ZWQuYmFzZXMgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZW1vdmUnLCBvbl9tb3VzZV9tb3ZlICk7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdtb3VzZXVwJywgb25fbW91c2VfdXAgKTtcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlbGVhdmUnLCBvbl9tb3VzZV91cCApO1xyXG5cdFx0fVxyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBQYWdlIGFuZCBzZWN0aW9uIGNyZWF0aW9uLCByZWJ1aWxkaW5nLCBhbmQgbmVzdGVkIFNvcnRhYmxlIHNldHVwLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1BhZ2VzX1NlY3Rpb25zID0gY2xhc3MgZXh0ZW5kcyBVSS5XUEJDX0JGQl9Nb2R1bGUge1xyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5hZGRfcGFnZSAgICAgICAgICAgICAgICAgID0gKG9wdHMpID0+IHRoaXMuYWRkX3BhZ2UoIG9wdHMgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLmFkZF9zZWN0aW9uICAgICAgICAgICAgICAgPSAoY29udGFpbmVyLCBjb2xzKSA9PiB0aGlzLmFkZF9zZWN0aW9uKCBjb250YWluZXIsIGNvbHMgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyLnJlYnVpbGRfc2VjdGlvbiAgICAgICAgICAgPSAoc2VjdGlvbl9kYXRhLCBjb250YWluZXIpID0+IHRoaXMucmVidWlsZF9zZWN0aW9uKCBzZWN0aW9uX2RhdGEsIGNvbnRhaW5lciApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyA9IChlbCkgPT4gdGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBlbCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXIuaW5pdF9zZWN0aW9uX3NvcnRhYmxlICAgICA9IChlbCkgPT4gdGhpcy5pbml0X3NlY3Rpb25fc29ydGFibGUoIGVsICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5wYWdlc19zZWN0aW9ucyAgICAgICAgICAgID0gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdpdmUgZXZlcnkgZmllbGQvc2VjdGlvbiBpbiBhIGNsb25lZCBzdWJ0cmVlIGEgZnJlc2ggZGF0YS11aWQgc29cclxuXHRcdCAqIHVuaXF1ZW5lc3MgY2hlY2tzIGRvbid0IGV4Y2x1ZGUgdGhlaXIgb3JpZ2luYWxzLlxyXG5cdFx0ICovXHJcblx0XHRfcmV0YWdfdWlkc19pbl9zdWJ0cmVlKHJvb3QpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0Y29uc3Qgbm9kZXMgPSBbXTtcclxuXHRcdFx0aWYgKCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0bm9kZXMucHVzaCggcm9vdCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGVzLnB1c2goIC4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fc2VjdGlvbiwgLndwYmNfYmZiX19maWVsZCcgKSApO1xyXG5cdFx0XHRub2Rlcy5mb3JFYWNoKCAoZWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcmVmaXggICA9IGVsLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19zZWN0aW9uJyApID8gJ3MnIDogJ2YnO1xyXG5cdFx0XHRcdGVsLmRhdGFzZXQudWlkID0gYCR7cHJlZml4fS0keysrYi5fdWlkX2NvdW50ZXJ9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA3ICl9YDtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQnVtcCBcImZvb1wiLCBcImZvby0yXCIsIFwiZm9vLTNcIiwgLi4uXHJcblx0XHQgKi9cclxuXHRcdF9tYWtlX3VuaXF1ZShiYXNlLCB0YWtlbikge1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0bGV0IHYgICA9IFN0cmluZyggYmFzZSB8fCAnJyApO1xyXG5cdFx0XHRpZiAoICF2ICkgdiA9ICdmaWVsZCc7XHJcblx0XHRcdGNvbnN0IG0gID0gdi5tYXRjaCggLy0oXFxkKykkLyApO1xyXG5cdFx0XHRsZXQgbiAgICA9IG0gPyAocGFyc2VJbnQoIG1bMV0sIDEwICkgfHwgMSkgOiAxO1xyXG5cdFx0XHRsZXQgc3RlbSA9IG0gPyB2LnJlcGxhY2UoIC8tXFxkKyQvLCAnJyApIDogdjtcclxuXHRcdFx0d2hpbGUgKCB0YWtlbi5oYXMoIHYgKSApIHtcclxuXHRcdFx0XHRuID0gTWF0aC5tYXgoIDIsIG4gKyAxICk7XHJcblx0XHRcdFx0diA9IGAke3N0ZW19LSR7bn1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRha2VuLmFkZCggdiApO1xyXG5cdFx0XHRyZXR1cm4gdjtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN0cmljdCwgb25lLXBhc3MgZGUtZHVwbGljYXRpb24gZm9yIGEgbmV3bHktaW5zZXJ0ZWQgc3VidHJlZS5cclxuXHRcdCAqIC0gRW5zdXJlcyB1bmlxdWUgZGF0YS1pZCAoaW50ZXJuYWwpLCBkYXRhLW5hbWUgKGZpZWxkcyksIGRhdGEtaHRtbF9pZCAocHVibGljKVxyXG5cdFx0ICogLSBBbHNvIHVwZGF0ZXMgRE9NOiA8c2VjdGlvbiBpZD4sIDxpbnB1dCBpZD4sIDxsYWJlbCBmb3I+LCBhbmQgaW5wdXRbbmFtZV0uXHJcblx0XHQgKi9cclxuXHRcdF9kZWR1cGVfc3VidHJlZV9zdHJpY3Qocm9vdCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBzID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZTtcclxuXHRcdFx0aWYgKCAhcm9vdCB8fCAhYj8ucGFnZXNfY29udGFpbmVyICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gMSkgQnVpbGQgXCJ0YWtlblwiIHNldHMgZnJvbSBvdXRzaWRlIHRoZSBzdWJ0cmVlLlxyXG5cdFx0XHRjb25zdCB0YWtlbkRhdGFJZCAgID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkRhdGFOYW1lID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkh0bWxJZCAgID0gbmV3IFNldCgpO1xyXG5cdFx0XHRjb25zdCB0YWtlbkRvbUlkICAgID0gbmV3IFNldCgpO1xyXG5cclxuXHRcdFx0Ly8gQWxsIGZpZWxkcy9zZWN0aW9ucyBvdXRzaWRlIHJvb3RcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZmllbGQsIC53cGJjX2JmYl9fc2VjdGlvbicgKS5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0aWYgKCByb290LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IGRpZCAgPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLWlkJyApO1xyXG5cdFx0XHRcdGNvbnN0IGRuYW0gPSBlbC5nZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnICk7XHJcblx0XHRcdFx0Y29uc3QgaGlkICA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKTtcclxuXHRcdFx0XHRpZiAoIGRpZCApIHRha2VuRGF0YUlkLmFkZCggZGlkICk7XHJcblx0XHRcdFx0aWYgKCBkbmFtICkgdGFrZW5EYXRhTmFtZS5hZGQoIGRuYW0gKTtcclxuXHRcdFx0XHRpZiAoIGhpZCApIHRha2VuSHRtbElkLmFkZCggaGlkICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdC8vIEFsbCBET00gaWRzIG91dHNpZGUgcm9vdCAobGFiZWxzLCBpbnB1dHMsIGFueXRoaW5nKVxyXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnW2lkXScgKS5mb3JFYWNoKCBlbCA9PiB7XHJcblx0XHRcdFx0aWYgKCByb290LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmICggZWwuaWQgKSB0YWtlbkRvbUlkLmFkZCggZWwuaWQgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Y29uc3Qgbm9kZXMgPSBbXTtcclxuXHRcdFx0aWYgKCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSB8fCByb290LmNsYXNzTGlzdD8uY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0bm9kZXMucHVzaCggcm9vdCApO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGVzLnB1c2goIC4uLnJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fc2VjdGlvbiwgLndwYmNfYmZiX19maWVsZCcgKSApO1xyXG5cclxuXHRcdFx0Ly8gMikgV2FsayB0aGUgc3VidHJlZSBhbmQgZml4IGNvbGxpc2lvbnMgZGV0ZXJtaW5pc3RpY2FsbHkuXHJcblx0XHRcdG5vZGVzLmZvckVhY2goIGVsID0+IHtcclxuXHRcdFx0XHRjb25zdCBpc0ZpZWxkICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICk7XHJcblx0XHRcdFx0Y29uc3QgaXNTZWN0aW9uID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICk7XHJcblxyXG5cdFx0XHRcdC8vIElOVEVSTkFMIGRhdGEtaWRcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRjb25zdCByYXcgID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1pZCcgKSB8fCAnJztcclxuXHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBzLnNhbml0aXplX2h0bWxfaWQoIHJhdyApIHx8IChpc1NlY3Rpb24gPyAnc2VjdGlvbicgOiAnZmllbGQnKTtcclxuXHRcdFx0XHRcdGNvbnN0IHVuaXEgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgdGFrZW5EYXRhSWQgKTtcclxuXHRcdFx0XHRcdGlmICggdW5pcSAhPT0gcmF3ICkgZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIHVuaXEgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEhUTUwgbmFtZSAoZmllbGRzIG9ubHkpXHJcblx0XHRcdFx0aWYgKCBpc0ZpZWxkICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmF3ID0gZWwuZ2V0QXR0cmlidXRlKCAnZGF0YS1uYW1lJyApIHx8ICcnO1xyXG5cdFx0XHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJhc2UgPSBzLnNhbml0aXplX2h0bWxfbmFtZSggcmF3ICk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHVuaXEgPSB0aGlzLl9tYWtlX3VuaXF1ZSggYmFzZSwgdGFrZW5EYXRhTmFtZSApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHVuaXEgIT09IHJhdyApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIGlubmVyIGNvbnRyb2wgaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGlucHV0ICkgaW5wdXQuc2V0QXR0cmlidXRlKCAnbmFtZScsIHVuaXEgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUHVibGljIEhUTUwgaWQgKGZpZWxkcyArIHNlY3Rpb25zKVxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IGVsLmdldEF0dHJpYnV0ZSggJ2RhdGEtaHRtbF9pZCcgKSB8fCAnJztcclxuXHRcdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlICAgICAgICAgID0gcy5zYW5pdGl6ZV9odG1sX2lkKCByYXcgKTtcclxuXHRcdFx0XHRcdFx0Ly8gUmVzZXJ2ZSBhZ2FpbnN0IEJPVEgga25vd24gZGF0YS1odG1sX2lkIGFuZCByZWFsIERPTSBpZHMuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGNvbWJpbmVkVGFrZW4gPSBuZXcgU2V0KCBbIC4uLnRha2VuSHRtbElkLCAuLi50YWtlbkRvbUlkIF0gKTtcclxuXHRcdFx0XHRcdFx0bGV0IGNhbmRpZGF0ZSAgICAgICA9IHRoaXMuX21ha2VfdW5pcXVlKCBiYXNlLCBjb21iaW5lZFRha2VuICk7XHJcblx0XHRcdFx0XHRcdC8vIFJlY29yZCBpbnRvIHRoZSByZWFsIHNldHMgc28gZnV0dXJlIGNoZWNrcyBzZWUgdGhlIHJlc2VydmF0aW9uLlxyXG5cdFx0XHRcdFx0XHR0YWtlbkh0bWxJZC5hZGQoIGNhbmRpZGF0ZSApO1xyXG5cdFx0XHRcdFx0XHR0YWtlbkRvbUlkLmFkZCggY2FuZGlkYXRlICk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIGNhbmRpZGF0ZSAhPT0gcmF3ICkgZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1odG1sX2lkJywgY2FuZGlkYXRlICk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBSZWZsZWN0IHRvIERPTSBpbW1lZGlhdGVseVxyXG5cdFx0XHRcdFx0XHRpZiAoIGlzU2VjdGlvbiApIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5pZCA9IGNhbmRpZGF0ZSB8fCAnJztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoICdsYWJlbC53cGJjX2JmYl9fZmllbGQtbGFiZWwnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBpbnB1dCApIGlucHV0LmlkID0gY2FuZGlkYXRlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbGFiZWwgKSBsYWJlbC5odG1sRm9yID0gY2FuZGlkYXRlIHx8ICcnO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBpc1NlY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRcdC8vIEVuc3VyZSBubyBzdGFsZSBET00gaWQgaWYgZGF0YS1odG1sX2lkIHdhcyBjbGVhcmVkXHJcblx0XHRcdFx0XHRcdGVsLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9tYWtlX2FkZF9jb2x1bW5zX2NvbnRyb2wocGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsIGluc2VydF9wb3MgPSAnYm90dG9tJykge1xyXG5cclxuXHRcdFx0Ly8gQWNjZXB0IGluc2VydF9wb3MgKCd0b3AnfCdib3R0b20nKSwgZGVmYXVsdCAnYm90dG9tJy5cclxuXHJcblx0XHRcdGNvbnN0IHRwbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2FkZF9jb2x1bW5zX3RlbXBsYXRlJyApO1xyXG5cdFx0XHRpZiAoICF0cGwgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENsb25lICpjb250ZW50cyogKG5vdCB0aGUgaWQpLCB1bmhpZGUsIGFuZCBhZGQgYSBwYWdlLXNjb3BlZCBjbGFzcy5cclxuXHRcdFx0Y29uc3Qgc3JjID0gKHRwbC5jb250ZW50ICYmIHRwbC5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSA/IHRwbC5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkIDogdHBsLmZpcnN0RWxlbWVudENoaWxkO1xyXG5cdFx0XHRpZiAoICFzcmMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGNsb25lID0gc3JjLmNsb25lTm9kZSggdHJ1ZSApO1xyXG5cdFx0XHRjbG9uZS5yZW1vdmVBdHRyaWJ1dGUoICdoaWRkZW4nICk7XHJcblx0XHRcdGlmICggY2xvbmUuaWQgKSB7XHJcblx0XHRcdFx0Y2xvbmUucmVtb3ZlQXR0cmlidXRlKCAnaWQnICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2xvbmUucXVlcnlTZWxlY3RvckFsbCggJ1tpZF0nICkuZm9yRWFjaCggbiA9PiBuLnJlbW92ZUF0dHJpYnV0ZSggJ2lkJyApICk7XHJcblxyXG5cdFx0XHQvLyBNYXJrIHdoZXJlIHRoaXMgY29udHJvbCBpbnNlcnRzIHNlY3Rpb25zLlxyXG5cdFx0XHRjbG9uZS5kYXRhc2V0Lmluc2VydCA9IGluc2VydF9wb3M7IC8vICd0b3AnIHwgJ2JvdHRvbSdcclxuXHJcblx0XHRcdC8vIC8vIE9wdGlvbmFsIFVJIGhpbnQgZm9yIHVzZXJzIChrZWVwcyBleGlzdGluZyBtYXJrdXAgaW50YWN0KS5cclxuXHRcdFx0Ly8gY29uc3QgaGludCA9IGNsb25lLnF1ZXJ5U2VsZWN0b3IoICcubmF2LXRhYi10ZXh0IC5zZWxlY3RlZF92YWx1ZScgKTtcclxuXHRcdFx0Ly8gaWYgKCBoaW50ICkge1xyXG5cdFx0XHQvLyBcdGhpbnQudGV4dENvbnRlbnQgPSAoaW5zZXJ0X3BvcyA9PT0gJ3RvcCcpID8gJyAoYWRkIGF0IHRvcCknIDogJyAoYWRkIGF0IGJvdHRvbSknO1xyXG5cdFx0XHQvLyB9XHJcblxyXG5cdFx0XHQvLyBDbGljayBvbiBvcHRpb25zIC0gYWRkIHNlY3Rpb24gd2l0aCBOIGNvbHVtbnMuXHJcblx0XHRcdGNsb25lLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYSA9IGUudGFyZ2V0LmNsb3Nlc3QoICcudWxfZHJvcGRvd25fbWVudV9saV9hY3Rpb25fYWRkX3NlY3Rpb25zJyApO1xyXG5cdFx0XHRcdGlmICggIWEgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVhZCBOIGVpdGhlciBmcm9tIGRhdGEtY29scyBvciBmYWxsYmFjayB0byBwYXJzaW5nIHRleHQgbGlrZSBcIjMgQ29sdW1uc1wiLlxyXG5cdFx0XHRcdGxldCBjb2xzID0gcGFyc2VJbnQoIGEuZGF0YXNldC5jb2xzIHx8IChhLnRleHRDb250ZW50Lm1hdGNoKCAvXFxiKFxcZCspXFxzKkNvbHVtbi9pICk/LlsxXSA/PyAnMScpLCAxMCApO1xyXG5cdFx0XHRcdGNvbHMgICAgID0gTWF0aC5tYXgoIDEsIE1hdGgubWluKCA0LCBjb2xzICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gTkVXOiBob25vciB0aGUgY29udHJvbCdzIGluc2VydGlvbiBwb3NpdGlvblxyXG5cdFx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIHNlY3Rpb25fY29udGFpbmVyLCBjb2xzLCBpbnNlcnRfcG9zICk7XHJcblxyXG5cdFx0XHRcdC8vIFJlZmxlY3QgbGFzdCBjaG9pY2UgKHVuY2hhbmdlZClcclxuXHRcdFx0XHRjb25zdCB2YWwgPSBjbG9uZS5xdWVyeVNlbGVjdG9yKCAnLnNlbGVjdGVkX3ZhbHVlJyApO1xyXG5cdFx0XHRcdGlmICggdmFsICkge1xyXG5cdFx0XHRcdFx0dmFsLnRleHRDb250ZW50ID0gYCAoJHtjb2xzfSlgO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHt7c2Nyb2xsPzogYm9vbGVhbn19IFtvcHRzID0ge31dXHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGFkZF9wYWdlKHsgc2Nyb2xsID0gdHJ1ZSB9ID0ge30pIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgICA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Y29uc3QgcGFnZV9lbCA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnZGl2JywgJ3dwYmNfYmZiX19wYW5lbCB3cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgIHdwYmNfYmZiX2Zvcm0gd3BiY19jb250YWluZXIgd3BiY19mb3JtIHdwYmNfY29udGFpbmVyX2Jvb2tpbmdfZm9ybScgKTtcclxuXHRcdFx0cGFnZV9lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLXBhZ2UnLCArK2IucGFnZV9jb3VudGVyICk7XHJcblxyXG5cdFx0XHQvLyBcIlBhZ2UgMSB8IFhcIiAtIFJlbmRlciBwYWdlIFRpdGxlIHdpdGggUmVtb3ZlIFggYnV0dG9uLlxyXG5cdFx0XHRjb25zdCBjb250cm9sc19odG1sID0gVUkucmVuZGVyX3dwX3RlbXBsYXRlKCAnd3BiYy1iZmItdHBsLXBhZ2UtcmVtb3ZlJywgeyBwYWdlX251bWJlcjogYi5wYWdlX2NvdW50ZXIgfSApO1xyXG5cdFx0XHRwYWdlX2VsLmlubmVySFRNTCAgID0gY29udHJvbHNfaHRtbCArICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lciB3cGJjX3dpemFyZF9fYm9yZGVyX2NvbnRhaW5lclwiPjwvZGl2Pic7XHJcblxyXG5cdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5hcHBlbmRDaGlsZCggcGFnZV9lbCApO1xyXG5cdFx0XHRpZiAoIHNjcm9sbCApIHtcclxuXHRcdFx0XHRwYWdlX2VsLnNjcm9sbEludG9WaWV3KCB7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBzZWN0aW9uX2NvbnRhaW5lciAgICAgICAgID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdGNvbnN0IHNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UgPSAyO1xyXG5cdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggc2VjdGlvbl9jb250YWluZXIgKTtcclxuXHRcdFx0dGhpcy5hZGRfc2VjdGlvbiggc2VjdGlvbl9jb250YWluZXIsIHNlY3Rpb25fY291bnRfb25fYWRkX3BhZ2UgKTtcclxuXHJcblx0XHRcdC8vIERyb3Bkb3duIGNvbnRyb2wgY2xvbmVkIGZyb20gdGhlIGhpZGRlbiB0ZW1wbGF0ZS5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaG9zdF90b3AgPSBwYWdlX2VsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2NvbnRyb2xzJyApO1xyXG5cdFx0XHRjb25zdCBjdHJsX3RvcCAgICAgICAgICA9IHRoaXMuX21ha2VfYWRkX2NvbHVtbnNfY29udHJvbCggcGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsICd0b3AnICk7XHJcblx0XHRcdGlmICggY3RybF90b3AgKSB7XHJcblx0XHRcdFx0Y29udHJvbHNfaG9zdF90b3AuYXBwZW5kQ2hpbGQoIGN0cmxfdG9wICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQm90dG9tIGNvbnRyb2wgYmFyIGFmdGVyIHRoZSBzZWN0aW9uIGNvbnRhaW5lci5cclxuXHRcdFx0Y29uc3QgY29udHJvbHNfaG9zdF9ib3R0b20gPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29udHJvbHMgd3BiY19iZmJfX2NvbnRyb2xzLS1ib3R0b20nICk7XHJcblx0XHRcdHNlY3Rpb25fY29udGFpbmVyLmFmdGVyKCBjb250cm9sc19ob3N0X2JvdHRvbSApO1xyXG5cdFx0XHRjb25zdCBjdHJsX2JvdHRvbSA9IHRoaXMuX21ha2VfYWRkX2NvbHVtbnNfY29udHJvbCggcGFnZV9lbCwgc2VjdGlvbl9jb250YWluZXIsICdib3R0b20nICk7XHJcblx0XHRcdGlmICggY3RybF9ib3R0b20gKSB7XHJcblx0XHRcdFx0Y29udHJvbHNfaG9zdF9ib3R0b20uYXBwZW5kQ2hpbGQoIGN0cmxfYm90dG9tICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBwYWdlX2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXHJcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gICAgICBjb2xzXHJcblx0XHQgKiBAcGFyYW0geyd0b3AnfCdib3R0b20nfSBbaW5zZXJ0X3Bvcz0nYm90dG9tJ10gIC8vIE5FV1xyXG5cdFx0ICovXHJcblx0XHRhZGRfc2VjdGlvbihjb250YWluZXIsIGNvbHMsIGluc2VydF9wb3MgPSAnYm90dG9tJykge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb2xzICAgID0gTWF0aC5tYXgoIDEsIHBhcnNlSW50KCBjb2xzLCAxMCApIHx8IDEgKTtcclxuXHJcblx0XHRcdGNvbnN0IHNlY3Rpb24gPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWlkJywgYHNlY3Rpb24tJHsrK2Iuc2VjdGlvbl9jb3VudGVyfS0ke0RhdGUubm93KCl9YCApO1xyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtdWlkJywgYHMtJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXR5cGUnLCAnc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgJ1NlY3Rpb24nICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAnZGF0YS1jb2x1bW5zJywgU3RyaW5nKCBjb2xzICkgKTtcclxuXHRcdFx0Ly8gRG8gbm90IHBlcnNpc3Qgb3Igc2VlZCBwZXItY29sdW1uIHN0eWxlcyBieSBkZWZhdWx0IChvcHQtaW4gdmlhIGluc3BlY3RvcikuXHJcblxyXG5cdFx0XHRjb25zdCByb3cgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fcm93IHdwYmNfX3JvdycgKTtcclxuXHRcdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgY29sczsgaSsrICkge1xyXG5cdFx0XHRcdGNvbnN0IGNvbCAgICAgICAgICAgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5jcmVhdGVfZWxlbWVudCggJ2RpdicsICd3cGJjX2JmYl9fY29sdW1uIHdwYmNfX2ZpZWxkJyApO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSAoMTAwIC8gY29scykgKyAnJSc7XHJcblx0XHRcdFx0Ly8gTm8gZGVmYXVsdCBDU1MgdmFycyBoZXJlOyByZWFsIGNvbHVtbnMgcmVtYWluIHVuYWZmZWN0ZWQgdW50aWwgdXNlciBhY3RpdmF0ZXMgc3R5bGVzLlxyXG5cdFx0XHRcdGIuaW5pdF9zb3J0YWJsZT8uKCBjb2wgKTtcclxuXHRcdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGNvbCApO1xyXG5cdFx0XHRcdGlmICggaSA8IGNvbHMgLSAxICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzaXplciA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmNyZWF0ZV9lbGVtZW50KCAnZGl2JywgJ3dwYmNfYmZiX19jb2x1bW4tcmVzaXplcicgKTtcclxuXHRcdFx0XHRcdHJlc2l6ZXIuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZG93bicsIGIuaW5pdF9yZXNpemVfaGFuZGxlciApO1xyXG5cdFx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCByZXNpemVyICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHNlY3Rpb24uYXBwZW5kQ2hpbGQoIHJvdyApO1xyXG5cdFx0XHRiLmxheW91dC5zZXRfZXF1YWxfYmFzZXMoIHJvdywgYi5jb2xfZ2FwX3BlcmNlbnQgKTtcclxuXHRcdFx0Yi5hZGRfb3ZlcmxheV90b29sYmFyKCBzZWN0aW9uICk7XHJcblx0XHRcdHNlY3Rpb24uc2V0QXR0cmlidXRlKCAndGFiaW5kZXgnLCAnMCcgKTtcclxuXHRcdFx0dGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBzZWN0aW9uICk7XHJcblxyXG5cdFx0XHQvLyBJbnNlcnRpb24gcG9saWN5OiB0b3AgfCBib3R0b20uXHJcblx0XHRcdGlmICggaW5zZXJ0X3BvcyA9PT0gJ3RvcCcgJiYgY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkICkge1xyXG5cdFx0XHRcdGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoIHNlY3Rpb24sIGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggc2VjdGlvbiApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2VjdGlvbl9kYXRhXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIHJlYnVpbHQgc2VjdGlvbiBlbGVtZW50LlxyXG5cdFx0ICovXHJcblx0XHRyZWJ1aWxkX3NlY3Rpb24oc2VjdGlvbl9kYXRhLCBjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiAgICAgICAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRjb25zdCBjb2xzX2RhdGEgPSBBcnJheS5pc0FycmF5KCBzZWN0aW9uX2RhdGE/LmNvbHVtbnMgKSA/IHNlY3Rpb25fZGF0YS5jb2x1bW5zIDogW107XHJcblx0XHRcdHRoaXMuYWRkX3NlY3Rpb24oIGNvbnRhaW5lciwgY29sc19kYXRhLmxlbmd0aCB8fCAxICk7XHJcblx0XHRcdGNvbnN0IHNlY3Rpb24gPSBjb250YWluZXIubGFzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0aWYgKCAhc2VjdGlvbi5kYXRhc2V0LnVpZCApIHtcclxuXHRcdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtdWlkJywgYHMtJHsrK2IuX3VpZF9jb3VudGVyfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZyggMzYgKS5zbGljZSggMiwgNyApfWAgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZWN0aW9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtaWQnLCBzZWN0aW9uX2RhdGE/LmlkIHx8IGBzZWN0aW9uLSR7KytiLnNlY3Rpb25fY291bnRlcn0tJHtEYXRlLm5vdygpfWAgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLXR5cGUnLCAnc2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWxhYmVsJywgc2VjdGlvbl9kYXRhPy5sYWJlbCB8fCAnU2VjdGlvbicgKTtcclxuXHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNvbHVtbnMnLCBTdHJpbmcoIChzZWN0aW9uX2RhdGE/LmNvbHVtbnMgfHwgW10pLmxlbmd0aCB8fCAxICkgKTtcclxuXHRcdFx0Ly8gUGVyc2lzdGVkIGF0dHJpYnV0ZXNcclxuXHRcdFx0aWYgKCBzZWN0aW9uX2RhdGE/Lmh0bWxfaWQgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWh0bWxfaWQnLCBTdHJpbmcoIHNlY3Rpb25fZGF0YS5odG1sX2lkICkgKTtcclxuXHRcdFx0XHQvLyBnaXZlIHRoZSBjb250YWluZXIgYSByZWFsIGlkIHNvIGFuY2hvcnMvQ1NTIGNhbiB0YXJnZXQgaXRcclxuXHRcdFx0XHRzZWN0aW9uLmlkID0gU3RyaW5nKCBzZWN0aW9uX2RhdGEuaHRtbF9pZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlc3RvcmUgcGVyc2lzdGVkIHBlci1jb2x1bW4gc3R5bGVzIChyYXcgSlNPTiBzdHJpbmcpLlxyXG5cdFx0XHRpZiAoIHNlY3Rpb25fZGF0YT8uY29sX3N0eWxlcyAhPSBudWxsICkge1xyXG5cdFx0XHRcdGNvbnN0IGpzb24gPSBTdHJpbmcoIHNlY3Rpb25fZGF0YS5jb2xfc3R5bGVzICk7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNvbF9zdHlsZXMnLCBqc29uICk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHNlY3Rpb24uZGF0YXNldC5jb2xfc3R5bGVzID0ganNvbjtcclxuXHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIChObyByZW5kZXJfcHJldmlldygpIGNhbGwgaGVyZSBvbiBwdXJwb3NlOiBzZWN0aW9uc+KAmSBidWlsZGVyIERPTSB1c2VzIC53cGJjX2JmYl9fcm93Ly53cGJjX2JmYl9fY29sdW1uLilcclxuXHJcblxyXG5cdFx0XHRpZiAoIHNlY3Rpb25fZGF0YT8uY3NzY2xhc3MgKSB7XHJcblx0XHRcdFx0c2VjdGlvbi5zZXRBdHRyaWJ1dGUoICdkYXRhLWNzc2NsYXNzJywgU3RyaW5nKCBzZWN0aW9uX2RhdGEuY3NzY2xhc3MgKSApO1xyXG5cdFx0XHRcdC8vIGtlZXAgY29yZSBjbGFzc2VzLCB0aGVuIGFkZCBjdXN0b20gY2xhc3MoZXMpXHJcblx0XHRcdFx0U3RyaW5nKCBzZWN0aW9uX2RhdGEuY3NzY2xhc3MgKS5zcGxpdCggL1xccysvICkuZmlsdGVyKCBCb29sZWFuICkuZm9yRWFjaCggY2xzID0+IHNlY3Rpb24uY2xhc3NMaXN0LmFkZCggY2xzICkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdC8vIERlbGVnYXRlIHBhcnNpbmcgKyBhY3RpdmF0aW9uICsgYXBwbGljYXRpb24gdG8gdGhlIENvbHVtbiBTdHlsZXMgc2VydmljZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBqc29uID0gc2VjdGlvbi5nZXRBdHRyaWJ1dGUoICdkYXRhLWNvbF9zdHlsZXMnIClcclxuXHRcdFx0XHRcdHx8IChzZWN0aW9uLmRhdGFzZXQgPyAoc2VjdGlvbi5kYXRhc2V0LmNvbF9zdHlsZXMgfHwgJycpIDogJycpO1xyXG5cdFx0XHRcdGNvbnN0IGFyciAgPSBVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLnBhcnNlX2NvbF9zdHlsZXMoIGpzb24gKTtcclxuXHRcdFx0XHRVSS5XUEJDX0JGQl9Db2x1bW5fU3R5bGVzLmFwcGx5KCBzZWN0aW9uLCBhcnIgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb2xzX2RhdGEuZm9yRWFjaCggKGNvbF9kYXRhLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbnNfb25seSAgPSByb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRcdGNvbnN0IGNvbCAgICAgICAgICAgPSBjb2x1bW5zX29ubHlbaW5kZXhdO1xyXG5cdFx0XHRcdGNvbC5zdHlsZS5mbGV4QmFzaXMgPSBjb2xfZGF0YS53aWR0aCB8fCAnMTAwJSc7XHJcblx0XHRcdFx0KGNvbF9kYXRhLml0ZW1zIHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCAhaXRlbSB8fCAhaXRlbS50eXBlICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBiLmJ1aWxkX2ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRjb2wuYXBwZW5kQ2hpbGQoIGVsICk7XHJcblx0XHRcdFx0XHRcdFx0Yi50cmlnZ2VyX2ZpZWxkX2Ryb3BfY2FsbGJhY2soIGVsLCAnbG9hZCcgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ3NlY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlYnVpbGRfc2VjdGlvbiggaXRlbS5kYXRhLCBjb2wgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0Y29uc3QgY29tcHV0ZWQgPSBiLmxheW91dC5jb21wdXRlX2VmZmVjdGl2ZV9iYXNlc19mcm9tX3Jvdyggcm93LCBiLmNvbF9nYXBfcGVyY2VudCApO1xyXG5cdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvdywgY29tcHV0ZWQuYmFzZXMgKTtcclxuXHRcdFx0dGhpcy5pbml0X2FsbF9uZXN0ZWRfc29ydGFibGVzKCBzZWN0aW9uICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJldGFnIFVJRHMgZmlyc3QgKHNvIHVuaXF1ZW5lc3MgY2hlY2tzIGRvbid0IGV4Y2x1ZGUgb3JpZ2luYWxzKSwgdGhlbiBkZWR1cGUgYWxsIGtleXMuXHJcblx0XHRcdHRoaXMuX3JldGFnX3VpZHNfaW5fc3VidHJlZSggc2VjdGlvbiApO1xyXG5cdFx0XHR0aGlzLl9kZWR1cGVfc3VidHJlZV9zdHJpY3QoIHNlY3Rpb24gKTtcclxuXHRcdFx0cmV0dXJuIHNlY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAqL1xyXG5cdFx0aW5pdF9hbGxfbmVzdGVkX3NvcnRhYmxlcyhjb250YWluZXIpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0aWYgKCBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKSApIHtcclxuXHRcdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggY29udGFpbmVyICk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3NlY3Rpb24nICkuZm9yRWFjaCggKHNlY3Rpb24pID0+IHtcclxuXHRcdFx0XHRzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2NvbHVtbicgKS5mb3JFYWNoKCAoY29sKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmluaXRfc2VjdGlvbl9zb3J0YWJsZSggY29sICk7XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAqL1xyXG5cdFx0aW5pdF9zZWN0aW9uX3NvcnRhYmxlKGNvbnRhaW5lcikge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRpZiAoICFjb250YWluZXIgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzX2NvbHVtbiAgICA9IGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cdFx0XHRjb25zdCBpc190b3BfbGV2ZWwgPSBjb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcclxuXHRcdFx0aWYgKCAhaXNfY29sdW1uICYmICFpc190b3BfbGV2ZWwgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGIuaW5pdF9zb3J0YWJsZT8uKCBjb250YWluZXIgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2YgcGFnZXMvc2VjdGlvbnMvZmllbGRzLlxyXG5cdCAqL1xyXG5cdFVJLldQQkNfQkZCX1N0cnVjdHVyZV9JTyA9IGNsYXNzIGV4dGVuZHMgVUkuV1BCQ19CRkJfTW9kdWxlIHtcclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5nZXRfc3RydWN0dXJlICAgICAgICA9ICgpID0+IHRoaXMuc2VyaWFsaXplKCk7XHJcblx0XHRcdHRoaXMuYnVpbGRlci5sb2FkX3NhdmVkX3N0cnVjdHVyZSA9IChzLCBvcHRzKSA9PiB0aGlzLmRlc2VyaWFsaXplKCBzLCBvcHRzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBOb3JtYWxpemUgb3B0aW9uIHZhbHVlcyB3aGVuIGEgZmllbGQgZXhwbGljaXRseSBkaXNhYmxlcyBzZXBhcmF0ZSB2YWx1ZXMuXHJcblx0XHQgKlxyXG5cdFx0ICogT2xkZXIgQnVpbGRlciB2ZXJzaW9ucyBwZXJzaXN0ZWQgYW4gdW5jaGVja2VkIHZhbHVlX2RpZmZlcnMgdG9nZ2xlIGFzIGFuXHJcblx0XHQgKiBlbXB0eSBzdHJpbmcuIFRyZWF0IHRoYXQgZXhwbGljaXQgbGVnYWN5IHZhbHVlIGFzIGZhbHNlLCB3aGlsZSByZXRhaW5pbmdcclxuXHRcdCAqIHRoZSBzY2hlbWEgZGVmYXVsdCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBnZW51aW5lbHkgYWJzZW50LlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZF9kYXRhIFNlcmlhbGl6ZWQgZmllbGQgZGF0YS5cclxuXHRcdCAqIEByZXR1cm5zIHtPYmplY3R9IE5vcm1hbGl6ZWQgc2VyaWFsaXplZCBmaWVsZCBkYXRhLlxyXG5cdFx0ICovXHJcblx0XHRfbm9ybWFsaXplX2ZpZWxkX29wdGlvbl92YWx1ZXMoZmllbGRfZGF0YSkge1xyXG5cdFx0XHRjb25zdCBoYXNfdmFsdWVfZGlmZmVycyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggZmllbGRfZGF0YSwgJ3ZhbHVlX2RpZmZlcnMnICk7XHJcblx0XHRcdGlmICggIWhhc192YWx1ZV9kaWZmZXJzICkge1xyXG5cdFx0XHRcdHJldHVybiBmaWVsZF9kYXRhO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB2YWx1ZV9kaWZmZXJzICAgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLmNvZXJjZV9ib29sZWFuKCBmaWVsZF9kYXRhLnZhbHVlX2RpZmZlcnMsIGZhbHNlICk7XHJcblx0XHRcdGZpZWxkX2RhdGEudmFsdWVfZGlmZmVycyA9IHZhbHVlX2RpZmZlcnM7XHJcblxyXG5cdFx0XHRpZiAoICF2YWx1ZV9kaWZmZXJzICYmIEFycmF5LmlzQXJyYXkoIGZpZWxkX2RhdGEub3B0aW9ucyApICkge1xyXG5cdFx0XHRcdGZpZWxkX2RhdGEub3B0aW9ucyA9IGZpZWxkX2RhdGEub3B0aW9ucy5tYXAoICggb3B0aW9uX3JlY29yZCApID0+IHtcclxuXHRcdFx0XHRcdGlmICggIW9wdGlvbl9yZWNvcmQgfHwgdHlwZW9mIG9wdGlvbl9yZWNvcmQgIT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uX3JlY29yZDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdG9wdGlvbl9yZWNvcmQsXHJcblx0XHRcdFx0XHRcdHsgdmFsdWU6IFN0cmluZyggb3B0aW9uX3JlY29yZC5sYWJlbCA9PSBudWxsID8gJycgOiBvcHRpb25fcmVjb3JkLmxhYmVsICkgfVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmaWVsZF9kYXRhO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7QXJyYXl9ICovXHJcblx0XHRzZXJpYWxpemUoKSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdHRoaXMuX25vcm1hbGl6ZV9pZHMoKTtcclxuXHRcdFx0dGhpcy5fbm9ybWFsaXplX25hbWVzKCk7XHJcblx0XHRcdGNvbnN0IHBhZ2VzID0gW107XHJcblx0XHRcdGIucGFnZXNfY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApLmZvckVhY2goIChwYWdlX2VsLCBwYWdlX2luZGV4KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gcGFnZV9lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XHJcblx0XHRcdFx0Y29uc3QgY29udGVudCAgID0gW107XHJcblx0XHRcdFx0aWYgKCAhY29udGFpbmVyICkge1xyXG5cdFx0XHRcdFx0cGFnZXMucHVzaCggeyBwYWdlOiBwYWdlX2luZGV4ICsgMSwgY29udGVudCB9ICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gKicgKS5mb3JFYWNoKCAoY2hpbGQpID0+IHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQucHVzaCggeyB0eXBlOiAnc2VjdGlvbicsIGRhdGE6IHRoaXMuc2VyaWFsaXplX3NlY3Rpb24oIGNoaWxkICkgfSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGNoaWxkLmNsYXNzTGlzdC5jb250YWlucyggJ3dwYmNfYmZiX19maWVsZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1pbnZhbGlkJyApICkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCBmX2RhdGEgPSB0aGlzLl9ub3JtYWxpemVfZmllbGRfb3B0aW9uX3ZhbHVlcyhcclxuXHRcdFx0XHRcdFx0XHRDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggY2hpbGQgKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHQvLyBEcm9wIGVwaGVtZXJhbC9lZGl0b3Itb25seSBmbGFnc1xyXG5cdFx0XHRcdFx0XHRbICd1aWQnLCAnZnJlc2gnLCAnYXV0b25hbWUnLCAnd2FzX2xvYWRlZCcsICduYW1lX3VzZXJfdG91Y2hlZCcgXVxyXG5cdFx0XHRcdFx0XHRcdC5mb3JFYWNoKCBrID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggayBpbiBmX2RhdGEgKSBkZWxldGUgZl9kYXRhW2tdO1xyXG5cdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0Y29udGVudC5wdXNoKCB7IHR5cGU6ICdmaWVsZCcsIGRhdGE6IGZfZGF0YSB9ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdHBhZ2VzLnB1c2goIHsgcGFnZTogcGFnZV9pbmRleCArIDEsIGNvbnRlbnQgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdHJldHVybiBwYWdlcztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25fZWxcclxuXHRcdCAqIEByZXR1cm5zIHt7aWQ6c3RyaW5nLGxhYmVsOnN0cmluZyxodG1sX2lkOnN0cmluZyxjc3NjbGFzczpzdHJpbmcsY29sX3N0eWxlczpzdHJpbmcsY29sdW1uczpBcnJheX19XHJcblx0XHQgKi9cclxuXHRcdHNlcmlhbGl6ZV9zZWN0aW9uKHNlY3Rpb25fZWwpIHtcclxuXHRcdFx0Y29uc3Qgcm93ID0gc2VjdGlvbl9lbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblxyXG5cdFx0XHQvLyBORVc6IHJlYWQgcGVyLWNvbHVtbiBzdHlsZXMgZnJvbSBkYXRhc2V0L2F0dHJpYnV0ZXMgKHVuZGVyc2NvcmUgJiBoeXBoZW4pXHJcblx0XHRcdHZhciBjb2xfc3R5bGVzX3JhdyA9XHJcblx0XHRcdFx0XHRzZWN0aW9uX2VsLmdldEF0dHJpYnV0ZSggJ2RhdGEtY29sX3N0eWxlcycgKSB8fFxyXG5cdFx0XHRcdFx0KHNlY3Rpb25fZWwuZGF0YXNldCA/IChzZWN0aW9uX2VsLmRhdGFzZXQuY29sX3N0eWxlcykgOiAnJykgfHxcclxuXHRcdFx0XHRcdCcnO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFzZSA9IHtcclxuXHRcdFx0XHRpZCAgICAgICAgOiBzZWN0aW9uX2VsLmRhdGFzZXQuaWQsXHJcblx0XHRcdFx0bGFiZWwgICAgIDogc2VjdGlvbl9lbC5kYXRhc2V0LmxhYmVsIHx8ICcnLFxyXG5cdFx0XHRcdGh0bWxfaWQgICA6IHNlY3Rpb25fZWwuZGF0YXNldC5odG1sX2lkIHx8ICcnLFxyXG5cdFx0XHRcdGNzc2NsYXNzICA6IHNlY3Rpb25fZWwuZGF0YXNldC5jc3NjbGFzcyB8fCAnJyxcclxuXHRcdFx0XHRjb2xfc3R5bGVzOiBTdHJpbmcoIGNvbF9zdHlsZXNfcmF3ICkgICAgICAgIC8vIDwtLSBORVc6IGtlZXAgYXMgcmF3IEpTT04gc3RyaW5nXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoICFyb3cgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHt9LCBiYXNlLCB7IGNvbHVtbnM6IFtdIH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY29sdW1ucyA9IFtdO1xyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApLmZvckVhY2goIGZ1bmN0aW9uIChjb2wpIHtcclxuXHRcdFx0XHRjb25zdCB3aWR0aCA9IGNvbC5zdHlsZS5mbGV4QmFzaXMgfHwgJzEwMCUnO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gW107XHJcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggY29sLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcclxuXHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1zLnB1c2goIHsgdHlwZTogJ3NlY3Rpb24nLCBkYXRhOiB0aGlzLnNlcmlhbGl6ZV9zZWN0aW9uKCBjaGlsZCApIH0gKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtaW52YWxpZCcgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgZl9kYXRhID0gdGhpcy5fbm9ybWFsaXplX2ZpZWxkX29wdGlvbl92YWx1ZXMoXHJcblx0XHRcdFx0XHRcdFx0Q29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGNoaWxkIClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0WyAndWlkJywgJ2ZyZXNoJywgJ2F1dG9uYW1lJywgJ3dhc19sb2FkZWQnLCAnbmFtZV91c2VyX3RvdWNoZWQnIF0uZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGsgaW4gZl9kYXRhICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGZfZGF0YVtrXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0aXRlbXMucHVzaCggeyB0eXBlOiAnZmllbGQnLCBkYXRhOiBmX2RhdGEgfSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0uYmluZCggdGhpcyApICk7XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKCB7IHdpZHRoOiB3aWR0aCwgaXRlbXM6IGl0ZW1zIH0gKTtcclxuXHRcdFx0fS5iaW5kKCB0aGlzICkgKTtcclxuXHJcblx0XHRcdC8vIENsYW1wIHBlcnNpc3RlZCBjb2xfc3R5bGVzIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvbHVtbnMgb24gU2F2ZS5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBjb2xDb3VudCA9IGNvbHVtbnMubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IHJhdyAgICAgID0gU3RyaW5nKCBjb2xfc3R5bGVzX3JhdyB8fCAnJyApLnRyaW0oKTtcclxuXHJcblx0XHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0XHRsZXQgYXJyID0gW107XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKCByYXcgKTtcclxuXHRcdFx0XHRcdFx0YXJyICAgICAgICAgID0gQXJyYXkuaXNBcnJheSggcGFyc2VkICkgPyBwYXJzZWQgOiAocGFyc2VkICYmIEFycmF5LmlzQXJyYXkoIHBhcnNlZC5jb2x1bW5zICkgPyBwYXJzZWQuY29sdW1ucyA6IFtdKTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0YXJyID0gW107XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBjb2xDb3VudCA8PSAwICkge1xyXG5cdFx0XHRcdFx0XHRiYXNlLmNvbF9zdHlsZXMgPSAnW10nO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBhcnIubGVuZ3RoID4gY29sQ291bnQgKSBhcnIubGVuZ3RoID0gY29sQ291bnQ7XHJcblx0XHRcdFx0XHRcdHdoaWxlICggYXJyLmxlbmd0aCA8IGNvbENvdW50ICkgYXJyLnB1c2goIHt9ICk7XHJcblx0XHRcdFx0XHRcdGJhc2UuY29sX3N0eWxlcyA9IEpTT04uc3RyaW5naWZ5KCBhcnIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YmFzZS5jb2xfc3R5bGVzID0gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKCB7fSwgYmFzZSwgeyBjb2x1bW5zOiBjb2x1bW5zIH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHN0cnVjdHVyZVxyXG5cdFx0ICogQHBhcmFtIHt7ZGVmZXJJZlR5cGluZz86IGJvb2xlYW59fSBbb3B0cyA9IHt9XVxyXG5cdFx0ICovXHJcblx0XHRkZXNlcmlhbGl6ZShzdHJ1Y3R1cmUsIHsgZGVmZXJJZlR5cGluZyA9IHRydWUgfSA9IHt9KSB7XHJcblx0XHRcdGNvbnN0IGIgPSB0aGlzLmJ1aWxkZXI7XHJcblx0XHRcdGlmICggZGVmZXJJZlR5cGluZyAmJiB0aGlzLl9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLl9kZWZlcl90aW1lciApO1xyXG5cdFx0XHRcdHRoaXMuX2RlZmVyX3RpbWVyID0gc2V0VGltZW91dCggKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5kZXNlcmlhbGl6ZSggc3RydWN0dXJlLCB7IGRlZmVySWZUeXBpbmc6IGZhbHNlIH0gKTtcclxuXHRcdFx0XHR9LCAxNTAgKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdGIucGFnZV9jb3VudGVyICAgICAgICAgICAgICA9IDA7XHJcblx0XHRcdChzdHJ1Y3R1cmUgfHwgW10pLmZvckVhY2goIChwYWdlX2RhdGEpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwYWdlX2VsICAgICAgICAgICAgICAgPSBiLnBhZ2VzX3NlY3Rpb25zLmFkZF9wYWdlKCB7IHNjcm9sbDogZmFsc2UgfSApO1xyXG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25fY29udGFpbmVyICAgICA9IHBhZ2VfZWwucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdFx0XHRcdHNlY3Rpb25fY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG5cdFx0XHRcdGIuaW5pdF9zZWN0aW9uX3NvcnRhYmxlPy4oIHNlY3Rpb25fY29udGFpbmVyICk7XHJcblx0XHRcdFx0KHBhZ2VfZGF0YS5jb250ZW50IHx8IFtdKS5mb3JFYWNoKCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCBpdGVtLnR5cGUgPT09ICdzZWN0aW9uJyApIHtcclxuXHRcdFx0XHRcdFx0Ly8gTm93IHJldHVybnMgdGhlIGVsZW1lbnQ7IGF0dHJpYnV0ZXMgKGluY2wuIGNvbF9zdHlsZXMpIGFyZSBhcHBsaWVkIGluc2lkZSByZWJ1aWxkLlxyXG5cdFx0XHRcdFx0XHRiLnBhZ2VzX3NlY3Rpb25zLnJlYnVpbGRfc2VjdGlvbiggaXRlbS5kYXRhLCBzZWN0aW9uX2NvbnRhaW5lciApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSA9PT0gJ2ZpZWxkJyApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBiLmJ1aWxkX2ZpZWxkKCBpdGVtLmRhdGEgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCBlbCApIHtcclxuXHRcdFx0XHRcdFx0XHRzZWN0aW9uX2NvbnRhaW5lci5hcHBlbmRDaGlsZCggZWwgKTtcclxuXHRcdFx0XHRcdFx0XHRiLnRyaWdnZXJfZmllbGRfZHJvcF9jYWxsYmFjayggZWwsICdsb2FkJyApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHRcdGIudXNhZ2U/LnVwZGF0ZV9wYWxldHRlX3VpPy4oKTtcclxuXHRcdFx0Yi5idXMuZW1pdCggQ29yZS5XUEJDX0JGQl9FdmVudHMuU1RSVUNUVVJFX0xPQURFRCwgeyBzdHJ1Y3R1cmUgfSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9ub3JtYWxpemVfaWRzKCkge1xyXG5cdFx0XHRjb25zdCBiID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRiLnBhZ2VzX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19wYW5lbC0tcHJldmlldyAud3BiY19iZmJfX2ZpZWxkOm5vdCguaXMtaW52YWxpZCknICkuZm9yRWFjaCggKGVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IENvcmUuV1BCQ19Gb3JtX0J1aWxkZXJfSGVscGVyLmdldF9hbGxfZGF0YV9hdHRyaWJ1dGVzKCBlbCApO1xyXG5cdFx0XHRcdGNvbnN0IHdhbnQgPSBDb3JlLldQQkNfQkZCX1Nhbml0aXplLnNhbml0aXplX2h0bWxfaWQoIGRhdGEuaWQgfHwgJycgKSB8fCAnZmllbGQnO1xyXG5cdFx0XHRcdGNvbnN0IHVuaXEgPSBiLmlkLmVuc3VyZV91bmlxdWVfZmllbGRfaWQoIHdhbnQsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLmlkICE9PSB1bmlxICkge1xyXG5cdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS1pZCcsIHVuaXEgKTtcclxuXHRcdFx0XHRcdGlmICggYi5wcmV2aWV3X21vZGUgKSB7XHJcblx0XHRcdFx0XHRcdGIucmVuZGVyX3ByZXZpZXcoIGVsICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X25vcm1hbGl6ZV9uYW1lcygpIHtcclxuXHRcdFx0Y29uc3QgYiA9IHRoaXMuYnVpbGRlcjtcclxuXHRcdFx0Yi5wYWdlc19jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcgLndwYmNfYmZiX19maWVsZDpub3QoLmlzLWludmFsaWQpJyApLmZvckVhY2goIChlbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBDb3JlLldQQkNfRm9ybV9CdWlsZGVyX0hlbHBlci5nZXRfYWxsX2RhdGFfYXR0cmlidXRlcyggZWwgKTtcclxuXHRcdFx0XHRjb25zdCBiYXNlID0gQ29yZS5XUEJDX0JGQl9TYW5pdGl6ZS5zYW5pdGl6ZV9odG1sX25hbWUoIChkYXRhLm5hbWUgIT0gbnVsbCkgPyBkYXRhLm5hbWUgOiBkYXRhLmlkICkgfHwgJ2ZpZWxkJztcclxuXHRcdFx0XHRjb25zdCB1bmlxID0gYi5pZC5lbnN1cmVfdW5pcXVlX2ZpZWxkX25hbWUoIGJhc2UsIGVsICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhLm5hbWUgIT09IHVuaXEgKSB7XHJcblx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLW5hbWUnLCB1bmlxICk7XHJcblx0XHRcdFx0XHRpZiAoIGIucHJldmlld19tb2RlICkge1xyXG5cdFx0XHRcdFx0XHRiLnJlbmRlcl9wcmV2aWV3KCBlbCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cclxuXHRcdF9pc190eXBpbmdfaW5faW5zcGVjdG9yKCkge1xyXG5cdFx0XHRjb25zdCBpbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19pbnNwZWN0b3InICk7XHJcblx0XHRcdHJldHVybiAhIShpbnMgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpbnMuY29udGFpbnMoIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWluaW1hbCwgc3RhbmRhbG9uZSBndWFyZCB0aGF0IGVuZm9yY2VzIHBlci1jb2x1bW4gbWluIHdpZHRocyBiYXNlZCBvbiBmaWVsZHMnIGRhdGEtbWluX3dpZHRoLlxyXG5cdCAqXHJcblx0ICogQHR5cGUge1VJLldQQkNfQkZCX01pbl9XaWR0aF9HdWFyZH1cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgPSBjbGFzcyBleHRlbmRzIFVJLldQQkNfQkZCX01vZHVsZSB7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IoYnVpbGRlcikge1xyXG5cdFx0XHRzdXBlciggYnVpbGRlciApO1xyXG5cdFx0XHR0aGlzLl9vbl9maWVsZF9hZGQgICAgICAgID0gdGhpcy5fb25fZmllbGRfYWRkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fZmllbGRfcmVtb3ZlICAgICA9IHRoaXMuX29uX2ZpZWxkX3JlbW92ZS5iaW5kKCB0aGlzICk7XHJcblx0XHRcdHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgPSB0aGlzLl9vbl9zdHJ1Y3R1cmVfbG9hZGVkLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5fb25fc3RydWN0dXJlX2NoYW5nZSA9IHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UuYmluZCggdGhpcyApO1xyXG5cdFx0XHR0aGlzLl9vbl93aW5kb3dfcmVzaXplICAgID0gdGhpcy5fb25fd2luZG93X3Jlc2l6ZS5iaW5kKCB0aGlzICk7XHJcblxyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MgPSBuZXcgU2V0KCk7XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsICA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgICAgICAgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGluaXQoKSB7XHJcblx0XHRcdGNvbnN0IEVWID0gQ29yZS5XUEJDX0JGQl9FdmVudHM7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub24/LiggRVYuRklFTERfUkVNT1ZFLCB0aGlzLl9vbl9maWVsZF9yZW1vdmUgKTtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9uPy4oIEVWLlNUUlVDVFVSRV9MT0FERUQsIHRoaXMuX29uX3N0cnVjdHVyZV9sb2FkZWQgKTtcclxuXHRcdFx0Ly8gUmVmcmVzaCBzZWxlY3RpdmVseSBvbiBzdHJ1Y3R1cmUgY2hhbmdlIChOT1Qgb24gZXZlcnkgcHJvcCBpbnB1dCkuXHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vbj8uKCBFVi5TVFJVQ1RVUkVfQ0hBTkdFLCB0aGlzLl9vbl9zdHJ1Y3R1cmVfY2hhbmdlICk7XHJcblxyXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3Jlc2l6ZScsIHRoaXMuX29uX3dpbmRvd19yZXNpemUsIHsgcGFzc2l2ZTogdHJ1ZSB9ICk7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGVzdHJveSgpIHtcclxuXHRcdFx0Y29uc3QgRVYgPSBDb3JlLldQQkNfQkZCX0V2ZW50cztcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5idXM/Lm9mZj8uKCBFVi5GSUVMRF9BREQsIHRoaXMuX29uX2ZpZWxkX2FkZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLkZJRUxEX1JFTU9WRSwgdGhpcy5fb25fZmllbGRfcmVtb3ZlICk7XHJcblx0XHRcdHRoaXMuYnVpbGRlcj8uYnVzPy5vZmY/LiggRVYuU1RSVUNUVVJFX0xPQURFRCwgdGhpcy5fb25fc3RydWN0dXJlX2xvYWRlZCApO1xyXG5cdFx0XHR0aGlzLmJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWLlNUUlVDVFVSRV9DSEFOR0UsIHRoaXMuX29uX3N0cnVjdHVyZV9jaGFuZ2UgKTtcclxuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCB0aGlzLl9vbl93aW5kb3dfcmVzaXplICk7XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX2FkZChlKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdC8vIGlmIHlvdSByZWFsbHkgd2FudCB0byBiZSBtaW5pbWFsIHdvcmsgaGVyZSwga2VlcCB5b3VyIHJvdy1vbmx5IHZlcnNpb24uXHJcblx0XHR9XHJcblxyXG5cdFx0X29uX2ZpZWxkX3JlbW92ZShlKSB7XHJcblx0XHRcdGNvbnN0IHNyY19lbCA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ICAgID0gKHNyY19lbCAmJiBzcmNfZWwuY2xvc2VzdCkgPyBzcmNfZWwuY2xvc2VzdCggJy53cGJjX2JmYl9fcm93JyApIDogbnVsbDtcclxuXHRcdFx0aWYgKCByb3cgKSB7XHJcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9yb3coIHJvdyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2xvYWRlZCgpIHtcclxuXHRcdFx0dGhpcy5fc2NoZWR1bGVfcmVmcmVzaF9hbGwoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfb25fc3RydWN0dXJlX2NoYW5nZShlKSB7XHJcblx0XHRcdGNvbnN0IHJlYXNvbiA9IGU/LmRldGFpbD8ucmVhc29uIHx8ICcnO1xyXG5cdFx0XHRjb25zdCBrZXkgICAgPSBlPy5kZXRhaWw/LmtleSB8fCAnJztcclxuXHJcblx0XHRcdC8vIElnbm9yZSBub2lzeSBwcm9wIGNoYW5nZXMgdGhhdCBkb24ndCBhZmZlY3QgbWluIHdpZHRocy5cclxuXHRcdFx0aWYgKCByZWFzb24gPT09ICdwcm9wLWNoYW5nZScgJiYga2V5ICE9PSAnbWluX3dpZHRoJyApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGVsICA9IGU/LmRldGFpbD8uZWwgfHwgbnVsbDtcclxuXHRcdFx0Y29uc3Qgcm93ID0gZWw/LmNsb3Nlc3Q/LiggJy53cGJjX2JmYl9fcm93JyApIHx8IG51bGw7XHJcblx0XHRcdGlmICggcm93ICkge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfcm93KCByb3cgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0X29uX3dpbmRvd19yZXNpemUoKSB7XHJcblx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlZnJlc2hfYWxsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0X3NjaGVkdWxlX3JlZnJlc2hfcm93KHJvd19lbCkge1xyXG5cdFx0XHRpZiAoICFyb3dfZWwgKSByZXR1cm47XHJcblx0XHRcdHRoaXMuX3BlbmRpbmdfcm93cy5hZGQoIHJvd19lbCApO1xyXG5cdFx0XHR0aGlzLl9raWNrX3JhZigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9zY2hlZHVsZV9yZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5fcGVuZGluZ19hbGwgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0dGhpcy5fa2lja19yYWYoKTtcclxuXHRcdH1cclxuXHJcblx0XHRfa2lja19yYWYoKSB7XHJcblx0XHRcdGlmICggdGhpcy5fcmFmX2lkICkgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLl9yYWZfaWQgPSAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBzZXRUaW1lb3V0KSggKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX3JhZl9pZCA9IDA7XHJcblx0XHRcdFx0aWYgKCB0aGlzLl9wZW5kaW5nX2FsbCApIHtcclxuXHRcdFx0XHRcdHRoaXMuX3BlbmRpbmdfYWxsID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2hfYWxsKCk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKCB0aGlzLl9wZW5kaW5nX3Jvd3MgKTtcclxuXHRcdFx0XHR0aGlzLl9wZW5kaW5nX3Jvd3MuY2xlYXIoKTtcclxuXHRcdFx0XHRyb3dzLmZvckVhY2goIChyKSA9PiB0aGlzLnJlZnJlc2hfcm93KCByICkgKTtcclxuXHRcdFx0fSwgMCApO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRyZWZyZXNoX2FsbCgpIHtcclxuXHRcdFx0dGhpcy5idWlsZGVyPy5wYWdlc19jb250YWluZXJcclxuXHRcdFx0XHQ/LnF1ZXJ5U2VsZWN0b3JBbGw/LiggJy53cGJjX2JmYl9fcm93JyApXHJcblx0XHRcdFx0Py5mb3JFYWNoPy4oIChyb3cpID0+IHRoaXMucmVmcmVzaF9yb3coIHJvdyApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVmcmVzaF9yb3cocm93X2VsKSB7XHJcblx0XHRcdGlmICggIXJvd19lbCApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGNvbHMgPSByb3dfZWwucXVlcnlTZWxlY3RvckFsbCggJzpzY29wZSA+IC53cGJjX2JmYl9fY29sdW1uJyApO1xyXG5cclxuXHRcdFx0Ly8gMSkgUmVjYWxjdWxhdGUgZWFjaCBjb2x1bW7igJlzIHJlcXVpcmVkIG1pbiBweCBhbmQgd3JpdGUgaXQgdG8gdGhlIENTUyB2YXIuXHJcblx0XHRcdGNvbHMuZm9yRWFjaCggKGNvbCkgPT4gdGhpcy5hcHBseV9jb2xfbWluKCBjb2wgKSApO1xyXG5cclxuXHRcdFx0Ly8gMikgRW5mb3JjZSBpdCBhdCB0aGUgQ1NTIGxldmVsIHJpZ2h0IGF3YXkgc28gbGF5b3V0IGNhbuKAmXQgcmVuZGVyIG5hcnJvd2VyLlxyXG5cdFx0XHRjb2xzLmZvckVhY2goIChjb2wpID0+IHtcclxuXHRcdFx0XHRjb25zdCBweCAgICAgICAgICAgPSBwYXJzZUZsb2F0KCBnZXRDb21wdXRlZFN0eWxlKCBjb2wgKS5nZXRQcm9wZXJ0eVZhbHVlKCAnLS13cGJjLWNvbC1taW4nICkgfHwgJzAnICkgfHwgMDtcclxuXHRcdFx0XHRjb2wuc3R5bGUubWluV2lkdGggPSBweCA+IDAgPyBNYXRoLnJvdW5kKCBweCApICsgJ3B4JyA6ICcnO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyAzKSBOb3JtYWxpemUgY3VycmVudCBiYXNlcyBzbyB0aGUgcm93IHJlc3BlY3RzIGFsbCBtaW5zIHdpdGhvdXQgb3ZlcmZsb3cuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgYiAgID0gdGhpcy5idWlsZGVyO1xyXG5cdFx0XHRcdGNvbnN0IGdwICA9IGIuY29sX2dhcF9wZXJjZW50O1xyXG5cdFx0XHRcdGNvbnN0IGVmZiA9IGIubGF5b3V0LmNvbXB1dGVfZWZmZWN0aXZlX2Jhc2VzX2Zyb21fcm93KCByb3dfZWwsIGdwICk7ICAvLyB7IGJhc2VzLCBhdmFpbGFibGUgfVxyXG5cdFx0XHRcdC8vIFJlLWZpdCAqY3VycmVudCogYmFzZXMgYWdhaW5zdCBtaW5zIChzYW1lIGFsZ29yaXRobSBsYXlvdXQgY2hpcHMgdXNlKS5cclxuXHRcdFx0XHRjb25zdCBmaXR0ZWQgPSBVSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMuX2ZpdF93ZWlnaHRzX3Jlc3BlY3RpbmdfbWluKCBiLCByb3dfZWwsIGVmZi5iYXNlcyApO1xyXG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggZml0dGVkICkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkID0gZml0dGVkLnNvbWUoICh2LCBpKSA9PiBNYXRoLmFicyggdiAtIGVmZi5iYXNlc1tpXSApID4gMC4wMSApO1xyXG5cdFx0XHRcdFx0aWYgKCBjaGFuZ2VkICkge1xyXG5cdFx0XHRcdFx0XHRiLmxheW91dC5hcHBseV9iYXNlc190b19yb3coIHJvd19lbCwgZml0dGVkICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdXUEJDX0JGQl9NaW5fV2lkdGhfR3VhcmQgLSByZWZyZXNoX3JvdycsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGFwcGx5X2NvbF9taW4oY29sX2VsKSB7XHJcblx0XHRcdGlmICggIWNvbF9lbCApIHJldHVybjtcclxuXHRcdFx0bGV0IG1heF9weCAgICA9IDA7XHJcblx0XHRcdGNvbnN0IGNvbFJlY3QgPSBjb2xfZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdGNvbF9lbC5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19maWVsZCcgKS5mb3JFYWNoKCAoZmllbGQpID0+IHtcclxuXHRcdFx0XHRjb25zdCByYXcgPSBmaWVsZC5nZXRBdHRyaWJ1dGUoICdkYXRhLW1pbl93aWR0aCcgKTtcclxuXHRcdFx0XHRsZXQgcHggICAgPSAwO1xyXG5cdFx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcyA9IFN0cmluZyggcmF3ICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRpZiAoIHMuZW5kc1dpdGgoICclJyApICkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuID0gcGFyc2VGbG9hdCggcyApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIE51bWJlci5pc0Zpbml0ZSggbiApICYmIGNvbFJlY3Qud2lkdGggPiAwICkge1xyXG5cdFx0XHRcdFx0XHRcdHB4ID0gKG4gLyAxMDApICogY29sUmVjdC53aWR0aDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRweCA9IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHB4ID0gdGhpcy5wYXJzZV9sZW5fcHgoIHMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKCBmaWVsZCApO1xyXG5cdFx0XHRcdFx0cHggICAgICAgPSBwYXJzZUZsb2F0KCBjcy5taW5XaWR0aCB8fCAnMCcgKSB8fCAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIHB4ID4gbWF4X3B4ICkgbWF4X3B4ID0gcHg7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0Y29sX2VsLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWNvbC1taW4nLCBtYXhfcHggPiAwID8gTWF0aC5yb3VuZCggbWF4X3B4ICkgKyAncHgnIDogJzBweCcgKTtcclxuXHRcdH1cclxuXHJcblx0XHRwYXJzZV9sZW5fcHgodmFsdWUpIHtcclxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsICkgcmV0dXJuIDA7XHJcblx0XHRcdGNvbnN0IHMgPSBTdHJpbmcoIHZhbHVlICkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdGlmICggcyA9PT0gJycgKSByZXR1cm4gMDtcclxuXHRcdFx0aWYgKCBzLmVuZHNXaXRoKCAncHgnICkgKSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHBhcnNlRmxvYXQoIHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKCBuICkgPyBuIDogMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHMuZW5kc1dpdGgoICdyZW0nICkgfHwgcy5lbmRzV2l0aCggJ2VtJyApICkge1xyXG5cdFx0XHRcdGNvbnN0IG4gICAgPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdFx0Y29uc3QgYmFzZSA9IHBhcnNlRmxvYXQoIGdldENvbXB1dGVkU3R5bGUoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCApLmZvbnRTaXplICkgfHwgMTY7XHJcblx0XHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZSggbiApID8gbiAqIGJhc2UgOiAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUZsb2F0KCBzICk7XHJcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoIG4gKSA/IG4gOiAwO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyXHJcblx0ICpcclxuXHQgKiBDb252ZXJ0cyBwbGFpbiBjaGVja2JveGVzIGludG8gdG9nZ2xlIFVJOlxyXG5cdCAqIDxkaXYgY2xhc3M9XCJpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlXCI+XHJcblx0ICogICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJ7dW5pcXVlfVwiIGRhdGEtaW5zcGVjdG9yLWtleT1cIi4uLlwiIGNsYXNzPVwiaW5zcGVjdG9yX19pbnB1dFwiIHJvbGU9XCJzd2l0Y2hcIlxyXG5cdCAqIGFyaWEtY2hlY2tlZD1cInRydWV8ZmFsc2VcIj5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9pY29uXCIgIGZvcj1cInt1bmlxdWV9XCI+PC9sYWJlbD5cclxuXHQgKiAgIDxsYWJlbCBjbGFzcz1cIndwYmNfdWlfX3RvZ2dsZV9sYWJlbFwiIGZvcj1cInt1bmlxdWV9XCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogLSBTa2lwcyBpbnB1dHMgYWxyZWFkeSBpbnNpZGUgYC53cGJjX3VpX190b2dnbGVgLlxyXG5cdCAqIC0gUmV1c2VzIGFuIGV4aXN0aW5nIDxsYWJlbCBmb3I9XCIuLi5cIj4gdGV4dCBpZiBwcmVzZW50OyBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBuZWFyYnkgbGFiZWxzIG9yIGF0dHJpYnV0ZXMuXHJcblx0ICogLSBBdXRvLWdlbmVyYXRlcyBhIHVuaXF1ZSBpZCB3aGVuIGFic2VudC5cclxuXHQgKi9cclxuXHRVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplciA9IGNsYXNzIHtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFVwZ3JhZGUgYWxsIHJhdyBjaGVja2JveGVzIGluIGEgY29udGFpbmVyIHRvIHRvZ2dsZXMuXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290X2VsXHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyB1cGdyYWRlX2NoZWNrYm94ZXNfaW4ocm9vdF9lbCkge1xyXG5cclxuXHRcdFx0aWYgKCAhcm9vdF9lbCB8fCAhcm9vdF9lbC5xdWVyeVNlbGVjdG9yQWxsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGlucHV0cyA9IHJvb3RfZWwucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKTtcclxuXHRcdFx0aWYgKCAhaW5wdXRzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIGlucHV0cywgZnVuY3Rpb24gKGlucHV0KSB7XHJcblxyXG5cdFx0XHRcdC8vIDEpIFNraXAgaWYgYWxyZWFkeSBpbnNpZGUgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbG9zZXN0KCAnLndwYmNfdWlfX3RvZ2dsZScgKSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gU2tpcCByb3dzIC8gd2hlcmUgaW5wdXQgY2hlY2tib3ggZXhwbGljaXRseSBtYXJrZWQgd2l0aCAgYXR0cmlidXRlICdkYXRhLXdwYmMtdWktbm8tdG9nZ2xlJy5cclxuXHRcdFx0XHRpZiAoIGlucHV0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtd3BiYy11aS1uby10b2dnbGUnICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyAyKSBFbnN1cmUgdW5pcXVlIGlkOyBwcmVmZXIgZXhpc3RpbmcuXHJcblx0XHRcdFx0dmFyIGlucHV0X2lkID0gaW5wdXQuZ2V0QXR0cmlidXRlKCAnaWQnICk7XHJcblx0XHRcdFx0aWYgKCAhaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0XHR2YXIga2V5ICA9IChpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5KSA/IFN0cmluZyggaW5wdXQuZGF0YXNldC5pbnNwZWN0b3JLZXkgKSA6ICdvcHQnO1xyXG5cdFx0XHRcdFx0aW5wdXRfaWQgPSBVSS5XUEJDX0JGQl9Ub2dnbGVfTm9ybWFsaXplci5nZW5lcmF0ZV91bmlxdWVfaWQoICd3cGJjX2luc19hdXRvXycgKyBrZXkgKyAnXycgKTtcclxuXHRcdFx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggJ2lkJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIDMpIEZpbmQgYmVzdCBsYWJlbCB0ZXh0LlxyXG5cdFx0XHRcdHZhciBsYWJlbF90ZXh0ID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIucmVzb2x2ZV9sYWJlbF90ZXh0KCByb290X2VsLCBpbnB1dCwgaW5wdXRfaWQgKTtcclxuXHJcblx0XHRcdFx0Ly8gNCkgQnVpbGQgdGhlIHRvZ2dsZSB3cmFwcGVyLlxyXG5cdFx0XHRcdHZhciB3cmFwcGVyICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcclxuXHRcdFx0XHR3cmFwcGVyLmNsYXNzTmFtZSA9ICdpbnNwZWN0b3JfX2NvbnRyb2wgd3BiY191aV9fdG9nZ2xlJztcclxuXHJcblx0XHRcdFx0Ly8gS2VlcCBvcmlnaW5hbCBpbnB1dDsganVzdCBtb3ZlIGl0IGludG8gd3JhcHBlci5cclxuXHRcdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCAnaW5zcGVjdG9yX19pbnB1dCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdyb2xlJywgJ3N3aXRjaCcgKTtcclxuXHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cclxuXHRcdFx0XHR2YXIgaWNvbl9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfaWNvbic7XHJcblx0XHRcdFx0aWNvbl9sYWJlbC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cclxuXHRcdFx0XHR2YXIgdGV4dF9sYWJlbCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmNsYXNzTmFtZSA9ICd3cGJjX3VpX190b2dnbGVfbGFiZWwnO1xyXG5cdFx0XHRcdHRleHRfbGFiZWwuc2V0QXR0cmlidXRlKCAnZm9yJywgaW5wdXRfaWQgKTtcclxuXHRcdFx0XHR0ZXh0X2xhYmVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHRcdC8vIDUpIEluc2VydCB3cmFwcGVyIGludG8gRE9NIG5lYXIgdGhlIGlucHV0LlxyXG5cdFx0XHRcdC8vICAgIFByZWZlcnJlZDogcmVwbGFjZSB0aGUgb3JpZ2luYWwgbGFiZWxlZCByb3cgaWYgaXQgbWF0Y2hlcyB0eXBpY2FsIGluc3BlY3RvciBsYXlvdXQuXHJcblx0XHRcdFx0dmFyIHJlcGxhY2VkID0gVUkuV1BCQ19CRkJfVG9nZ2xlX05vcm1hbGl6ZXIudHJ5X3JlcGxhY2Vfa25vd25fcm93KCBpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCApO1xyXG5cclxuXHRcdFx0XHRpZiAoICFyZXBsYWNlZCApIHtcclxuXHRcdFx0XHRcdGlmICggIWlucHV0LnBhcmVudE5vZGUgKSByZXR1cm47IC8vIE5FVyBndWFyZFxyXG5cdFx0XHRcdFx0Ly8gRmFsbGJhY2s6IGp1c3Qgd3JhcCB0aGUgaW5wdXQgaW4gcGxhY2UgYW5kIGFwcGVuZCBsYWJlbHMuXHJcblx0XHRcdFx0XHRpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggd3JhcHBlciwgaW5wdXQgKTtcclxuXHRcdFx0XHRcdHdyYXBwZXIuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCBpY29uX2xhYmVsICk7XHJcblx0XHRcdFx0XHR3cmFwcGVyLmFwcGVuZENoaWxkKCB0ZXh0X2xhYmVsICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyA2KSBBUklBIHN5bmMgb24gY2hhbmdlLlxyXG5cdFx0XHRcdGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBpbnB1dC5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2VuZXJhdGUgYSB1bmlxdWUgaWQgd2l0aCBhIGdpdmVuIHByZWZpeC5cclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcclxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdHN0YXRpYyBnZW5lcmF0ZV91bmlxdWVfaWQocHJlZml4KSB7XHJcblx0XHRcdHZhciBiYXNlID0gU3RyaW5nKCBwcmVmaXggfHwgJ3dwYmNfaW5zX2F1dG9fJyApO1xyXG5cdFx0XHR2YXIgdWlkICA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoIDM2ICkuc2xpY2UoIDIsIDggKTtcclxuXHRcdFx0dmFyIGlkICAgPSBiYXNlICsgdWlkO1xyXG5cdFx0XHQvLyBNaW5pbWFsIGNvbGxpc2lvbiBndWFyZCBpbiB0aGUgY3VycmVudCBkb2N1bWVudCBzY29wZS5cclxuXHRcdFx0d2hpbGUgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggaWQgKSApIHtcclxuXHRcdFx0XHR1aWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA4ICk7XHJcblx0XHRcdFx0aWQgID0gYmFzZSArIHVpZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXNvbHZlIHRoZSBiZXN0IGh1bWFuIGxhYmVsIGZvciBhbiBpbnB1dC5cclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogIDEpIDxsYWJlbCBmb3I9XCJ7aWR9XCI+dGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgMikgbmVhcmVzdCBzaWJsaW5nL3BhcmVudCAuaW5zcGVjdG9yX19sYWJlbCB0ZXh0XHJcblx0XHQgKiAgMykgaW5wdXQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgfHwgZGF0YS1sYWJlbCB8fCBkYXRhLWluc3BlY3Rvci1rZXkgfHwgbmFtZSB8fCAnT3B0aW9uJ1xyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdF9lbFxyXG5cdFx0ICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0X2lkXHJcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRzdGF0aWMgcmVzb2x2ZV9sYWJlbF90ZXh0KHJvb3RfZWwsIGlucHV0LCBpbnB1dF9pZCkge1xyXG5cdFx0XHQvLyBmb3I9IGFzc29jaWF0aW9uXHJcblx0XHRcdGlmICggaW5wdXRfaWQgKSB7XHJcblx0XHRcdFx0dmFyIGFzc29jID0gcm9vdF9lbC5xdWVyeVNlbGVjdG9yKCAnbGFiZWxbZm9yPVwiJyArIFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyLmNzc19lc2NhcGUoIGlucHV0X2lkICkgKyAnXCJdJyApO1xyXG5cdFx0XHRcdGlmICggYXNzb2MgJiYgYXNzb2MudGV4dENvbnRlbnQgKSB7XHJcblx0XHRcdFx0XHR2YXIgdHh0ID0gYXNzb2MudGV4dENvbnRlbnQudHJpbSgpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBvbGQgbGFiZWwgZnJvbSBET007IGl0cyB0ZXh0IHdpbGwgYmUgdXNlZCBieSB0b2dnbGUuXHJcblx0XHRcdFx0XHRhc3NvYy5wYXJlbnROb2RlICYmIGFzc29jLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGFzc29jICk7XHJcblx0XHRcdFx0XHRpZiAoIHR4dCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHR4dDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIG5lYXJieSBpbnNwZWN0b3IgbGFiZWxcclxuXHRcdFx0dmFyIG5lYXJfbGFiZWwgPSBpbnB1dC5jbG9zZXN0KCAnLmluc3BlY3Rvcl9fcm93JyApO1xyXG5cdFx0XHRpZiAoIG5lYXJfbGFiZWwgKSB7XHJcblx0XHRcdFx0dmFyIGlsID0gbmVhcl9sYWJlbC5xdWVyeVNlbGVjdG9yKCAnLmluc3BlY3Rvcl9fbGFiZWwnICk7XHJcblx0XHRcdFx0aWYgKCBpbCAmJiBpbC50ZXh0Q29udGVudCApIHtcclxuXHRcdFx0XHRcdHZhciB0MiA9IGlsLnRleHRDb250ZW50LnRyaW0oKTtcclxuXHRcdFx0XHRcdC8vIElmIHRoaXMgcm93IGhhZCB0aGUgc3RhbmRhcmQgbGFiZWwrY29udHJvbCwgZHJvcCB0aGUgb2xkIHRleHQgbGFiZWwgdG8gYXZvaWQgZHVwbGljYXRlcy5cclxuXHRcdFx0XHRcdGlsLnBhcmVudE5vZGUgJiYgaWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggaWwgKTtcclxuXHRcdFx0XHRcdGlmICggdDIgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0MjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGZhbGxiYWNrc1xyXG5cdFx0XHR2YXIgYXJpYSA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnICk7XHJcblx0XHRcdGlmICggYXJpYSApIHtcclxuXHRcdFx0XHRyZXR1cm4gYXJpYTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGlucHV0LmRhdGFzZXQgJiYgaW5wdXQuZGF0YXNldC5sYWJlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKCBpbnB1dC5kYXRhc2V0LmxhYmVsICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5kYXRhc2V0ICYmIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0LmRhdGFzZXQuaW5zcGVjdG9yS2V5ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBpbnB1dC5uYW1lICkge1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoIGlucHV0Lm5hbWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJ09wdGlvbic7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcnkgdG8gcmVwbGFjZSBhIGtub3duIGluc3BlY3RvciByb3cgcGF0dGVybiB3aXRoIGEgdG9nZ2xlIHdyYXBwZXIuXHJcblx0XHQgKiBQYXR0ZXJuczpcclxuXHRcdCAqICA8ZGl2Lmluc3BlY3Rvcl9fcm93PlxyXG5cdFx0ICogICAgPGxhYmVsLmluc3BlY3Rvcl9fbGFiZWw+VGV4dDwvbGFiZWw+XHJcblx0XHQgKiAgICA8ZGl2Lmluc3BlY3Rvcl9fY29udHJvbD4gW2lucHV0W3R5cGU9Y2hlY2tib3hdXSA8L2Rpdj5cclxuXHRcdCAqICA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB3cmFwcGVyXHJcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmVwbGFjZWRcclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIHRyeV9yZXBsYWNlX2tub3duX3JvdyhpbnB1dCwgd3JhcHBlciwgbGFiZWxfdGV4dCkge1xyXG5cdFx0XHR2YXIgcm93ICAgICAgID0gaW5wdXQuY2xvc2VzdCggJy5pbnNwZWN0b3JfX3JvdycgKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGlucHV0LnBhcmVudEVsZW1lbnQ7XHJcblxyXG5cdFx0XHRpZiAoIHJvdyAmJiBjdHJsX3dyYXAgJiYgY3RybF93cmFwLmNsYXNzTGlzdC5jb250YWlucyggJ2luc3BlY3Rvcl9fY29udHJvbCcgKSApIHtcclxuXHRcdFx0XHQvLyBDbGVhciBjb250cm9sIHdyYXAgYW5kIHJlaW5zZXJ0IHRvZ2dsZSBzdHJ1Y3R1cmUuXHJcblx0XHRcdFx0d2hpbGUgKCBjdHJsX3dyYXAuZmlyc3RDaGlsZCApIHtcclxuXHRcdFx0XHRcdGN0cmxfd3JhcC5yZW1vdmVDaGlsZCggY3RybF93cmFwLmZpcnN0Q2hpbGQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93LmNsYXNzTGlzdC5hZGQoICdpbnNwZWN0b3JfX3Jvdy0tdG9nZ2xlJyApO1xyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuY2xhc3NMaXN0LmFkZCggJ3dwYmNfdWlfX3RvZ2dsZScgKTtcclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblxyXG5cdFx0XHRcdHZhciBpbnB1dF9pZCAgICAgICA9IGlucHV0LmdldEF0dHJpYnV0ZSggJ2lkJyApO1xyXG5cdFx0XHRcdHZhciBpY29uX2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHRpY29uX2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2ljb24nO1xyXG5cdFx0XHRcdGljb25fbGJsLnNldEF0dHJpYnV0ZSggJ2ZvcicsIGlucHV0X2lkICk7XHJcblxyXG5cdFx0XHRcdHZhciB0ZXh0X2xibCAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdsYWJlbCcgKTtcclxuXHRcdFx0XHR0ZXh0X2xibC5jbGFzc05hbWUgPSAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJztcclxuXHRcdFx0XHR0ZXh0X2xibC5zZXRBdHRyaWJ1dGUoICdmb3InLCBpbnB1dF9pZCApO1xyXG5cdFx0XHRcdGlmICggbGFiZWxfdGV4dCApIHtcclxuXHRcdFx0XHRcdHRleHRfbGJsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbGFiZWxfdGV4dCApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIElmIHRoZSByb3cgcHJldmlvdXNseSBoYWQgYSAuaW5zcGVjdG9yX19sYWJlbCAod2UgcmVtb3ZlZCBpdCBpbiByZXNvbHZlX2xhYmVsX3RleHQpLFxyXG5cdFx0XHRcdC8vIHdlIGludGVudGlvbmFsbHkgZG8gTk9UIHJlY3JlYXRlIGl0OyB0aGUgdG9nZ2xlIHRleHQgbGFiZWwgYmVjb21lcyB0aGUgdmlzaWJsZSBvbmUuXHJcblx0XHRcdFx0Ly8gVGhlIHRleHQgY29udGVudCBpcyBhbHJlYWR5IHJlc29sdmVkIGluIHJlc29sdmVfbGFiZWxfdGV4dCgpIGFuZCBzZXQgYmVsb3cgYnkgY2FsbGVyLlxyXG5cclxuXHRcdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIGljb25fbGJsICk7XHJcblx0XHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCB0ZXh0X2xibCApO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOb3QgYSBrbm93biBwYXR0ZXJuOyBjYWxsZXIgd2lsbCB3cmFwIGluIHBsYWNlLlxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDU1MuZXNjYXBlIHBvbHlmaWxsIGZvciBzZWxlY3RvcnMuXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc1xyXG5cdFx0ICogQHJldHVybnMge3N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0c3RhdGljIGNzc19lc2NhcGUocykge1xyXG5cdFx0XHRzID0gU3RyaW5nKCBzICk7XHJcblx0XHRcdGlmICggd2luZG93LkNTUyAmJiB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5DU1MuZXNjYXBlKCBzICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHMucmVwbGFjZSggLyhbXlxcdy1dKS9nLCAnXFxcXCQxJyApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFwcGx5IGFsbCBVSSBub3JtYWxpemVycy9lbmhhbmNlcnMgdG8gYSBjb250YWluZXIgKHBvc3QtcmVuZGVyKS5cclxuXHQgKiBLZWVwIHRoaXMgZmlsZSBzbWFsbCBhbmQgYWRkIG1vcmUgbm9ybWFsaXplcnMgbGF0ZXIgaW4gb25lIHBsYWNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxyXG5cdCAqL1xyXG5cdFVJLmFwcGx5X3Bvc3RfcmVuZGVyID0gZnVuY3Rpb24gKHJvb3QpIHtcclxuXHRcdGlmICggIXJvb3QgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdFVJLldQQkNfQkZCX1ZhbHVlU2xpZGVyPy5pbml0X29uPy4oIHJvb3QgKTtcclxuXHRcdH0gY2F0Y2ggKCBlICkgeyAvKiBub29wICovXHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHR2YXIgVCA9IFVJLldQQkNfQkZCX1RvZ2dsZV9Ob3JtYWxpemVyO1xyXG5cdFx0XHRpZiAoIFQgJiYgdHlwZW9mIFQudXBncmFkZV9jaGVja2JveGVzX2luID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFQudXBncmFkZV9jaGVja2JveGVzX2luKCByb290ICk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHR3Ll93cGJjPy5kZXY/LmVycm9yPy4oICdhcHBseV9wb3N0X3JlbmRlci50b2dnbGUnLCBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWNjZXNzaWJpbGl0eToga2VlcCBhcmlhLWNoZWNrZWQgaW4gc3luYyBmb3IgYWxsIHRvZ2dsZXMgaW5zaWRlIHJvb3QuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY191aV9fdG9nZ2xlIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY2IpIHtcclxuXHRcdFx0XHRpZiAoIGNiLl9fd3BiY19hcmlhX2hvb2tlZCApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2IuX193cGJjX2FyaWFfaG9va2VkID0gdHJ1ZTtcclxuXHRcdFx0XHRjYi5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCBjYi5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyApO1xyXG5cdFx0XHRcdC8vIERlbGVnYXRlIOKAmGNoYW5nZeKAmSBqdXN0IG9uY2UgcGVyIHJlbmRlciDigJMgbmF0aXZlIGRlbGVnYXRpb24gc3RpbGwgd29ya3MgZmluZSBmb3IgeW91ciBsb2dpYy5cclxuXHRcdFx0XHRjYi5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y2Iuc2V0QXR0cmlidXRlKCAnYXJpYS1jaGVja2VkJywgY2IuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZScgKTtcclxuXHRcdFx0XHR9LCB7IHBhc3NpdmU6IHRydWUgfSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0dy5fd3BiYz8uZGV2Py5lcnJvcj8uKCAnYXBwbHlfcG9zdF9yZW5kZXIuYXJpYScsIGUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRVSS5JbnNwZWN0b3JFbmhhbmNlcnMgPSBVSS5JbnNwZWN0b3JFbmhhbmNlcnMgfHwgKGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciByZWdzID0gW107XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgc2VsZWN0b3IsIGluaXQsIGRlc3Ryb3kpIHtcclxuXHRcdFx0cmVncy5wdXNoKCB7IG5hbWUsIHNlbGVjdG9yLCBpbml0LCBkZXN0cm95IH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzY2FuKHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHRub2RlLl9fd3BiY19laCA9IG5vZGUuX193cGJjX2VoIHx8IHt9O1xyXG5cdFx0XHRcdFx0aWYgKCBub2RlLl9fd3BiY19laFtyLm5hbWVdICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0ci5pbml0ICYmIHIuaW5pdCggbm9kZSwgcm9vdCApO1xyXG5cdFx0XHRcdFx0XHRub2RlLl9fd3BiY19laFtyLm5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBkZXN0cm95KHJvb3QpIHtcclxuXHRcdFx0aWYgKCAhcm9vdCApIHJldHVybjtcclxuXHRcdFx0cmVncy5mb3JFYWNoKCBmdW5jdGlvbiAocikge1xyXG5cdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvckFsbCggci5zZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uIChub2RlKSB7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRyLmRlc3Ryb3kgJiYgci5kZXN0cm95KCBub2RlLCByb290ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIG5vZGUuX193cGJjX2VoICkgZGVsZXRlIG5vZGUuX193cGJjX2VoW3IubmFtZV07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgcmVnaXN0ZXIsIHNjYW4sIGRlc3Ryb3kgfTtcclxuXHR9KSgpO1xyXG5cclxuXHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlciA9IHtcclxuXHRcdGluaXRfb24ocm9vdCkge1xyXG5cdFx0XHR2YXIgZ3JvdXBzID0gKHJvb3Qubm9kZVR5cGUgPT09IDEgPyBbIHJvb3QgXSA6IFtdKS5jb25jYXQoIFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApICk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHRpZiAoIGcuX193cGJjX2xlbl93aXJlZCApIHJldHVybjtcclxuXHJcblx0XHRcdFx0dmFyIG51bWJlciA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0dmFyIHJhbmdlICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0dmFyIHVuaXQgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhbnVtYmVyIHx8ICFyYW5nZSApIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gTWlycm9yIGNvbnN0cmFpbnRzIGlmIG1pc3Npbmcgb24gdGhlIHJhbmdlLlxyXG5cdFx0XHRcdFsgJ21pbicsICdtYXgnLCAnc3RlcCcgXS5mb3JFYWNoKCBmdW5jdGlvbiAoYSkge1xyXG5cdFx0XHRcdFx0aWYgKCAhcmFuZ2UuaGFzQXR0cmlidXRlKCBhICkgJiYgbnVtYmVyLmhhc0F0dHJpYnV0ZSggYSApICkge1xyXG5cdFx0XHRcdFx0XHRyYW5nZS5zZXRBdHRyaWJ1dGUoIGEsIG51bWJlci5nZXRBdHRyaWJ1dGUoIGEgKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHN5bmNfcmFuZ2VfZnJvbV9udW1iZXIoKSB7XG5cdFx0XHRcdFx0aWYgKCBnLmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLWFsbG93LWVtcHR5JyApICYmICcnID09PSBudW1iZXIudmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR2YXIgZW1wdHlfcmFuZ2VfdmFsdWUgPSByYW5nZS5taW4gfHwgJzAnO1xuXHRcdFx0XHRcdFx0aWYgKCByYW5nZS52YWx1ZSAhPT0gZW1wdHlfcmFuZ2VfdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJhbmdlLnZhbHVlID0gZW1wdHlfcmFuZ2VfdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggcmFuZ2UudmFsdWUgIT09IG51bWJlci52YWx1ZSApIHtcblx0XHRcdFx0XHRcdHJhbmdlLnZhbHVlID0gbnVtYmVyLnZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gZGlzcGF0Y2hfaW5wdXQoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApOyB9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmdW5jdGlvbiBkaXNwYXRjaF9jaGFuZ2UoZWwpIHtcclxuXHRcdFx0XHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9ICkgKTsgfSBjYXRjaCAoIF9lICkge31cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRocm90dGxlIHJhbmdlLT5udW1iZXIgc3luY2luZyAodGltZS1iYXNlZCkuXHJcblx0XHRcdFx0dmFyIHRpbWVyX2lkICAgICAgID0gMDtcclxuXHRcdFx0XHR2YXIgcGVuZGluZ192YWwgICAgPSBudWxsO1xyXG5cdFx0XHRcdHZhciBwZW5kaW5nX2NoYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHRcdHZhciBsYXN0X2ZsdXNoX3RzICA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIENoYW5nZSB0aGlzIHRvIHR1bmUgc3BlZWQ6IDUwLi4xMjAgbXMgaXMgYSBnb29kIHJhbmdlLlxyXG5cdFx0XHRcdHZhciBtaW5faW50ZXJ2YWxfbXMgPSBwYXJzZUludCggZy5kYXRhc2V0LmxlblRocm90dGxlIHx8IFVJLlZBTFVFX1NMSURFUl9USFJPVFRMRV9NUywgMTAgKTtcclxuXHRcdFx0XHRtaW5faW50ZXJ2YWxfbXMgPSBOdW1iZXIuaXNGaW5pdGUoIG1pbl9pbnRlcnZhbF9tcyApID8gTWF0aC5tYXgoIDAsIG1pbl9pbnRlcnZhbF9tcyApIDogMTIwO1xyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBmbHVzaF9yYW5nZV90b19udW1iZXIoKSB7XHJcblx0XHRcdFx0XHR0aW1lcl9pZCA9IDA7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX3ZhbCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dmFyIG5leHQgICAgPSBTdHJpbmcoIHBlbmRpbmdfdmFsICk7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBudW1iZXIudmFsdWUgIT09IG5leHQgKSB7XHJcblx0XHRcdFx0XHRcdG51bWJlci52YWx1ZSA9IG5leHQ7XHJcblx0XHRcdFx0XHRcdC8vIElNUE9SVEFOVDogb25seSAnaW5wdXQnIHdoaWxlIGRyYWdnaW5nLlxyXG5cdFx0XHRcdFx0XHRkaXNwYXRjaF9pbnB1dCggbnVtYmVyICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwZW5kaW5nX2NoYW5nZSApIHtcclxuXHRcdFx0XHRcdFx0cGVuZGluZ19jaGFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0ZGlzcGF0Y2hfY2hhbmdlKCBudW1iZXIgKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRsYXN0X2ZsdXNoX3RzID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHNjaGVkdWxlX3JhbmdlX3RvX251bWJlcih2YWwsIGVtaXRfY2hhbmdlKSB7XHJcblx0XHRcdFx0XHRwZW5kaW5nX3ZhbCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICggZW1pdF9jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdHBlbmRpbmdfY2hhbmdlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBJZiBjb21taXQgcmVxdWVzdGVkLCBmbHVzaCBpbW1lZGlhdGVseS5cclxuXHRcdFx0XHRcdGlmICggcGVuZGluZ19jaGFuZ2UgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdGltZXJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lcl9pZCApO1xyXG5cdFx0XHRcdFx0XHRcdHRpbWVyX2lkID0gMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRmbHVzaF9yYW5nZV90b19udW1iZXIoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBub3cgICA9IERhdGUubm93KCk7XHJcblx0XHRcdFx0XHR2YXIgZGVsdGEgPSBub3cgLSBsYXN0X2ZsdXNoX3RzO1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIGVub3VnaCB0aW1lIHBhc3NlZCwgZmx1c2ggaW1tZWRpYXRlbHk7IGVsc2Ugc2NoZWR1bGUuXHJcblx0XHRcdFx0XHRpZiAoIGRlbHRhID49IG1pbl9pbnRlcnZhbF9tcyApIHtcclxuXHRcdFx0XHRcdFx0Zmx1c2hfcmFuZ2VfdG9fbnVtYmVyKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoIHRpbWVyX2lkICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGltZXJfaWQgPSBzZXRUaW1lb3V0KCBmbHVzaF9yYW5nZV90b19udW1iZXIsIE1hdGgubWF4KCAwLCBtaW5faW50ZXJ2YWxfbXMgLSBkZWx0YSApICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzeW5jX3JhbmdlX2Zyb21fbnVtYmVyKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBvbl9udW1iZXJfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfaW5wdXQoKSB7XHJcblx0XHRcdFx0XHRzY2hlZHVsZV9yYW5nZV90b19udW1iZXIoIHJhbmdlLnZhbHVlLCBmYWxzZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25fcmFuZ2VfY2hhbmdlKCkge1xyXG5cdFx0XHRcdFx0c2NoZWR1bGVfcmFuZ2VfdG9fbnVtYmVyKCByYW5nZS52YWx1ZSwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bnVtYmVyLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsICBvbl9udW1iZXJfaW5wdXQgKTtcclxuXHRcdFx0XHRudW1iZXIuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCAgb25fcmFuZ2VfaW5wdXQgKTtcclxuXHRcdFx0XHRyYW5nZS5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgb25fcmFuZ2VfY2hhbmdlICk7XHJcblxyXG5cdFx0XHRcdGlmICggdW5pdCApIHtcclxuXHRcdFx0XHRcdHVuaXQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0Ly8gV2UganVzdCBudWRnZSB0aGUgbnVtYmVyIHNvIHVwc3RyZWFtIGhhbmRsZXJzIHJlLXJ1bi5cclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRudW1iZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBfZSApIHtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSW5pdGlhbCBzeW5jXHJcblx0XHRcdFx0c3luY19yYW5nZV9mcm9tX251bWJlcigpO1xyXG5cclxuXHRcdFx0XHRnLl9fd3BiY19sZW5fd2lyZWQgPSB7XHJcblx0XHRcdFx0XHRkZXN0cm95KCkge1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX251bWJlcl9pbnB1dCApO1xyXG5cdFx0XHRcdFx0XHRudW1iZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX251bWJlcl9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdFx0cmFuZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2lucHV0JywgIG9uX3JhbmdlX2lucHV0ICk7XHJcblx0XHRcdFx0XHRcdHJhbmdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9yYW5nZV9jaGFuZ2UgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9LFxyXG5cdFx0ZGVzdHJveV9vbihyb290KSB7XHJcblx0XHRcdHZhciBncm91cHMgPSAocm9vdCAmJiByb290Lm5vZGVUeXBlID09PSAxID8gWyByb290IF0gOiBbXSkuY29uY2F0KFxyXG5cdFx0XHRcdFtdLnNsaWNlLmNhbGwoIHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCAnW2RhdGEtbGVuLWdyb3VwXScgKSB8fCBbXSApXHJcblx0XHRcdCk7XHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdGlmICggIWcubWF0Y2hlcyB8fCAhZy5tYXRjaGVzKCAnW2RhdGEtbGVuLWdyb3VwXScgKSApIHJldHVybjtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Zy5fX3dwYmNfbGVuX3dpcmVkICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95ICYmIGcuX193cGJjX2xlbl93aXJlZC5kZXN0cm95KCk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkZWxldGUgZy5fX3dwYmNfbGVuX3dpcmVkO1xyXG5cdFx0XHR9ICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gUmVnaXN0ZXIgd2l0aCB0aGUgZ2xvYmFsIGVuaGFuY2VycyBodWIuXHJcblx0VUkuSW5zcGVjdG9yRW5oYW5jZXJzICYmIFVJLkluc3BlY3RvckVuaGFuY2Vycy5yZWdpc3RlcihcclxuXHRcdCd2YWx1ZS1zbGlkZXInLFxyXG5cdFx0J1tkYXRhLWxlbi1ncm91cF0nLFxyXG5cdFx0ZnVuY3Rpb24gKGVsLCBfcm9vdCkge1xyXG5cdFx0XHRVSS5XUEJDX0JGQl9WYWx1ZVNsaWRlci5pbml0X29uKCBlbCApO1xyXG5cdFx0fSxcclxuXHRcdGZ1bmN0aW9uIChlbCwgX3Jvb3QpIHtcclxuXHRcdFx0VUkuV1BCQ19CRkJfVmFsdWVTbGlkZXIuZGVzdHJveV9vbiggZWwgKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxuXHQvLyBTaW5nbGUsIGxvYWQtb3JkZXItc2FmZSBwYXRjaCBzbyBlbmhhbmNlcnMgYXV0by1ydW4gb24gZXZlcnkgYmluZC5cclxuXHQoZnVuY3Rpb24gcGF0Y2hJbnNwZWN0b3JFbmhhbmNlcnMoKSB7XHJcblx0XHRmdW5jdGlvbiBhcHBseVBhdGNoKCkge1xyXG5cdFx0XHR2YXIgSW5zcGVjdG9yID0gdy5XUEJDX0JGQl9JbnNwZWN0b3I7XHJcblx0XHRcdGlmICggIUluc3BlY3RvciB8fCBJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkICkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRJbnNwZWN0b3IuX193cGJjX2VuaGFuY2Vyc19wYXRjaGVkID0gdHJ1ZTtcclxuXHRcdFx0dmFyIG9yaWcgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEluc3BlY3Rvci5wcm90b3R5cGUuYmluZF90b19maWVsZDtcclxuXHRcdFx0SW5zcGVjdG9yLnByb3RvdHlwZS5iaW5kX3RvX2ZpZWxkICA9IGZ1bmN0aW9uIChlbCkge1xyXG5cdFx0XHRcdG9yaWcuY2FsbCggdGhpcywgZWwgKTtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGlucyA9IHRoaXMucGFuZWxcclxuXHRcdFx0XHRcdFx0fHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yJyApXHJcblx0XHRcdFx0XHRcdHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2luc3BlY3RvcicgKTtcclxuXHRcdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gSW5pdGlhbCBzY2FuIGlmIHRoZSBET00gaXMgYWxyZWFkeSBwcmVzZW50LlxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciBpbnNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX2luc3BlY3RvcicgKVxyXG5cdFx0XHRcdFx0fHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9faW5zcGVjdG9yJyApO1xyXG5cdFx0XHRcdFVJLkluc3BlY3RvckVuaGFuY2VycyAmJiBVSS5JbnNwZWN0b3JFbmhhbmNlcnMuc2NhbiggaW5zRWwgKTtcclxuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRyeSBub3c7IGlmIEluc3BlY3RvciBpc27igJl0IGRlZmluZWQgeWV0LCBwYXRjaCB3aGVuIGl0IGJlY29tZXMgcmVhZHkuXHJcblx0XHRpZiAoICFhcHBseVBhdGNoKCkgKSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdFx0J3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScsXHJcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0YXBwbHlQYXRjaCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0eyBvbmNlOiB0cnVlIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9KSgpO1xyXG5cclxufSggd2luZG93LCBkb2N1bWVudCApKTtcclxuIiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fX2pzL2NvcmUvYmZiLXN5bmMtY29kZS10b29scy10YWIuanMgICB8IDIwMjYtMDQtMDYgfCAxNjozOFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuKGZ1bmN0aW9uICggdywgZCApIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc3BhdGNoIHJlcXVlc3QgdG8gc2hvdyBhIHJpZ2h0IHNpZGViYXIgcGFuZWwuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGFuZWxfaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFiX2lkXHJcblx0ICpcclxuXHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIHdwYmNfYmZiX19kaXNwYXRjaF9zaG93X3BhbmVsKCBwYW5lbF9pZCwgdGFiX2lkICkge1xyXG5cclxuXHRcdHZhciBldmVudF9kZXRhaWw7XHJcblxyXG5cdFx0aWYgKCAhIHBhbmVsX2lkIHx8ICEgdGFiX2lkICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0ZXZlbnRfZGV0YWlsID0ge1xyXG5cdFx0XHRwYW5lbF9pZDogcGFuZWxfaWQsXHJcblx0XHRcdHRhYl9pZCAgOiB0YWJfaWRcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2JmYl9fZGlzcGF0Y2hfZXZlbnRfc2FmZSggJ3dwYmNfYmZiOnNob3dfcGFuZWwnLCBldmVudF9kZXRhaWwgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGQuZGlzcGF0Y2hFdmVudChcclxuXHRcdFx0bmV3IEN1c3RvbUV2ZW50KFxyXG5cdFx0XHRcdCd3cGJjX2JmYjpzaG93X3BhbmVsJyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRkZXRhaWw6IGV2ZW50X2RldGFpbFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN5bmMgcmlnaHQgc2lkZWJhciB3aXRoIHRvcCBtb2RlIHRhYnMuXHJcblx0ICpcclxuXHQgKiBVc2VzIHRvcCB0YWJzIG5hdiBhdHRyaWJ1dGUgYGRhdGEtYWN0aXZlLXRhYmAgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aC5cclxuXHQgKiBUaGlzIGF2b2lkcyBmYWxzZSBkZXRlY3Rpb24gb24gaW5pdGlhbCBwYWdlIGxvYWQsIGJlY2F1c2UgdG9wIHBhbmVscyBhcmVcclxuXHQgKiBoaWRkZW4gYnkgaW5saW5lIHN0eWxlIGBkaXNwbGF5Om5vbmVgLCBub3QgYnkgdGhlIGBoaWRkZW5gIGF0dHJpYnV0ZS5cclxuXHQgKi9cclxuXHRjbGFzcyBXUEJDX0JGQl9Nb2RlX1JpZ2h0YmFyX1N5bmMge1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gbnVsbDtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcCA9IG51bGw7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfcGFuZWwgICAgPSBudWxsO1xyXG5cdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbnVsbDtcclxuXHRcdFx0dGhpcy5sYXN0X21vZGUgICAgICAgICA9ICcnO1xyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSA9IHRoaXMuc3luY19yaWdodGJhcl9tb2RlLmJpbmQoIHRoaXMgKTtcclxuXHRcdFx0dGhpcy5oYW5kbGVfY2xpY2sgICAgICA9IHRoaXMuaGFuZGxlX2NsaWNrLmJpbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEluaXQgY29udHJvbGxlci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRpbml0KCkge1xyXG5cdFx0XHR0aGlzLnRvcF90YWJzX25hdiAgICAgID0gZC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX190b3BfaG9yaXNvbnRhbF9uYXYnICk7XHJcblx0XHRcdHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3JpZ2h0YmFyX3RhYl93cmFwLS1hZHZhbmNlZF90b29scycgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF9wYW5lbCAgICA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9faW5zcGVjdG9yX2FkdmFuY2VkX3Rvb2xzJyApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHRoaXMuYWR2YW5jZWRfdGFiX3dyYXAgfHwgISB0aGlzLmFkdmFuY2VkX3BhbmVsICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT2JzZXJ2ZSBhY3RpdmUgdGFiIGNoYW5nZXMgaW4gdGhlIHRvcCB0YWJzIG5hdi5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHR0aGlzLm11dGF0aW9uX29ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIHRoaXMuc3luY19yaWdodGJhcl9tb2RlICk7XHJcblx0XHRcdFx0dGhpcy5tdXRhdGlvbl9vYnNlcnZlci5vYnNlcnZlKFxyXG5cdFx0XHRcdFx0dGhpcy50b3BfdGFic19uYXYsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXMgICAgIDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbICdkYXRhLWFjdGl2ZS10YWInIF1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGYWxsYmFjayBmb3IgY2xpY2stZHJpdmVuIHN3aXRjaGluZy5cclxuXHRcdFx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLmhhbmRsZV9jbGljaywgdHJ1ZSApO1xyXG5cclxuXHRcdFx0Ly8gSW5pdGlhbCBzeW5jLlxyXG5cdFx0XHR0aGlzLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGFjdGl2ZSB0b3AgdGFiIGlkLlxyXG5cdFx0ICpcclxuXHRcdCAqIFByaW9yaXR5OlxyXG5cdFx0ICogMS4gZGF0YS1hY3RpdmUtdGFiIGZyb20gdG9wIHRhYnMgbmF2XHJcblx0XHQgKiAyLiBhY3RpdmUgQ1NTIGNsYXNzIGluIG5hdlxyXG5cdFx0ICogMy4gdmlzaWJsZSB0b3AgcGFuZWwgZmFsbGJhY2tcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtzdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdGdldF9hY3RpdmVfdG9wX3RhYl9pZCgpIHtcclxuXHRcdFx0dmFyIGFjdGl2ZV90YWJfaWQgPSAnJztcclxuXHRcdFx0dmFyIGFjdGl2ZV9saW5rICAgPSBudWxsO1xyXG5cdFx0XHR2YXIgYWR2YW5jZWRfcGFuZWwgPSBudWxsO1xyXG5cdFx0XHR2YXIgYnVpbGRlcl9wYW5lbCAgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLnRvcF90YWJzX25hdiApIHtcclxuXHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCB0aGlzLnRvcF90YWJzX25hdi5nZXRBdHRyaWJ1dGUoICdkYXRhLWFjdGl2ZS10YWInICkgfHwgJycgKS50cmltKCk7XHJcblx0XHRcdFx0aWYgKCAnJyAhPT0gYWN0aXZlX3RhYl9pZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YWN0aXZlX2xpbmsgPSB0aGlzLnRvcF90YWJzX25hdi5xdWVyeVNlbGVjdG9yKCAnLndwYmNfdWlfZWxfX2hvcmlzX25hdl9pdGVtLmFjdGl2ZSBbZGF0YS13cGJjLWJmYi10YWJdJyApO1xyXG5cdFx0XHRcdGlmICggYWN0aXZlX2xpbmsgKSB7XHJcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2lkID0gU3RyaW5nKCBhY3RpdmVfbGluay5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLXRhYicgKSB8fCAnJyApLnRyaW0oKTtcclxuXHRcdFx0XHRcdGlmICggJycgIT09IGFjdGl2ZV90YWJfaWQgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY3RpdmVfdGFiX2lkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRmluYWwgZmFsbGJhY2s6IGRldGVjdCB2aXNpYmxlIHBhbmVsLlxyXG5cdFx0XHRhZHZhbmNlZF9wYW5lbCA9IGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fdG9wX3RhYl9zZWN0aW9uX19hZHZhbmNlZF90YWInICk7XHJcblx0XHRcdGJ1aWxkZXJfcGFuZWwgID0gZC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX190b3BfdGFiX3NlY3Rpb25fX2J1aWxkZXJfdGFiJyApO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYWR2YW5jZWRfcGFuZWwgKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gJ2FkdmFuY2VkX3RhYic7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCB0aGlzLmlzX2VsZW1lbnRfdmlzaWJsZSggYnVpbGRlcl9wYW5lbCApICkge1xyXG5cdFx0XHRcdHJldHVybiAnYnVpbGRlcl90YWInO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBlbGVtZW50IHZpc2liaWxpdHkuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtIVE1MRWxlbWVudHxudWxsfSBlbFxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2VsZW1lbnRfdmlzaWJsZSggZWwgKSB7XHJcblx0XHRcdHZhciBzdHlsZTtcclxuXHJcblx0XHRcdGlmICggISBlbCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHN0eWxlID0gdy5nZXRDb21wdXRlZFN0eWxlKCBlbCApO1xyXG5cclxuXHRcdFx0aWYgKCAhIHN0eWxlICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCAnbm9uZScgPT09IHN0eWxlLmRpc3BsYXkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICdoaWRkZW4nID09PSBzdHlsZS52aXNpYmlsaXR5ICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBBZHZhbmNlZCBNb2RlIGlzIGFjdGl2ZS5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHtib29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19hZHZhbmNlZF9tb2RlX2FjdGl2ZSgpIHtcclxuXHRcdFx0cmV0dXJuICggJ2FkdmFuY2VkX3RhYicgPT09IHRoaXMuZ2V0X2FjdGl2ZV90b3BfdGFiX2lkKCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdHNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnJlbW92ZUF0dHJpYnV0ZSggJ2hpZGRlbicgKTtcclxuXHRcdFx0dGhpcy5hZHZhbmNlZF90YWJfd3JhcC5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsICdmYWxzZScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEhpZGUgQ29kZSBUb29scyB0YWIgYnV0dG9uLlxyXG5cdFx0ICpcclxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XHJcblx0XHQgKi9cclxuXHRcdGhpZGVfYWR2YW5jZWRfdG9vbHNfdGFiKCkge1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2hpZGRlbicsICd0cnVlJyApO1xyXG5cdFx0XHR0aGlzLmFkdmFuY2VkX3RhYl93cmFwLnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBDb2RlIFRvb2xzIHBhbmVsIGlzIGN1cnJlbnRseSBhY3RpdmUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7Ym9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfYWR2YW5jZWRfdG9vbHNfcGFuZWxfYWN0aXZlKCkge1xyXG5cdFx0XHRyZXR1cm4gISEgKCB0aGlzLmFkdmFuY2VkX3BhbmVsICYmICEgdGhpcy5hZHZhbmNlZF9wYW5lbC5oYXNBdHRyaWJ1dGUoICdoaWRkZW4nICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIE9wZW4gQ29kZSBUb29scyBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2FkdmFuY2VkX3Rvb2xzX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19pbnNwZWN0b3JfYWR2YW5jZWRfdG9vbHMnLCAnd3BiY190YWJfYWR2YW5jZWRfdG9vbHMnICk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIGRlZmF1bHQgYnVpbGRlciByaWdodGJhciBwYW5lbC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIHt2b2lkfVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX2RlZmF1bHRfdmlzdWFsX3BhbmVsKCkge1xyXG5cdFx0XHR3cGJjX2JmYl9fZGlzcGF0Y2hfc2hvd19wYW5lbCggJ3dwYmNfYmZiX19wYWxldHRlX2FkZF9uZXcnLCAnd3BiY190YWJfbGlicmFyeScgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN5bmMgcmlnaHRiYXIgbW9kZSB3aXRoIHRvcCB0YWJzIG1vZGUuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0c3luY19yaWdodGJhcl9tb2RlKCkge1xyXG5cdFx0XHR2YXIgaXNfYWR2YW5jZWRfbW9kZSA9IHRoaXMuaXNfYWR2YW5jZWRfbW9kZV9hY3RpdmUoKTtcclxuXHJcblx0XHRcdGlmICggaXNfYWR2YW5jZWRfbW9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnNob3dfYWR2YW5jZWRfdG9vbHNfdGFiKCk7XHJcblxyXG5cdFx0XHRcdGlmICggJ2FkdmFuY2VkJyAhPT0gdGhpcy5sYXN0X21vZGUgKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW5fYWR2YW5jZWRfdG9vbHNfcGFuZWwoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMubGFzdF9tb2RlID0gJ2FkdmFuY2VkJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5pc19hZHZhbmNlZF90b29sc19wYW5lbF9hY3RpdmUoKSApIHtcclxuXHRcdFx0XHR0aGlzLm9wZW5fZGVmYXVsdF92aXN1YWxfcGFuZWwoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5oaWRlX2FkdmFuY2VkX3Rvb2xzX3RhYigpO1xyXG5cdFx0XHR0aGlzLmxhc3RfbW9kZSA9ICdidWlsZGVyJztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEZhbGxiYWNrIGNsaWNrIGhhbmRsZXIgZm9yIHRvcCB0YWJzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7dm9pZH1cclxuXHRcdCAqL1xyXG5cdFx0aGFuZGxlX2NsaWNrKCBldmVudCApIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItdGFiXScgKTtcclxuXHRcdFx0dmFyIHRoaXNfb2JqID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggISB0YXJnZXQgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzZXRUaW1lb3V0KFxyXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRoaXNfb2JqLnN5bmNfcmlnaHRiYXJfbW9kZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0MFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCBkLnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyApIHtcclxuXHRcdGQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J0RPTUNvbnRlbnRMb2FkZWQnLFxyXG5cdFx0XHRmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0KCBuZXcgV1BCQ19CRkJfTW9kZV9SaWdodGJhcl9TeW5jKCkgKS5pbml0KCk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdCggbmV3IFdQQkNfQkZCX01vZGVfUmlnaHRiYXJfU3luYygpICkuaW5pdCgpO1xyXG5cdH1cclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7IiwiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vID09IEZpbGUgIC9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9fb3V0L2NvcmUvYmZiLWluc3BlY3Rvci5qcyA9PSBUaW1lIHBvaW50OiAyMDI1LTA5LTA2IDE0OjA4XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4oZnVuY3Rpb24gKHcpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8vIDEpIEFjdGlvbnMgcmVnaXN0cnkuXHJcblxyXG5cdC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgKGN0eDogSW5zcGVjdG9yQWN0aW9uQ29udGV4dCkgPT4gdm9pZD59ICovXHJcblx0Y29uc3QgX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfXyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcclxuXHJcblx0Ly8gQnVpbHQtaW5zLlxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ2Rlc2VsZWN0J10gPSAoeyBidWlsZGVyIH0pID0+IHtcclxuXHRcdGJ1aWxkZXI/LnNlbGVjdF9maWVsZD8uKCBudWxsICk7XHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsIHx8ICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKCBlbCApICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8uc2VsZWN0X2ZpZWxkPy4oIGVsLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlIH0gKTtcclxuXHRcdGVsLmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9fc2Nyb2xsLXB1bHNlJyApO1xyXG5cdFx0c2V0VGltZW91dCggKCkgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3dwYmNfYmZiX19zY3JvbGwtcHVsc2UnICksIDcwMCApO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtdXAnXSA9ICh7IGJ1aWxkZXIsIGVsIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0YnVpbGRlcj8ubW92ZV9pdGVtPy4oIGVsLCAndXAnICk7XHJcblx0XHQvLyBTY3JvbGwgYWZ0ZXIgdGhlIERPTSBoYXMgc2V0dGxlZC5cclxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydzY3JvbGx0byddKHsgYnVpbGRlciwgZWwgfSkpO1xyXG5cdH07XHJcblxyXG5cdF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bJ21vdmUtZG93biddID0gKHsgYnVpbGRlciwgZWwgfSkgPT4ge1xyXG5cdFx0aWYgKCAhZWwgKSByZXR1cm47XHJcblx0XHRidWlsZGVyPy5tb3ZlX2l0ZW0/LiggZWwsICdkb3duJyApO1xyXG5cdFx0Ly8gU2Nyb2xsIGFmdGVyIHRoZSBET00gaGFzIHNldHRsZWQuXHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gX19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snc2Nyb2xsdG8nXSh7IGJ1aWxkZXIsIGVsIH0pKTtcclxuXHR9O1xyXG5cclxuXHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fWydkZWxldGUnXSA9ICh7IGJ1aWxkZXIsIGVsLCBjb25maXJtID0gdy5jb25maXJtIH0pID0+IHtcclxuXHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgaXNfZmllbGQgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICk7XHJcblx0XHRjb25zdCBsYWJlbCAgICA9IGlzX2ZpZWxkXHJcblx0XHRcdD8gKGVsLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2ZpZWxkLWxhYmVsJyApPy50ZXh0Q29udGVudCB8fCBlbC5kYXRhc2V0Py5pZCB8fCAnZmllbGQnKVxyXG5cdFx0XHQ6IChlbC5kYXRhc2V0Py5pZCB8fCAnc2VjdGlvbicpO1xyXG5cclxuXHRcdFVJLk1vZGFsX0NvbmZpcm1fRGVsZXRlLm9wZW4oIGxhYmVsLCAoKSA9PiB7XHJcblx0XHRcdC8vIENlbnRyYWwgY29tbWFuZCB3aWxsIHJlbW92ZSwgZW1pdCBldmVudHMsIGFuZCByZXNlbGVjdCBuZWlnaGJvciAod2hpY2ggcmUtYmluZHMgSW5zcGVjdG9yKS5cclxuXHRcdFx0YnVpbGRlcj8uZGVsZXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdH0gKTtcclxuXHJcblx0fTtcclxuXHJcblx0X19JTlNQRUNUT1JfQUNUSU9OU19NQVBfX1snZHVwbGljYXRlJ10gPSAoeyBidWlsZGVyLCBlbCB9KSA9PiB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdGNvbnN0IGNsb25lID0gYnVpbGRlcj8uZHVwbGljYXRlX2l0ZW0/LiggZWwgKTtcclxuXHRcdGlmICggY2xvbmUgKSBidWlsZGVyPy5zZWxlY3RfZmllbGQ/LiggY2xvbmUsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSApO1xyXG5cdH07XHJcblxyXG5cdC8vIFB1YmxpYyBBUEkuXHJcblx0dy5XUEJDX0JGQl9JbnNwZWN0b3JfQWN0aW9ucyA9IHtcclxuXHRcdHJ1bihuYW1lLCBjdHgpIHtcclxuXHRcdFx0Y29uc3QgZm4gPSBfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyApIGZuKCBjdHggKTtcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oICdXUEJDLiBJbnNwZWN0b3IgYWN0aW9uIG5vdCBmb3VuZDonLCBuYW1lICk7XHJcblx0XHR9LFxyXG5cdFx0cmVnaXN0ZXIobmFtZSwgaGFuZGxlcikge1xyXG5cdFx0XHRpZiAoICFuYW1lIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvciggJ3JlZ2lzdGVyKG5hbWUsIGhhbmRsZXIpOiBpbnZhbGlkIGFyZ3VtZW50cycgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRfX0lOU1BFQ1RPUl9BQ1RJT05TX01BUF9fW25hbWVdID0gaGFuZGxlcjtcclxuXHRcdH0sXHJcblx0XHRoYXMobmFtZSkge1xyXG5cdFx0XHRyZXR1cm4gdHlwZW9mIF9fSU5TUEVDVE9SX0FDVElPTlNfTUFQX19bbmFtZV0gPT09ICdmdW5jdGlvbic7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gMikgSW5zcGVjdG9yIEZhY3RvcnkuXHJcblxyXG5cdHZhciBVSSA9ICh3LldQQkNfQkZCX0NvcmUuVUkgPSB3LldQQkNfQkZCX0NvcmUuVUkgfHwge30pO1xyXG5cclxuXHQvLyBHbG9iYWwgSHlicmlkKysgcmVnaXN0cmllcyAoa2VlcCBwdWJsaWMpLlxyXG5cdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgICAgICA9IHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMgfHwge307XHJcblx0dy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tIHx8IHt9O1xyXG5cclxuXHQvLyBEZWZpbmUgRmFjdG9yeSBvbmx5IGlmIG1pc3NpbmcgKG5vIGVhcmx5IHJldHVybiBmb3IgdGhlIHdob2xlIGJ1bmRsZSkuXHJcblx0Ly8gYWx3YXlzIGRlZmluZS9yZXBsYWNlIEZhY3RvcnlcclxuXHR7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBVdGlsaXR5OiBjcmVhdGUgZWxlbWVudCB3aXRoIGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0PX0gYXR0cnNcclxuXHRcdCAqIEBwYXJhbSB7KE5vZGV8c3RyaW5nfEFycmF5PE5vZGV8c3RyaW5nPik9fSBjaGlsZHJlblxyXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBlbCh0YWcsIGF0dHJzLCBjaGlsZHJlbikge1xyXG5cdFx0XHR2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApO1xyXG5cdFx0XHRpZiAoIGF0dHJzICkge1xyXG5cdFx0XHRcdE9iamVjdC5rZXlzKCBhdHRycyApLmZvckVhY2goIGZ1bmN0aW9uIChrKSB7XHJcblx0XHRcdFx0XHR2YXIgdiA9IGF0dHJzW2tdO1xyXG5cdFx0XHRcdFx0aWYgKCB2ID09IG51bGwgKSByZXR1cm47XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjbGFzcycgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gdjtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGF0YXNldCcgKSB7XHJcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKCB2ICkuZm9yRWFjaCggZnVuY3Rpb24gKGRrKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS5kYXRhc2V0W2RrXSA9IFN0cmluZyggdltka10gKTtcclxuXHRcdFx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIGsgPT09ICdjaGVja2VkJyAmJiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHYgKSBub2RlLnNldEF0dHJpYnV0ZSggJ2NoZWNrZWQnLCAnY2hlY2tlZCcgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBrID09PSAnZGlzYWJsZWQnICYmIHR5cGVvZiB2ID09PSAnYm9vbGVhbicgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggdiApIG5vZGUuc2V0QXR0cmlidXRlKCAnZGlzYWJsZWQnLCAnZGlzYWJsZWQnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIG5vcm1hbGl6ZSBib29sZWFuIGF0dHJpYnV0ZXMgdG8gc3RyaW5ncy5cclxuXHRcdFx0XHRcdGlmICggdHlwZW9mIHYgPT09ICdib29sZWFuJyApIHtcclxuXHRcdFx0XHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoIGssIHYgPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCBrLCBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGNoaWxkcmVuICkge1xyXG5cdFx0XHRcdChBcnJheS5pc0FycmF5KCBjaGlsZHJlbiApID8gY2hpbGRyZW4gOiBbIGNoaWxkcmVuIF0pLmZvckVhY2goIGZ1bmN0aW9uIChjKSB7XHJcblx0XHRcdFx0XHRpZiAoIGMgPT0gbnVsbCApIHJldHVybjtcclxuXHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIGMgKSA6IGMgKTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBCdWlsZCBhIHRvZ2dsZSBjb250cm9sIHJvdyAoY2hlY2tib3ggcmVuZGVyZWQgYXMgdG9nZ2xlKS5cclxuXHRcdCAqXHJcblx0XHQgKiBTdHJ1Y3R1cmU6XHJcblx0XHQgKiA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19yb3cgaW5zcGVjdG9yX19yb3ctLXRvZ2dsZVwiPlxyXG5cdFx0ICogICA8ZGl2IGNsYXNzPVwiaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZVwiPlxyXG5cdFx0ICogICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIklEXCIgZGF0YS1pbnNwZWN0b3Ita2V5PVwiS0VZXCIgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgY2hlY2tlZD5cclxuXHRcdCAqICAgICA8bGFiZWwgY2xhc3M9XCJ3cGJjX3VpX190b2dnbGVfaWNvblwiICBmb3I9XCJJRFwiPjwvbGFiZWw+XHJcblx0XHQgKiAgICAgPGxhYmVsIGNsYXNzPVwid3BiY191aV9fdG9nZ2xlX2xhYmVsXCIgZm9yPVwiSURcIj5MYWJlbCB0ZXh0PC9sYWJlbD5cclxuXHRcdCAqICAgPC9kaXY+XHJcblx0XHQgKiA8L2Rpdj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRfaWRcclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tlZFxyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfdG9nZ2xlX3JvdyggaW5wdXRfaWQsIGtleSwgY2hlY2tlZCwgbGFiZWxfdGV4dCApIHtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93IGluc3BlY3Rvcl9fcm93LS10b2dnbGUnIH0gKTtcclxuXHRcdFx0dmFyIGN0cmxfd3JhcCA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sIHdwYmNfdWlfX3RvZ2dsZScgfSApO1xyXG5cclxuXHRcdFx0dmFyIGlucHV0X2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRpZCAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICdjaGVja2JveCcsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdGNoZWNrZWQgICAgICAgICAgICAgOiAhIWNoZWNrZWQsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgICAgICA6ICdzd2l0Y2gnLFxyXG5cdFx0XHRcdCdhcmlhLWNoZWNrZWQnICAgICAgOiAhIWNoZWNrZWRcclxuXHRcdFx0fSApO1xyXG5cdFx0XHR2YXIgaWNvbl9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2ljb24nLCAnZm9yJzogaW5wdXRfaWQgfSApO1xyXG5cdFx0XHR2YXIgdGV4dF9sYmwgPSBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnd3BiY191aV9fdG9nZ2xlX2xhYmVsJywgJ2Zvcic6IGlucHV0X2lkIH0sIGxhYmVsX3RleHQgfHwgJycgKTtcclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggaW5wdXRfZWwgKTtcclxuXHRcdFx0Y3RybF93cmFwLmFwcGVuZENoaWxkKCBpY29uX2xibCApO1xyXG5cdFx0XHRjdHJsX3dyYXAuYXBwZW5kQ2hpbGQoIHRleHRfbGJsICk7XHJcblxyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNob29zZSBpbml0aWFsIHZhbHVlIGZyb20gZGF0YSBvciBzY2hlbWEgZGVmYXVsdC5cclxuXHQgKi9cclxuXHRcdGZ1bmN0aW9uIGdldF9pbml0aWFsX3ZhbHVlKGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hKSB7XHJcblx0XHRcdGlmICggZGF0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGRhdGEsIGtleSApICkgcmV0dXJuIGRhdGFba2V5XTtcclxuXHRcdFx0dmFyIG1ldGEgPSBwcm9wc19zY2hlbWEgJiYgcHJvcHNfc2NoZW1hW2tleV07XHJcblx0XHRcdHJldHVybiAobWV0YSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIG1ldGEsICdkZWZhdWx0JyApKSA/IG1ldGEuZGVmYXVsdCA6ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdCAqIFV0aWxpdHk6IGNvZXJjZSB2YWx1ZSBieSBzY2hlbWEgdHlwZS5cclxuXHQgKi9cclxuXHJcblxyXG5cdFx0ZnVuY3Rpb24gY29lcmNlX2J5X3R5cGUodmFsdWUsIHR5cGUpIHtcclxuXHRcdFx0c3dpdGNoICggdHlwZSApIHtcclxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdFx0Y2FzZSAnZmxvYXQnOlxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIG4gPSBOdW1iZXIoIHZhbHVlICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXNOYU4oIG4gKSA/ICcnIDogbjtcclxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcclxuXHRcdFx0XHRcdHJldHVybiAhIXZhbHVlO1xyXG5cdFx0XHRcdGNhc2UgJ2FycmF5JzpcclxuXHRcdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KCB2YWx1ZSApID8gdmFsdWUgOiBbXTtcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/ICcnIDogU3RyaW5nKCB2YWx1ZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0ICogTm9ybWFsaXplIDxzZWxlY3Q+IG9wdGlvbnMgKGFycmF5IG9mIHt2YWx1ZSxsYWJlbH0gb3IgbWFwIHt2YWx1ZTpsYWJlbH0pLlxyXG5cdCAqL1xyXG5cdFx0ZnVuY3Rpb24gbm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKG9wdGlvbnMpIHtcclxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBvcHRpb25zICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9wdGlvbnMubWFwKCBmdW5jdGlvbiAobykge1xyXG5cdFx0XHRcdFx0aWYgKCB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAmJiAndmFsdWUnIGluIG8gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8udmFsdWUgKSwgbGFiZWw6IFN0cmluZyggby5sYWJlbCB8fCBvLnZhbHVlICkgfTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBTdHJpbmcoIG8gKSwgbGFiZWw6IFN0cmluZyggbyApIH07XHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKCBvcHRpb25zICkubWFwKCBmdW5jdGlvbiAoaykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IFN0cmluZyggayApLCBsYWJlbDogU3RyaW5nKCBvcHRpb25zW2tdICkgfTtcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKiBQYXJzZSBhIENTUyBsZW5ndGggbGlrZSBcIjEyMHB4XCIgb3IgXCI4MCVcIiBpbnRvIHsgdmFsdWU6bnVtYmVyLCB1bml0OnN0cmluZyB9LiAqL1xyXG5cdFx0ZnVuY3Rpb24gcGFyc2VfbGVuKHZhbHVlLCBmYWxsYmFja191bml0KSB7XHJcblx0XHRcdHZhbHVlID0gKHZhbHVlID09IG51bGwpID8gJycgOiBTdHJpbmcoIHZhbHVlICkudHJpbSgpO1xyXG5cdFx0XHR2YXIgbSA9IHZhbHVlLm1hdGNoKCAvXigtP1xcZCsoPzpcXC5cXGQrKT8pKHB4fCV8cmVtfGVtKSQvaSApO1xyXG5cdFx0XHRpZiAoIG0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IHBhcnNlRmxvYXQoIG1bMV0gKSwgdW5pdDogbVsyXS50b0xvd2VyQ2FzZSgpIH07XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gcGxhaW4gbnVtYmVyIC0+IGFzc3VtZSBmYWxsYmFjayB1bml0XHJcblx0XHRcdGlmICggdmFsdWUgIT09ICcnICYmICFpc05hTiggTnVtYmVyKCB2YWx1ZSApICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IE51bWJlciggdmFsdWUgKSwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4geyB2YWx1ZTogMCwgdW5pdDogKGZhbGxiYWNrX3VuaXQgfHwgJ3B4JykgfTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiogQ2xhbXAgaGVscGVyLiAqL1xyXG5cdFx0ZnVuY3Rpb24gY2xhbXBfbnVtKHYsIG1pbiwgbWF4KSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHYgIT09ICdudW1iZXInIHx8IGlzTmFOKCB2ICkgKSByZXR1cm4gKG1pbiAhPSBudWxsID8gbWluIDogMCk7XHJcblx0XHRcdGlmICggbWluICE9IG51bGwgJiYgdiA8IG1pbiApIHYgPSBtaW47XHJcblx0XHRcdGlmICggbWF4ICE9IG51bGwgJiYgdiA+IG1heCApIHYgPSBtYXg7XHJcblx0XHRcdHJldHVybiB2O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluaXRpYWxpemUgQ29sb3JpcyBwaWNrZXJzIGluIGEgZ2l2ZW4gcm9vdC5cclxuXHRcdC8vIFJlbGllcyBvbiBDb2xvcmlzIGJlaW5nIGVucXVldWVkIChzZWUgYmZiLWJvb3RzdHJhcC5waHApLlxyXG5cdFx0ZnVuY3Rpb24gaW5pdF9jb2xvcmlzX3BpY2tlcnMocm9vdCkge1xyXG5cdFx0XHRpZiAoICFyb290IHx8ICF3LkNvbG9yaXMgKSByZXR1cm47XHJcblx0XHRcdC8vIE1hcmsgaW5wdXRzIHdlIHdhbnQgQ29sb3JpcyB0byBoYW5kbGUuXHJcblx0XHRcdHZhciBpbnB1dHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICdpbnB1dFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl0nICk7XHJcblx0XHRcdGlmICggIWlucHV0cy5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHQvLyBBZGQgYSBzdGFibGUgY2xhc3MgZm9yIENvbG9yaXMgdGFyZ2V0aW5nOyBhdm9pZCBkb3VibGUtaW5pdGlhbGl6aW5nLlxyXG5cdFx0XHRpbnB1dHMuZm9yRWFjaCggZnVuY3Rpb24gKGlucHV0KSB7XHJcblx0XHRcdFx0aWYgKCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9jb2xvcmlzJyApICkgcmV0dXJuO1xyXG5cdFx0XHRcdGlucHV0LmNsYXNzTGlzdC5hZGQoICd3cGJjX2JmYl9jb2xvcmlzJyApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGUvcmVmcmVzaCBhIENvbG9yaXMgaW5zdGFuY2UgYm91bmQgdG8gdGhlc2UgaW5wdXRzLlxyXG5cdFx0XHQvLyBLZWVwIEhFWCBvdXRwdXQgdG8gbWF0Y2ggc2NoZW1hIGRlZmF1bHRzIChlLmcuLCBcIiNlMGUwZTBcIikuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dy5Db2xvcmlzKCB7XHJcblx0XHRcdFx0XHRlbCAgICAgICA6ICcud3BiY19iZmJfY29sb3JpcycsXHJcblx0XHRcdFx0XHRhbHBoYSAgICA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Zm9ybWF0ICAgOiAnaGV4JyxcclxuXHRcdFx0XHRcdHRoZW1lTW9kZTogJ2F1dG8nXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdC8vIENvbG9yaXMgYWxyZWFkeSBkaXNwYXRjaGVzICdpbnB1dCcgZXZlbnRzIG9uIHZhbHVlIGNoYW5nZXMuXHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdC8vIE5vbi1mYXRhbDogaWYgQ29sb3JpcyB0aHJvd3MgKHJhcmUpLCB0aGUgdGV4dCBpbnB1dCBzdGlsbCB3b3Jrcy5cclxuXHRcdFx0XHRjb25zb2xlLndhcm4oICdXUEJDIEluc3BlY3RvcjogQ29sb3JpcyBpbml0IGZhaWxlZDonLCBlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiBzbGlkZXIgKyBudW1iZXIgaW4gb25lIHJvdyAod3JpdGVzIHRvIGEgc2luZ2xlIGRhdGEga2V5KS5cclxuXHRcdCAqIENvbnRyb2wgbWV0YTogeyB0eXBlOidyYW5nZV9udW1iZXInLCBrZXksIGxhYmVsLCBtaW4sIG1heCwgc3RlcCB9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coaW5wdXRfaWQsIGtleSwgbGFiZWxfdGV4dCwgdmFsdWUsIG1ldGEpIHtcclxuXHRcdFx0dmFyIHJvd19lbCAgID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9KTtcclxuXHRcdFx0dmFyIGxhYmVsX2VsID0gZWwoJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0IHx8IGtleSB8fCAnJyk7XHJcblx0XHRcdHZhciBjdHJsICAgICA9IGVsKCdkaXYnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2NvbnRyb2wnIH0pO1xyXG5cclxuXHRcdFx0dmFyIG1pbiAgPSAobWV0YSAmJiBtZXRhLm1pbiAhPSBudWxsKSAgPyBtZXRhLm1pbiAgOiAwO1xyXG5cdFx0XHR2YXIgbWF4ICA9IChtZXRhICYmIG1ldGEubWF4ICE9IG51bGwpICA/IG1ldGEubWF4ICA6IDEwMDtcclxuXHRcdFx0dmFyIHN0ZXAgPSAobWV0YSAmJiBtZXRhLnN0ZXAgIT0gbnVsbCkgPyBtZXRhLnN0ZXAgOiAxO1xyXG5cclxuXHRcdFx0dmFyIGdyb3VwID0gZWwoJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwIHdwYmNfaW5saW5lX2lucHV0cycsICdkYXRhLWxlbi1ncm91cCc6IGtleSB9KTtcclxuXHJcblx0XHRcdHZhciByYW5nZSA9IGVsKCdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlIDogJ3JhbmdlJyxcclxuXHRcdFx0XHQnY2xhc3MnOiAnaW5zcGVjdG9yX19pbnB1dCcsXHJcblx0XHRcdFx0J2RhdGEtbGVuLXJhbmdlJzogJycsXHJcblx0XHRcdFx0bWluICA6IFN0cmluZyhtaW4pLFxyXG5cdFx0XHRcdG1heCAgOiBTdHJpbmcobWF4KSxcclxuXHRcdFx0XHRzdGVwIDogU3RyaW5nKHN0ZXApLFxyXG5cdFx0XHRcdHZhbHVlOiBTdHJpbmcodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyBtaW4gOiB2YWx1ZSlcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHR2YXIgbnVtID0gZWwoJ2lucHV0Jywge1xyXG5cdFx0XHRcdGlkICAgOiBpbnB1dF9pZCxcclxuXHRcdFx0XHR0eXBlIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQgaW5zcGVjdG9yX193XzMwJyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tdmFsdWUnOiAnJyxcclxuXHRcdFx0XHQnZGF0YS1pbnNwZWN0b3Ita2V5Jzoga2V5LFxyXG5cdFx0XHRcdG1pbiAgOiBTdHJpbmcobWluKSxcclxuXHRcdFx0XHRtYXggIDogU3RyaW5nKG1heCksXHJcblx0XHRcdFx0c3RlcCA6IFN0cmluZyhzdGVwKSxcclxuXHRcdFx0XHR2YWx1ZTogKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSA/IFN0cmluZyhtaW4pIDogU3RyaW5nKHZhbHVlKVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGdyb3VwLmFwcGVuZENoaWxkKHJhbmdlKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQobnVtKTtcclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZChncm91cCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChsYWJlbF9lbCk7XHJcblx0XHRcdHJvd19lbC5hcHBlbmRDaGlsZChjdHJsKTtcclxuXHRcdFx0cmV0dXJuIHJvd19lbDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEJ1aWxkOiAobnVtYmVyICsgdW5pdCkgKyBzbGlkZXIsIHdyaXRpbmcgYSAqc2luZ2xlKiBjb21iaW5lZCBzdHJpbmcgdG8gYGtleWAuXHJcblx0XHQgKiBDb250cm9sIG1ldGE6XHJcblx0XHQgKiB7XHJcblx0XHQgKiAgIHR5cGU6J2xlbicsIGtleSwgbGFiZWwsIHVuaXRzOlsncHgnLCclJywncmVtJywnZW0nXSxcclxuXHRcdCAqICAgc2xpZGVyOiB7IHB4OnttaW46MCxtYXg6NTEyLHN0ZXA6MX0sICclJzp7bWluOjAsbWF4OjEwMCxzdGVwOjF9LCByZW06e21pbjowLG1heDoxMCxzdGVwOjAuMX0sIGVtOnsuLi59IH0sXHJcblx0XHQgKiAgIGZhbGxiYWNrX3VuaXQ6J3B4J1xyXG5cdFx0ICogfVxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9sZW5fY29tcG91bmRfcm93KGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkKSB7XHJcblx0XHRcdHZhciBrZXkgICAgICAgID0gY29udHJvbC5rZXk7XHJcblx0XHRcdHZhciBsYWJlbF90ZXh0ID0gY29udHJvbC5sYWJlbCB8fCBrZXkgfHwgJyc7XHJcblx0XHRcdHZhciBkZWZfc3RyICAgID0gZ2V0X2luaXRpYWxfdmFsdWUoIGtleSwgZGF0YSwgcHJvcHNfc2NoZW1hICk7XHJcblx0XHRcdHZhciBmYWxsYmFja191ID0gY29udHJvbC5mYWxsYmFja191bml0IHx8ICdweCc7XHJcblx0XHRcdHZhciBwYXJzZWQgICAgID0gcGFyc2VfbGVuKCBkZWZfc3RyLCBmYWxsYmFja191ICk7XHJcblxyXG5cdFx0XHR2YXIgcm93ICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbCA9IGVsKCAnbGFiZWwnLCB7ICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsICA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19jb250cm9sJyB9ICk7XHJcblxyXG5cdFx0XHR2YXIgdW5pdHMgICAgICA9IEFycmF5LmlzQXJyYXkoIGNvbnRyb2wudW5pdHMgKSAmJiBjb250cm9sLnVuaXRzLmxlbmd0aCA/IGNvbnRyb2wudW5pdHMgOiBbICdweCcsICclJywgJ3JlbScsICdlbScgXTtcclxuXHRcdFx0dmFyIHNsaWRlcl9tYXAgPSBjb250cm9sLnNsaWRlciB8fCB7XHJcblx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdCclJyAgOiB7IG1pbjogMCwgbWF4OiAxMDAsIHN0ZXA6IDEgfSxcclxuXHRcdFx0XHQncmVtJzogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDAuMSB9LFxyXG5cdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEhvc3Qgd2l0aCBhIGhpZGRlbiBpbnB1dCB0aGF0IGNhcnJpZXMgZGF0YS1pbnNwZWN0b3Ita2V5IHRvIHJldXNlIHRoZSBzdGFuZGFyZCBoYW5kbGVyLlxyXG5cdFx0XHR2YXIgZ3JvdXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfbGVuX2dyb3VwJywgJ2RhdGEtbGVuLWdyb3VwJzoga2V5IH0gKTtcclxuXHJcblx0XHRcdHZhciBpbmxpbmUgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfaW5saW5lX2lucHV0cycgfSApO1xyXG5cclxuXHRcdFx0dmFyIG51bSA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgIDogJ251bWJlcicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdCdkYXRhLWxlbi12YWx1ZSc6ICcnLFxyXG5cdFx0XHRcdG1pbiAgICAgICAgICAgICA6ICcwJyxcclxuXHRcdFx0XHRzdGVwICAgICAgICAgICAgOiAnYW55JyxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgOiBTdHJpbmcoIHBhcnNlZC52YWx1ZSApXHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdHZhciBzZWwgPSBlbCggJ3NlbGVjdCcsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnLCAnZGF0YS1sZW4tdW5pdCc6ICcnIH0gKTtcclxuXHRcdFx0dW5pdHMuZm9yRWFjaCggZnVuY3Rpb24gKHUpIHtcclxuXHRcdFx0XHR2YXIgb3B0ID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiB1IH0sIHUgKTtcclxuXHRcdFx0XHRpZiAoIHUgPT09IHBhcnNlZC51bml0ICkgb3B0LnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdHNlbC5hcHBlbmRDaGlsZCggb3B0ICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggbnVtICk7XHJcblx0XHRcdGlubGluZS5hcHBlbmRDaGlsZCggc2VsICk7XHJcblxyXG5cdFx0XHQvLyBTbGlkZXIgKHVuaXQtYXdhcmUpXHJcblx0XHRcdHZhciBjdXJyZW50ID0gc2xpZGVyX21hcFtwYXJzZWQudW5pdF0gfHwgc2xpZGVyX21hcFt1bml0c1swXV07XHJcblx0XHRcdHZhciByYW5nZSAgID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHR0eXBlICAgICAgICAgICAgOiAncmFuZ2UnLFxyXG5cdFx0XHRcdCdjbGFzcycgICAgICAgICA6ICdpbnNwZWN0b3JfX2lucHV0JyxcclxuXHRcdFx0XHQnZGF0YS1sZW4tcmFuZ2UnOiAnJyxcclxuXHRcdFx0XHRtaW4gICAgICAgICAgICAgOiBTdHJpbmcoIGN1cnJlbnQubWluICksXHJcblx0XHRcdFx0bWF4ICAgICAgICAgICAgIDogU3RyaW5nKCBjdXJyZW50Lm1heCApLFxyXG5cdFx0XHRcdHN0ZXAgICAgICAgICAgICA6IFN0cmluZyggY3VycmVudC5zdGVwICksXHJcblx0XHRcdFx0dmFsdWUgICAgICAgICAgIDogU3RyaW5nKCBjbGFtcF9udW0oIHBhcnNlZC52YWx1ZSwgY3VycmVudC5taW4sIGN1cnJlbnQubWF4ICkgKVxyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHQvLyBIaWRkZW4gd3JpdGVyIGlucHV0IHRoYXQgdGhlIGRlZmF1bHQgSW5zcGVjdG9yIGhhbmRsZXIgd2lsbCBjYXRjaC5cclxuXHRcdFx0dmFyIGhpZGRlbiA9IGVsKCAnaW5wdXQnLCB7XHJcblx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdHN0eWxlICAgICAgICAgICAgICAgOiAnZGlzcGxheTpub25lJyxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nICAgICAgIDogJ3RydWUnLFxyXG5cdFx0XHRcdHRhYmluZGV4ICAgICAgICAgICAgOiAnLTEnLFxyXG5cdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgOiAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZCArICdfbGVuX2hpZGRlbicsXHJcblx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHR2YWx1ZSAgICAgICAgICAgICAgIDogKFN0cmluZyggcGFyc2VkLnZhbHVlICkgKyBwYXJzZWQudW5pdClcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGlubGluZSApO1xyXG5cdFx0XHRncm91cC5hcHBlbmRDaGlsZCggcmFuZ2UgKTtcclxuXHRcdFx0Z3JvdXAuYXBwZW5kQ2hpbGQoIGhpZGRlbiApO1xyXG5cclxuXHRcdFx0Y3RybC5hcHBlbmRDaGlsZCggZ3JvdXAgKTtcclxuXHRcdFx0cm93LmFwcGVuZENoaWxkKCBsYWJlbCApO1xyXG5cdFx0XHRyb3cuYXBwZW5kQ2hpbGQoIGN0cmwgKTtcclxuXHRcdFx0cmV0dXJuIHJvdztcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFdpcmUgc3luY2luZyBmb3IgYW55IC53cGJjX2xlbl9ncm91cCBpbnNpZGUgYSBnaXZlbiByb290IChwYW5lbCkuXHJcblx0XHQgKiAtIHJhbmdlIOKHhCBudW1iZXIgc3luY1xyXG5cdFx0ICogLSB1bml0IHN3aXRjaGVzIHVwZGF0ZSBzbGlkZXIgYm91bmRzXHJcblx0XHQgKiAtIGhpZGRlbiB3cml0ZXIgKGlmIHByZXNlbnQpIGdldHMgdXBkYXRlZCBhbmQgZW1pdHMgJ2lucHV0J1xyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiB3aXJlX2xlbl9ncm91cChyb290KSB7XHJcblx0XHRcdGlmICggIXJvb3QgKSByZXR1cm47XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBmaW5kX2dyb3VwKGVsKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsICYmIGVsLmNsb3Nlc3QgJiYgZWwuY2xvc2VzdCggJy53cGJjX2xlbl9ncm91cCcgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdHZhciB0ID0gZS50YXJnZXQ7XHJcblx0XHRcdFx0Ly8gU2xpZGVyIG1vdmVkIC0+IHVwZGF0ZSBudW1iZXIgKGFuZCB3cml0ZXIvaGlkZGVuKVxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXJhbmdlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIG51bSA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi12YWx1ZV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIG51bSApIHtcclxuXHRcdFx0XHRcdFx0bnVtLnZhbHVlID0gdC52YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB1bml0ICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi11bml0XScgKTtcclxuXHRcdFx0XHRcdFx0dW5pdCAgICAgICAgID0gdW5pdCA/IHVuaXQudmFsdWUgOiAncHgnO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHQudmFsdWUgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHQvLyB0cmlnZ2VyIHN0YW5kYXJkIGluc3BlY3RvciBoYW5kbGVyOlxyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBQbGFpbiByYW5nZV9udW1iZXIgY2FzZSAobnVtYmVyIGhhcyBkYXRhLWluc3BlY3Rvci1rZXkpIC0+IGZpcmUgaW5wdXQgb24gbnVtYmVyXHJcblx0XHRcdFx0XHRcdGlmICggbnVtICYmIG51bS5oYXNBdHRyaWJ1dGUoICdkYXRhLWluc3BlY3Rvci1rZXknICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0bnVtLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBOdW1iZXIgdHlwZWQgLT4gdXBkYXRlIHNsaWRlciBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXZhbHVlJyApICkge1xyXG5cdFx0XHRcdFx0dmFyIGcgPSBmaW5kX2dyb3VwKCB0ICk7XHJcblx0XHRcdFx0XHRpZiAoICFnICkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0dmFyIHIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tcmFuZ2VdJyApO1xyXG5cdFx0XHRcdFx0aWYgKCByICkge1xyXG5cdFx0XHRcdFx0XHQvLyBjbGFtcCB3aXRoaW4gc2xpZGVyIGJvdW5kcyBpZiBwcmVzZW50XHJcblx0XHRcdFx0XHRcdHZhciBtaW4gPSBOdW1iZXIoIHIubWluICk7XHJcblx0XHRcdFx0XHRcdHZhciBtYXggPSBOdW1iZXIoIHIubWF4ICk7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgPSBOdW1iZXIoIHQudmFsdWUgKTtcclxuXHRcdFx0XHRcdFx0aWYgKCAhaXNOYU4oIHYgKSApIHtcclxuXHRcdFx0XHRcdFx0XHR2ICAgICAgID0gY2xhbXBfbnVtKCB2LCBpc05hTiggbWluICkgPyB1bmRlZmluZWQgOiBtaW4sIGlzTmFOKCBtYXggKSA/IHVuZGVmaW5lZCA6IG1heCApO1xyXG5cdFx0XHRcdFx0XHRcdHIudmFsdWUgPSBTdHJpbmcoIHYgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIFN0cmluZyggdiApICE9PSB0LnZhbHVlICkgdC52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR2YXIgd3JpdGVyID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtaW5zcGVjdG9yLWtleV0nICk7XHJcblx0XHRcdFx0XHRpZiAoIHdyaXRlciAmJiB3cml0ZXIudHlwZSA9PT0gJ3RleHQnICkge1xyXG5cdFx0XHRcdFx0XHR2YXIgdW5pdCAgICAgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1sZW4tdW5pdF0nICk7XHJcblx0XHRcdFx0XHRcdHVuaXQgICAgICAgICA9IHVuaXQgPyB1bml0LnZhbHVlIDogJ3B4JztcclxuXHRcdFx0XHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKCB0LnZhbHVlIHx8IDAgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBlbHNlOiBudW1iZXIgaXRzZWxmIGxpa2VseSBjYXJyaWVzIGRhdGEtaW5zcGVjdG9yLWtleSAocmFuZ2VfbnVtYmVyKTsgZGVmYXVsdCBoYW5kbGVyIHdpbGwgcnVuLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0cm9vdC5hZGRFdmVudExpc3RlbmVyKCAnY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHR2YXIgdCA9IGUudGFyZ2V0O1xyXG5cdFx0XHRcdC8vIFVuaXQgY2hhbmdlZCAtPiB1cGRhdGUgc2xpZGVyIGxpbWl0cyBhbmQgd3JpdGVyL2hpZGRlblxyXG5cdFx0XHRcdGlmICggdCAmJiB0Lmhhc0F0dHJpYnV0ZSggJ2RhdGEtbGVuLXVuaXQnICkgKSB7XHJcblx0XHRcdFx0XHR2YXIgZyA9IGZpbmRfZ3JvdXAoIHQgKTtcclxuXHRcdFx0XHRcdGlmICggIWcgKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0Ly8gRmluZCB0aGUgY29udHJvbCBtZXRhIHZpYSBhIGRhdGEgYXR0cmlidXRlIG9uIGdyb3VwIGlmIHByb3ZpZGVkXHJcblx0XHRcdFx0XHQvLyAoRmFjdG9yeSBwYXRoIHNldHMgbm90aGluZyBoZXJlOyB3ZSByZS1kZXJpdmUgZnJvbSBjdXJyZW50IHNsaWRlciBib3VuZHMuKVxyXG5cdFx0XHRcdFx0dmFyIHIgICAgICA9IGcucXVlcnlTZWxlY3RvciggJ1tkYXRhLWxlbi1yYW5nZV0nICk7XHJcblx0XHRcdFx0XHR2YXIgbnVtICAgID0gZy5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtbGVuLXZhbHVlXScgKTtcclxuXHRcdFx0XHRcdHZhciB3cml0ZXIgPSBnLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1pbnNwZWN0b3Ita2V5XScgKTtcclxuXHRcdFx0XHRcdHZhciB1bml0ICAgPSB0LnZhbHVlIHx8ICdweCc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRqdXN0IHNsaWRlciBib3VuZHMgaGV1cmlzdGljYWxseSAobWF0Y2ggRmFjdG9yeSBkZWZhdWx0cylcclxuXHRcdFx0XHRcdHZhciBib3VuZHNfYnlfdW5pdCA9IHtcclxuXHRcdFx0XHRcdFx0J3B4JyA6IHsgbWluOiAwLCBtYXg6IDUxMiwgc3RlcDogMSB9LFxyXG5cdFx0XHRcdFx0XHQnJScgIDogeyBtaW46IDAsIG1heDogMTAwLCBzdGVwOiAxIH0sXHJcblx0XHRcdFx0XHRcdCdyZW0nOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH0sXHJcblx0XHRcdFx0XHRcdCdlbScgOiB7IG1pbjogMCwgbWF4OiAxMCwgc3RlcDogMC4xIH1cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRpZiAoIHIgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBiICA9IGJvdW5kc19ieV91bml0W3VuaXRdIHx8IGJvdW5kc19ieV91bml0WydweCddO1xyXG5cdFx0XHRcdFx0XHRyLm1pbiAgPSBTdHJpbmcoIGIubWluICk7XHJcblx0XHRcdFx0XHRcdHIubWF4ICA9IFN0cmluZyggYi5tYXggKTtcclxuXHRcdFx0XHRcdFx0ci5zdGVwID0gU3RyaW5nKCBiLnN0ZXAgKTtcclxuXHRcdFx0XHRcdFx0Ly8gY2xhbXAgdG8gbmV3IGJvdW5kc1xyXG5cdFx0XHRcdFx0XHR2YXIgdiAgPSBOdW1iZXIoIG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiByLnZhbHVlICk7XHJcblx0XHRcdFx0XHRcdGlmICggIWlzTmFOKCB2ICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0diAgICAgICA9IGNsYW1wX251bSggdiwgYi5taW4sIGIubWF4ICk7XHJcblx0XHRcdFx0XHRcdFx0ci52YWx1ZSA9IFN0cmluZyggdiApO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbnVtICkgbnVtLnZhbHVlID0gU3RyaW5nKCB2ICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggd3JpdGVyICYmIHdyaXRlci50eXBlID09PSAndGV4dCcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciB2ICAgICAgICA9IG51bSAmJiBudW0udmFsdWUgPyBudW0udmFsdWUgOiAociA/IHIudmFsdWUgOiAnMCcpO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcoIHYgKSArIFN0cmluZyggdW5pdCApO1xyXG5cdFx0XHRcdFx0XHR3cml0ZXIuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSApICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LCB0cnVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cdFx0Ly8gPT0gIEMgTyBOIFQgUiBPIEwgID09XHJcblx0XHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5cdFx0LyoqXHJcblx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gQ29udHJvbCBFbGVtZW50LCBlLmcuIElucHV0ISAgQnVpbGQgYSBzaW5nbGUgY29udHJvbCByb3c6XHJcblx0ICogPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fcm93XCI+XHJcblx0ICogICA8bGFiZWwgY2xhc3M9XCJpbnNwZWN0b3JfX2xhYmVsXCIgZm9yPVwiLi4uXCI+TGFiZWw8L2xhYmVsPlxyXG5cdCAqICAgPGRpdiBjbGFzcz1cImluc3BlY3Rvcl9fY29udHJvbFwiPjxpbnB1dHx0ZXh0YXJlYXxzZWxlY3QgY2xhc3M9XCJpbnNwZWN0b3JfX2lucHV0XCIgLi4uPjwvZGl2PlxyXG5cdCAqIDwvZGl2PlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRyb2wgICAgICAgICAgIC0gc2NoZW1hIGNvbnRyb2wgbWV0YSAoe3R5cGUsa2V5LGxhYmVsLC4uLn0pXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BzX3NjaGVtYSAgICAgIC0gc2NoZW1hLnByb3BzXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgICAgICAgICAgICAgIC0gY3VycmVudCBlbGVtZW50IGRhdGEtKiBtYXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkICAgICAgICAgICAgICAgLSB1bmlxdWUgc3VmZml4IGZvciBpbnB1dCBpZHNcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gY3R4ICAgICAgICAgICAgICAgLSB7IGVsLCBidWlsZGVyLCB0eXBlLCBkYXRhIH1cclxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0ICovXHJcblx0XHRmdW5jdGlvbiBidWlsZF9jb250cm9sKGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkLCBjdHgpIHtcclxuXHRcdFx0dmFyIHR5cGUgPSBjb250cm9sLnR5cGU7XHJcblx0XHRcdHZhciBrZXkgID0gY29udHJvbC5rZXk7XHJcblxyXG5cdFx0XHR2YXIgbGFiZWxfdGV4dCA9IGNvbnRyb2wubGFiZWwgfHwga2V5IHx8ICcnO1xyXG5cdFx0XHR2YXIgcHJvcF9tZXRhICA9IChrZXkgPyAocHJvcHNfc2NoZW1hW2tleV0gfHwgeyB0eXBlOiAnc3RyaW5nJyB9KSA6IHsgdHlwZTogJ3N0cmluZycgfSk7XHJcblx0XHRcdHZhciB2YWx1ZSAgICAgID0gY29lcmNlX2J5X3R5cGUoIGdldF9pbml0aWFsX3ZhbHVlKCBrZXksIGRhdGEsIHByb3BzX3NjaGVtYSApLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0Ly8gQWxsb3cgdmFsdWVfZnJvbSBvdmVycmlkZSAoY29tcHV0ZWQgYXQgcmVuZGVyLXRpbWUpLlxyXG5cdFx0aWYgKCBjb250cm9sICYmIGNvbnRyb2wudmFsdWVfZnJvbSAmJiB3LndwYmNfYmZiX2luc3BlY3Rvcl9mYWN0b3J5X3ZhbHVlX2Zyb21bY29udHJvbC52YWx1ZV9mcm9tXSApIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGNvbXB1dGVkID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tW2NvbnRyb2wudmFsdWVfZnJvbV0oIGN0eCB8fCB7fSApO1xyXG5cdFx0XHRcdFx0dmFsdWUgICAgICAgID0gY29lcmNlX2J5X3R5cGUoIGNvbXB1dGVkLCBwcm9wX21ldGEudHlwZSApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCAndmFsdWVfZnJvbSBmYWlsZWQgZm9yJywgY29udHJvbC52YWx1ZV9mcm9tLCBlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgaW5wdXRfaWQgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHJcblx0XHRcdHZhciByb3dfZWwgICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fcm93JyB9ICk7XHJcblx0XHRcdHZhciBsYWJlbF9lbCAgPSBlbCggJ2xhYmVsJywgeyAnZm9yJzogaW5wdXRfaWQsICdjbGFzcyc6ICdpbnNwZWN0b3JfX2xhYmVsJyB9LCBsYWJlbF90ZXh0ICk7XHJcblx0XHRcdHZhciBjdHJsX3dyYXAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkX2VsO1xyXG5cclxuXHRcdC8vIC0tLSBzbG90IGhvc3QgKG5hbWVkIFVJIGluamVjdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRcdGlmICggdHlwZSA9PT0gJ3Nsb3QnICYmIGNvbnRyb2wuc2xvdCApIHtcclxuXHRcdFx0Ly8gYWRkIGEgbWFya2VyIGNsYXNzIGZvciB0aGUgbGF5b3V0IGNoaXBzIHJvd1xyXG5cdFx0XHR2YXIgY2xhc3NlcyA9ICdpbnNwZWN0b3JfX3JvdyBpbnNwZWN0b3JfX3Jvdy0tc2xvdCc7XHJcblx0XHRcdGlmICggY29udHJvbC5zbG90ID09PSAnbGF5b3V0X2NoaXBzJyApIGNsYXNzZXMgKz0gJyBpbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzJztcclxuXHJcblx0XHRcdHZhciBzbG90X3JvdyA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiBjbGFzc2VzIH0gKTtcclxuXHJcblx0XHRcdGlmICggbGFiZWxfdGV4dCApIHNsb3Rfcm93LmFwcGVuZENoaWxkKCBlbCggJ2xhYmVsJywgeyAnY2xhc3MnOiAnaW5zcGVjdG9yX19sYWJlbCcgfSwgbGFiZWxfdGV4dCApICk7XHJcblxyXG5cdFx0XHQvLyBhZGQgYSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgaG9zdCBzbyBib3RoIENTUyBhbmQgdGhlIHNhZmV0eS1uZXQgY2FuIHRhcmdldCBpdFxyXG5cdFx0XHR2YXIgaG9zdF9hdHRycyA9IHsgJ2NsYXNzJzogJ2luc3BlY3Rvcl9fY29udHJvbCcgfTtcclxuXHRcdFx0aWYgKCBjb250cm9sLnNsb3QgPT09ICdsYXlvdXRfY2hpcHMnICkgaG9zdF9hdHRyc1snZGF0YS1iZmItc2xvdCddID0gJ2xheW91dF9jaGlwcyc7XHJcblxyXG5cdFx0XHR2YXIgc2xvdF9ob3N0ID0gZWwoICdkaXYnLCBob3N0X2F0dHJzICk7XHJcblx0XHRcdHNsb3Rfcm93LmFwcGVuZENoaWxkKCBzbG90X2hvc3QgKTtcclxuXHJcblx0XHRcdHZhciBzbG90X2ZuID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV9zbG90c1tjb250cm9sLnNsb3RdO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBzbG90X2ZuID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHNsb3RfZm4oIHNsb3RfaG9zdCwgY3R4IHx8IHt9ICk7XHJcblx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCAnc2xvdCBcIicgKyBjb250cm9sLnNsb3QgKyAnXCIgZmFpbGVkOicsIGUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LCAwICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c2xvdF9ob3N0LmFwcGVuZENoaWxkKCBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3dwYmNfYmZiX19zbG90X19taXNzaW5nJyB9LCAnW3Nsb3Q6ICcgKyBjb250cm9sLnNsb3QgKyAnXScgKSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzbG90X3JvdztcclxuXHRcdH1cclxuXHJcblxyXG5cdFx0XHRpZiAoIHR5cGUgPT09ICd0ZXh0YXJlYScgKSB7XHJcblx0XHRcdFx0ZmllbGRfZWwgPSBlbCggJ3RleHRhcmVhJywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdHJvd3MgICAgICAgICAgICAgICAgOiBjb250cm9sLnJvd3MgfHwgMyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9LCAodmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKCB2YWx1ZSApKSApO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnc2VsZWN0JyApIHtcclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnc2VsZWN0Jywge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgOiAnaW5zcGVjdG9yX19pbnB1dCdcclxuXHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0bm9ybWFsaXplX3NlbGVjdF9vcHRpb25zKCBjb250cm9sLm9wdGlvbnMgfHwgW10gKS5mb3JFYWNoKCBmdW5jdGlvbiAob3B0KSB7XHJcblx0XHRcdFx0XHR2YXIgb3B0X2VsID0gZWwoICdvcHRpb24nLCB7IHZhbHVlOiBvcHQudmFsdWUgfSwgb3B0LmxhYmVsICk7XHJcblx0XHRcdFx0XHRpZiAoIFN0cmluZyggdmFsdWUgKSA9PT0gb3B0LnZhbHVlICkgb3B0X2VsLnNldEF0dHJpYnV0ZSggJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyApO1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwuYXBwZW5kQ2hpbGQoIG9wdF9lbCApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHRcdFx0XHQvLyBmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCB7IGlkOiBpbnB1dF9pZCwgdHlwZTogJ2NoZWNrYm94JywgJ2RhdGEtaW5zcGVjdG9yLWtleSc6IGtleSwgY2hlY2tlZDogISF2YWx1ZSwgJ2NsYXNzJzogJ2luc3BlY3Rvcl9faW5wdXQnIH0gKTsgLy8uXHJcblxyXG5cdFx0XHRcdC8vIFJlbmRlciBhcyB0b2dnbGUgVUkgaW5zdGVhZCBvZiBsYWJlbC1sZWZ0ICsgY2hlY2tib3guICBOb3RlOiB3ZSByZXR1cm4gdGhlIGZ1bGwgdG9nZ2xlIHJvdyBoZXJlIGFuZCBza2lwIHRoZSBkZWZhdWx0IHJvdy9sYWJlbCBmbG93IGJlbG93LlxyXG5cdFx0XHRcdHJldHVybiBidWlsZF90b2dnbGVfcm93KCBpbnB1dF9pZCwga2V5LCAhIXZhbHVlLCBsYWJlbF90ZXh0ICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAncmFuZ2VfbnVtYmVyJyApIHtcclxuXHRcdFx0XHQvLyAtLS0gbmV3OiBzbGlkZXIgKyBudW1iZXIgKHNpbmdsZSBrZXkpLlxyXG5cdFx0XHRcdHZhciBybl9pZCAgPSAnd3BiY19pbnNfJyArIGtleSArICdfJyArIHVpZDtcclxuXHRcdFx0XHR2YXIgcm5fdmFsID0gdmFsdWU7IC8vIGZyb20gZ2V0X2luaXRpYWxfdmFsdWUvcHJvcF9tZXRhIGFscmVhZHkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX3JhbmdlX251bWJlcl9yb3coIHJuX2lkLCBrZXksIGxhYmVsX3RleHQsIHJuX3ZhbCwgY29udHJvbCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gJ2xlbicgKSB7XHJcblx0XHRcdFx0Ly8gLS0tIG5ldzogbGVuZ3RoIGNvbXBvdW5kICh2YWx1ZSt1bml0K3NsaWRlciAtPiB3cml0ZXMgYSBzaW5nbGUgc3RyaW5nIGtleSkuXHJcblx0XHRcdFx0cmV0dXJuIGJ1aWxkX2xlbl9jb21wb3VuZF9yb3coIGNvbnRyb2wsIHByb3BzX3NjaGVtYSwgZGF0YSwgdWlkICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSAnY29sb3InICkge1xyXG5cdFx0XHRcdC8vIENvbG9yIHBpY2tlciAoQ29sb3JpcykuIFN0b3JlIGFzIHN0cmluZyAoZS5nLiwgXCIjZTBlMGUwXCIpLlxyXG5cdFx0XHRcdGZpZWxkX2VsID0gZWwoICdpbnB1dCcsIHtcclxuXHRcdFx0XHRcdGlkICAgICAgICAgICAgICAgICAgIDogaW5wdXRfaWQsXHJcblx0XHRcdFx0XHR0eXBlICAgICAgICAgICAgICAgICA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknIDoga2V5LFxyXG5cdFx0XHRcdFx0J2RhdGEtaW5zcGVjdG9yLXR5cGUnOiAnY29sb3InLFxyXG5cdFx0XHRcdFx0J2RhdGEtY29sb3JpcycgICAgICAgOiAnJyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnLFxyXG5cdFx0XHRcdFx0J2RhdGEtZGVmYXVsdC1jb2xvcicgOiAoIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gU3RyaW5nKHZhbHVlKSA6IChjb250cm9sLnBsYWNlaG9sZGVyIHx8ICcnKSApXHJcblx0XHRcdFx0fSApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkge1xyXG5cdFx0XHRcdFx0ZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIHRleHQvbnVtYmVyIGRlZmF1bHQuXHJcblx0XHRcdFx0dmFyIGF0dHJzID0ge1xyXG5cdFx0XHRcdFx0aWQgICAgICAgICAgICAgICAgICA6IGlucHV0X2lkLFxyXG5cdFx0XHRcdFx0dHlwZSAgICAgICAgICAgICAgICA6ICh0eXBlID09PSAnbnVtYmVyJykgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcclxuXHRcdFx0XHRcdCdkYXRhLWluc3BlY3Rvci1rZXknOiBrZXksXHJcblx0XHRcdFx0XHQnY2xhc3MnICAgICAgICAgICAgIDogJ2luc3BlY3Rvcl9faW5wdXQnXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0Ly8gbnVtYmVyIGNvbnN0cmFpbnRzIChzY2hlbWEgb3IgY29udHJvbClcclxuXHRcdFx0XHRpZiAoIHR5cGUgPT09ICdudW1iZXInICkge1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHByb3BfbWV0YSwgJ21pbicgKSApIGF0dHJzLm1pbiA9IHByb3BfbWV0YS5taW47XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcHJvcF9tZXRhLCAnbWF4JyApICkgYXR0cnMubWF4ID0gcHJvcF9tZXRhLm1heDtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwcm9wX21ldGEsICdzdGVwJyApICkgYXR0cnMuc3RlcCA9IHByb3BfbWV0YS5zdGVwO1xyXG5cdFx0XHRcdFx0aWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIGNvbnRyb2wsICdtaW4nICkgKSBhdHRycy5taW4gPSBjb250cm9sLm1pbjtcclxuXHRcdFx0XHRcdGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBjb250cm9sLCAnbWF4JyApICkgYXR0cnMubWF4ID0gY29udHJvbC5tYXg7XHJcblx0XHRcdFx0XHRpZiAoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggY29udHJvbCwgJ3N0ZXAnICkgKSBhdHRycy5zdGVwID0gY29udHJvbC5zdGVwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmaWVsZF9lbCA9IGVsKCAnaW5wdXQnLCBhdHRycyApO1xyXG5cdFx0XHRcdGlmICggdmFsdWUgIT09ICcnICkgZmllbGRfZWwudmFsdWUgPSBTdHJpbmcoIHZhbHVlICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGN0cmxfd3JhcC5hcHBlbmRDaGlsZCggZmllbGRfZWwgKTtcclxuXHRcdFx0cm93X2VsLmFwcGVuZENoaWxkKCBsYWJlbF9lbCApO1xyXG5cdFx0XHRyb3dfZWwuYXBwZW5kQ2hpbGQoIGN0cmxfd3JhcCApO1xyXG5cdFx0XHRyZXR1cm4gcm93X2VsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2NoZW1hID4gSW5zcGVjdG9yID4gR3JvdXBzISBCdWlsZCBhbiBpbnNwZWN0b3IgZ3JvdXAgKGNvbGxhcHNpYmxlKS5cclxuXHRcdCAqIFN0cnVjdHVyZTpcclxuXHRcdCAqIDxzZWN0aW9uIGNsYXNzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9fZ3JvdXAgd3BiY191aV9fY29sbGFwc2libGVfZ3JvdXAgaXMtb3BlblwiIGRhdGEtZ3JvdXA9XCIuLi5cIj5cclxuXHRcdCAqICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cF9faGVhZGVyXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCIgYXJpYS1jb250cm9scz1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiPlxyXG5cdFx0ICogICAgIDxoMz5Hcm91cCBUaXRsZTwvaDM+XHJcblx0XHQgKiAgICAgPGkgY2xhc3M9XCJ3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxyXG5cdFx0ICogICA8L2J1dHRvbj5cclxuXHRcdCAqICAgPGRpdiBjbGFzcz1cImdyb3VwX19maWVsZHNcIiBpZD1cIndwYmNfY29sbGFwc2libGVfcGFuZWxfWFwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIj4g4oCmcm93c+KApiA8L2Rpdj5cclxuXHRcdCAqIDwvc2VjdGlvbj5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZ3JvdXBcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc19zY2hlbWFcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdWlkXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gY3R4XHJcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGJ1aWxkX2dyb3VwKGdyb3VwLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4KSB7XHJcblx0XHRcdHZhciBpc19vcGVuICA9ICEhZ3JvdXAub3BlbjtcclxuXHRcdFx0dmFyIHBhbmVsX2lkID0gJ3dwYmNfY29sbGFwc2libGVfcGFuZWxfJyArIHVpZCArICdfJyArIChncm91cC5rZXkgfHwgJ2cnKTtcclxuXHJcblx0XHRcdHZhciBzZWN0aW9uID0gZWwoICdzZWN0aW9uJywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgIDogJ3dwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwIHdwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyArIChpc19vcGVuID8gJyBpcy1vcGVuJyA6ICcnKSxcclxuXHRcdFx0XHQnZGF0YS1ncm91cCc6IGdyb3VwLmtleSB8fCAnJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR2YXIgaGVhZGVyX2J0biA9IGVsKCAnYnV0dG9uJywge1xyXG5cdFx0XHRcdHR5cGUgICAgICAgICAgIDogJ2J1dHRvbicsXHJcblx0XHRcdFx0J2NsYXNzJyAgICAgICAgOiAnZ3JvdXBfX2hlYWRlcicsXHJcblx0XHRcdFx0cm9sZSAgICAgICAgICAgOiAnYnV0dG9uJyxcclxuXHRcdFx0XHQnYXJpYS1leHBhbmRlZCc6IGlzX29wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxyXG5cdFx0XHRcdCdhcmlhLWNvbnRyb2xzJzogcGFuZWxfaWRcclxuXHRcdFx0fSwgW1xyXG5cdFx0XHRcdGVsKCAnaDMnLCBudWxsLCBncm91cC50aXRsZSB8fCBncm91cC5sYWJlbCB8fCBncm91cC5rZXkgfHwgJycgKSxcclxuXHRcdFx0XHRlbCggJ2knLCB7ICdjbGFzcyc6ICd3cGJjX3VpX2VsX192ZXJ0X21lbnVfcm9vdF9zZWN0aW9uX2ljb24gbWVudV9pY29uIGljb24tMXggd3BiYy1iaS1jaGV2cm9uLXJpZ2h0JyB9IClcclxuXHRcdFx0XSApO1xyXG5cclxuXHRcdFx0dmFyIGZpZWxkcyA9IGVsKCAnZGl2Jywge1xyXG5cdFx0XHRcdCdjbGFzcycgICAgICA6ICdncm91cF9fZmllbGRzJyxcclxuXHRcdFx0XHRpZCAgICAgICAgICAgOiBwYW5lbF9pZCxcclxuXHRcdFx0XHQnYXJpYS1oaWRkZW4nOiBpc19vcGVuID8gJ2ZhbHNlJyA6ICd0cnVlJ1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBhc0FycmF5KHgpIHtcclxuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHggKSApIHJldHVybiB4O1xyXG5cdFx0XHRcdGlmICggeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgKSByZXR1cm4gT2JqZWN0LnZhbHVlcyggeCApO1xyXG5cdFx0XHRcdHJldHVybiB4ICE9IG51bGwgPyBbIHggXSA6IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhc0FycmF5KCBncm91cC5jb250cm9scyApLmZvckVhY2goIGZ1bmN0aW9uIChjb250cm9sKSB7XHJcblx0XHRcdFx0ZmllbGRzLmFwcGVuZENoaWxkKCBidWlsZF9jb250cm9sKCBjb250cm9sLCBwcm9wc19zY2hlbWEsIGRhdGEsIHVpZCwgY3R4ICkgKTtcclxuXHRcdFx0fSApO1xyXG5cclxuXHRcdFx0c2VjdGlvbi5hcHBlbmRDaGlsZCggaGVhZGVyX2J0biApO1xyXG5cdFx0XHRzZWN0aW9uLmFwcGVuZENoaWxkKCBmaWVsZHMgKTtcclxuXHRcdFx0cmV0dXJuIHNlY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTY2hlbWEgPiBJbnNwZWN0b3IgPiBIZWFkZXIhIEJ1aWxkIGluc3BlY3RvciBoZWFkZXIgd2l0aCBhY3Rpb24gYnV0dG9ucyB3aXJlZCB0byBleGlzdGluZyBkYXRhLWFjdGlvbiBoYW5kbGVycy5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGhlYWRlcl9hY3Rpb25zXHJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIHRpdGxlX3RleHRcclxuXHRcdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gYnVpbGRfaGVhZGVyKGluc3BlY3Rvcl91aSwgdGl0bGVfZmFsbGJhY2ssIHNjaGVtYV9mb3JfdHlwZSkge1xyXG5cclxuXHRcdFx0aW5zcGVjdG9yX3VpICAgICAgPSBpbnNwZWN0b3JfdWkgfHwge307XHJcblx0XHRcdHNjaGVtYV9mb3JfdHlwZSAgID0gc2NoZW1hX2Zvcl90eXBlIHx8IHt9O1xyXG5cdFx0XHR2YXIgdmFyaWFudCAgICAgICA9IGluc3BlY3Rvcl91aS5oZWFkZXJfdmFyaWFudCB8fCAnbWluaW1hbCc7XHJcblx0XHRcdHZhciBoZWFkZXJBY3Rpb25zID0gaW5zcGVjdG9yX3VpLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgc2NoZW1hX2Zvcl90eXBlLmhlYWRlcl9hY3Rpb25zXHJcblx0XHRcdFx0fHwgWyAnZGVzZWxlY3QnLCAnc2Nyb2xsdG8nLCAnbW92ZS11cCcsICdtb3ZlLWRvd24nLCAnZHVwbGljYXRlJywgJ2RlbGV0ZScgXTtcclxuXHJcblx0XHRcdHZhciB0aXRsZSAgICAgICA9IGluc3BlY3Rvcl91aS50aXRsZSB8fCB0aXRsZV9mYWxsYmFjayB8fCAnJztcclxuXHRcdFx0dmFyIGRlc2NyaXB0aW9uID0gaW5zcGVjdG9yX3VpLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG5cclxuXHRcdFx0Ly8gaGVscGVyIHRvIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgZWl0aGVyIGhlYWRlciBzdHlsZVxyXG5cdFx0XHRmdW5jdGlvbiBhY3Rpb25CdG4oYWN0LCBtaW5pbWFsKSB7XHJcblx0XHRcdFx0aWYgKCBtaW5pbWFsICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsKCAnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgJ2NsYXNzJzogJ2J1dHRvbi1saW5rJywgJ2RhdGEtYWN0aW9uJzogYWN0IH0sICcnICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIHRvb2xiYXIgdmFyaWFudCAocmljaClcclxuXHRcdFx0XHR2YXIgaWNvbk1hcCA9IHtcclxuXHRcdFx0XHRcdCdkZXNlbGVjdCcgOiAnd3BiY19pY25fbmVhcl9tZV9kaXNhYmxlZCcsXHJcblx0XHRcdFx0XHQnc2Nyb2xsdG8nIDogJ3dwYmNfaWNuX2Fkc19jbGljayBmaWx0ZXJfY2VudGVyX2ZvY3VzJyxcclxuXHRcdFx0XHRcdCdtb3ZlLXVwJyAgOiAnd3BiY19pY25fYXJyb3dfdXB3YXJkJyxcclxuXHRcdFx0XHRcdCdtb3ZlLWRvd24nOiAnd3BiY19pY25fYXJyb3dfZG93bndhcmQnLFxyXG5cdFx0XHRcdFx0J2R1cGxpY2F0ZSc6ICd3cGJjX2ljbl9jb250ZW50X2NvcHknLFxyXG5cdFx0XHRcdFx0J2RlbGV0ZScgICA6ICd3cGJjX2ljbl9kZWxldGVfb3V0bGluZSdcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhciBjbGFzc2VzID0gJ2J1dHRvbiBidXR0b24tc2Vjb25kYXJ5IHdwYmNfdWlfY29udHJvbCB3cGJjX3VpX2J1dHRvbic7XHJcblx0XHRcdFx0aWYgKCBhY3QgPT09ICdkZWxldGUnICkgY2xhc3NlcyArPSAnIHdwYmNfdWlfYnV0dG9uX2RhbmdlciBidXR0b24tbGluay1kZWxldGUnO1xyXG5cclxuXHRcdFx0XHR2YXIgYnRuID0gZWwoICdidXR0b24nLCB7XHJcblx0XHRcdFx0XHR0eXBlICAgICAgICAgOiAnYnV0dG9uJyxcclxuXHRcdFx0XHRcdCdjbGFzcycgICAgICA6IGNsYXNzZXMsXHJcblx0XHRcdFx0XHQnZGF0YS1hY3Rpb24nOiBhY3QsXHJcblx0XHRcdFx0XHQnYXJpYS1sYWJlbCcgOiBhY3QucmVwbGFjZSggLy0vZywgJyAnIClcclxuXHRcdFx0XHR9ICk7XHJcblxyXG5cdFx0XHRcdGlmICggYWN0ID09PSAnZGVsZXRlJyApIHtcclxuXHRcdFx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggZWwoICdzcGFuJywgeyAnY2xhc3MnOiAnaW4tYnV0dG9uLXRleHQnIH0sICdEZWxldGUnICkgKTtcclxuXHRcdFx0XHRcdGJ0bi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoICcgJyApICk7IC8vIG1pbm9yIHNwYWNpbmcgYmVmb3JlIGljb25cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnRuLmFwcGVuZENoaWxkKCBlbCggJ2knLCB7ICdjbGFzcyc6ICdtZW51X2ljb24gaWNvbi0xeCAnICsgKGljb25NYXBbYWN0XSB8fCAnJykgfSApICk7XHJcblx0XHRcdFx0cmV0dXJuIGJ0bjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gPT09IG1pbmltYWwgaGVhZGVyIChleGlzdGluZyBsb29rOyBkZWZhdWx0KSA9PT1cclxuXHRcdFx0aWYgKCB2YXJpYW50ICE9PSAndG9vbGJhcicgKSB7XHJcblx0XHRcdFx0dmFyIGhlYWRlciA9IGVsKCAnaGVhZGVyJywgeyAnY2xhc3MnOiAnd3BiY19iZmJfX2luc3BlY3Rvcl9faGVhZGVyJyB9ICk7XHJcblx0XHRcdFx0aGVhZGVyLmFwcGVuZENoaWxkKCBlbCggJ2gzJywgbnVsbCwgdGl0bGUgfHwgJycgKSApO1xyXG5cclxuXHRcdFx0XHR2YXIgYWN0aW9ucyA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAnd3BiY19iZmJfX2luc3BlY3Rvcl9faGVhZGVyX2FjdGlvbnMnIH0gKTtcclxuXHRcdFx0XHRoZWFkZXJBY3Rpb25zLmZvckVhY2goIGZ1bmN0aW9uIChhY3QpIHtcclxuXHRcdFx0XHRcdGFjdGlvbnMuYXBwZW5kQ2hpbGQoIGFjdGlvbkJ0biggYWN0LCAvKm1pbmltYWwqL3RydWUgKSApO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRoZWFkZXIuYXBwZW5kQ2hpbGQoIGFjdGlvbnMgKTtcclxuXHRcdFx0XHRyZXR1cm4gaGVhZGVyO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyA9PT0gdG9vbGJhciBoZWFkZXIgKHJpY2ggdGl0bGUvZGVzYyArIGdyb3VwZWQgYnV0dG9ucykgPT09XHJcblx0XHRcdHZhciByb290ID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd3cGJjX2JmYl9faW5zcGVjdG9yX19oZWFkJyB9ICk7XHJcblx0XHRcdHZhciB3cmFwID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdoZWFkZXJfY29udGFpbmVyJyB9ICk7XHJcblx0XHRcdHZhciBsZWZ0ID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdoZWFkZXJfdGl0bGVfY29udGVudCcgfSApO1xyXG5cdFx0XHR2YXIgaDMgICA9IGVsKCAnaDMnLCB7ICdjbGFzcyc6ICd0aXRsZScgfSwgdGl0bGUgfHwgJycgKTtcclxuXHRcdFx0bGVmdC5hcHBlbmRDaGlsZCggaDMgKTtcclxuXHRcdFx0aWYgKCBkZXNjcmlwdGlvbiApIHtcclxuXHRcdFx0XHRsZWZ0LmFwcGVuZENoaWxkKCBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ2Rlc2MnIH0sIGRlc2NyaXB0aW9uICkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHJpZ2h0ID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICdhY3Rpb25zIHdwYmNfYWp4X3Rvb2xiYXIgd3BiY19ub19ib3JkZXJzJyB9ICk7XHJcblx0XHRcdHZhciB1aUMgICA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfY29udGFpbmVyIHVpX2NvbnRhaW5lcl9zbWFsbCcgfSApO1xyXG5cdFx0XHR2YXIgdWlHICAgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2dyb3VwJyB9ICk7XHJcblxyXG5cdFx0XHQvLyBTcGxpdCBpbnRvIHZpc3VhbCBncm91cHM6IGZpcnN0IDIsIG5leHQgMiwgdGhlbiB0aGUgcmVzdC5cclxuXHRcdFx0dmFyIGcxID0gZWwoICdkaXYnLCB7ICdjbGFzcyc6ICd1aV9lbGVtZW50JyB9ICk7XHJcblx0XHRcdHZhciBnMiA9IGVsKCAnZGl2JywgeyAnY2xhc3MnOiAndWlfZWxlbWVudCcgfSApO1xyXG5cdFx0XHR2YXIgZzMgPSBlbCggJ2RpdicsIHsgJ2NsYXNzJzogJ3VpX2VsZW1lbnQnIH0gKTtcclxuXHJcblx0XHRcdGhlYWRlckFjdGlvbnMuc2xpY2UoIDAsIDIgKS5mb3JFYWNoKCBmdW5jdGlvbiAoYWN0KSB7XHJcblx0XHRcdFx0ZzEuYXBwZW5kQ2hpbGQoIGFjdGlvbkJ0biggYWN0LCBmYWxzZSApICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdFx0aGVhZGVyQWN0aW9ucy5zbGljZSggMiwgNCApLmZvckVhY2goIGZ1bmN0aW9uIChhY3QpIHtcclxuXHRcdFx0XHRnMi5hcHBlbmRDaGlsZCggYWN0aW9uQnRuKCBhY3QsIGZhbHNlICkgKTtcclxuXHRcdFx0fSApO1xyXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnNsaWNlKCA0ICkuZm9yRWFjaCggZnVuY3Rpb24gKGFjdCkge1xyXG5cdFx0XHRcdGczLmFwcGVuZENoaWxkKCBhY3Rpb25CdG4oIGFjdCwgZmFsc2UgKSApO1xyXG5cdFx0XHR9ICk7XHJcblxyXG5cdFx0XHR1aUcuYXBwZW5kQ2hpbGQoIGcxICk7XHJcblx0XHRcdHVpRy5hcHBlbmRDaGlsZCggZzIgKTtcclxuXHRcdFx0dWlHLmFwcGVuZENoaWxkKCBnMyApO1xyXG5cdFx0XHR1aUMuYXBwZW5kQ2hpbGQoIHVpRyApO1xyXG5cdFx0XHRyaWdodC5hcHBlbmRDaGlsZCggdWlDICk7XHJcblxyXG5cdFx0XHR3cmFwLmFwcGVuZENoaWxkKCBsZWZ0ICk7XHJcblx0XHRcdHdyYXAuYXBwZW5kQ2hpbGQoIHJpZ2h0ICk7XHJcblx0XHRcdHJvb3QuYXBwZW5kQ2hpbGQoIHdyYXAgKTtcclxuXHJcblx0XHRcdHJldHVybiByb290O1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRmdW5jdGlvbiBmYWN0b3J5X3JlbmRlcihwYW5lbF9lbCwgc2NoZW1hX2Zvcl90eXBlLCBkYXRhLCBvcHRzKSB7XHJcblx0XHRcdGlmICggIXBhbmVsX2VsICkgcmV0dXJuIHBhbmVsX2VsO1xyXG5cclxuXHRcdFx0c2NoZW1hX2Zvcl90eXBlICA9IHNjaGVtYV9mb3JfdHlwZSB8fCB7fTtcclxuXHRcdFx0dmFyIHByb3BzX3NjaGVtYSA9IChzY2hlbWFfZm9yX3R5cGUuc2NoZW1hICYmIHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEucHJvcHMpID8gc2NoZW1hX2Zvcl90eXBlLnNjaGVtYS5wcm9wcyA6IHt9O1xyXG5cdFx0XHR2YXIgaW5zcGVjdG9yX3VpID0gKHNjaGVtYV9mb3JfdHlwZS5pbnNwZWN0b3JfdWkgfHwge30pO1xyXG5cdFx0XHR2YXIgZ3JvdXBzICAgICAgID0gaW5zcGVjdG9yX3VpLmdyb3VwcyB8fCBbXTtcclxuXHJcblx0XHRcdHZhciBoZWFkZXJfYWN0aW9ucyA9IGluc3BlY3Rvcl91aS5oZWFkZXJfYWN0aW9ucyB8fCBzY2hlbWFfZm9yX3R5cGUuaGVhZGVyX2FjdGlvbnMgfHwgW107XHJcblx0XHRcdHZhciB0aXRsZV90ZXh0ICAgICA9IChvcHRzICYmIG9wdHMudGl0bGUpIHx8IGluc3BlY3Rvcl91aS50aXRsZSB8fCBzY2hlbWFfZm9yX3R5cGUubGFiZWwgfHwgKGRhdGEgJiYgZGF0YS5sYWJlbCkgfHwgJyc7XHJcblxyXG5cdFx0Ly8gUHJlcGFyZSByZW5kZXJpbmcgY29udGV4dCBmb3Igc2xvdHMvdmFsdWVfZnJvbSwgZXRjLlxyXG5cdFx0XHR2YXIgY3R4ID0ge1xyXG5cdFx0XHRcdGVsICAgICA6IG9wdHMgJiYgb3B0cy5lbCB8fCBudWxsLFxyXG5cdFx0XHRcdGJ1aWxkZXI6IG9wdHMgJiYgb3B0cy5idWlsZGVyIHx8IG51bGwsXHJcblx0XHRcdFx0dHlwZSAgIDogb3B0cyAmJiBvcHRzLnR5cGUgfHwgbnVsbCxcclxuXHRcdFx0XHRkYXRhICAgOiBkYXRhIHx8IHt9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLyBjbGVhciBwYW5lbC5cclxuXHRcdFx0d2hpbGUgKCBwYW5lbF9lbC5maXJzdENoaWxkICkgcGFuZWxfZWwucmVtb3ZlQ2hpbGQoIHBhbmVsX2VsLmZpcnN0Q2hpbGQgKTtcclxuXHJcblx0XHRcdHZhciB1aWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCAzNiApLnNsaWNlKCAyLCA4ICk7XHJcblxyXG5cdFx0XHQvLyBoZWFkZXIuXHJcblx0XHRcdHBhbmVsX2VsLmFwcGVuZENoaWxkKCBidWlsZF9oZWFkZXIoIGluc3BlY3Rvcl91aSwgdGl0bGVfdGV4dCwgc2NoZW1hX2Zvcl90eXBlICkgKTtcclxuXHJcblxyXG5cdFx0XHQvLyBncm91cHMuXHJcblx0XHRcdGdyb3Vwcy5mb3JFYWNoKCBmdW5jdGlvbiAoZykge1xyXG5cdFx0XHRcdHBhbmVsX2VsLmFwcGVuZENoaWxkKCBidWlsZF9ncm91cCggZywgcHJvcHNfc2NoZW1hLCBkYXRhIHx8IHt9LCB1aWQsIGN0eCApICk7XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdC8vIEFSSUEgc3luYyBmb3IgdG9nZ2xlcyBjcmVhdGVkIGhlcmUgKGVuc3VyZSBhcmlhLWNoZWNrZWQgbWF0Y2hlcyBzdGF0ZSkuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Ly8gQ2VudHJhbGl6ZWQgVUkgbm9ybWFsaXplcnMgKHRvZ2dsZXMgKyBBMTF5KTogaGFuZGxlZCBpbiBDb3JlLlxyXG5cdFx0XHRcdFVJLmFwcGx5X3Bvc3RfcmVuZGVyKCBwYW5lbF9lbCApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR3aXJlX2xlbl9ncm91cCggcGFuZWxfZWwgKTtcclxuXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgQ29sb3JpcyBvbiBjb2xvciBpbnB1dHMgcmVuZGVyZWQgaW4gdGhpcyBwYW5lbC5cclxuXHRcdFx0XHRcdGluaXRfY29sb3Jpc19waWNrZXJzKCBwYW5lbF9lbCApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBfICkgeyB9XHJcblx0XHRcdH0gY2F0Y2ggKCBfICkgeyB9XHJcblxyXG5cdFx0XHRyZXR1cm4gcGFuZWxfZWw7XHJcblx0XHR9XHJcblxyXG5cdFx0VUkuV1BCQ19CRkJfSW5zcGVjdG9yX0ZhY3RvcnkgPSB7IHJlbmRlcjogZmFjdG9yeV9yZW5kZXIgfTsgICAvLyBvdmVyd3JpdGUvcmVmcmVzaFxyXG5cclxuXHRcdC8vIC0tLS0gQnVpbHQtaW4gc2xvdCArIHZhbHVlX2Zyb20gZm9yIFNlY3Rpb25zIC0tLS1cclxuXHJcblx0XHRmdW5jdGlvbiBzbG90X2xheW91dF9jaGlwcyhob3N0LCBjdHgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YXIgTCA9IHcuV1BCQ19CRkJfQ29yZSAmJiAgdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHM7XHJcblx0XHRcdFx0aWYgKCBMICYmIHR5cGVvZiBMLnJlbmRlcl9mb3Jfc2VjdGlvbiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdEwucmVuZGVyX2Zvcl9zZWN0aW9uKCBjdHguYnVpbGRlciwgY3R4LmVsLCBob3N0ICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGhvc3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCAnW2xheW91dF9jaGlwcyBub3QgYXZhaWxhYmxlXScgKSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCAnd3BiY19iZmJfc2xvdF9sYXlvdXRfY2hpcHMgZmFpbGVkOicsIGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3Rvcnlfc2xvdHMubGF5b3V0X2NoaXBzID0gc2xvdF9sYXlvdXRfY2hpcHM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gdmFsdWVfZnJvbV9jb21wdXRlX3NlY3Rpb25fY29sdW1ucyhjdHgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YXIgcm93ID0gY3R4ICYmIGN0eC5lbCAmJiBjdHguZWwucXVlcnlTZWxlY3RvciAmJiBjdHguZWwucXVlcnlTZWxlY3RvciggJzpzY29wZSA+IC53cGJjX2JmYl9fcm93JyApO1xyXG5cdFx0XHRcdGlmICggIXJvdyApIHJldHVybiAxO1xyXG5cdFx0XHRcdHZhciBuID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoICc6c2NvcGUgPiAud3BiY19iZmJfX2NvbHVtbicgKS5sZW5ndGggfHwgMTtcclxuXHRcdFx0XHRpZiAoIG4gPCAxICkgbiA9IDE7XHJcblx0XHRcdFx0aWYgKCBuID4gNCApIG4gPSA0O1xyXG5cdFx0XHRcdHJldHVybiBuO1xyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbS5jb21wdXRlX3NlY3Rpb25fY29sdW1ucyA9IHZhbHVlX2Zyb21fY29tcHV0ZV9zZWN0aW9uX2NvbHVtbnM7XHJcblx0fVxyXG5cclxuXHQvLyAzKSBJbnNwZWN0b3IgY2xhc3MuXHJcblxyXG5cdGNsYXNzIFdQQkNfQkZCX0luc3BlY3RvciB7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocGFuZWxfZWwsIGJ1aWxkZXIpIHtcclxuXHRcdFx0dGhpcy5wYW5lbCAgICAgICAgID0gcGFuZWxfZWwgfHwgdGhpcy5fY3JlYXRlX2ZhbGxiYWNrX3BhbmVsKCk7XHJcblx0XHRcdHRoaXMuYnVpbGRlciAgICAgICA9IGJ1aWxkZXI7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRfZWwgICA9IG51bGw7XHJcblx0XHRcdHRoaXMuX3JlbmRlcl90aW1lciA9IG51bGw7XHJcblxyXG5cdFx0XHR0aGlzLl9vbl9kZWxlZ2F0ZWRfaW5wdXQgID0gKGUpID0+IHRoaXMuX2FwcGx5X2NvbnRyb2xfZnJvbV9ldmVudCggZSApO1xyXG5cdFx0XHR0aGlzLl9vbl9kZWxlZ2F0ZWRfY2hhbmdlID0gKGUpID0+IHRoaXMuX2FwcGx5X2NvbnRyb2xfZnJvbV9ldmVudCggZSApO1xyXG5cdFx0XHR0aGlzLnBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dCcsIHRoaXMuX29uX2RlbGVnYXRlZF9pbnB1dCwgdHJ1ZSApO1xyXG5cdFx0XHR0aGlzLnBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCB0aGlzLl9vbl9kZWxlZ2F0ZWRfY2hhbmdlLCB0cnVlICk7XHJcblxyXG5cdFx0XHR0aGlzLl9vbl9kZWxlZ2F0ZWRfY2xpY2sgPSAoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoICdbZGF0YS1hY3Rpb25dJyApO1xyXG5cdFx0XHRcdGlmICggIWJ0biB8fCAhdGhpcy5wYW5lbC5jb250YWlucyggYnRuICkgKSByZXR1cm47XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGJ0bi5nZXRBdHRyaWJ1dGUoICdkYXRhLWFjdGlvbicgKTtcclxuXHRcdFx0XHRjb25zdCBlbCAgICAgPSB0aGlzLnNlbGVjdGVkX2VsO1xyXG5cdFx0XHRcdGlmICggIWVsICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHR3LldQQkNfQkZCX0luc3BlY3Rvcl9BY3Rpb25zPy5ydW4oIGFjdGlvbiwge1xyXG5cdFx0XHRcdFx0YnVpbGRlcjogdGhpcy5idWlsZGVyLFxyXG5cdFx0XHRcdFx0ZWwsXHJcblx0XHRcdFx0XHRwYW5lbCAgOiB0aGlzLnBhbmVsLFxyXG5cdFx0XHRcdFx0ZXZlbnQgIDogZVxyXG5cdFx0XHRcdH0gKTtcclxuXHJcblx0XHRcdFx0aWYgKCBhY3Rpb24gPT09ICdkZWxldGUnICkgdGhpcy5jbGVhcigpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLnBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuX29uX2RlbGVnYXRlZF9jbGljayApO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9wb3N0X3JlbmRlcl91aSgpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YXIgVUkgPSB3LldQQkNfQkZCX0NvcmUgJiYgdy5XUEJDX0JGQl9Db3JlLlVJO1xyXG5cdFx0XHRcdGlmICggVUkgJiYgdHlwZW9mIFVJLmFwcGx5X3Bvc3RfcmVuZGVyID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0VUkuYXBwbHlfcG9zdF9yZW5kZXIoIHRoaXMucGFuZWwgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gTkVXOiB3aXJlIHNsaWRlci9udW1iZXIvdW5pdCBzeW5jaW5nIGZvciBsZW5ndGggJiByYW5nZV9udW1iZXIgZ3JvdXBzLlxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR3aXJlX2xlbl9ncm91cCggdGhpcy5wYW5lbCApO1xyXG5cdFx0XHRcdFx0aW5pdF9jb2xvcmlzX3BpY2tlcnMoIHRoaXMucGFuZWwgKTtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdF93cGJjPy5kZXY/LmVycm9yPy4oICdpbnNwZWN0b3IuX3Bvc3RfcmVuZGVyX3VpJywgZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdF9hcHBseV9jb250cm9sX2Zyb21fZXZlbnQoZSkge1xyXG5cdFx0XHRpZiAoICF0aGlzLnBhbmVsLmNvbnRhaW5zKCBlLnRhcmdldCApICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgdCAgID0gLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR8SFRNTFNlbGVjdEVsZW1lbnR9ICovIChlLnRhcmdldCk7XHJcblx0XHRcdGNvbnN0IGtleSA9IHQ/LmRhdGFzZXQ/Lmluc3BlY3RvcktleTtcclxuXHRcdFx0aWYgKCAha2V5ICkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgZWwgPSB0aGlzLnNlbGVjdGVkX2VsO1xyXG5cdFx0XHRpZiAoICFlbCB8fCAhZG9jdW1lbnQuYm9keS5jb250YWlucyggZWwgKSApIHJldHVybjtcclxuXHJcblx0XHRcdGxldCB2O1xyXG5cdFx0XHRpZiAoIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHQudHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcclxuXHRcdFx0XHR2ID0gISF0LmNoZWNrZWQ7XHJcblx0XHRcdFx0dC5zZXRBdHRyaWJ1dGUoICdhcmlhLWNoZWNrZWQnLCB2ID8gJ3RydWUnIDogJ2ZhbHNlJyApOyAgICAgICAgIC8vIEtlZXAgQVJJQSBzdGF0ZSBpbiBzeW5jIGZvciB0b2dnbGVzIChzY2hlbWEgYW5kIHRlbXBsYXRlIHBhdGhzKS5cclxuXHRcdFx0fSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdC50eXBlID09PSAnbnVtYmVyJyApIHtcclxuXHRcdFx0XHR2ID0gKHQudmFsdWUgPT09ICcnID8gJycgOiBOdW1iZXIoIHQudmFsdWUgKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0diA9IHQudmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICgga2V5ID09PSAnaWQnICkge1xyXG5cdFx0XHRcdGNvbnN0IHVuaXF1ZSA9IHRoaXMuYnVpbGRlcj8uaWQ/LnNldF9maWVsZF9pZD8uKCBlbCwgdiApO1xyXG5cdFx0XHRcdGlmICggdW5pcXVlICE9IG51bGwgJiYgdC52YWx1ZSAhPT0gdW5pcXVlICkgdC52YWx1ZSA9IHVuaXF1ZTtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gJ25hbWUnICkge1xyXG5cdFx0XHRcdGNvbnN0IHVuaXF1ZSA9IHRoaXMuYnVpbGRlcj8uaWQ/LnNldF9maWVsZF9uYW1lPy4oIGVsLCB2ICk7XHJcblx0XHRcdFx0aWYgKCB1bmlxdWUgIT0gbnVsbCAmJiB0LnZhbHVlICE9PSB1bmlxdWUgKSB0LnZhbHVlID0gdW5pcXVlO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICgga2V5ID09PSAnaHRtbF9pZCcgKSB7XHJcblx0XHRcdFx0Y29uc3QgYXBwbGllZCA9IHRoaXMuYnVpbGRlcj8uaWQ/LnNldF9maWVsZF9odG1sX2lkPy4oIGVsLCB2ICk7XHJcblx0XHRcdFx0aWYgKCBhcHBsaWVkICE9IG51bGwgJiYgdC52YWx1ZSAhPT0gYXBwbGllZCApIHQudmFsdWUgPSBhcHBsaWVkO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICgga2V5ID09PSAnY29sdW1ucycgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0Y29uc3Qgdl9pbnQgPSBwYXJzZUludCggU3RyaW5nKCB2ICksIDEwICk7XHJcblx0XHRcdFx0aWYgKCBOdW1iZXIuaXNGaW5pdGUoIHZfaW50ICkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjbGFtcGVkID0gdy5XUEJDX0JGQl9Db3JlLldQQkNfQkZCX1Nhbml0aXplLmNsYW1wKCB2X2ludCwgMSwgNCApO1xyXG5cdFx0XHRcdFx0dGhpcy5idWlsZGVyPy5zZXRfc2VjdGlvbl9jb2x1bW5zPy4oIGVsLCBjbGFtcGVkICk7XHJcblx0XHRcdFx0XHRpZiAoIFN0cmluZyggY2xhbXBlZCApICE9PSB0LnZhbHVlICkgdC52YWx1ZSA9IFN0cmluZyggY2xhbXBlZCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKCB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiB0LnR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXksIFN0cmluZyggISF2ICkgKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiB0LnR5cGUgPT09ICdudW1iZXInICkge1xyXG5cdFx0XHRcdFx0aWYgKCB0LnZhbHVlID09PSAnJyB8fCAhTnVtYmVyLmlzRmluaXRlKCB2ICkgKSB7XHJcblx0XHRcdFx0XHRcdGVsLnJlbW92ZUF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlKCAnZGF0YS0nICsga2V5LCBTdHJpbmcoIHYgKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHYgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdGVsLnJlbW92ZUF0dHJpYnV0ZSggJ2RhdGEtJyArIGtleSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoICdkYXRhLScgKyBrZXksICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpID8gSlNPTi5zdHJpbmdpZnkoIHYgKSA6IFN0cmluZyggdiApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgcHJldmlldy9vdmVybGF5XHJcblx0XHRcdGlmICggZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX2ZpZWxkJyApICkge1xyXG5cdFx0XHRcdGlmICggdGhpcy5idWlsZGVyPy5wcmV2aWV3X21vZGUgKSB0aGlzLmJ1aWxkZXIucmVuZGVyX3ByZXZpZXcoIGVsICk7XHJcblx0XHRcdFx0ZWxzZSB0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhciggZWwgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmJ1aWxkZXIuYWRkX292ZXJsYXlfdG9vbGJhciggZWwgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB0aGlzLl9uZWVkc19yZXJlbmRlciggZWwsIGtleSwgZSApICkge1xyXG5cdFx0XHRcdHRoaXMuX3NjaGVkdWxlX3JlbmRlcl9wcmVzZXJ2aW5nX2ZvY3VzKCAwICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRfbmVlZHNfcmVyZW5kZXIoZWwsIGtleSwgX2UpIHtcclxuXHRcdFx0aWYgKCBlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fc2VjdGlvbicgKSAmJiBrZXkgPT09ICdjb2x1bW5zJyApIHJldHVybiB0cnVlO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0YmluZF90b19maWVsZChmaWVsZF9lbCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkX2VsID0gZmllbGRfZWw7XHJcblx0XHRcdHRoaXMucmVuZGVyKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y2xlYXIoKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRfZWwgPSBudWxsO1xyXG5cdFx0XHRpZiAoIHRoaXMuX3JlbmRlcl90aW1lciApIHtcclxuXHRcdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMuX3JlbmRlcl90aW1lciApO1xyXG5cdFx0XHRcdHRoaXMuX3JlbmRlcl90aW1lciA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQWxzbyBjbGVhciB0aGUgc2VjdGlvbi1jb2xzIGhpbnQgb24gZW1wdHkgc3RhdGUuXHJcblx0XHRcdHRoaXMucGFuZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWJmYi1zZWN0aW9uLWNvbHMnKTtcclxuXHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIndwYmNfYmZiX19pbnNwZWN0b3JfX2VtcHR5XCI+U2VsZWN0IGEgZmllbGQgdG8gZWRpdCBpdHMgb3B0aW9ucy48L2Rpdj4nO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9zY2hlZHVsZV9yZW5kZXJfcHJlc2VydmluZ19mb2N1cyhkZWxheSA9IDIwMCkge1xyXG5cdFx0XHRjb25zdCBhY3RpdmUgICAgPSAvKiogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnR8SFRNTFRleHRBcmVhRWxlbWVudHxIVE1MRWxlbWVudHxudWxsfSAqLyAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZUtleSA9IGFjdGl2ZT8uZGF0YXNldD8uaW5zcGVjdG9yS2V5IHx8IG51bGw7XHJcblx0XHRcdGxldCBzZWxTdGFydCAgICA9IG51bGwsIHNlbEVuZCA9IG51bGw7XHJcblxyXG5cdFx0XHRpZiAoIGFjdGl2ZSAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGFjdGl2ZSAmJiAnc2VsZWN0aW9uRW5kJyBpbiBhY3RpdmUgKSB7XHJcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdHNlbFN0YXJ0ID0gYWN0aXZlLnNlbGVjdGlvblN0YXJ0O1xyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRzZWxFbmQgICA9IGFjdGl2ZS5zZWxlY3Rpb25FbmQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggdGhpcy5fcmVuZGVyX3RpbWVyICkgY2xlYXJUaW1lb3V0KCB0aGlzLl9yZW5kZXJfdGltZXIgKTtcclxuXHRcdFx0dGhpcy5fcmVuZGVyX3RpbWVyID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2V0VGltZW91dCggKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyKCk7XHJcblx0XHRcdFx0aWYgKCBhY3RpdmVLZXkgKSB7XHJcblx0XHRcdFx0XHRjb25zdCBuZXh0ID0gLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fEhUTUxUZXh0QXJlYUVsZW1lbnR8SFRNTEVsZW1lbnR8bnVsbH0gKi8gKFxyXG5cdFx0XHRcdFx0XHR0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoIGBbZGF0YS1pbnNwZWN0b3Ita2V5PVwiJHthY3RpdmVLZXl9XCJdYCApXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKCBuZXh0ICkge1xyXG5cdFx0XHRcdFx0XHRuZXh0LmZvY3VzKCk7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBzZWxTdGFydCAhPSBudWxsICYmIHNlbEVuZCAhPSBudWxsICYmIHR5cGVvZiBuZXh0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdFx0XHRcdFx0bmV4dC5zZXRTZWxlY3Rpb25SYW5nZSggc2VsU3RhcnQsIHNlbEVuZCApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBjYXRjaCggZSApeyBfd3BiYz8uZGV2Py5lcnJvciggJ19yZW5kZXJfdGltZXInLCBlICk7IH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIGRlbGF5ICkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlbmRlcigpIHtcclxuXHJcblx0XHRcdGNvbnN0IGVsID0gdGhpcy5zZWxlY3RlZF9lbDtcclxuXHRcdFx0aWYgKCAhZWwgfHwgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoIGVsICkgKSByZXR1cm4gdGhpcy5jbGVhcigpO1xyXG5cclxuXHRcdFx0Ly8gUmVzZXQgc2VjdGlvbi1jb2xzIGhpbnQgdW5sZXNzIHdlIHNldCBpdCBsYXRlciBmb3IgYSBzZWN0aW9uLlxyXG5cdFx0XHR0aGlzLnBhbmVsLnJlbW92ZUF0dHJpYnV0ZSggJ2RhdGEtYmZiLXNlY3Rpb24tY29scycgKTtcclxuXHJcblx0XHRcdGNvbnN0IHByZXZfc2Nyb2xsID0gdGhpcy5wYW5lbC5zY3JvbGxUb3A7XHJcblxyXG5cdFx0XHQvLyBTZWN0aW9uXHJcblx0XHRcdGlmICggZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCAnd3BiY19iZmJfX3NlY3Rpb24nICkgKSB7XHJcblx0XHRcdFx0bGV0IHRwbCA9IG51bGw7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHRwbCA9ICh3LndwICYmIHdwLnRlbXBsYXRlICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAndG1wbC13cGJjLWJmYi1pbnNwZWN0b3Itc2VjdGlvbicgKSkgPyB3cC50ZW1wbGF0ZSggJ3dwYmMtYmZiLWluc3BlY3Rvci1zZWN0aW9uJyApIDogbnVsbDtcclxuXHRcdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0XHRcdHRwbCA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIHRwbCApIHtcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gdHBsKCB7fSApO1xyXG5cdFx0XHRcdFx0dGhpcy5fZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4oKTtcclxuXHRcdFx0XHRcdHRoaXMuX3NldF9wYW5lbF9zZWN0aW9uX2NvbHMoIGVsICk7XHJcblx0XHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYW5lbC5zY3JvbGxUb3AgPSBwcmV2X3Njcm9sbDtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IEZhY3RvcnkgPSB3LldQQkNfQkZCX0NvcmUuVUkgJiYgdy5XUEJDX0JGQl9Db3JlLlVJLldQQkNfQkZCX0luc3BlY3Rvcl9GYWN0b3J5O1xyXG5cdFx0XHRcdGNvbnN0IHNjaGVtYXMgPSB3LldQQkNfQkZCX1NjaGVtYXMgfHwge307XHJcblx0XHRcdFx0Y29uc3QgZW50cnkgICA9IHNjaGVtYXNbJ3NlY3Rpb24nXSB8fCBudWxsO1xyXG5cdFx0XHRcdGlmICggZW50cnkgJiYgRmFjdG9yeSApIHtcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdFx0XHRGYWN0b3J5LnJlbmRlcihcclxuXHRcdFx0XHRcdFx0dGhpcy5wYW5lbCxcclxuXHRcdFx0XHRcdFx0ZW50cnksXHJcblx0XHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0XHR7IGVsLCBidWlsZGVyOiB0aGlzLmJ1aWxkZXIsIHR5cGU6ICdzZWN0aW9uJywgdGl0bGU6IGVudHJ5LmxhYmVsIHx8ICdTZWN0aW9uJyB9XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5fZW5mb3JjZV9kZWZhdWx0X2dyb3VwX29wZW4oKTtcclxuXHJcblx0XHRcdFx0XHQvLyAtLS0gU2FmZXR5IG5ldDogaWYgZm9yIGFueSByZWFzb24gdGhlIHNsb3QgZGlkbuKAmXQgcmVuZGVyIGNoaXBzLCBpbmplY3QgdGhlbSBub3cuXHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBoYXNTbG90SG9zdCA9XHJcblx0XHRcdFx0XHRcdFx0XHQgIHRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggJ1tkYXRhLWJmYi1zbG90PVwibGF5b3V0X2NoaXBzXCJdJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHQgIHRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggJy5pbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzIC53cGJjX2JmYl9fbGF5b3V0X2NoaXBzJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHQgIHRoaXMucGFuZWwucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fbGF5b3V0X2NoaXBzX2hvc3QnICk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBoYXNDaGlwcyA9XHJcblx0XHRcdFx0XHRcdFx0XHQgICEhdGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19sYXlvdXRfY2hpcCcgKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICggIWhhc0NoaXBzICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhIGhvc3QgaWYgbWlzc2luZyBhbmQgcmVuZGVyIGNoaXBzIGludG8gaXQuXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgaG9zdCA9IChmdW5jdGlvbiBlbnN1cmVIb3N0KHJvb3QpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBoID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290LnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS1iZmItc2xvdD1cImxheW91dF9jaGlwc1wiXScgKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3QucXVlcnlTZWxlY3RvciggJy5pbnNwZWN0b3JfX3Jvdy0tbGF5b3V0LWNoaXBzIC53cGJjX2JmYl9fbGF5b3V0X2NoaXBzJyApIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9vdC5xdWVyeVNlbGVjdG9yKCAnI3dwYmNfYmZiX19sYXlvdXRfY2hpcHNfaG9zdCcgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggaCApIHJldHVybiBoO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgaG9zdCBpbnNpZGUgKG9yIGFmdGVyKSB0aGUg4oCcbGF5b3V04oCdIGdyb3VwXHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgICAgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgcm9vdC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwW2RhdGEtZ3JvdXA9XCJsYXlvdXRcIl0gLmdyb3VwX19maWVsZHMnICkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIHJvb3QucXVlcnlTZWxlY3RvciggJy5ncm91cF9fZmllbGRzJyApIHx8IHJvb3Q7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCByb3cgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cm93LmNsYXNzTmFtZSAgID0gJ2luc3BlY3Rvcl9fcm93IGluc3BlY3Rvcl9fcm93LS1sYXlvdXQtY2hpcHMnO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiICAgICAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xhYmVsJyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0bGFiLmNsYXNzTmFtZSAgID0gJ2luc3BlY3Rvcl9fbGFiZWwnO1xyXG5cdFx0XHRcdFx0XHRcdFx0bGFiLnRleHRDb250ZW50ID0gJ0xheW91dCc7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjdGwgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y3RsLmNsYXNzTmFtZSAgID0gJ2luc3BlY3Rvcl9fY29udHJvbCc7XHJcblx0XHRcdFx0XHRcdFx0XHRoICAgICAgICAgICAgICAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aC5jbGFzc05hbWUgICAgID0gJ3dwYmNfYmZiX19sYXlvdXRfY2hpcHMnO1xyXG5cdFx0XHRcdFx0XHRcdFx0aC5zZXRBdHRyaWJ1dGUoICdkYXRhLWJmYi1zbG90JywgJ2xheW91dF9jaGlwcycgKTtcclxuXHRcdFx0XHRcdFx0XHRcdGN0bC5hcHBlbmRDaGlsZCggaCApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cm93LmFwcGVuZENoaWxkKCBsYWIgKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJvdy5hcHBlbmRDaGlsZCggY3RsICk7XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMuYXBwZW5kQ2hpbGQoIHJvdyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGg7XHJcblx0XHRcdFx0XHRcdFx0fSkoIHRoaXMucGFuZWwgKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgTCA9ICh3LldQQkNfQkZCX0NvcmUgJiYgdy5XUEJDX0JGQl9Db3JlLlVJICYmIHcuV1BCQ19CRkJfQ29yZS5VSS5XUEJDX0JGQl9MYXlvdXRfQ2hpcHMpIDtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIEwgJiYgdHlwZW9mIEwucmVuZGVyX2Zvcl9zZWN0aW9uID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aG9zdC5pbm5lckhUTUwgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRcdEwucmVuZGVyX2Zvcl9zZWN0aW9uKCB0aGlzLmJ1aWxkZXIsIGVsLCBob3N0ICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGNhdGNoKCBlICl7IF93cGJjPy5kZXY/LmVycm9yKCAnV1BCQ19CRkJfSW5zcGVjdG9yIC0gcmVuZGVyJywgZSApOyB9XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5fc2V0X3BhbmVsX3NlY3Rpb25fY29scyggZWwgKTtcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwuc2Nyb2xsVG9wID0gcHJldl9zY3JvbGw7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLnBhbmVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwid3BiY19iZmJfX2luc3BlY3Rvcl9fZW1wdHlcIj5TZWxlY3QgYSBmaWVsZCB0byBlZGl0IGl0cyBvcHRpb25zLjwvZGl2Pic7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGaWVsZFxyXG5cdFx0XHRpZiAoICFlbC5jbGFzc0xpc3QuY29udGFpbnMoICd3cGJjX2JmYl9fZmllbGQnICkgKSByZXR1cm4gdGhpcy5jbGVhcigpO1xyXG5cclxuXHRcdFx0Y29uc3QgZGF0YSA9IHcuV1BCQ19CRkJfQ29yZS5XUEJDX0Zvcm1fQnVpbGRlcl9IZWxwZXIuZ2V0X2FsbF9kYXRhX2F0dHJpYnV0ZXMoIGVsICk7XHJcblx0XHRcdGNvbnN0IHR5cGUgPSBkYXRhLnR5cGUgfHwgJ3RleHQnO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gX2dldF90cGwoaWQpIHtcclxuXHRcdFx0XHRpZiAoICF3LndwIHx8ICF3cC50ZW1wbGF0ZSApIHJldHVybiBudWxsO1xyXG5cdFx0XHRcdGlmICggIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAndG1wbC0nICsgaWQgKSApIHJldHVybiBudWxsO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gd3AudGVtcGxhdGUoIGlkICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHRwbF9pZCAgICAgID0gYHdwYmMtYmZiLWluc3BlY3Rvci0ke3R5cGV9YDtcclxuXHRcdFx0Y29uc3QgdHBsICAgICAgICAgPSBfZ2V0X3RwbCggdHBsX2lkICk7XHJcblx0XHRcdGNvbnN0IGdlbmVyaWNfdHBsID0gX2dldF90cGwoICd3cGJjLWJmYi1pbnNwZWN0b3ItZ2VuZXJpYycgKTtcclxuXHJcblx0XHRcdGNvbnN0IHNjaGVtYXMgICAgICAgICA9IHcuV1BCQ19CRkJfU2NoZW1hcyB8fCB7fTtcclxuXHRcdFx0Y29uc3Qgc2NoZW1hX2Zvcl90eXBlID0gc2NoZW1hc1t0eXBlXSB8fCBudWxsO1xyXG5cdFx0XHRjb25zdCBGYWN0b3J5ICAgICAgICAgPSB3LldQQkNfQkZCX0NvcmUuVUkgJiYgdy5XUEJDX0JGQl9Db3JlLlVJLldQQkNfQkZCX0luc3BlY3Rvcl9GYWN0b3J5O1xyXG5cclxuXHRcdFx0aWYgKCB0cGwgKSB7XHJcblx0XHRcdFx0Ly8gTkVXOiBtZXJnZSBzY2hlbWEgZGVmYXVsdHMgc28gbWlzc2luZyBrZXlzIChlc3AuIGJvb2xlYW5zKSBob25vciBkZWZhdWx0cyBvbiBmaXJzdCBwYWludFxyXG5cdFx0XHRcdGNvbnN0IGhhc093biA9IEZ1bmN0aW9uLmNhbGwuYmluZCggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSApO1xyXG5cdFx0XHRcdGNvbnN0IHByb3BzICA9IChzY2hlbWFfZm9yX3R5cGUgJiYgc2NoZW1hX2Zvcl90eXBlLnNjaGVtYSAmJiBzY2hlbWFfZm9yX3R5cGUuc2NoZW1hLnByb3BzKSA/IHNjaGVtYV9mb3JfdHlwZS5zY2hlbWEucHJvcHMgOiB7fTtcclxuXHRcdFx0XHRjb25zdCBtZXJnZWQgPSB7IC4uLmRhdGEgfTtcclxuXHRcdFx0XHRpZiAoIHByb3BzICkge1xyXG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoIHByb3BzICkuZm9yRWFjaCggKGspID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgbWV0YSA9IHByb3BzW2tdIHx8IHt9O1xyXG5cdFx0XHRcdFx0XHRpZiAoICFoYXNPd24oIGRhdGEsIGsgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYSByZWFsIGJvb2xlYW47IGxlYXZlIG90aGVycyBhcy1pc1xyXG5cdFx0XHRcdFx0XHRcdFx0bWVyZ2VkW2tdID0gKG1ldGEudHlwZSA9PT0gJ2Jvb2xlYW4nKSA/ICEhbWV0YS5kZWZhdWx0IDogbWV0YS5kZWZhdWx0O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggbWV0YS50eXBlID09PSAnYm9vbGVhbicgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gRXhwbGljaXQgZW1wdHkgdmFsdWVzIGFyZSBsZWdhY3kgdW5jaGVja2VkIGJvb2xlYW5zLCBub3QgbWlzc2luZyBkZWZhdWx0cy5cclxuXHRcdFx0XHRcdFx0XHRtZXJnZWRba10gPSB3LldQQkNfQkZCX0NvcmUuV1BCQ19CRkJfU2FuaXRpemUuY29lcmNlX2Jvb2xlYW4oIGRhdGFba10sIGZhbHNlICk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGRhdGFba10gPT09ICcnICYmIGhhc093biggbWV0YSwgJ2RlZmF1bHQnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0bWVyZ2VkW2tdID0gbWV0YS5kZWZhdWx0O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucGFuZWwuaW5uZXJIVE1MID0gdHBsKCBtZXJnZWQgKTtcclxuXHJcblx0XHRcdFx0dGhpcy5fcG9zdF9yZW5kZXJfdWkoKTtcclxuXHRcdFx0fSBlbHNlIGlmICggc2NoZW1hX2Zvcl90eXBlICYmIEZhY3RvcnkgKSB7XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnJztcclxuXHRcdFx0XHRGYWN0b3J5LnJlbmRlcihcclxuXHRcdFx0XHRcdHRoaXMucGFuZWwsXHJcblx0XHRcdFx0XHRzY2hlbWFfZm9yX3R5cGUsXHJcblx0XHRcdFx0XHR7IC4uLmRhdGEgfSxcclxuXHRcdFx0XHRcdHsgZWwsIGJ1aWxkZXI6IHRoaXMuYnVpbGRlciwgdHlwZSwgdGl0bGU6IGRhdGEubGFiZWwgfHwgJycgfVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gRW5zdXJlIHRvZ2dsZSBub3JtYWxpemVycyBhbmQgc2xpZGVyL251bWJlci91bml0IHdpcmluZyBhcmUgYXR0YWNoZWQuXHJcblx0XHRcdFx0dGhpcy5fcG9zdF9yZW5kZXJfdWkoKTtcclxuXHRcdFx0fSBlbHNlIGlmICggZ2VuZXJpY190cGwgKSB7XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSBnZW5lcmljX3RwbCggeyAuLi5kYXRhIH0gKTtcclxuXHRcdFx0XHR0aGlzLl9wb3N0X3JlbmRlcl91aSgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRjb25zdCBtc2cgICAgICAgICAgICA9IGBUaGVyZSBhcmUgbm8gSW5zcGVjdG9yIHdwLnRlbXBsYXRlIFwiJHt0cGxfaWR9XCIgb3IgU2NoZW1hIGZvciB0aGlzIFwiJHtTdHJpbmcoIHR5cGUgfHwgJycgKX1cIiBlbGVtZW50LmA7XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5pbm5lckhUTUwgPSAnJztcclxuXHRcdFx0XHRjb25zdCBkaXYgICAgICAgICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdFx0ZGl2LmNsYXNzTmFtZSAgICAgICAgPSAnd3BiY19iZmJfX2luc3BlY3Rvcl9fZW1wdHknO1xyXG5cdFx0XHRcdGRpdi50ZXh0Q29udGVudCAgICAgID0gbXNnOyAvLyBzYWZlLlxyXG5cdFx0XHRcdHRoaXMucGFuZWwuYXBwZW5kQ2hpbGQoIGRpdiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLl9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbigpO1xyXG5cdFx0XHR0aGlzLnBhbmVsLnNjcm9sbFRvcCA9IHByZXZfc2Nyb2xsO1xyXG5cdFx0fVxyXG5cclxuXHRcdF9lbmZvcmNlX2RlZmF1bHRfZ3JvdXBfb3BlbigpIHtcclxuXHRcdFx0Y29uc3QgZ3JvdXBzID0gQXJyYXkuZnJvbSggdGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19pbnNwZWN0b3JfX2dyb3VwJyApICk7XHJcblx0XHRcdGlmICggIWdyb3Vwcy5sZW5ndGggKSByZXR1cm47XHJcblxyXG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0Z3JvdXBzLmZvckVhY2goIChnKSA9PiB7XHJcblx0XHRcdFx0aWYgKCAhZm91bmQgJiYgZy5jbGFzc0xpc3QuY29udGFpbnMoICdpcy1vcGVuJyApICkge1xyXG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoIGcuY2xhc3NMaXN0LmNvbnRhaW5zKCAnaXMtb3BlbicgKSApIHtcclxuXHRcdFx0XHRcdFx0Zy5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtb3BlbicgKTtcclxuXHRcdFx0XHRcdFx0Zy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd3cGJjOmNvbGxhcHNpYmxlOmNsb3NlJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Zy5jbGFzc0xpc3QucmVtb3ZlKCAnaXMtb3BlbicgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gKTtcclxuXHJcblx0XHRcdGlmICggIWZvdW5kICkge1xyXG5cdFx0XHRcdGdyb3Vwc1swXS5jbGFzc0xpc3QuYWRkKCAnaXMtb3BlbicgKTtcclxuXHRcdFx0XHRncm91cHNbMF0uZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAnd3BiYzpjb2xsYXBzaWJsZTpvcGVuJywgeyBidWJibGVzOiB0cnVlIH0gKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgZGF0YS1iZmItc2VjdGlvbi1jb2xzIG9uIHRoZSBpbnNwZWN0b3IgcGFuZWwgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VjdGlvbi5cclxuXHRcdCAqIFVzZXMgdGhlIHJlZ2lzdGVyZWQgY29tcHV0ZSBmbiBpZiBhdmFpbGFibGU7IGZhbGxzIGJhY2sgdG8gZGlyZWN0IERPTS5cclxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNlY3Rpb25FbFxyXG5cdFx0ICovXHJcblx0XHRfc2V0X3BhbmVsX3NlY3Rpb25fY29scyhzZWN0aW9uRWwpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBQcmVmZXIgdGhlIGFscmVhZHktcmVnaXN0ZXJlZCB2YWx1ZV9mcm9tIGhlbHBlciBpZiBwcmVzZW50LlxyXG5cdFx0XHRcdHZhciBjb21wdXRlID0gdy53cGJjX2JmYl9pbnNwZWN0b3JfZmFjdG9yeV92YWx1ZV9mcm9tICYmIHcud3BiY19iZmJfaW5zcGVjdG9yX2ZhY3RvcnlfdmFsdWVfZnJvbS5jb21wdXRlX3NlY3Rpb25fY29sdW1ucztcclxuXHJcblx0XHRcdFx0dmFyIGNvbHMgPSAxO1xyXG5cdFx0XHRcdGlmICggdHlwZW9mIGNvbXB1dGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdFx0XHRjb2xzID0gY29tcHV0ZSggeyBlbDogc2VjdGlvbkVsIH0gKSB8fCAxO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBGYWxsYmFjazogY29tcHV0ZSBkaXJlY3RseSBmcm9tIHRoZSBET00uXHJcblx0XHRcdFx0XHR2YXIgcm93ID0gc2VjdGlvbkVsICYmIHNlY3Rpb25FbC5xdWVyeVNlbGVjdG9yKCAnOnNjb3BlID4gLndwYmNfYmZiX19yb3cnICk7XHJcblx0XHRcdFx0XHRjb2xzICAgID0gcm93ID8gKHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnOnNjb3BlID4gLndwYmNfYmZiX19jb2x1bW4nICkubGVuZ3RoIHx8IDEpIDogMTtcclxuXHRcdFx0XHRcdGlmICggY29scyA8IDEgKSBjb2xzID0gMTtcclxuXHRcdFx0XHRcdGlmICggY29scyA+IDQgKSBjb2xzID0gNDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5wYW5lbC5zZXRBdHRyaWJ1dGUoICdkYXRhLWJmYi1zZWN0aW9uLWNvbHMnLCBTdHJpbmcoIGNvbHMgKSApO1xyXG5cdFx0XHR9IGNhdGNoICggXyApIHtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRfY3JlYXRlX2ZhbGxiYWNrX3BhbmVsKCkge1xyXG5cdFx0XHRjb25zdCBwICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7XHJcblx0XHRcdHAuaWQgICAgICAgID0gJ3dwYmNfYmZiX19pbnNwZWN0b3InO1xyXG5cdFx0XHRwLmNsYXNzTmFtZSA9ICd3cGJjX2JmYl9faW5zcGVjdG9yJztcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggcCApO1xyXG5cdFx0XHRyZXR1cm4gLyoqIEB0eXBlIHtIVE1MRGl2RWxlbWVudH0gKi8gKHApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gRXhwb3J0IGNsYXNzICsgcmVhZHkgc2lnbmFsLlxyXG5cdHcuV1BCQ19CRkJfSW5zcGVjdG9yID0gV1BCQ19CRkJfSW5zcGVjdG9yO1xyXG5cdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3dwYmNfYmZiX2luc3BlY3Rvcl9yZWFkeScgKSApO1xyXG5cclxufSkoIHdpbmRvdyApO1xyXG4iXSwibWFwcGluZ3MiOiJhQUFBO0FBQ0E7QUFDQTtBQUNBLFVBQUFBLENBQUEsRUFDQSxhQUVBO0FBQ0EsTUFBQUMsSUFBQSxDQUFBRCxDQUFBLENBQUFFLGFBQUEsQ0FBQUYsQ0FBQSxDQUFBRSxhQUFBLEtBQ0EsTUFBQUMsRUFBQSxDQUFBRixJQUFBLENBQUFFLEVBQUEsQ0FBQUYsSUFBQSxDQUFBRSxFQUFBLEtBRUE7QUFDQTtBQUNBO0FBQ0EsSUFDQUYsSUFBQSxDQUFBRyxpQkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBQyxRQUFBQyxDQUFBLEVBQ0EsT0FBQU4sQ0FBQSxDQUFBTyxHQUFBLEVBQUFQLENBQUEsQ0FBQU8sR0FBQSxDQUFBQyxNQUFBLENBQUFSLENBQUEsQ0FBQU8sR0FBQSxDQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUgsQ0FBQSxHQUFBRyxNQUFBLENBQUFILENBQUEsRUFBQUksT0FBQSxxQkFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBQyw0QkFBQUMsQ0FBQSxFQUNBLE9BQUFILE1BQUEsQ0FBQUcsQ0FBQSxFQUNBRixPQUFBLGVBQ0FBLE9BQUEsYUFDQUEsT0FBQSxlQUNBQSxPQUFBLGNBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUcsaUJBQUFELENBQUEsRUFDQSxJQUFBTixDQUFBLEVBQUFNLENBQUEsVUFBQUgsTUFBQSxDQUFBRyxDQUFBLEdBQUFFLElBQUEsR0FDQVIsQ0FBQSxDQUFBQSxDQUFBLENBQ0FJLE9BQUEsYUFDQUEsT0FBQSw0QkFDQUEsT0FBQSxZQUNBQSxPQUFBLDBCQUNBLElBQUFKLENBQUEsZUFDQSxnQkFBQVMsSUFBQSxDQUFBVCxDQUFBLEVBQUFBLENBQUEsTUFBQUEsQ0FBQSxDQUNBLE9BQUFBLENBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFVLG1CQUFBSixDQUFBLEVBRUEsSUFBQU4sQ0FBQSxFQUFBTSxDQUFBLFVBQUFILE1BQUEsQ0FBQUcsQ0FBQSxHQUFBRSxJQUFBLEdBRUFSLENBQUEsQ0FBQUEsQ0FBQSxDQUFBSSxPQUFBLGFBQUFBLE9BQUEsd0JBQUFBLE9BQUEsWUFFQSxJQUFBSixDQUFBLEVBQ0FBLENBQUEsU0FDQSxDQUNBLGdCQUFBUyxJQUFBLENBQUFULENBQUEsR0FDQUEsQ0FBQSxNQUFBQSxDQUFBLENBQ0EsQ0FDQSxPQUFBQSxDQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVcsWUFBQUwsQ0FBQSxFQUNBLEdBQUFBLENBQUEsUUFDQSxTQUNBLENBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLEVBQ0FGLE9BQUEsZUFDQUEsT0FBQSxnQkFDQUEsT0FBQSxnQkFDQUEsT0FBQSxjQUNBQSxPQUFBLGNBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBUSxzQkFBQVosQ0FBQSxFQUNBLE9BQUFHLE1BQUEsQ0FBQUgsQ0FBQSxVQUFBQSxDQUFBLEVBQ0FJLE9BQUEsZUFDQUEsT0FBQSxjQUNBQSxPQUFBLGNBQ0FBLE9BQUEsZ0JBQ0FBLE9BQUEsZUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBUyx1QkFBQVAsQ0FBQSxFQUNBLEdBQUFBLENBQUEsZ0JBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLEVBQUFGLE9BQUEsbUJBQUFBLE9BQUEsYUFBQUksSUFBQSxHQUNBLENBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBTSxTQUFBUixDQUFBLEVBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLE1BQ0FFLElBQUEsR0FDQUosT0FBQSxhQUNBQSxPQUFBLHdCQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFXLFNBQUFULENBQUEsRUFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsTUFDQUUsSUFBQSxHQUNBSixPQUFBLGdCQUNBQSxPQUFBLHNCQUNBQSxPQUFBLFlBQ0FZLFdBQUEsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBQyxVQUFBWCxDQUFBLEVBQ0EsVUFBQUEsQ0FBQSxvQkFBQUEsQ0FBQSxDQUNBLE1BQUFOLENBQUEsQ0FBQUcsTUFBQSxDQUFBRyxDQUFBLE1BQUFFLElBQUEsR0FBQVEsV0FBQSxHQUNBLE9BQUFoQixDQUFBLFdBQUFBLENBQUEsUUFBQUEsQ0FBQSxVQUFBQSxDQUFBLFFBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBa0IsZUFBQVosQ0FBQSxDQUFBYSxHQUFBLFFBQ0EsR0FBQWIsQ0FBQSxRQUFBQSxDQUFBLGFBQUFhLEdBQUEsQ0FDQSxZQUFBRixTQUFBLENBQUFYLENBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFjLGNBQUFkLENBQUEsQ0FBQWUsY0FBQSxFQUNBLEdBQUFmLENBQUEsUUFDQSxPQUFBZSxjQUFBLENBQ0EsQ0FDQSxNQUFBckIsQ0FBQSxDQUFBRyxNQUFBLENBQUFHLENBQUEsRUFBQUUsSUFBQSxHQUNBLE1BQUFjLENBQUEsQ0FBQUMsVUFBQSxDQUFBdkIsQ0FBQSxDQUFBSSxPQUFBLFdBQ0EsT0FBQW9CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsQ0FBQUQsY0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBSyxNQUFBSixDQUFBLENBQUFLLEdBQUEsQ0FBQUMsR0FBQSxFQUNBLE9BQUFDLElBQUEsQ0FBQUQsR0FBQSxDQUFBRCxHQUFBLENBQUFFLElBQUEsQ0FBQUYsR0FBQSxDQUFBQyxHQUFBLENBQUFOLENBQUEsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFRLHVCQUFBeEIsQ0FBQSxFQUNBLEdBQUFBLENBQUEsZ0JBQ0EsT0FBQUgsTUFBQSxDQUFBRyxDQUFBLEVBQUFGLE9BQUEsZUFBQUEsT0FBQSxZQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUEyQixxQkFBQXpCLENBQUEsRUFDQSxPQUFBSCxNQUFBLENBQUFHLENBQUEsTUFBQUYsT0FBQSxhQUFBQSxPQUFBLGVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBNEIsZ0JBQUFoQyxDQUFBLENBQUFpQyxRQUFBLE9BQ0EsSUFDQSxPQUFBQyxJQUFBLENBQUFDLEtBQUEsQ0FBQW5DLENBQUEsRUFDQSxPQUFBb0MsQ0FBQSxFQUNBLE9BQUFILFFBQUEsQ0FDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFJLHFCQUFBL0IsQ0FBQSxFQUNBLFVBQUFBLENBQUEsYUFBQUEsQ0FBQSxTQUNBLElBQ0EsT0FBQTRCLElBQUEsQ0FBQUksU0FBQSxDQUFBaEMsQ0FBQSxFQUNBLE9BQ0FpQyxPQUFBLENBQUFDLEtBQUEsK0JBQ0EsU0FDQSxDQUNBLENBQ0EsT0FBQXJDLE1BQUEsQ0FBQUcsQ0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBbUMsaUJBQUFuQyxDQUFBLENBQUEyQixRQUFBLFNBQ0EsTUFBQWpDLENBQUEsQ0FBQUcsTUFBQSxDQUFBRyxDQUFBLE1BQUFFLElBQUEsR0FDQSxNQUFBa0MsQ0FBQSxDQUFBMUMsQ0FBQSxDQUFBMkMsS0FBQSxzQ0FDQSxPQUFBRCxDQUFBLENBQUFBLENBQUEsSUFBQXZDLE1BQUEsQ0FBQThCLFFBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVcsbUJBQUF0QyxDQUFBLENBQUEyQixRQUFBLFlBQ0EsTUFBQWpDLENBQUEsQ0FBQUcsTUFBQSxDQUFBRyxDQUFBLE1BQUFFLElBQUEsR0FDQSx5Q0FBQUMsSUFBQSxDQUFBVCxDQUFBLEVBQUFBLENBQUEsQ0FBQUcsTUFBQSxDQUFBOEIsUUFBQSxFQUNBLENBRUEsRUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUNBdEMsSUFBQSxDQUFBa0Qsa0JBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLFlBQUFDLGVBQUEsRUFDQSxLQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLHVCQUFBQyxNQUFBLENBQUFDLFNBQUEsT0FDQSxNQUFBQyxJQUFBLENBQUF4RCxJQUFBLENBQUFHLGlCQUFBLENBQUFTLGdCQUFBLENBQUEwQyxNQUFBLEVBQ0EsSUFBQUcsRUFBQSxDQUFBRCxJQUFBLFVBQ0EsTUFBQUUsR0FBQSxDQUFBL0MsQ0FBQSxFQUFBWCxJQUFBLENBQUFHLGlCQUFBLENBQUFPLDJCQUFBLENBQUFDLENBQUEsRUFDQSxNQUFBZ0QsTUFBQSxDQUFBaEQsQ0FBQSxFQUFBWCxJQUFBLENBQUFHLGlCQUFBLENBQUFPLDJCQUFBLENBQUFDLENBQUEsRUFDQSxNQUFBaUQsT0FBQSxDQUFBTCxTQUFBLEVBQUFNLE9BQUEsRUFBQUMsR0FBQSxvQkFBQUgsTUFBQSxDQUFBSixTQUFBLENBQUFNLE9BQUEsQ0FBQUMsR0FBQSxVQUNBLFdBQUFWLGVBQUEsRUFBQVcsYUFBQSxDQUNBLDZDQUFBSCxPQUFBLGFBQUFGLEdBQUEsQ0FBQUQsRUFBQSxvREFBQUcsT0FBQSxhQUFBRixHQUFBLENBQUFELEVBQUEsS0FDQSxHQUNBO0FBQ0EsTUFBQU8sS0FBQSxNQUFBWixlQUFBLENBQUFXLGFBQUEsd0RBQUFMLEdBQUEsQ0FBQUQsRUFBQSw4REFBQUMsR0FBQSxDQUFBRCxFQUFBLE9BQ0EsR0FBQU8sS0FBQSxFQUFBVCxTQUFBLEVBQUFTLEtBQUEsR0FBQVQsU0FBQSxFQUNBLE1BQ0EsQ0FDQUUsRUFBQSxJQUFBRCxJQUFBLGFBQUF0QixJQUFBLENBQUErQixNQUFBLEdBQUFDLFFBQUEsS0FBQUMsS0FBQSxRQUNBLENBQ0EsT0FBQVYsRUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQVcseUJBQUFaLElBQUEsQ0FBQUQsU0FBQSxPQUNBLElBQUFjLElBQUEsQ0FBQWIsSUFBQSxVQUNBLE1BQUFFLEdBQUEsQ0FBQS9DLENBQUEsRUFBQVgsSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBQyxDQUFBLEVBQ0EsTUFBQWdELE1BQUEsQ0FBQWhELENBQUEsRUFBQVgsSUFBQSxDQUFBRyxpQkFBQSxDQUFBTywyQkFBQSxDQUFBQyxDQUFBLEVBQ0E7QUFDQSxNQUFBbUQsR0FBQSxDQUFBUCxTQUFBLEVBQUFNLE9BQUEsRUFBQUMsR0FBQSxDQUNBLE1BQUFGLE9BQUEsQ0FBQUUsR0FBQSxvQkFBQUgsTUFBQSxDQUFBRyxHQUFBLFVBQ0EsWUFDQSxNQUFBUSxRQUFBLDhDQUFBVixPQUFBLGVBQUFGLEdBQUEsQ0FBQVcsSUFBQSxNQUNBLE1BQUFFLE9BQUEsTUFBQW5CLGVBQUEsRUFBQW9CLGdCQUFBLENBQUFGLFFBQUEsTUFDQSxHQUFBQyxPQUFBLENBQUFFLE1BQUE7QUFDQSxNQUFBMUIsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBckIsS0FBQSxZQUNBcUIsSUFBQSxDQUFBdEIsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBNUQsT0FBQSxjQUFBb0IsTUFBQSxDQUFBa0IsQ0FBQSxZQUFBUyxJQUFBLEtBQ0EsQ0FDQSxPQUFBYSxJQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUssYUFBQUMsUUFBQSxDQUFBQyxRQUFBLENBQUFDLGFBQUEsUUFDQSxNQUFBQyxPQUFBLENBQUE5RSxJQUFBLENBQUFHLGlCQUFBLENBQUFTLGdCQUFBLENBQUFnRSxRQUFBLEVBQ0EsTUFBQUcsTUFBQSxNQUFBMUIsc0JBQUEsQ0FBQXlCLE9BQUEsQ0FBQUgsUUFBQSxFQUNBQSxRQUFBLENBQUFLLFlBQUEsV0FBQUQsTUFBQSxFQUNBLEdBQUFGLGFBQUEsRUFDQTtBQUFBLENBRUEsT0FBQUUsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLGVBQUFOLFFBQUEsQ0FBQU8sVUFBQSxDQUFBTCxhQUFBLFFBQ0EsTUFBQU0sR0FBQSxFQUFBRCxVQUFBLFVBQUExRSxNQUFBLENBQUEwRSxVQUFBLEdBQUFyRSxJQUFBLEdBQ0EsTUFBQTJDLElBQUEsQ0FBQTJCLEdBQUEsQ0FDQW5GLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVksa0JBQUEsQ0FBQW9FLEdBQUEsRUFDQW5GLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVksa0JBQUEsQ0FBQTRELFFBQUEsQ0FBQVMsWUFBQSxzQkFFQSxNQUFBTCxNQUFBLE1BQUFYLHdCQUFBLENBQUFaLElBQUEsQ0FBQW1CLFFBQUEsRUFDQUEsUUFBQSxDQUFBSyxZQUFBLGFBQUFELE1BQUEsRUFDQSxHQUFBRixhQUFBLEVBQ0E7QUFBQSxDQUVBLE9BQUFFLE1BQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBTSxrQkFBQVYsUUFBQSxDQUFBVyxZQUFBLENBQUFULGFBQUEsUUFDQSxNQUFBTSxHQUFBLEVBQUFHLFlBQUEsVUFBQTlFLE1BQUEsQ0FBQThFLFlBQUEsR0FBQXpFLElBQUEsR0FFQSxHQUFBc0UsR0FBQSxPQUNBUixRQUFBLENBQUFZLGVBQUEsaUJBQ0EsR0FBQVYsYUFBQSxFQUNBO0FBQUEsQ0FFQSxTQUNBLENBRUEsTUFBQUMsT0FBQSxDQUFBOUUsSUFBQSxDQUFBRyxpQkFBQSxDQUFBUyxnQkFBQSxDQUFBdUUsR0FBQSxFQUNBLElBQUFLLE1BQUEsQ0FBQVYsT0FBQSxDQUNBLE1BQUFwQixHQUFBLENBQUEvQyxDQUFBLEVBQUFYLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQUMsQ0FBQSxFQUNBLE1BQUFnRCxNQUFBLENBQUFoRCxDQUFBLEVBQUFYLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQUMsQ0FBQSxFQUVBLFlBRUEsTUFBQW1ELEdBQUEsQ0FBQWEsUUFBQSxFQUFBZCxPQUFBLEVBQUFDLEdBQUEsQ0FDQSxNQUFBRixPQUFBLENBQUFFLEdBQUEsb0JBQUFILE1BQUEsQ0FBQUcsR0FBQSxVQUVBLE1BQUEyQixhQUFBLE1BQUFyQyxlQUFBLEVBQUFXLGFBQUEsQ0FDQSw2Q0FBQUgsT0FBQSxrQkFBQUYsR0FBQSxDQUFBOEIsTUFBQSxPQUNBLCtDQUFBNUIsT0FBQSxrQkFBQUYsR0FBQSxDQUFBOEIsTUFBQSxLQUNBLEVBQ0EsTUFBQUUsUUFBQSxDQUFBQyxRQUFBLENBQUFDLGNBQUEsQ0FBQUosTUFBQSxFQUVBO0FBQ0EsTUFBQUssY0FBQSxDQUFBSCxRQUFBLEdBQUFmLFFBQUEsRUFBQWUsUUFBQSxFQUFBZixRQUFBLENBQUFtQixRQUFBLENBQUFKLFFBQUEsRUFFQSxJQUFBRCxhQUFBLElBQUFDLFFBQUEsRUFBQUcsY0FBQSxHQUNBLE1BQ0EsQ0FFQSxNQUFBOUMsQ0FBQSxDQUFBeUMsTUFBQSxDQUFBeEMsS0FBQSxZQUNBd0MsTUFBQSxDQUFBekMsQ0FBQSxDQUFBeUMsTUFBQSxDQUFBL0UsT0FBQSxjQUFBb0IsTUFBQSxDQUFBa0IsQ0FBQSxZQUFBK0IsT0FBQSxLQUNBLENBRUFILFFBQUEsQ0FBQUssWUFBQSxnQkFBQVEsTUFBQSxFQUNBLEdBQUFYLGFBQUEsRUFDQTtBQUFBLENBRUEsT0FBQVcsTUFBQSxDQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0EsSUFDQXhGLElBQUEsQ0FBQStGLHNCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBNUMsWUFBQTZDLElBQUEsS0FDQSxLQUFBQyxlQUFBLENBQUFwRSxNQUFBLENBQUFDLFFBQUEsRUFBQWtFLElBQUEsQ0FBQUMsZUFBQSxHQUFBRCxJQUFBLENBQUFDLGVBQUEsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsaUNBQUFDLE1BQUEsQ0FBQUMsV0FBQSxNQUFBSCxlQUFBLEVBQ0EsTUFBQUksSUFBQSxDQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQUosTUFBQSxFQUFBM0IsZ0JBQUEsb0NBQ0EsTUFBQTdDLENBQUEsQ0FBQTBFLElBQUEsQ0FBQTVCLE1BQUEsSUFFQSxNQUFBVSxHQUFBLENBQUFrQixJQUFBLENBQUFHLEdBQUEsQ0FBQUMsR0FBQSxHQUNBLE1BQUExRyxDQUFBLENBQUEwRyxHQUFBLENBQUFDLEtBQUEsQ0FBQUMsU0FBQSxLQUNBLE1BQUFDLENBQUEsQ0FBQTVHLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQXNCLGFBQUEsQ0FBQTFCLENBQUEsQ0FBQThHLEdBQUEsRUFDQSxPQUFBaEYsTUFBQSxDQUFBQyxRQUFBLENBQUE4RSxDQUFBLEVBQUFBLENBQUEsS0FBQWpGLENBQUEsQ0FDQSxHQUVBLE1BQUFtRixPQUFBLENBQUEzQixHQUFBLENBQUE0QixNQUFBLEVBQUFDLENBQUEsQ0FBQUMsQ0FBQSxHQUFBRCxDQUFBLENBQUFDLENBQUEsU0FDQSxNQUFBQyxFQUFBLENBQUFyRixNQUFBLENBQUFDLFFBQUEsRUFBQXNFLFdBQUEsR0FBQUEsV0FBQSxHQUNBLE1BQUFlLFVBQUEsQ0FBQWpGLElBQUEsQ0FBQUQsR0FBQSxHQUFBTixDQUFBLElBQUF1RixFQUFBLENBQ0EsTUFBQUUsU0FBQSxDQUFBbEYsSUFBQSxDQUFBRCxHQUFBLE9BQUFrRixVQUFBLEVBQ0EsTUFBQUUsS0FBQSxDQUFBRCxTQUFBLENBQUFOLE9BQUEsQ0FFQSxPQUNBTSxTQUFBLENBQ0FFLEtBQUEsQ0FBQW5DLEdBQUEsQ0FBQXFCLEdBQUEsQ0FBQUksQ0FBQSxFQUFBMUUsSUFBQSxDQUFBRCxHQUFBLEdBQUEyRSxDQUFBLENBQUFTLEtBQUEsRUFDQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsbUJBQUFwQixNQUFBLENBQUFtQixLQUFBLEVBQ0EsTUFBQWpCLElBQUEsQ0FBQUMsS0FBQSxDQUFBQyxJQUFBLENBQUFKLE1BQUEsRUFBQTNCLGdCQUFBLG9DQUNBNkIsSUFBQSxDQUFBbUIsT0FBQSxFQUFBZixHQUFBLENBQUFnQixDQUFBLElBQ0EsTUFBQWIsQ0FBQSxDQUFBVSxLQUFBLENBQUFHLENBQUEsS0FDQWhCLEdBQUEsQ0FBQUMsS0FBQSxDQUFBQyxTQUFBLElBQUFDLENBQUEsSUFDQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQWMsZ0JBQUF2QixNQUFBLENBQUFDLFdBQUEsTUFBQUgsZUFBQSxFQUNBLE1BQUFJLElBQUEsQ0FBQUMsS0FBQSxDQUFBQyxJQUFBLENBQUFKLE1BQUEsRUFBQTNCLGdCQUFBLG9DQUNBLE1BQUE3QyxDQUFBLENBQUEwRSxJQUFBLENBQUE1QixNQUFBLElBQ0EsTUFBQXlDLEVBQUEsQ0FBQXJGLE1BQUEsQ0FBQUMsUUFBQSxFQUFBc0UsV0FBQSxHQUFBQSxXQUFBLEdBQ0EsTUFBQWUsVUFBQSxDQUFBakYsSUFBQSxDQUFBRCxHQUFBLEdBQUFOLENBQUEsSUFBQXVGLEVBQUEsQ0FDQSxNQUFBRSxTQUFBLENBQUFsRixJQUFBLENBQUFELEdBQUEsT0FBQWtGLFVBQUEsRUFDQSxNQUFBUSxJQUFBLENBQUFQLFNBQUEsQ0FBQXpGLENBQUEsQ0FDQSxLQUFBNEYsa0JBQUEsQ0FBQXBCLE1BQUEsQ0FBQUcsS0FBQSxDQUFBM0UsQ0FBQSxFQUFBaUcsSUFBQSxDQUFBRCxJQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLG9CQUFBQyxZQUFBLENBQUFDLE9BQUEsQ0FBQTNCLFdBQUEsTUFBQUgsZUFBQSxFQUNBLE1BQUErQixHQUFBLENBQUFGLFlBQUEsRUFBQUcsU0FBQSxFQUFBbkMsUUFBQSxrQkFDQWdDLFlBQUEsQ0FDQUEsWUFBQSxFQUFBL0QsYUFBQSw0QkFFQSxJQUFBaUUsR0FBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBM0IsSUFBQSxDQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQXlCLEdBQUEsQ0FBQXhELGdCQUFBLG9DQUNBLE1BQUE3QyxDQUFBLENBQUEwRSxJQUFBLENBQUE1QixNQUFBLElBRUEsSUFBQTZCLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQUgsT0FBQSxHQUFBQSxPQUFBLENBQUF0RCxNQUFBLEdBQUE5QyxDQUFBLEVBQ0EsS0FBQStGLGVBQUEsQ0FBQU0sR0FBQSxDQUFBNUIsV0FBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBK0IsR0FBQSxDQUFBSixPQUFBLENBQUFoQixNQUFBLEVBQUFDLENBQUEsQ0FBQUMsQ0FBQSxHQUFBRCxDQUFBLENBQUE5RSxJQUFBLENBQUFELEdBQUEsR0FBQUosTUFBQSxDQUFBb0YsQ0FBQSxZQUNBLE1BQUFDLEVBQUEsQ0FBQXJGLE1BQUEsQ0FBQUMsUUFBQSxFQUFBc0UsV0FBQSxHQUFBQSxXQUFBLEdBQ0EsTUFBQWdCLFNBQUEsQ0FBQWxGLElBQUEsQ0FBQUQsR0FBQSxPQUFBQyxJQUFBLENBQUFELEdBQUEsR0FBQU4sQ0FBQSxJQUFBdUYsRUFBQSxFQUNBLE1BQUFJLEtBQUEsQ0FBQVMsT0FBQSxDQUFBdkIsR0FBQSxDQUFBekcsQ0FBQSxFQUFBbUMsSUFBQSxDQUFBRCxHQUFBLElBQUFKLE1BQUEsQ0FBQTlCLENBQUEsTUFBQW9JLEdBQUEsQ0FBQWYsU0FBQSxHQUVBLEtBQUFHLGtCQUFBLENBQUFTLEdBQUEsQ0FBQVYsS0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FjLDBCQUFBekcsQ0FBQSxFQUNBLE9BQUFBLENBQUEsRUFDQSxPQUNBLFlBQ0EsT0FDQSxnQ0FDQSxPQUNBLHdDQUNBLE9BQ0Esc0NBQ0EsUUFDQSxPQUFBMkUsS0FBQSxDQUFBM0UsQ0FBQSxFQUFBaUcsSUFBQSxLQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQVMsb0JBQUFOLE9BQUEsRUFDQSxNQUFBSSxHQUFBLENBQUFKLE9BQUEsQ0FBQWhCLE1BQUEsRUFBQUMsQ0FBQSxDQUFBQyxDQUFBLEdBQUFELENBQUEsRUFBQW5GLE1BQUEsQ0FBQW9GLENBQUEsWUFDQSxPQUFBYyxPQUFBLENBQUF2QixHQUFBLENBQUF6RyxDQUFBLEVBQUFtQyxJQUFBLENBQUFvRyxLQUFBLEVBQUF6RyxNQUFBLENBQUE5QixDQUFBLE1BQUFvSSxHQUFBLE9BQUFJLElBQUEsV0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyxjQUFBQyxLQUFBLEVBQ0EsSUFBQUEsS0FBQSxFQUNBLFNBQ0EsQ0FDQSxPQUFBakksTUFBQSxDQUFBaUksS0FBQSxFQUNBaEksT0FBQSxrQkFDQWlJLEtBQUEsV0FDQWxDLEdBQUEsQ0FBQW5HLENBQUEsRUFBQXVCLFVBQUEsQ0FBQXZCLENBQUEsR0FDQXNJLE1BQUEsQ0FBQWhILENBQUEsRUFBQUUsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsR0FBQUEsQ0FBQSxLQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUNBM0IsSUFBQSxDQUFBNEksMEJBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXpGLFlBQUFDLGVBQUEsQ0FBQXlGLFdBQUEsRUFDQSxLQUFBekYsZUFBQSxDQUFBQSxlQUFBLENBQ0E7QUFDQSxLQUFBeUYsV0FBQSxDQUFBdkMsS0FBQSxDQUFBNEIsT0FBQSxDQUFBVyxXQUFBLEVBQUFBLFdBQUEsQ0FBQUEsV0FBQSxFQUFBQSxXQUFBLEtBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBQyxrQkFBQTNELEdBQUEsRUFDQSxHQUFBQSxHQUFBLFFBQ0EsT0FBQTRELFFBQUEsQ0FDQSxDQUNBLE1BQUFwSCxDQUFBLENBQUFxSCxRQUFBLENBQUE3RCxHQUFBLEtBQ0EsT0FBQXRELE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsQ0FBQW9ILFFBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsbUJBQUEsRUFDQSxNQUFBQyxJQUFBLElBQ0EsTUFBQUMsR0FBQSxNQUFBL0YsZUFBQSxFQUFBb0IsZ0JBQUEsb0VBQ0EyRSxHQUFBLENBQUEzQixPQUFBLENBQUE0QixFQUFBLEdBQ0EsTUFBQUMsR0FBQSxDQUFBRCxFQUFBLENBQUF2RixPQUFBLENBQUF5RixTQUFBLEVBQUFGLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQTBGLElBQUEsRUFBQUgsRUFBQSxDQUFBdkYsT0FBQSxDQUFBSixFQUFBLENBQ0EsSUFBQTRGLEdBQUEsRUFDQSxPQUNBLENBQ0FILElBQUEsQ0FBQUcsR0FBQSxHQUFBSCxJQUFBLENBQUFHLEdBQUEsUUFDQSxHQUNBLE9BQUFILElBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBTSxrQkFBQUgsR0FBQSxFQUNBLElBQUFBLEdBQUEsRUFDQSxPQUFBTixRQUFBLENBQ0EsQ0FDQTtBQUNBLE1BQUFVLEtBQUEsTUFBQVosV0FBQSxFQUFBcEUsTUFBQSxNQUFBb0UsV0FBQSxDQUFBbEQsUUFBQSxDQUFBbkIsZ0JBQUEscUNBQ0EsTUFBQWtGLGdCQUFBLENBQUFwRCxLQUFBLENBQUFDLElBQUEsQ0FBQWtELEtBQUEsRUFBQUUsT0FBQSxDQUFBQyxDQUFBLEVBQUF0RCxLQUFBLENBQUFDLElBQUEsQ0FBQXFELENBQUEsQ0FBQXBGLGdCQUFBLHVCQUNBLElBQUFxRixLQUFBLENBQUFkLFFBQUEsQ0FFQVcsZ0JBQUEsQ0FBQWxDLE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBRSxTQUFBLENBQUFGLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXlGLFNBQUEsRUFBQUYsRUFBQSxDQUFBdkYsT0FBQSxDQUFBSixFQUFBLENBQ0EsR0FBQTJGLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQUosRUFBQSxHQUFBNEYsR0FBQSxFQUFBQyxTQUFBLEdBQUFELEdBQUEsRUFDQSxNQUFBMUgsQ0FBQSxDQUFBM0IsSUFBQSxDQUFBNEksMEJBQUEsQ0FBQUUsaUJBQUEsQ0FBQU0sRUFBQSxDQUFBdkYsT0FBQSxDQUFBaUcsV0FBQSxFQUNBO0FBQ0EsR0FBQW5JLENBQUEsQ0FBQWtJLEtBQUEsRUFDQUEsS0FBQSxDQUFBbEksQ0FBQSxDQUNBLENBQ0EsQ0FDQSxHQUVBLE9BQUFrSSxLQUFBLENBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLGtCQUFBLEVBQ0E7QUFDQSxNQUFBQyxLQUFBLE1BQUFmLGtCQUFBLEdBRUE7QUFDQSxNQUFBZ0IsUUFBQSxDQUFBdEUsUUFBQSxDQUFBbkIsZ0JBQUEscUNBRUF5RixRQUFBLENBQUF6QyxPQUFBLENBQUEwQyxHQUFBLEdBQ0FBLEdBQUEsQ0FBQTFGLGdCQUFBLHFCQUFBZ0QsT0FBQSxDQUFBMkMsV0FBQSxHQUNBLE1BQUFDLFNBQUEsQ0FBQUQsV0FBQSxDQUFBdEcsT0FBQSxDQUFBSixFQUFBLENBQ0EsTUFBQTRHLFFBQUEsQ0FBQUYsV0FBQSxDQUFBdEcsT0FBQSxDQUFBeUYsU0FBQSxFQUFBYyxTQUFBLENBQ0EsTUFBQUUsU0FBQSxDQUFBSCxXQUFBLENBQUF0RyxPQUFBLENBQUFpRyxXQUFBLENBQ0EsTUFBQVMsVUFBQSxDQUFBdkssSUFBQSxDQUFBNEksMEJBQUEsQ0FBQUUsaUJBQUEsQ0FBQXdCLFNBQUEsRUFDQTtBQUNBLE1BQUFFLFdBQUEsTUFBQWhCLGlCQUFBLENBQUFhLFFBQUEsRUFDQSxNQUFBUixLQUFBLENBQUFoSSxNQUFBLENBQUFDLFFBQUEsQ0FBQTBJLFdBQUEsRUFBQUEsV0FBQSxDQUFBRCxVQUFBO0FBRUEsTUFBQUUsT0FBQSxDQUFBVCxLQUFBLENBQUFLLFFBQUEsS0FDQSxNQUFBSyxPQUFBLENBQUE3SSxNQUFBLENBQUFDLFFBQUEsQ0FBQStILEtBQUEsR0FBQVksT0FBQSxFQUFBWixLQUFBLENBRUFNLFdBQUEsQ0FBQXpELEtBQUEsQ0FBQWlFLGFBQUEsQ0FBQUQsT0FBQSxXQUNBUCxXQUFBLENBQUF6RCxLQUFBLENBQUFrRSxPQUFBLENBQUFGLE9BQUEsVUFDQVAsV0FBQSxDQUFBbkYsWUFBQSxpQkFBQTBGLE9BQUEsaUJBQ0EsR0FBQUEsT0FBQSxFQUNBUCxXQUFBLENBQUFuRixZQUFBLGtCQUNBLE1BQ0FtRixXQUFBLENBQUE1RSxlQUFBLGFBQ0EsQ0FDQSxHQUNBLEdBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXNGLGNBQUF4QixHQUFBLEVBQ0EsSUFBQUEsR0FBQSxFQUNBLFNBQ0EsQ0FDQSxZQUFBakcsZUFBQSxFQUFBb0IsZ0JBQUEsQ0FDQSw4REFBQXhFLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQTJJLEdBQUE7QUFDQSx5RUFBQXJKLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsQ0FBQTJJLEdBQUEsc0JBQ0EsT0FBQTVFLE1BQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBcUcsY0FBQXpCLEdBQUEsRUFDQSxZQUFBRyxpQkFBQSxDQUFBSCxHQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQTBCLGtCQUFBMUIsR0FBQSxFQUNBLE1BQUFRLEtBQUEsTUFBQWlCLGFBQUEsQ0FBQXpCLEdBQUEsRUFDQSxHQUFBUSxLQUFBLEdBQUFkLFFBQUEsRUFDQSxPQUFBQSxRQUFBLENBQ0EsQ0FDQSxNQUFBRyxJQUFBLE1BQUEyQixhQUFBLENBQUF4QixHQUFBLEVBQ0EsT0FBQW5ILElBQUEsQ0FBQUQsR0FBQSxHQUFBNEgsS0FBQSxDQUFBWCxJQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBOEIsUUFBQTNCLEdBQUEsQ0FBQTRCLEtBQUEsSUFDQSxNQUFBQyxHQUFBLE1BQUFILGlCQUFBLENBQUExQixHQUFBLEVBQ0EsT0FBQTZCLEdBQUEsR0FBQW5DLFFBQUEsTUFBQW1DLEdBQUEsRUFBQUQsS0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUUsY0FBQTlCLEdBQUEsRUFBQStCLEtBQUEsQ0FBQS9CLEdBQUEsQ0FBQTRCLEtBQUEsUUFDQSxRQUFBRCxPQUFBLENBQUEzQixHQUFBLENBQUE0QixLQUFBLEdBQ0EsWUFDQSxDQUNBLE1BQUFwQixLQUFBLE1BQUFpQixhQUFBLENBQUF6QixHQUFBLEVBQ0FnQyxLQUFBLFNBQUF4QixLQUFBLFlBQUFBLEtBQUEsaUJBQUF1QixLQUFBLGNBQ0EsYUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FFLFlBQUFqQyxHQUFBLEVBQ0EsWUFBQTJCLE9BQUEsQ0FBQTNCLEdBQUEsSUFDQSxDQUVBLEVBRUE7QUFDQTtBQUNBLElBQ0FySixJQUFBLENBQUF1TCxlQUFBLENBQUFDLE1BQUEsQ0FBQUMsTUFBQSxFQUNBQyxNQUFBLG1CQUNBQyxlQUFBLDRCQUNBQyxTQUFBLHNCQUNBQyxZQUFBLHlCQUNBQyxnQkFBQSw2QkFDQUMsZ0JBQUEsNEJBQ0EsR0FFQTtBQUNBO0FBQ0EsSUFDQS9MLElBQUEsQ0FBQWdNLGlCQUFBLE9BQ0E7QUFDQTtBQUNBLEtBQ0E3SSxZQUFBOEksUUFBQSxFQUNBLEtBQUFBLFFBQUEsQ0FBQUEsUUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsS0FBQTNDLElBQUEsQ0FBQTRDLE1BQUEsS0FDQSxTQUFBRixRQUFBLEVBQ0EsT0FDQSxDQUNBLEtBQUFBLFFBQUEsQ0FBQUcsYUFBQSxLQUFBQyxXQUFBLENBQUE5QyxJQUFBLEVBQUE0QyxNQUFBLEtBQUFBLE1BQUEsRUFBQUcsT0FBQSxTQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQUMsR0FBQWhELElBQUEsQ0FBQWlELE9BQUEsRUFDQTdHLFFBQUEsQ0FBQThHLGdCQUFBLENBQUFsRCxJQUFBLENBQUFpRCxPQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRSxJQUFBbkQsSUFBQSxDQUFBaUQsT0FBQSxFQUNBN0csUUFBQSxDQUFBZ0gsbUJBQUEsQ0FBQXBELElBQUEsQ0FBQWlELE9BQUEsRUFDQSxDQUNBLEVBRUE7QUFDQTtBQUNBLElBQ0F4TSxJQUFBLENBQUE0TSx3QkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBekosWUFBQTBKLE9BQUEsQ0FBQTdHLElBQUEsS0FDQSxLQUFBNkcsT0FBQSxDQUFBQSxPQUFBLENBQ0EsTUFBQUMsR0FBQSxNQUFBRCxPQUFBLEVBQUFFLFdBQUEsRUFBQTdLLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLE1BQ0EsS0FBQTZCLElBQUEsRUFDQTtBQUNBZ0gsU0FBQSxTQUFBRixHQUFBLEdBQ0FHLFNBQUEsS0FDQUMsVUFBQSx3QkFDQUMsV0FBQSx1QkFDQUMsU0FBQSx5QkFDQUMsa0JBQUEsSUFDQUMseUJBQUEsSUFDQUMsd0JBQUEsR0FDQSxHQUFBdkgsSUFDQSxFQUNBLCtCQUNBLEtBQUF3SCxXQUFBLEtBQUFDLEdBQUEsR0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQ0EsS0FBQUMscUJBQUEsT0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQ0EsS0FBQUMsV0FBQSxNQUVBLEtBQUFDLG9CQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLGlCQUFBLEVBQ0EsTUFBQUMsVUFBQSxNQUFBSCxXQUFBLENBRUEsR0FBQUcsVUFBQSxFQUFBQyxJQUFBLEVBQ0FELFVBQUEsQ0FBQUMsSUFBQSxDQUFBOUYsU0FBQSxDQUFBK0YsTUFBQSw2QkFDQSxDQUNBLEdBQUFGLFVBQUEsRUFBQUcsYUFBQSxFQUFBQyxVQUFBLEVBQ0FKLFVBQUEsQ0FBQUcsYUFBQSxDQUFBQyxVQUFBLENBQUFDLFdBQUEsQ0FBQUwsVUFBQSxDQUFBRyxhQUFBLEVBQ0EsQ0FDQSxLQUFBRyw4QkFBQSxDQUFBTixVQUFBLEVBRUEsS0FBQUgsV0FBQSxNQUNBLEtBQUFVLHNCQUFBLFFBQ0EsS0FBQXhCLE9BQUEsRUFBQXlCLHNCQUFBLEtBRUE7QUFDQTNJLFFBQUEsQ0FBQW5CLGdCQUFBLHdFQUNBZ0QsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLEdBQUFBLEVBQUEsQ0FBQThFLFVBQUEsRUFDQTlFLEVBQUEsQ0FBQThFLFVBQUEsQ0FBQUMsV0FBQSxDQUFBL0UsRUFBQSxFQUNBLENBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FtRiwrQkFBQSxFQUNBLE1BQUFuTCxlQUFBLE1BQUF5SixPQUFBLEVBQUF6SixlQUFBLENBQ0EsSUFBQUEsZUFBQSxFQUFBb0IsZ0JBQUEsRUFDQSxTQUNBLENBRUEsTUFBQWdLLGFBQUEsRUFDQSw0Q0FDQSxpQkFDQSxvQkFDQSxDQUFBakcsSUFBQSxPQUNBLE1BQUFrRyxtQkFBQSxxQ0FFQSxPQUFBbkksS0FBQSxDQUFBQyxJQUFBLENBQUFuRCxlQUFBLENBQUFvQixnQkFBQSxDQUFBZ0ssYUFBQSxHQUNBaEksR0FBQSxDQUFBa0ksT0FBQSxHQUNBLE1BQUFDLFVBQUEsQ0FBQUQsT0FBQSxDQUFBRSxxQkFBQSxLQUFBQyxNQUFBLENBQ0EsSUFBQWhOLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNk0sVUFBQSxHQUFBQSxVQUFBLEtBQ0EsWUFDQSxDQUVBLE9BQ0FELE9BQUEsQ0FBQUEsT0FBQSxDQUNBQyxVQUFBLENBQUF6TSxJQUFBLENBQUFvRyxLQUFBLENBQUFxRyxVQUFBLFlBQ0FHLGNBQUEsQ0FBQUosT0FBQSxDQUFBekcsU0FBQSxFQUFBbkMsUUFBQSxpQ0FDQWlKLG1CQUFBLENBQUFMLE9BQUEsQ0FBQWhJLEtBQUEsRUFBQXNJLGdCQUFBLEdBQUFQLG1CQUFBLE1BQ0FRLDRCQUFBLENBQUFQLE9BQUEsQ0FBQWhJLEtBQUEsRUFBQXdJLG1CQUFBLEdBQUFULG1CQUFBLEtBQ0EsRUFDQSxHQUNBOUYsTUFBQSxDQUFBd0csT0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyw2QkFBQSxFQUNBLE1BQUFDLGNBQUEsTUFBQTFCLFdBQUEsRUFBQTBCLGNBQUEsS0FFQUEsY0FBQSxDQUFBN0gsT0FBQSxDQUFBOEgsYUFBQSxHQUNBQSxhQUFBLENBQUFaLE9BQUEsQ0FBQWhJLEtBQUEsRUFBQTZJLFdBQUEsQ0FDQSxvQ0FDQSxHQUFBRCxhQUFBLENBQUFYLFVBQUEsSUFDQSxFQUNBVyxhQUFBLENBQUFaLE9BQUEsQ0FBQXpHLFNBQUEsRUFBQXVILEdBQUEsaUNBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBcEIsK0JBQUFOLFVBQUEsRUFDQSxNQUFBVyxtQkFBQSxxQ0FDQSxNQUFBWSxjQUFBLENBQUF2QixVQUFBLEVBQUF1QixjQUFBLEtBRUFBLGNBQUEsQ0FBQTdILE9BQUEsQ0FBQThILGFBQUEsR0FDQSxHQUFBQSxhQUFBLENBQUFQLG1CQUFBLEVBQ0FPLGFBQUEsQ0FBQVosT0FBQSxDQUFBaEksS0FBQSxFQUFBNkksV0FBQSxDQUNBZCxtQkFBQSxDQUNBYSxhQUFBLENBQUFQLG1CQUFBLENBQ0FPLGFBQUEsQ0FBQUwsNEJBQ0EsRUFDQSxNQUNBSyxhQUFBLENBQUFaLE9BQUEsQ0FBQWhJLEtBQUEsRUFBQStJLGNBQUEsR0FBQWhCLG1CQUFBLEVBQ0EsQ0FFQSxJQUFBYSxhQUFBLENBQUFSLGNBQUEsRUFDQVEsYUFBQSxDQUFBWixPQUFBLENBQUF6RyxTQUFBLEVBQUErRixNQUFBLGlDQUNBLENBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EwQixvQkFBQUMsR0FBQSxFQUNBLElBQUFBLEdBQUEsRUFBQTVCLElBQUEsR0FBQTRCLEdBQUEsRUFBQXBKLElBQUEsRUFDQSxLQUFBb0gsV0FBQSxNQUNBLE9BQ0EsQ0FFQSxNQUFBaUMsV0FBQSxDQUFBRCxHQUFBLENBQUE1QixJQUFBLENBQUFhLHFCQUFBLEdBQ0EsTUFBQWlCLFlBQUEsUUFBQWhELE9BQUEsRUFBQWhFLFdBQUEsRUFBQWlILFFBQUEsR0FBQUgsR0FBQSxDQUFBcEosSUFBQSxFQUVBLEtBQUFvSCxXQUFBLEVBQ0FJLElBQUEsQ0FBQTRCLEdBQUEsQ0FBQTVCLElBQUEsQ0FDQThCLFlBQUEsQ0FBQUEsWUFBQSxDQUNBRSxhQUFBLENBQUFKLEdBQUEsQ0FBQXBKLElBQUEsQ0FDQXlKLG1CQUFBLENBQUFMLEdBQUEsQ0FBQTVCLElBQUEsQ0FBQWtDLFdBQUEsQ0FDQUwsV0FBQSxFQUNBTSxLQUFBLENBQUFOLFdBQUEsQ0FBQU0sS0FBQSxDQUNBckIsTUFBQSxDQUFBZSxXQUFBLENBQUFmLE1BQ0EsRUFDQVEsY0FBQSxNQUFBZCw4QkFBQSxHQUNBTixhQUFBLE1BQ0FrQyxrQkFBQSxNQUNBQyxpQkFBQSxNQUNBQyxhQUFBLEdBQ0FDLGVBQUEsS0FDQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQywyQkFBQSxFQUNBLE1BQUF6QyxVQUFBLE1BQUFILFdBQUEsQ0FFQSxHQUNBLENBQUFHLFVBQUEsRUFDQUEsVUFBQSxDQUFBK0IsWUFBQSxFQUNBLENBQUEvQixVQUFBLENBQUFDLElBQUEsRUFDQSxDQUFBRCxVQUFBLENBQUFpQyxhQUFBLEVBQ0FqQyxVQUFBLENBQUFHLGFBQUEsQ0FDQSxDQUNBLE9BQ0EsQ0FFQSxNQUFBdUMsTUFBQSxDQUFBN0ssUUFBQSxDQUFBOEssYUFBQSxRQUNBLE1BQUFQLEtBQUEsQ0FBQWhPLElBQUEsQ0FBQUQsR0FBQSxHQUFBNkwsVUFBQSxDQUFBOEIsV0FBQSxFQUFBTSxLQUFBLEtBQ0EsTUFBQXJCLE1BQUEsQ0FBQTNNLElBQUEsQ0FBQUQsR0FBQSxHQUFBNkwsVUFBQSxDQUFBOEIsV0FBQSxFQUFBZixNQUFBLEtBRUEyQixNQUFBLENBQUFFLFNBQUEsZ0NBQ0FGLE1BQUEsQ0FBQXhMLFlBQUEsdUJBQ0F3TCxNQUFBLENBQUF4TCxZQUFBLDRDQUNBd0wsTUFBQSxDQUFBOUosS0FBQSxDQUFBNkksV0FBQSx5Q0FBQVcsS0FBQSxNQUNBTSxNQUFBLENBQUE5SixLQUFBLENBQUE2SSxXQUFBLHdDQUFBVixNQUFBLE1BRUEsTUFBQThCLGNBQUEsQ0FBQTdDLFVBQUEsQ0FBQWtDLG1CQUFBLEVBQUE5QixVQUFBLEdBQUFKLFVBQUEsQ0FBQWlDLGFBQUEsQ0FDQWpDLFVBQUEsQ0FBQWtDLG1CQUFBLENBQ0EsS0FFQWxDLFVBQUEsQ0FBQWlDLGFBQUEsQ0FBQWEsWUFBQSxDQUFBSixNQUFBLENBQUFHLGNBQUEsRUFDQTdDLFVBQUEsQ0FBQUcsYUFBQSxDQUFBdUMsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FLLFlBQUFsQixHQUFBLEVBQ0EsU0FBQWhDLFdBQUEsRUFDQSxLQUFBK0IsbUJBQUEsQ0FBQUMsR0FBQSxFQUNBLENBRUEsS0FBQVAsNEJBQUEsR0FDQSxLQUFBdkMsT0FBQSxFQUFBaUUsbUJBQUEsS0FFQSxNQUFBakIsWUFBQSxRQUFBbEMsV0FBQSxFQUFBa0MsWUFBQSxDQUNBLEtBQUF4QixzQkFBQSxNQUFBd0IsWUFBQSxFQUNBLEtBQUFrQixnQkFBQSxDQUFBcEIsR0FBQSxFQUVBLElBQUFFLFlBQUEsRUFBQUYsR0FBQSxFQUFBNUIsSUFBQSxFQUNBLEtBQUF3QywwQkFBQSxHQUNBWixHQUFBLENBQUE1QixJQUFBLENBQUE5RixTQUFBLENBQUF1SCxHQUFBLDZCQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0F3QixhQUFBLEVBQ0EsS0FBQW5ELGdCQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FvRCxtQkFBQXRCLEdBQUEsQ0FBQXVCLGNBQUEsRUFDQSxNQUFBQyxFQUFBLENBQUE1SyxJQUFBLEVBQUFvSixHQUFBLEtBQ0EsSUFBQXdCLEVBQUEsR0FBQTVLLElBQUEsRUFDQSxZQUNBLENBRUEsSUFBQTRLLEVBQUEsQ0FBQUMsT0FBQSwrQkFDQSxZQUNBLENBRUEsTUFBQUMsV0FBQSxDQUFBSCxjQUFBLEVBQUFJLE9BQUEsT0FBQUosY0FBQSxFQUFBSyxjQUFBLE1BQ0EsTUFBQUMsT0FBQSxDQUFBSCxXQUFBLEVBQUFJLE9BQUEsRUFBQVAsY0FBQSxFQUFBTyxPQUFBLENBQ0EsTUFBQUMsT0FBQSxDQUFBTCxXQUFBLEVBQUFNLE9BQUEsRUFBQVQsY0FBQSxFQUFBUyxPQUFBLENBQ0EsTUFBQUMsWUFBQSxDQUFBakMsR0FBQSxDQUFBa0MsV0FBQSxFQUFBbEMsR0FBQSxDQUFBbUMsT0FBQSxFQUFBbEQscUJBQUEsS0FDQSxNQUFBbUQsU0FBQSxDQUFBbFEsTUFBQSxDQUFBQyxRQUFBLENBQUEwUCxPQUFBLEVBQ0FBLE9BQUEsQ0FDQUksWUFBQSxDQUFBQSxZQUFBLENBQUFJLElBQUEsQ0FBQUosWUFBQSxDQUFBMUIsS0FBQSxLQUNBLE1BQUErQixTQUFBLENBQUFwUSxNQUFBLENBQUFDLFFBQUEsQ0FBQTRQLE9BQUEsRUFDQUEsT0FBQSxDQUNBRSxZQUFBLENBQUFBLFlBQUEsQ0FBQU0sR0FBQSxDQUFBTixZQUFBLENBQUEvQyxNQUFBLEtBRUE7QUFDQSxHQUFBc0MsRUFBQSxHQUFBNUssSUFBQSxFQUFBNEssRUFBQSxDQUFBbEosU0FBQSxFQUFBbkMsUUFBQSxzQkFDQSxNQUFBcU0sY0FBQSxDQUFBaEIsRUFBQSxDQUFBdkMscUJBQUEsR0FDQSxNQUFBd0QsU0FBQSxDQUFBcFMsSUFBQSxDQUFBRyxpQkFBQSxDQUFBNEIsS0FBQSxDQUFBb1EsY0FBQSxDQUFBakMsS0FBQSxhQUNBLE1BQUFtQyxTQUFBLENBQUFyUyxJQUFBLENBQUFHLGlCQUFBLENBQUE0QixLQUFBLENBQUFvUSxjQUFBLENBQUF0RCxNQUFBLFlBQ0EsTUFBQXlELGNBQUEsRUFBQW5CLEVBQUEsQ0FBQXBOLGFBQUEsQ0FDQSw2REFDQSw0REFDQSxHQUFBb08sY0FBQSxDQUFBdEQsTUFBQSxJQUNBLE1BQUEwRCxTQUFBLENBQUFKLGNBQUEsQ0FBQUQsR0FBQSxFQUFBSSxjQUFBLEdBQUFELFNBQUEsRUFDQSxNQUFBRyxZQUFBLENBQUFMLGNBQUEsQ0FBQU0sTUFBQSxFQUFBSCxjQUFBLEdBQUFELFNBQUEsRUFDQSxNQUFBSyxVQUFBLENBQUFQLGNBQUEsQ0FBQUgsSUFBQSxDQUFBSSxTQUFBLENBQ0EsTUFBQU8sV0FBQSxDQUFBUixjQUFBLENBQUFTLEtBQUEsQ0FBQVIsU0FBQSxDQUVBLEdBQUFMLFNBQUEsRUFBQVcsVUFBQSxFQUFBWCxTQUFBLEVBQUFZLFdBQUEsRUFBQVYsU0FBQSxFQUFBTSxTQUFBLEVBQUFOLFNBQUEsRUFBQU8sWUFBQSxFQUNBLGFBQ0EsQ0FDQSxDQUVBLE1BQUExRSxVQUFBLE1BQUFILFdBQUEsQ0FDQSxJQUFBRyxVQUFBLEVBQ0EsWUFDQSxDQUVBLE1BQUErRSxTQUFBLEVBQ0ExQixFQUFBLENBQUFBLEVBQUEsQ0FDQTJCLE9BQUEsQ0FBQW5ELEdBQUEsQ0FBQW1ELE9BQUEsT0FDQUMsaUJBQUEsR0FBQXBELEdBQUEsQ0FBQXFELGVBQ0EsRUFDQSxNQUFBQyxpQkFBQSxDQUFBQSxDQUFBQyxLQUFBLENBQUFDLE1BQUEsS0FBQUQsS0FBQSxJQUFBQyxNQUFBLEVBQ0FELEtBQUEsQ0FBQS9CLEVBQUEsR0FBQWdDLE1BQUEsQ0FBQWhDLEVBQUEsRUFDQStCLEtBQUEsQ0FBQUosT0FBQSxHQUFBSyxNQUFBLENBQUFMLE9BQUEsRUFDQUksS0FBQSxDQUFBSCxpQkFBQSxHQUFBSSxNQUFBLENBQUFKLGlCQUFBLENBRUEsR0FBQUUsaUJBQUEsQ0FBQUosU0FBQSxDQUFBL0UsVUFBQSxDQUFBcUMsa0JBQUEsR0FDQVIsR0FBQSxDQUFBbUMsT0FBQSxFQUFBN0osU0FBQSxDQUFBdUgsR0FBQSw2QkFDQSxZQUNBLENBRUEsTUFBQTRELEdBQUEsQ0FBQUMsTUFBQSxDQUFBQyxXQUFBLEVBQUFGLEdBQUEsTUFBQUcsSUFBQSxDQUFBSCxHQUFBLEdBQ0EsSUFBQUgsaUJBQUEsQ0FBQUosU0FBQSxDQUFBL0UsVUFBQSxDQUFBc0MsaUJBQUEsR0FDQXRDLFVBQUEsQ0FBQXNDLGlCQUFBLENBQUF5QyxTQUFBLENBQ0EvRSxVQUFBLENBQUF1QyxhQUFBLENBQUErQyxHQUFBLENBQ0F0RixVQUFBLENBQUF3QyxlQUFBLEVBQUFrRCxDQUFBLENBQUF6QixTQUFBLENBQUEwQixDQUFBLENBQUF4QixTQUFBLEVBQ0EsYUFDQSxDQUVBLE1BQUF5QixnQkFBQSxDQUFBeFIsSUFBQSxDQUFBeVIsS0FBQSxDQUNBNUIsU0FBQSxDQUFBakUsVUFBQSxDQUFBd0MsZUFBQSxDQUFBa0QsQ0FBQSxDQUNBdkIsU0FBQSxDQUFBbkUsVUFBQSxDQUFBd0MsZUFBQSxDQUFBbUQsQ0FDQSxFQUNBLE1BQUFHLGFBQUEsQ0FBQVIsR0FBQSxDQUFBdEYsVUFBQSxDQUFBdUMsYUFBQSxDQUNBLE1BQUF3RCx1QkFBQSxDQUFBSCxnQkFBQSxPQUFBMU4sSUFBQSxDQUFBc0gseUJBQUEsQ0FDQSxNQUFBd0csb0JBQUEsQ0FBQUYsYUFBQSxPQUFBNU4sSUFBQSxDQUFBcUgsa0JBQUEsRUFDQXFHLGdCQUFBLE9BQUExTixJQUFBLENBQUF1SCx3QkFBQSxDQUVBLElBQUFzRyx1QkFBQSxHQUFBQyxvQkFBQSxFQUNBLGFBQ0EsQ0FFQWhHLFVBQUEsQ0FBQXFDLGtCQUFBLENBQUEwQyxTQUFBLENBQ0EvRSxVQUFBLENBQUFzQyxpQkFBQSxNQUNBdEMsVUFBQSxDQUFBdUMsYUFBQSxHQUNBdkMsVUFBQSxDQUFBd0MsZUFBQSxNQUNBWCxHQUFBLENBQUFtQyxPQUFBLEVBQUE3SixTQUFBLENBQUF1SCxHQUFBLDZCQUVBLFlBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0E1QixxQkFBQSxFQUNBLFFBQUFGLHFCQUFBLEVBQ0EsT0FDQSxDQUVBLEtBQUFBLHFCQUFBLE1BRUEsTUFBQXFHLFdBQUEsQ0FBQUEsQ0FBQSxJQUNBVixNQUFBLENBQUFXLHFCQUFBLE1BQ0EsS0FBQW5HLGdCQUFBLEdBQ0EsR0FDQSxFQUVBLDZDQUFBckcsT0FBQSxDQUFBeU0sUUFBQSxHQUNBdE8sUUFBQSxDQUFBOEcsZ0JBQUEsQ0FBQXdILFFBQUEsQ0FBQUYsV0FBQSxPQUNBLEdBRUFWLE1BQUEsQ0FBQTVHLGdCQUFBLFFBQUFzSCxXQUFBLE9BRUFwTyxRQUFBLENBQUE4RyxnQkFBQSxDQUNBLG1CQUNBLEtBQ0EsR0FBQTlHLFFBQUEsQ0FBQXVPLE1BQUEsRUFDQUgsV0FBQSxHQUNBLENBQ0EsRUFDQSxJQUNBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FoRCxpQkFBQXBCLEdBQUEsRUFDQSxNQUFBd0UsV0FBQSxNQUFBdEgsT0FBQSxFQUFBaEUsV0FBQSxFQUFBaUgsUUFBQSxHQUFBSCxHQUFBLENBQUFwSixJQUFBLEVBQ0EsTUFBQTZOLElBQUEsQ0FBQUQsV0FBQSxvQkFDQTtBQUNBSCxxQkFBQSxNQUNBLE1BQUFLLE1BQUEsQ0FBQTFPLFFBQUEsQ0FBQTVCLGFBQUEsOENBQUFpQyxJQUFBLENBQUFvSCxTQUFBLEVBQ0EsR0FBQWlILE1BQUEsRUFDQUEsTUFBQSxDQUFBclAsWUFBQSxrQkFBQW9QLElBQUEsRUFDQUMsTUFBQSxDQUFBclAsWUFBQSx1QkFDQSxDQUNBLEdBQ0EsQ0FFQXFKLHVCQUFBaUcsTUFBQSxDQUFBekUsWUFBQSxRQUVBO0FBQ0EsTUFBQTBFLElBQUEsQ0FBQTVPLFFBQUEsQ0FBQTZPLGVBQUEsQ0FDQSxHQUFBRixNQUFBLEVBQ0FDLElBQUEsQ0FBQXRNLFNBQUEsQ0FBQXVILEdBQUEseUJBQ0EsR0FBQUssWUFBQSxFQUNBMEUsSUFBQSxDQUFBdE0sU0FBQSxDQUFBdUgsR0FBQSxnQ0FDQSxDQUNBLE1BQ0ErRSxJQUFBLENBQUF0TSxTQUFBLENBQUErRixNQUFBLHVEQUNBLENBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBeUcsbUJBQUFDLFNBQUEsQ0FBQUMsUUFBQSxLQUNBLElBQUFELFNBQUEsU0FBQUUsUUFBQSxnQkFDQSxPQUNBLENBQ0EsR0FBQUEsUUFBQSxDQUFBQyxHQUFBLEdBQUFILFNBQUEsR0FDQSxPQUNBLENBRUEsTUFBQUksTUFBQSxFQUNBN0gsU0FBQSxNQUFBakgsSUFBQSxDQUFBaUgsU0FBQSxDQUNBQyxVQUFBLE1BQUFsSCxJQUFBLENBQUFrSCxVQUFBLENBQ0FDLFdBQUEsTUFBQW5ILElBQUEsQ0FBQW1ILFdBQUEsQ0FDQUMsU0FBQSxNQUFBcEgsSUFBQSxDQUFBb0gsU0FBQSxDQUNBMkgsYUFBQSxNQUNBO0FBQ0FDLGNBQUEsT0FDQUMsaUJBQUEsR0FDQUMsaUJBQUEsTUFDQUMsT0FBQSxDQUFBQSxDQUFBLElBQ0EsS0FBQXRJLE9BQUEsRUFBQWlFLG1CQUFBLEtBQ0EsS0FBQXpDLHNCQUFBLGFBQ0EsRUFDQStHLEtBQUEsQ0FBQUEsQ0FBQSxJQUNBQyxVQUFBLE1BQ0EsS0FBQXhJLE9BQUEsRUFBQXlCLHNCQUFBLEtBQ0EsTUFDQSxLQUFBRCxzQkFBQSxRQUNBLEtBQUFSLGdCQUFBLEdBQ0EsQ0FDQSxFQUVBK0csUUFBQSxDQUFBVSxNQUFBLENBQ0FaLFNBQUEsQ0FDQSxDQUNBLEdBQUFJLE1BQUEsQ0FDQVMsS0FBQSxFQUFBbFIsSUFBQSxNQUFBMkIsSUFBQSxDQUFBZ0gsU0FBQSxDQUFBd0ksSUFBQSxPQUFBQyxHQUFBLFFBQ0FDLElBQUEsTUFDQUMsU0FBQSxZQUNBQyxNQUFBLENBQUFqQixRQUFBLENBQUFrQixlQUFBLDJCQUNBQyxTQUFBLENBQUFuQixRQUFBLENBQUFvQixrQkFBQSw0QkFDQUMsYUFBQSxrQ0FDQXJOLE1BQUEsRUFDQSxRQUNBLFdBQ0EsU0FDQSxTQUNBLElBQ0EsMEJBQ0EsNEJBQ0EsQ0FBQUosSUFBQSxNQUNBME4sZUFBQSxPQUNBQyxVQUFBLE9BQ0FDLGFBQUEsTUFDQUMscUJBQUEsTUFDQUMsb0JBQUEsR0FDQUMsY0FBQSxPQUNBQyxNQUFBLE1BQ0FDLGlCQUFBLElBQ0FDLFdBQUEsSUFDQUMsUUFBQSxDQUFBL0IsUUFBQSxDQUFBK0IsUUFBQSxjQUNBLENBQ0EsRUFFQSxLQUFBbEosV0FBQSxDQUFBZ0MsR0FBQSxDQUFBa0YsU0FBQSxFQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FpQyxPQUFBakMsU0FBQSxDQUFBTixJQUFBLENBQUFPLFFBQUEsS0FDQSxJQUFBRCxTQUFBLFNBQUFFLFFBQUEsZ0JBQ0EsT0FDQSxDQUNBLEdBQUFBLFFBQUEsQ0FBQUMsR0FBQSxHQUFBSCxTQUFBLEdBQ0EsT0FDQSxDQUVBLE1BQUFrQyxhQUFBLENBQUFqQyxRQUFBLENBQUFpQyxhQUFBLEtBRUEsR0FBQUEsYUFBQSxrQkFDQSxLQUFBbkMsa0JBQUEsQ0FBQUMsU0FBQSxDQUFBQyxRQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUFHLE1BQUEsRUFDQTdILFNBQUEsTUFBQWpILElBQUEsQ0FBQWlILFNBQUEsQ0FDQUMsVUFBQSxNQUFBbEgsSUFBQSxDQUFBa0gsVUFBQSxDQUNBQyxXQUFBLE1BQUFuSCxJQUFBLENBQUFtSCxXQUFBLENBQ0FDLFNBQUEsTUFBQXBILElBQUEsQ0FBQW9ILFNBQUEsQ0FDQTtBQUNBMkgsYUFBQSxNQUNBQyxjQUFBLE1BQ0FDLGlCQUFBLEdBQ0FDLGlCQUFBLE1BQ0EyQixRQUFBLENBQUFsSCxHQUFBLE9BQUFELG1CQUFBLENBQUFDLEdBQUEsRUFDQXdGLE9BQUEsQ0FBQXhGLEdBQUEsT0FBQWtCLFdBQUEsQ0FBQWxCLEdBQUEsRUFDQXlGLEtBQUEsQ0FBQUEsQ0FBQSxRQUFBcEUsWUFBQSxHQUNBOEYsTUFBQSxDQUFBQSxDQUFBbkgsR0FBQSxDQUFBdUIsY0FBQSxRQUFBRCxrQkFBQSxDQUFBdEIsR0FBQSxDQUFBdUIsY0FBQSxDQUNBLEVBRUEsR0FBQWtELElBQUEsY0FDQVEsUUFBQSxDQUFBVSxNQUFBLENBQUFaLFNBQUEsRUFDQSxHQUFBSSxNQUFBLENBQ0FTLEtBQUEsRUFBQWxSLElBQUEsTUFBQTJCLElBQUEsQ0FBQWdILFNBQUEsQ0FBQXdJLElBQUEsU0FBQUMsR0FBQSxRQUNBQyxJQUFBLE1BQ0EsR0FDQSxLQUFBbEksV0FBQSxDQUFBZ0MsR0FBQSxDQUFBa0YsU0FBQSxFQUNBLE9BQ0EsQ0FFQTtBQUNBRSxRQUFBLENBQUFVLE1BQUEsQ0FBQVosU0FBQSxFQUNBLEdBQUFJLE1BQUEsQ0FDQTtBQUNBN0gsU0FBQSxHQUNBc0ksS0FBQSxFQUNBbFIsSUFBQSxNQUFBMkIsSUFBQSxDQUFBZ0gsU0FBQSxDQUNBd0ksSUFBQSxNQUNBQyxHQUFBLENBQUFBLENBQUF0RSxFQUFBLENBQUE1SyxJQUFBLENBQUF3USxTQUFBLElBQ0EsT0FBQUEsU0FBQSxDQUFBOU8sU0FBQSxDQUFBbkMsUUFBQSxxQkFDQWlSLFNBQUEsQ0FBQTlPLFNBQUEsQ0FBQW5DLFFBQUEsc0JBQ0EsQ0FDQSxFQUNBO0FBQ0E4UCxNQUFBLG1HQUNBO0FBQ0FFLFNBQUEsRUFDQSxpREFDQSxxQkFDQSxnQ0FDQSxDQUFBdk4sSUFBQSxPQUNBO0FBQ0FJLE1BQUEsRUFDQSwwQkFDQSw0QkFDQTtBQUNBO0FBQ0Esb0hBQ0EsQ0FBQUosSUFBQSxNQUNBME4sZUFBQSxPQUNBO0FBQ0FOLFNBQUE7QUFDQU8sVUFBQTtBQUNBQyxhQUFBO0FBQ0FDLHFCQUFBO0FBQ0FDLG9CQUFBO0FBQ0FDLGNBQUE7QUFDQUMsTUFBQSxNQUNBQyxpQkFBQSxJQUNBQyxXQUFBLElBQ0E7QUFDQTtBQUNBTyxLQUFBLENBQUFySCxHQUFBLEdBQ0EsUUFBQXNILGVBQUEsQ0FBQXRILEdBQUEsR0FDQSxPQUNBLENBQ0E7QUFDQSxDQUFBZ0YsUUFBQSxDQUFBcUMsS0FBQSxPQUFBbkssT0FBQSxDQUFBcUssYUFBQSxDQUFBQyxJQUFBLE1BQUF0SyxPQUFBLEdBQUE4QyxHQUFBLEVBQ0EsRUFDQStHLFFBQUEsQ0FBQUEsQ0FBQSxJQUNBLEtBQUE3SixPQUFBLENBQUF1SyxHQUFBLEVBQUFsTCxJQUFBLEdBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFPLGdCQUFBLEVBQUF1TCxNQUFBLGlCQUNBLENBQ0EsR0FFQSxLQUFBN0osV0FBQSxDQUFBZ0MsR0FBQSxDQUFBa0YsU0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXVDLGdCQUFBdEgsR0FBQSxFQUVBLE1BQUE1QixJQUFBLENBQUE0QixHQUFBLENBQUE1QixJQUFBLENBQ0EsSUFBQUEsSUFBQSxFQUNBLGFBQ0EsQ0FFQTtBQUNBLE1BQUF1SixJQUFBLENBQUF0WCxJQUFBLENBQUF1WCx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBekosSUFBQSxFQUNBLE1BQUEwSixTQUFBLENBQUExSixJQUFBLENBQUE5RixTQUFBLENBQUFuQyxRQUFBLHdCQUFBd1IsSUFBQSxFQUFBL04sSUFBQSxFQUFBd0UsSUFBQSxDQUFBbEssT0FBQSxFQUFBMEYsSUFBQSxjQUVBLElBQUFrTyxTQUFBLEVBQ0EsYUFDQSxDQUVBLE1BQUF0RCxXQUFBLE1BQUF0SCxPQUFBLEVBQUFoRSxXQUFBLEVBQUFpSCxRQUFBLEdBQUFILEdBQUEsQ0FBQXBKLElBQUEsU0FFQSxJQUFBNE4sV0FBQSxFQUNBO0FBQ0EsS0FBQXRILE9BQUEsQ0FBQTZLLG1CQUFBLEdBQUEzSixJQUFBO0FBQ0EsS0FBQWxCLE9BQUEsQ0FBQThLLGNBQUEsRUFBQUMseUJBQUEsR0FBQTdKLElBQUE7QUFFQTtBQUNBQSxJQUFBLENBQUFsSyxPQUFBLENBQUEwRixJQUFBLFdBQ0EsTUFBQWxELElBQUEsQ0FBQTBILElBQUEsQ0FBQXZKLGdCQUFBLGdEQUFBQyxNQUFBLElBQ0FzSixJQUFBLENBQUFsSyxPQUFBLENBQUFnVSxPQUFBLENBQUFyWCxNQUFBLENBQUE2RixJQUFBLEVBRUE7QUFDQSxLQUFBd0csT0FBQSxDQUFBaUwsWUFBQSxHQUFBL0osSUFBQSxFQUNBLEtBQUFsQixPQUFBLENBQUF1SyxHQUFBLEVBQUFsTCxJQUFBLEdBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFPLGdCQUFBLEVBQUExQyxFQUFBLENBQUEyRSxJQUFBLENBQUFzSixNQUFBLGtCQUNBLEtBQUF4SyxPQUFBLENBQUE3QyxLQUFBLEVBQUFELGlCQUFBLEtBQ0E7QUFDQSxDQUVBO0FBQ0EsTUFBQW9ILEVBQUEsQ0FBQXhCLEdBQUEsQ0FBQXdCLEVBQUEsRUFBQUMsT0FBQSxvRUFBQXpCLEdBQUEsQ0FBQXdCLEVBQUEsQ0FDQSxNQUFBOUssSUFBQSxDQUFBMkMsUUFBQSxDQUFBc08sSUFBQSxFQUFBTyxPQUFBLEVBQUE5SixJQUFBLENBQUFsSyxPQUFBLENBQUFnVSxPQUFBLFdBRUE7QUFDQTlKLElBQUEsQ0FBQUcsVUFBQSxFQUFBSCxJQUFBLENBQUFHLFVBQUEsQ0FBQUMsV0FBQSxDQUFBSixJQUFBLEVBRUE7QUFDQSxLQUFBbEIsT0FBQSxDQUFBOEssY0FBQSxDQUFBSSxXQUFBLENBQUE1RyxFQUFBLENBQUE5SyxJQUFBLEVBRUE7QUFDQSxNQUFBMlIsT0FBQSxDQUFBN0csRUFBQSxDQUFBOEcsZ0JBQUE7QUFDQSxHQUFBdEksR0FBQSxDQUFBdUksUUFBQSxRQUFBdkksR0FBQSxDQUFBdUksUUFBQSxDQUFBL0csRUFBQSxDQUFBZ0gsUUFBQSxDQUFBMVQsTUFBQSxJQUNBLE1BQUEyVCxHQUFBLENBQUFqSCxFQUFBLENBQUFnSCxRQUFBLENBQUF4SSxHQUFBLENBQUF1SSxRQUFBLFFBQ0EvRyxFQUFBLENBQUFQLFlBQUEsQ0FBQW9ILE9BQUEsQ0FBQUksR0FBQSxFQUNBLENBRUE7QUFDQSxLQUFBdkwsT0FBQSxDQUFBNkssbUJBQUEsR0FBQU0sT0FBQSxFQUNBLEtBQUFuTCxPQUFBLENBQUFpTCxZQUFBLEdBQUFFLE9BQUEsRUFDQSxLQUFBbkwsT0FBQSxDQUFBdUssR0FBQSxFQUFBbEwsSUFBQSxHQUFBbE0sSUFBQSxDQUFBdUwsZUFBQSxDQUFBSyxTQUFBLEVBQ0F4QyxFQUFBLENBQUE0TyxPQUFBLENBQ0F2VSxFQUFBLENBQUF1VSxPQUFBLENBQUFuVSxPQUFBLENBQUFKLEVBQUEsQ0FDQUssR0FBQSxDQUFBa1UsT0FBQSxDQUFBblUsT0FBQSxDQUFBQyxHQUNBLEdBQ0EsS0FBQStJLE9BQUEsQ0FBQTdDLEtBQUEsRUFBQUQsaUJBQUEsS0FFQSxZQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBc08sV0FBQSxFQUNBLEtBQUE3SyxXQUFBLENBQUFoRyxPQUFBLENBQUE0QixFQUFBLEdBQ0EsTUFBQWtQLElBQUEsQ0FBQTFELFFBQUEsQ0FBQUMsR0FBQSxHQUFBekwsRUFBQSxFQUNBLEdBQUFrUCxJQUFBLEVBQ0FBLElBQUEsQ0FBQUMsT0FBQSxHQUNBLENBQ0EsR0FDQSxLQUFBL0ssV0FBQSxDQUFBZ0wsS0FBQSxHQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXhZLElBQUEsQ0FBQXlZLFlBQUEsQ0FBQWpOLE1BQUEsQ0FBQUMsTUFBQSxFQUNBaU4sU0FBQSxFQUNBQyxTQUFBLDZCQUNBQyxLQUFBLG9CQUNBQyxVQUFBLHFDQUNBYixPQUFBLHNCQUNBYyxNQUFBLHFCQUNBOVEsR0FBQSxrQkFDQStRLE9BQUEsOEJBQ0EsRUFDQUMsT0FBQSxFQUNBQyxRQUFBLGNBQ0EsRUFDQUMsSUFBQSxFQUNBelYsRUFBQSxXQUNBWSxJQUFBLGFBQ0FtQixNQUFBLGdCQUNBNkUsUUFBQSxrQkFDQXZHLEdBQUEsV0FDQSxDQUNBLEdBRUE5RCxJQUFBLENBQUF1WCx3QkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBNEIsZUFBQUMsR0FBQSxDQUFBQyxVQUFBLElBQUFDLFVBQUEsS0FDQSxNQUFBbFEsRUFBQSxDQUFBekQsUUFBQSxDQUFBOEssYUFBQSxDQUFBMkksR0FBQSxFQUNBLEdBQUFDLFVBQUEsRUFDQWpRLEVBQUEsQ0FBQXNILFNBQUEsQ0FBQTJJLFVBQUEsQ0FDQSxDQUNBLEdBQUFDLFVBQUEsRUFDQWxRLEVBQUEsQ0FBQW1RLFNBQUEsQ0FBQUQsVUFBQSxDQUNBLENBQ0EsT0FBQWxRLEVBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQW9RLG9CQUFBcFEsRUFBQSxDQUFBcVEsUUFBQSxFQUNBak8sTUFBQSxDQUFBa08sT0FBQSxDQUFBRCxRQUFBLEVBQUFqUyxPQUFBLEdBQUE2QixHQUFBLENBQUFzUSxHQUFBLEtBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBQUMsS0FBQSxDQUNBLFVBQUFELEdBQUEsYUFBQUEsR0FBQSxTQUNBLElBQ0FDLEtBQUEsQ0FBQXJYLElBQUEsQ0FBQUksU0FBQSxDQUFBZ1gsR0FBQSxFQUNBLE9BQ0FDLEtBQUEsSUFDQSxDQUNBLE1BQ0FBLEtBQUEsQ0FBQUQsR0FBQSxDQUNBLENBRUF2USxFQUFBLENBQUFwRSxZQUFBLFNBQUFxRSxHQUFBLENBQUF1USxLQUFBLEVBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFwQyx3QkFBQXBPLEVBQUEsRUFDQSxNQUFBa08sSUFBQSxJQUVBLElBQUFsTyxFQUFBLEdBQUFBLEVBQUEsQ0FBQXlRLFVBQUEsRUFDQSxPQUFBdkMsSUFBQSxDQUNBLENBRUFoUixLQUFBLENBQUFDLElBQUEsQ0FBQTZDLEVBQUEsQ0FBQXlRLFVBQUEsRUFBQXJTLE9BQUEsQ0FDQXNTLElBQUEsR0FDQSxHQUFBQSxJQUFBLENBQUF6VixJQUFBLENBQUEwVixVQUFBLFdBQ0EsTUFBQTFRLEdBQUEsQ0FBQXlRLElBQUEsQ0FBQXpWLElBQUEsQ0FBQTVELE9BQUEsY0FDQSxJQUNBNlcsSUFBQSxDQUFBak8sR0FBQSxFQUFBOUcsSUFBQSxDQUFBQyxLQUFBLENBQUFzWCxJQUFBLENBQUFGLEtBQUEsRUFDQSxPQUFBSSxDQUFBLEVBQ0ExQyxJQUFBLENBQUFqTyxHQUFBLEVBQUF5USxJQUFBLENBQUFGLEtBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUVBO0FBQ0EsTUFBQUssZ0JBQUEsQ0FBQXpPLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUE5QyxJQUFBLFVBQ0EsSUFBQTJDLGdCQUFBLEVBQUEzQyxJQUFBLENBQUE3VCxFQUFBLEVBQ0E2VCxJQUFBLENBQUFsTSxLQUFBLENBQUFrTSxJQUFBLENBQUE3VCxFQUFBLENBQUE0VyxNQUFBLElBQUFDLFdBQUEsR0FBQWhELElBQUEsQ0FBQTdULEVBQUEsQ0FBQVUsS0FBQSxJQUNBLENBRUEsT0FBQW1ULElBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFpRCx3QkFBQUMsVUFBQSxFQUNBO0FBQ0EsTUFBQUMsUUFBQSxDQUFBalAsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUksVUFBQSxVQUNBLE1BQUFwUCxLQUFBLENBQUFxUCxRQUFBLENBQUFqYSxNQUFBLENBQUFnYSxVQUFBLENBQUFwUCxLQUFBLEVBQUE1SyxNQUFBLENBQUFnYSxVQUFBLENBQUEvVyxFQUFBLGdCQUVBLE1BQUE4RixJQUFBLENBQUEvSSxNQUFBLENBQUFnYSxVQUFBLENBQUFqUixJQUFBLGFBQ0EsTUFBQW1SLFdBQUEsQ0FBQUYsVUFBQSxDQUFBRyxRQUFBLFNBQUFILFVBQUEsQ0FBQUcsUUFBQSxXQUFBSCxVQUFBLENBQUFHLFFBQUEsTUFBQUgsVUFBQSxDQUFBRyxRQUFBLE9BRUEsTUFBQUMsT0FBQSxDQUFBalYsUUFBQSxDQUFBOEssYUFBQSxRQUVBLE1BQUFvSyxTQUFBLENBQUFsVixRQUFBLENBQUE4SyxhQUFBLFNBQ0FvSyxTQUFBLENBQUFuSyxTQUFBLHlCQUNBbUssU0FBQSxDQUFBQyxXQUFBLENBQUExUCxLQUFBLEVBQUFzUCxXQUFBLFVBQ0FFLE9BQUEsQ0FBQUcsV0FBQSxDQUFBRixTQUFBLEVBRUEsTUFBQUcsUUFBQSxDQUFBclYsUUFBQSxDQUFBOEssYUFBQSxTQUNBdUssUUFBQSxDQUFBdEssU0FBQSx3QkFDQXNLLFFBQUEsQ0FBQUYsV0FBQSxDQUFBdlIsSUFBQSxDQUNBcVIsT0FBQSxDQUFBRyxXQUFBLENBQUFDLFFBQUEsRUFFQSxPQUFBSixPQUFBLENBQUFyQixTQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUEwQixTQUFBQyxFQUFBLENBQUFDLElBQUEsTUFDQSxJQUFBQyxDQUFBLE1BQ0EsZ0JBQUFDLFVBQUEsR0FBQUMsSUFBQSxFQUNBLEdBQUFGLENBQUEsRUFDQUcsWUFBQSxDQUFBSCxDQUFBLEVBQ0EsQ0FDQUEsQ0FBQSxDQUFBL0YsVUFBQSxLQUFBNkYsRUFBQSxDQUFBTSxLQUFBLE1BQUFGLElBQUEsRUFBQUgsSUFBQSxFQUNBLEVBQ0EsQ0FFQSxFQUVBO0FBQ0FuYixJQUFBLENBQUF5YixnQ0FBQSxZQUNBLE1BQUFqVixHQUFBLEtBQUFrVixHQUFBLEdBQ0EsT0FDQUMsU0FBQXBTLElBQUEsQ0FBQXFTLFFBQUEsRUFDQXBWLEdBQUEsQ0FBQXFWLEdBQUEsQ0FBQXJiLE1BQUEsQ0FBQStJLElBQUEsRUFBQXFTLFFBQUEsRUFDQSxFQUNBL0csSUFBQXRMLElBQUEsRUFDQSxPQUFBL0MsR0FBQSxDQUFBcU8sR0FBQSxDQUFBclUsTUFBQSxDQUFBK0ksSUFBQSxHQUNBLENBQ0EsRUFDQSxJQUVBLEdBQUE4SixNQUFBLEVDcHVEQTtBQUNBO0FBQ0E7QUFDQSxVQUFBdFQsQ0FBQSxFQUNBLGFBRUE7QUFDQSxNQUFBQyxJQUFBLENBQUFELENBQUEsQ0FBQUUsYUFBQSxDQUFBRixDQUFBLENBQUFFLGFBQUEsS0FDQSxNQUFBQyxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxDQUFBRixJQUFBLENBQUFFLEVBQUEsS0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FGLElBQUEsQ0FBQThiLG1CQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLGFBQUEsRUFDQSxPQUNBeFMsSUFBQSxTQUNBNkIsS0FBQSxTQUNBL0csSUFBQSxTQUNBMlgsT0FBQSxJQUNBQyxXQUFBLElBQ0F0QixRQUFBLE9BQ0F1QixTQUFBLElBQ0FDLFNBQUEsSUFDQUMsT0FBQSxJQUNBQyxRQUFBLElBQ0FDLElBQUEsR0FDQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLGVBQUFqRixJQUFBLEVBQ0EsSUFBQWtGLENBQUEsQ0FBQWxGLElBQUEsS0FDQSxJQUFBbUYsUUFBQSxNQUFBVixZQUFBLEdBQ0EsSUFBQVcsR0FBQSxJQUNBLElBQUFDLENBQUEsQ0FFQSxJQUFBQSxDQUFBLElBQUFGLFFBQUEsRUFDQSxHQUFBalIsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQXFDLFFBQUEsQ0FBQUUsQ0FBQSxHQUNBRCxHQUFBLENBQUFDLENBQUEsRUFBQUYsUUFBQSxDQUFBRSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLElBQUFBLENBQUEsSUFBQUgsQ0FBQSxFQUNBLEdBQUFoUixNQUFBLENBQUEwTyxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBb0MsQ0FBQSxDQUFBRyxDQUFBLEdBQ0FELEdBQUEsQ0FBQUMsQ0FBQSxFQUFBSCxDQUFBLENBQUFHLENBQUEsRUFDQSxDQUNBLENBQ0EsT0FBQUQsR0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFFLGFBQUFDLFdBQUEsRUFFQTtBQUNBLElBQUFBLFdBQUEsR0FBQXhKLE1BQUEsQ0FBQXlKLEVBQUEsR0FBQUEsRUFBQSxDQUFBQyxRQUFBLEVBQ0EsWUFDQSxDQUNBLE1BQUFDLEtBQUEsQ0FBQUgsV0FBQSxDQUFBOUMsVUFBQSxVQUFBOEMsV0FBQSxTQUFBQSxXQUFBLENBQ0EsSUFBQWxYLFFBQUEsQ0FBQUMsY0FBQSxDQUFBb1gsS0FBQSxHQUNBLFlBQ0EsQ0FFQSxJQUFBaGQsSUFBQSxDQUFBaWQsbUJBQUEsRUFDQWpkLElBQUEsQ0FBQWlkLG1CQUFBLElBQ0EsQ0FFQTtBQUNBLE1BQUE1VCxHQUFBLENBQUF3VCxXQUFBLENBQUFwYyxPQUFBLGNBQ0EsR0FBQVQsSUFBQSxDQUFBaWQsbUJBQUEsQ0FBQTVULEdBQUEsR0FDQSxPQUFBckosSUFBQSxDQUFBaWQsbUJBQUEsQ0FBQTVULEdBQUEsRUFDQSxDQUVBLE1BQUE2VCxRQUFBLENBQUFKLEVBQUEsQ0FBQUMsUUFBQSxDQUFBMVQsR0FBQTtBQUNBLEdBQUE2VCxRQUFBLEVBQ0FsZCxJQUFBLENBQUFpZCxtQkFBQSxDQUFBNVQsR0FBQSxFQUFBNlQsUUFBQSxDQUNBLENBRUEsT0FBQUEsUUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLE9BQUEvVCxFQUFBLENBQUFrTyxJQUFBLENBQUE4RixHQUFBLEVBQ0EsSUFBQWhVLEVBQUEsRUFDQSxPQUNBLENBRUEsSUFBQWlVLE9BQUEsTUFBQVQsWUFBQSxNQUFBQyxXQUFBLEVBQ0EsSUFBQUwsQ0FBQSxNQUFBRCxjQUFBLENBQUFqRixJQUFBLEVBRUEsSUFBQWpYLENBQUEsQ0FBQStjLEdBQUEsRUFBQUEsR0FBQSxDQUFBRSxLQUFBLENBQUFGLEdBQUEsQ0FBQUUsS0FBQSxDQUFBdGQsSUFBQSxDQUFBRyxpQkFBQSxDQUVBO0FBQ0EsR0FBQUUsQ0FBQSxFQUNBbWMsQ0FBQSxDQUFBUixPQUFBLENBQUFRLENBQUEsQ0FBQVIsT0FBQSxDQUFBM2IsQ0FBQSxDQUFBTyxnQkFBQSxDQUFBSixNQUFBLENBQUFnYyxDQUFBLENBQUFSLE9BQUEsTUFDQVEsQ0FBQSxDQUFBblksSUFBQSxDQUFBaEUsQ0FBQSxDQUFBVSxrQkFBQSxDQUFBUCxNQUFBLENBQUFnYyxDQUFBLENBQUFuWSxJQUFBLEVBQUFtWSxDQUFBLENBQUEvWSxFQUFBLFlBQ0EsTUFDQStZLENBQUEsQ0FBQVIsT0FBQSxDQUFBUSxDQUFBLENBQUFSLE9BQUEsQ0FBQXhiLE1BQUEsQ0FBQWdjLENBQUEsQ0FBQVIsT0FBQSxLQUNBUSxDQUFBLENBQUFuWSxJQUFBLENBQUE3RCxNQUFBLENBQUFnYyxDQUFBLENBQUFuWSxJQUFBLEVBQUFtWSxDQUFBLENBQUEvWSxFQUFBLFdBQ0EsQ0FFQTtBQUNBLEdBQUE0WixPQUFBLEVBQ0FqVSxFQUFBLENBQUFtUSxTQUFBLENBQUE4RCxPQUFBLENBQUFiLENBQUEsRUFFQTtBQUNBLE1BQUEvVCxLQUFBLENBQUFXLEVBQUEsQ0FBQXJGLGFBQUEsNEJBQ0EsR0FBQTBFLEtBQUEsRUFDQSxHQUFBK1QsQ0FBQSxDQUFBUCxXQUFBLE9BQUF4VCxLQUFBLENBQUF6RCxZQUFBLGVBQUF4RSxNQUFBLENBQUFnYyxDQUFBLENBQUFQLFdBQUEsR0FDQSxHQUFBTyxDQUFBLENBQUFlLEtBQUEsT0FBQTlVLEtBQUEsQ0FBQXpELFlBQUEsU0FBQXhFLE1BQUEsQ0FBQWdjLENBQUEsQ0FBQWUsS0FBQSxHQUNBLENBRUEsTUFDQW5VLEVBQUEsQ0FBQW1RLFNBQUEsQ0FBQXZaLElBQUEsQ0FBQXVYLHdCQUFBLENBQUFnRCx1QkFBQSxDQUFBaUMsQ0FBQSxFQUNBLENBRUFwVCxFQUFBLENBQUF2RixPQUFBLENBQUEwRixJQUFBLENBQUFpVCxDQUFBLENBQUFqVCxJQUFBLFVBQ0FILEVBQUEsQ0FBQXBFLFlBQUEsY0FBQXdYLENBQUEsQ0FBQXBSLEtBQUEsT0FBQTVLLE1BQUEsQ0FBQWdjLENBQUEsQ0FBQXBSLEtBQUE7QUFDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFvUyxjQUFBbEcsSUFBQSxDQUFBbE8sRUFBQSxDQUFBcVUsSUFBQSxFQUVBLE1BQUFDLE9BQUEsQ0FBQUQsSUFBQSxFQUFBQSxJQUFBLENBQUFDLE9BQUEsQ0FBQWxkLE1BQUEsQ0FBQWlkLElBQUEsQ0FBQUMsT0FBQSxLQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFBQSxPQUFBLFdBQUFwRyxJQUFBLEVBQ0EsSUFDQSxNQUFBcUcsSUFBQSxhQUFBNUIsWUFBQSxtQkFBQUEsWUFBQSxRQUNBLEdBQUE0QixJQUFBLEVBQUFuUyxNQUFBLENBQUEwTyxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBdUQsSUFBQSxVQUNBLE1BQUFsVCxPQUFBLENBQUFlLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUE5QyxJQUFBLFNBQUFBLElBQUEsQ0FBQWdGLElBQUEsQ0FBQXNCLFNBQUEsQ0FDQSxNQUFBQyxRQUFBLENBQUFwVCxPQUFBLEdBQUFtVCxTQUFBLEVBQUFuVCxPQUFBLFNBQUFqSyxNQUFBLENBQUFpSyxPQUFBLE9BQ0EsTUFBQXFULFVBQUEsQ0FBQUgsSUFBQSxDQUFBckIsSUFBQSxDQUVBLElBQUF1QixRQUFBLEVBQUFDLFVBQUEsUUFBQXRkLE1BQUEsQ0FBQXNkLFVBQUEsUUFDQTtBQUNBeEcsSUFBQSxDQUFBZ0YsSUFBQSxDQUFBd0IsVUFBQSxDQUVBO0FBQ0EsR0FBQTFVLEVBQUEsRUFDQUEsRUFBQSxDQUFBdkYsT0FBQSxDQUFBeVksSUFBQSxDQUFBOWIsTUFBQSxDQUFBc2QsVUFBQSxFQUVBO0FBQ0EsSUFDQTlkLElBQUEsQ0FBQStkLFNBQUEsRUFBQUMsaUJBQUEsR0FBQTVVLEVBQUEsUUFBQTBVLFVBQUEsRUFDQTFVLEVBQUEsQ0FBQWdELGFBQUEsQ0FDQSxJQUFBQyxXQUFBLGdDQUFBQyxPQUFBLE1BQUFILE1BQUEsRUFBQTlDLEdBQUEsUUFBQXVRLEtBQUEsQ0FBQWtFLFVBQUEsR0FDQSxFQUNBLE9BQUFHLE1BQUEsR0FDQSxDQUNBLENBQ0EsQ0FDQSxPQUFBQyxFQUFBLEdBQ0EsQ0FDQTtBQUVBLEdBQUFSLE9BQUEsWUFBQWxTLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUE5QyxJQUFBLFdBQ0EsTUFBQXFHLElBQUEsTUFBQTVCLFlBQUEsR0FDQXpFLElBQUEsQ0FBQWxNLEtBQUEsQ0FBQXVTLElBQUEsQ0FBQXZTLEtBQUEsVUFDQWhDLEVBQUEsQ0FBQXBFLFlBQUEsY0FBQXNTLElBQUEsQ0FBQWxNLEtBQUEsRUFDQSxDQUNBO0FBQ0EsR0FBQXNTLE9BQUEsV0FDQXRVLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXNhLEtBQUE7QUFDQS9VLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXVhLFFBQUEsS0FDQWhWLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQXdhLFVBQUEsS0FDQTtBQUNBLElBQ0EsTUFBQXBYLENBQUEsQ0FBQXdXLElBQUEsRUFBQTVRLE9BQUEsQ0FDQSxHQUFBNUYsQ0FBQSxFQUFBeEQsRUFBQSxJQUFBMkYsRUFBQSxDQUFBa1YsWUFBQSxnQkFBQWxWLEVBQUEsQ0FBQWhFLFlBQUEsZ0JBQ0EsTUFBQW1aLENBQUEsQ0FBQXZlLElBQUEsQ0FBQUcsaUJBQUEsQ0FDQSxNQUFBcUQsSUFBQSxDQUFBK2EsQ0FBQSxDQUFBeGQsa0JBQUEsQ0FBQXFJLEVBQUEsQ0FBQWhFLFlBQUEsYUFBQWtTLElBQUEsRUFBQTdULEVBQUEsRUFBQTZULElBQUEsRUFBQS9OLElBQUEsV0FDQSxNQUFBaVYsSUFBQSxDQUFBdlgsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBVyx3QkFBQSxDQUFBWixJQUFBLENBQUE0RixFQUFBLEVBQ0FBLEVBQUEsQ0FBQXBFLFlBQUEsYUFBQXdaLElBQUEsRUFDQXBWLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQTRhLGlCQUFBLEtBQ0EsQ0FDQSxPQUFBaGMsQ0FBQSxHQUVBLFNBQUFpYixPQUFBLFdBQ0F0VSxFQUFBLENBQUF2RixPQUFBLENBQUFzYSxLQUFBLEtBQ0EvVSxFQUFBLENBQUF2RixPQUFBLENBQUF1YSxRQUFBLEtBQ0FoVixFQUFBLENBQUF2RixPQUFBLENBQUF3YSxVQUFBO0FBQ0EsQ0FDQSxDQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBSyxnQkFBQXRULEtBQUEsRUFDQSxNQUFBL0ssQ0FBQSxDQUFBTCxJQUFBLENBQUFHLGlCQUFBLENBQUFZLGtCQUFBLENBQUFQLE1BQUEsQ0FBQTRLLEtBQUEsT0FDQSxPQUFBL0ssQ0FBQSxDQUFBZ0IsV0FBQSxZQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBc2QsMEJBQUE5UixPQUFBLENBQUF6RCxFQUFBLENBQUF3VixRQUFBLEVBQ0EsSUFBQS9SLE9BQUEsR0FBQXpELEVBQUEsUUFDQSxHQUFBQSxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLDZCQUVBLE1BQUErWSxTQUFBLENBQUF6VixFQUFBLENBQUF2RixPQUFBLENBQUF1YSxRQUFBLE9BRUEsTUFBQVUsV0FBQSxDQUFBMVYsRUFBQSxDQUFBdkYsT0FBQSxDQUFBNGEsaUJBQUEsT0FDQSxNQUFBTSxRQUFBLENBQUEzVixFQUFBLENBQUF2RixPQUFBLENBQUF3YSxVQUFBLE9BRUEsSUFBQVEsU0FBQSxFQUFBQyxXQUFBLEVBQUFDLFFBQUEsUUFFQTtBQUNBLE1BQUFSLENBQUEsQ0FBQXZlLElBQUEsQ0FBQUcsaUJBQUEsQ0FFQSxNQUFBcUQsSUFBQSxNQUFBa2IsZUFBQSxDQUFBRSxRQUFBLEVBQ0EsTUFBQTdaLE1BQUEsQ0FBQThILE9BQUEsQ0FBQXBKLEVBQUEsQ0FBQVcsd0JBQUEsQ0FBQVosSUFBQSxDQUFBNEYsRUFBQSxFQUNBQSxFQUFBLENBQUFwRSxZQUFBLGFBQUFELE1BQUEsRUFFQSxNQUFBaWEsR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHdCQUNBLE1BQUFxWixRQUFBLENBQUFELEdBQUEsRUFBQWpiLGFBQUEsZ0NBQ0EsR0FBQWtiLFFBQUEsWUFBQUEsUUFBQSxFQUFBQSxRQUFBLENBQUFyRixLQUFBLEdBQUE3VSxNQUFBLENBQUFrYSxRQUFBLENBQUFyRixLQUFBLENBQUE3VSxNQUFBLENBQ0EsQ0FHQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQS9FLElBQUEsQ0FBQWtmLG9CQUFBLGVBQUFsZixJQUFBLENBQUE4YixtQkFBQSxDQUVBLE9BQUFlLFdBQUE7QUFDQSxPQUFBc0Msc0JBQUE7QUFDQSxPQUFBQyxJQUFBLFVBQ0EsT0FBQUMsWUFBQSxPQUNBLE9BQUFDLFdBQUEsTUFFQTtBQUNBLE9BQUFDLEVBQUEsRUFDQUMsSUFBQSwyQkFDQUMsTUFBQSwwREFDQXpYLEdBQUEsMEJBQ0FvRCxLQUFBLHdCQUNBd08sS0FBQSx3QkFDQThGLE1BQUEsK0JBQ0FDLE9BQUEsa0JBRUFDLFdBQUEsMEJBQ0FDLFlBQUEsbURBQ0FDLFlBQUEseURBQ0FDLGlCQUFBLHFEQUNBQyxnQkFBQSx3QkFDQUMsVUFBQSxnREFFQTtBQUNBQyxTQUFBLHlCQUNBQyxXQUFBLGlDQUNBQyxXQUFBLDRDQUNBO0FBQ0FDLGlCQUFBLHdEQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFDLHVCQUFBbFYsS0FBQSxDQUFBbVYsT0FBQSxFQUNBLE1BQUFoQyxDQUFBLENBQUF2ZSxJQUFBLENBQUFHLGlCQUFBLENBQ0EsR0FBQW9nQixPQUFBLEVBQ0EsT0FBQWhDLENBQUEsU0FBQUEsQ0FBQSxDQUFBcGQsUUFBQSxjQUNBb2QsQ0FBQSxDQUFBcGQsUUFBQSxDQUFBWCxNQUFBLENBQUE0SyxLQUFBLE9BQ0E1SyxNQUFBLENBQUE0SyxLQUFBLE1BQUF2SyxJQUFBLEdBQUFRLFdBQUEsR0FBQVosT0FBQSxhQUFBQSxPQUFBLGVBQ0EsQ0FDQTtBQUNBLE9BQUFELE1BQUEsQ0FBQTRLLEtBQUEsVUFBQUEsS0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFvVix5QkFBQUMsS0FBQSxFQUNBLE1BQUFDLEdBQUEsQ0FBQUQsS0FBQSxFQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBYyxpQkFBQSxFQUNBLFNBQUFLLEdBQUEsRUFBQUEsR0FBQSxDQUFBQyxPQUFBLEVBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBQyw2QkFBQUgsS0FBQSxFQUNBLE1BQUFGLE9BQUEsTUFBQUMsd0JBQUEsQ0FBQUMsS0FBQSxFQUNBLE1BQUFJLElBQUEsQ0FBQUosS0FBQSxFQUFBamMsZ0JBQUEsTUFBQSthLEVBQUEsQ0FBQXZYLEdBQUEsTUFFQSxRQUFBUCxDQUFBLEdBQUFBLENBQUEsQ0FBQW9aLElBQUEsQ0FBQXBjLE1BQUEsQ0FBQWdELENBQUEsSUFDQSxNQUFBbUMsQ0FBQSxDQUFBaVgsSUFBQSxDQUFBcFosQ0FBQSxFQUNBLE1BQUFxWixNQUFBLENBQUFsWCxDQUFBLENBQUE3RixhQUFBLE1BQUF3YixFQUFBLENBQUFuVSxLQUFBLEVBQ0EsTUFBQTJWLE1BQUEsQ0FBQW5YLENBQUEsQ0FBQTdGLGFBQUEsTUFBQXdiLEVBQUEsQ0FBQTNGLEtBQUEsRUFDQSxJQUFBbUgsTUFBQSxVQUVBLEdBQUFSLE9BQUEsRUFDQTtBQUNBUSxNQUFBLENBQUF4YixlQUFBLGFBQ0F3YixNQUFBLENBQUFyYSxLQUFBLENBQUFzYSxPQUFBLElBRUE7QUFDQSxNQUFBQyxRQUFBLEdBQUFGLE1BQUEsQ0FBQWxkLE9BQUEsQ0FBQXFkLFlBQUEsQ0FDQSxNQUFBQyxVQUFBLENBQUF2WCxDQUFBLENBQUEvRixPQUFBLENBQUF1ZCxrQkFBQSxPQUVBLEdBQUFILFFBQUEsR0FBQUUsVUFBQSxFQUNBSixNQUFBLENBQUFuSCxLQUFBLENBQUFtSCxNQUFBLENBQUFsZCxPQUFBLENBQUFxZCxZQUFBLENBQ0EsVUFBQUQsUUFBQSxFQUNBO0FBQ0EsTUFBQUksR0FBQSxDQUFBUCxNQUFBLENBQUFBLE1BQUEsQ0FBQWxILEtBQUEsSUFDQSxNQUFBMEgsUUFBQSxNQUFBaEIsc0JBQUEsQ0FBQWUsR0FBQSxvQkFDQSxHQUFBTixNQUFBLENBQUFuSCxLQUFBLEdBQUEwSCxRQUFBLEVBQ0FQLE1BQUEsQ0FBQW5ILEtBQUEsTUFBQTBHLHNCQUFBLENBQUFlLEdBQUEsbUJBQ0EsQ0FDQSxDQUNBLE1BQ0E7QUFDQSxJQUFBTixNQUFBLENBQUFsZCxPQUFBLENBQUFxZCxZQUFBLEVBQ0FILE1BQUEsQ0FBQWxkLE9BQUEsQ0FBQXFkLFlBQUEsQ0FBQUgsTUFBQSxDQUFBbkgsS0FBQSxLQUNBLENBQ0EsTUFBQXlILEdBQUEsQ0FBQVAsTUFBQSxDQUFBQSxNQUFBLENBQUFsSCxLQUFBLElBQ0FtSCxNQUFBLENBQUFuSCxLQUFBLE1BQUEwRyxzQkFBQSxDQUFBZSxHQUFBLG9CQUVBTixNQUFBLENBQUEvYixZQUFBLHdCQUNBK2IsTUFBQSxDQUFBcmEsS0FBQSxDQUFBc2EsT0FBQSxRQUNBO0FBQ0EsQ0FDQSxDQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFPLDBCQUFBdlosR0FBQSxFQUNBLE9BQUFBLEdBQUEsRUFBQW5FLE9BQUEsRUFBQXVkLGtCQUFBLE9BQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFJLDRCQUFBeFosR0FBQSxFQUNBLEdBQUFBLEdBQUEsQ0FBQUEsR0FBQSxDQUFBbkUsT0FBQSxDQUFBdWQsa0JBQUEsS0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBSyxxQkFBQXpaLEdBQUEsRUFDQSxHQUFBQSxHQUFBLEVBQ0EsSUFBQUEsR0FBQSxDQUFBbkUsT0FBQSxDQUFBdWQsa0JBQUEsRUFDQXBaLEdBQUEsQ0FBQW5FLE9BQUEsQ0FBQXVkLGtCQUFBLEtBQ0EsQ0FDQSxDQUNBLENBRUE7QUFDQSxPQUFBckYsYUFBQSxFQUNBLE9BQ0F4UyxJQUFBLE1BQUE2VixJQUFBLENBQ0FoVSxLQUFBLFVBQ0EvRyxJQUFBLElBQ0EyWCxPQUFBLElBQ0FDLFdBQUEsa0JBQ0F0QixRQUFBLE9BQ0ErRyxRQUFBLE9BQ0FDLElBQUEsTUFDQXRGLFFBQUEsSUFDQUMsSUFBQSxJQUNBc0YsYUFBQSxJQUNBQyxPQUFBLEVBQ0EsQ0FBQXpXLEtBQUEsWUFBQXdPLEtBQUEsWUFBQVgsUUFBQSxRQUNBLENBQUE3TixLQUFBLFlBQUF3TyxLQUFBLFlBQUFYLFFBQUEsUUFDQSxDQUFBN04sS0FBQSxZQUFBd08sS0FBQSxZQUFBWCxRQUFBLFFBQ0EsQ0FBQTdOLEtBQUEsWUFBQXdPLEtBQUEsWUFBQVgsUUFBQSxRQUNBLENBQ0E2SSxTQUFBLFFBQ0EsRUFDQSxDQUVBO0FBQ0EsT0FBQTNFLE9BQUEvVCxFQUFBLENBQUFrTyxJQUFBLENBQUE4RixHQUFBLEVBQ0EsSUFBQWhVLEVBQUEsUUFFQSxNQUFBb1QsQ0FBQSxNQUFBRCxjQUFBLENBQUFqRixJQUFBLEVBRUEsR0FBQWtGLENBQUEsQ0FBQXNGLFNBQUEsUUFDQTFZLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQWllLFNBQUEsQ0FBQXRoQixNQUFBLENBQUFnYyxDQUFBLENBQUFzRixTQUFBLEVBQ0EsSUFDQTFZLEVBQUEsQ0FBQTFDLEtBQUEsQ0FBQTZJLFdBQUEsa0JBQUEvTyxNQUFBLENBQUFnYyxDQUFBLENBQUFzRixTQUFBLEdBQ0EsT0FBQXJmLENBQUEsRUFDQSxDQUNBLENBQ0EsR0FBQStaLENBQUEsQ0FBQVIsT0FBQSxPQUFBNVMsRUFBQSxDQUFBdkYsT0FBQSxDQUFBbVksT0FBQSxDQUFBeGIsTUFBQSxDQUFBZ2MsQ0FBQSxDQUFBUixPQUFBLE1BQ0EsR0FBQVEsQ0FBQSxDQUFBSCxRQUFBLE9BQUFqVCxFQUFBLENBQUF2RixPQUFBLENBQUF3WSxRQUFBLENBQUE3YixNQUFBLENBQUFnYyxDQUFBLENBQUFILFFBQUEsTUFDQSxHQUFBRyxDQUFBLENBQUFQLFdBQUEsT0FBQTdTLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQW9ZLFdBQUEsQ0FBQXpiLE1BQUEsQ0FBQWdjLENBQUEsQ0FBQVAsV0FBQSxNQUVBLE1BQUE4RixHQUFBLE1BQUFuRixZQUFBLE1BQUFDLFdBQUEsRUFDQSxVQUFBa0YsR0FBQSxlQUNBM1ksRUFBQSxDQUFBbVEsU0FBQSx1RUFBQXNELFdBQUEsV0FDQSxPQUNBLENBRUEsSUFDQXpULEVBQUEsQ0FBQW1RLFNBQUEsQ0FBQXdJLEdBQUEsQ0FBQXZGLENBQUEsRUFDQSxPQUFBeEMsQ0FBQSxFQUNBM0csTUFBQSxDQUFBMk8sS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLHdCQUFBbVgsQ0FBQSxFQUNBNVEsRUFBQSxDQUFBbVEsU0FBQSxrRkFDQSxPQUNBLENBRUFuUSxFQUFBLENBQUF2RixPQUFBLENBQUEwRixJQUFBLENBQUFpVCxDQUFBLENBQUFqVCxJQUFBLE9BQUE2VixJQUFBLENBQ0FoVyxFQUFBLENBQUFwRSxZQUFBLGNBQUF3WCxDQUFBLENBQUFwUixLQUFBLE9BQUE1SyxNQUFBLENBQUFnYyxDQUFBLENBQUFwUixLQUFBLE1BRUEsSUFDQXBMLElBQUEsQ0FBQUUsRUFBQSxFQUFBZ2lCLGdCQUFBLEVBQUF2TCxNQUFBLEdBQUF5RyxHQUFBLEVBQUF2USxPQUFBLENBQUF6RCxFQUFBLEVBQ0EsT0FBQTNHLENBQUEsRUFDQSxDQUVBLElBQUEyRyxFQUFBLENBQUF2RixPQUFBLENBQUFnZSxPQUFBLEVBQUF2YixLQUFBLENBQUE0QixPQUFBLENBQUFzVSxDQUFBLENBQUFxRixPQUFBLEdBQUFyRixDQUFBLENBQUFxRixPQUFBLENBQUFwZCxNQUFBLEVBQ0EsSUFDQTJFLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQWdlLE9BQUEsQ0FBQXRmLElBQUEsQ0FBQUksU0FBQSxDQUFBNlosQ0FBQSxDQUFBcUYsT0FBQSxFQUNBLE9BQUFwZixDQUFBLEVBQ0EsQ0FDQSxDQUNBLENBRUE7QUFDQSxPQUFBK2EsY0FBQWxHLElBQUEsQ0FBQWxPLEVBQUEsQ0FBQXFVLElBQUEsRUFDQSxJQUNBLE1BQUFELGFBQUEsR0FBQWxHLElBQUEsQ0FBQWxPLEVBQUEsQ0FBQXFVLElBQUEsRUFDQSxPQUFBaGIsQ0FBQSxFQUNBLENBRUEsTUFBQTBmLE9BQUEsQ0FBQTFFLElBQUEsRUFBQUEsSUFBQSxDQUFBQyxPQUFBLFVBRUEsR0FBQXlFLE9BQUEsRUFDQSxJQUFBN2IsS0FBQSxDQUFBNEIsT0FBQSxDQUFBb1AsSUFBQSxDQUFBdUssT0FBQSxJQUFBdkssSUFBQSxDQUFBdUssT0FBQSxDQUFBcGQsTUFBQSxFQUNBLE1BQUF1QixJQUFBLE9BQUErVixZQUFBLEdBQUE4RixPQUFBLE1BQUFyYixHQUFBLENBQUE0YixDQUFBLElBQ0FoWCxLQUFBLENBQUFnWCxDQUFBLENBQUFoWCxLQUFBLENBQ0F3TyxLQUFBLENBQUF3SSxDQUFBLENBQUF4SSxLQUFBLENBQ0FYLFFBQUEsR0FBQW1KLENBQUEsQ0FBQW5KLFFBQ0EsSUFDQTNCLElBQUEsQ0FBQXVLLE9BQUEsQ0FBQTdiLElBQUEsQ0FDQSxJQUNBb0QsRUFBQSxDQUFBdkYsT0FBQSxDQUFBZ2UsT0FBQSxDQUFBdGYsSUFBQSxDQUFBSSxTQUFBLENBQUFxRCxJQUFBLEVBQ0FvRCxFQUFBLENBQUFnRCxhQUFBLEtBQUFDLFdBQUEsZ0NBQUFDLE9BQUEsTUFDQUgsTUFBQSxFQUNBOUMsR0FBQSxXQUNBdVEsS0FBQSxDQUFBNVQsSUFDQSxDQUNBLElBQ0FoRyxJQUFBLENBQUErZCxTQUFBLEVBQUFDLGlCQUFBLEdBQUE1VSxFQUFBLFdBQUFwRCxJQUFBLEVBQ0EsT0FBQXZELENBQUEsRUFDQSxDQUNBLENBRUEsTUFBQTRmLEVBQUEsRUFBQS9LLElBQUEsQ0FBQTJFLFdBQUEsTUFBQS9YLFFBQUEsR0FBQXJELElBQUEsR0FDQSxJQUFBd2hCLEVBQUEsRUFDQSxNQUFBQyxJQUFBLE1BQUF2RyxZQUFBLEdBQUFFLFdBQUEsbUJBQ0EzRSxJQUFBLENBQUEyRSxXQUFBLENBQUFxRyxJQUFBLENBQ0EsSUFDQWxaLEVBQUEsQ0FBQXZGLE9BQUEsQ0FBQW9ZLFdBQUEsQ0FBQXpiLE1BQUEsQ0FBQThoQixJQUFBLEVBQ0FsWixFQUFBLENBQUFnRCxhQUFBLEtBQUFDLFdBQUEsZ0NBQUFDLE9BQUEsTUFDQUgsTUFBQSxFQUNBOUMsR0FBQSxlQUNBdVEsS0FBQSxDQUFBMEksSUFDQSxDQUNBLElBQ0F0aUIsSUFBQSxDQUFBK2QsU0FBQSxFQUFBQyxpQkFBQSxHQUFBNVUsRUFBQSxlQUFBa1osSUFBQSxFQUNBLE9BQUE3ZixDQUFBLEVBQ0EsQ0FDQSxDQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxPQUFBOGYsZUFBQW5aLEVBQUEsRUFDQSxPQUFBQSxFQUFBLEVBQUFnSSxPQUFBLGtDQUFBaEksRUFBQSxFQUFBZ0ksT0FBQSxpQ0FDQSxDQUVBLE9BQUFvUixTQUFBL0IsS0FBQSxFQUNBLE9BQUFBLEtBQUEsQ0FBQUEsS0FBQSxDQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBQyxJQUFBLE9BQ0EsQ0FFQSxPQUFBaUQsV0FBQWhDLEtBQUEsRUFDQSxPQUFBQSxLQUFBLENBQUFBLEtBQUEsQ0FBQTFjLGFBQUEsTUFBQXdiLEVBQUEsQ0FBQUUsTUFBQSxPQUNBLENBRUEsT0FBQWlELFNBQUEsRUFDQSwyQkFBQXhnQixJQUFBLENBQUErQixNQUFBLEdBQUFDLFFBQUEsS0FBQUMsS0FBQSxPQUNBLENBRUEsT0FBQXdlLFdBQUFsQyxLQUFBLENBQUFuSixJQUFBLEVBQ0EsTUFBQWtJLElBQUEsTUFBQWdELFFBQUEsQ0FBQS9CLEtBQUEsRUFDQSxJQUFBakIsSUFBQSxRQUVBLE1BQUFvRCxHQUFBLENBQUFwRCxJQUFBLENBQUFySCxRQUFBLENBQUExVCxNQUFBLENBQ0EsTUFBQW9lLElBQUEsQ0FBQXJYLE1BQUEsQ0FBQXNYLE1BQUEsRUFBQTFYLEtBQUEsSUFBQXdPLEtBQUEsSUFBQVgsUUFBQSxPQUFBOEosS0FBQSxDQUFBSCxHQUFBLEVBQUF0TCxJQUFBLE1BQ0EsSUFBQXVMLElBQUEsQ0FBQS9lLEdBQUEsQ0FBQStlLElBQUEsQ0FBQS9lLEdBQUEsTUFBQTRlLFFBQUEsR0FFQSxNQUFBTSxNQUFBLE1BQUE3RCxzQkFBQSxDQUNBLE1BQUE0QyxHQUFBLENBQUExTyxNQUFBLENBQUF5SixFQUFBLEVBQUFBLEVBQUEsQ0FBQUMsUUFBQSxDQUFBRCxFQUFBLENBQUFDLFFBQUEsQ0FBQWlHLE1BQUEsT0FDQSxNQUFBQyxJQUFBLENBQUFsQixHQUFBLENBQUFBLEdBQUEsQ0FBQWMsSUFBQSxPQUVBO0FBQ0EsTUFBQUssSUFBQSxDQUFBdmQsUUFBQSxDQUFBOEssYUFBQSxRQUNBeVMsSUFBQSxDQUFBM0osU0FBQSxDQUFBMEosSUFBQSxFQUNBLG1EQUFBSixJQUFBLENBQUFFLEtBQUEsVUFDQSwyRkFDQSw4RUFBQUYsSUFBQSxDQUFBelgsS0FBQSxXQUNBLDhFQUFBeVgsSUFBQSxDQUFBakosS0FBQSxXQUNBLHVDQUNBLG1EQUNBLGtGQUFBaUosSUFBQSxDQUFBL2UsR0FBQSxxQkFBQStlLElBQUEsQ0FBQTVKLFFBQUEsMkRBQ0Esa0RBQUE0SixJQUFBLENBQUEvZSxHQUFBLGNBQ0EsNkNBQUErZSxJQUFBLENBQUEvZSxHQUFBLHFCQUNBLFNBQ0EsU0FDQTtBQUNBLHFFQUNBLGtIQUNBLHVEQUNBLE9BQ0EsMEVBQ0EsT0FDQSwyRkFDQSxVQUNBLHdEQUNBLE9BQ0EsUUFDQSxPQUNBLDJGQUNBLFlBQ0EsMERBQ0EsT0FDQSxRQUNBLDRCQUNBLE9BQ0Esd0ZBQ0EsU0FDQSw0REFDQSxPQUNBLFFBQ0EsUUFDQSxTQUNBLFFBQ0EsQ0FFQSxNQUFBcWYsSUFBQSxDQUFBRCxJQUFBLENBQUFFLGlCQUFBLENBQ0EsSUFBQUQsSUFBQSxFQUNBLE9BQ0EsQ0FDQTtBQUNBLE1BQUE1QyxPQUFBLE1BQUFDLHdCQUFBLENBQUFDLEtBQUEsRUFDQSxNQUFBNEMsS0FBQSxDQUFBRixJQUFBLENBQUFwZixhQUFBLE1BQUF3YixFQUFBLENBQUEzRixLQUFBLEVBQ0EsTUFBQTBKLEtBQUEsQ0FBQUgsSUFBQSxDQUFBcGYsYUFBQSxNQUFBd2IsRUFBQSxDQUFBblUsS0FBQSxFQUVBLElBQUFtVixPQUFBLEVBQUE4QyxLQUFBLEVBQ0EsSUFBQUEsS0FBQSxDQUFBeGYsT0FBQSxDQUFBcWQsWUFBQSxFQUNBbUMsS0FBQSxDQUFBeGYsT0FBQSxDQUFBcWQsWUFBQSxDQUFBbUMsS0FBQSxDQUFBekosS0FBQSxLQUNBLENBQ0EsR0FBQTBKLEtBQUEsQ0FBQUQsS0FBQSxDQUFBekosS0FBQSxNQUFBMEcsc0JBQUEsQ0FBQWdELEtBQUEsQ0FBQTFKLEtBQUEsUUFDQXlKLEtBQUEsQ0FBQXJlLFlBQUEsd0JBQ0FxZSxLQUFBLENBQUEzYyxLQUFBLENBQUFzYSxPQUFBLFFBQ0EsQ0FHQSxLQUFBUyxvQkFBQSxDQUFBMEIsSUFBQSxFQUNBM0QsSUFBQSxDQUFBekUsV0FBQSxDQUFBb0ksSUFBQSxFQUVBO0FBQ0EsS0FBQXZDLDRCQUFBLENBQUFILEtBQUEsRUFDQSxDQUVBLE9BQUE4QyxlQUFBQyxTQUFBLEVBQ0EsSUFDQSxJQUFBalAsSUFBQSxDQUFBaVAsU0FBQSxFQUFBcFMsT0FBQSxRQUFBbU8sRUFBQSxDQUFBVyxTQUFBLEVBQ0EsR0FBQTNMLElBQUEsRUFDQTtBQUNBQSxJQUFBLENBQUF0TSxTQUFBLENBQUErRixNQUFBLFNBQ0E7QUFDQSxJQUFBb04sQ0FBQSxDQUFBN0csSUFBQSxDQUFBeFEsYUFBQSxNQUFBd2IsRUFBQSxDQUFBWSxXQUFBLEVBQ0EsR0FBQS9FLENBQUEsRUFDQUEsQ0FBQSxDQUFBcFcsWUFBQSwwQkFDQSxDQUNBLENBQ0EsT0FBQXZDLENBQUEsR0FDQSxDQUVBLE9BQUFnaEIsYUFBQUMsUUFBQSxDQUFBQyxRQUFBLEVBQ0EsR0FBQUEsUUFBQSxFQUFBelYsVUFBQSxFQUNBLEdBQUF5VixRQUFBLENBQUExVCxXQUFBLEVBQ0EwVCxRQUFBLENBQUF6VixVQUFBLENBQUEwQyxZQUFBLENBQUE4UyxRQUFBLENBQUFDLFFBQUEsQ0FBQTFULFdBQUEsRUFDQSxNQUNBMFQsUUFBQSxDQUFBelYsVUFBQSxDQUFBNk0sV0FBQSxDQUFBMkksUUFBQSxFQUNBLENBQ0EsQ0FDQSxDQUVBLE9BQUFFLGVBQUFuRCxLQUFBLEVBQ0EsTUFBQWpCLElBQUEsTUFBQWdELFFBQUEsQ0FBQS9CLEtBQUEsRUFDQSxNQUFBaEIsTUFBQSxNQUFBZ0QsVUFBQSxDQUFBaEMsS0FBQSxFQUNBLElBQUFqQixJQUFBLEdBQUFDLE1BQUEsUUFFQSxNQUFBYyxPQUFBLE1BQUFDLHdCQUFBLENBQUFDLEtBQUEsRUFFQSxNQUFBSSxJQUFBLENBQUFyQixJQUFBLENBQUFoYixnQkFBQSxNQUFBK2EsRUFBQSxDQUFBdlgsR0FBQSxFQUNBLE1BQUE2WixPQUFBLElBQ0EsUUFBQXBhLENBQUEsR0FBQUEsQ0FBQSxDQUFBb1osSUFBQSxDQUFBcGMsTUFBQSxDQUFBZ0QsQ0FBQSxJQUNBLE1BQUFtQyxDQUFBLENBQUFpWCxJQUFBLENBQUFwWixDQUFBLEVBQ0EsTUFBQXFaLE1BQUEsQ0FBQWxYLENBQUEsQ0FBQTdGLGFBQUEsTUFBQXdiLEVBQUEsQ0FBQW5VLEtBQUEsRUFDQSxNQUFBMlYsTUFBQSxDQUFBblgsQ0FBQSxDQUFBN0YsYUFBQSxNQUFBd2IsRUFBQSxDQUFBM0YsS0FBQSxFQUNBLE1BQUE4RyxHQUFBLENBQUE5VyxDQUFBLENBQUE3RixhQUFBLE1BQUF3YixFQUFBLENBQUFHLE1BQUEsRUFFQSxNQUFBMkIsR0FBQSxDQUFBUCxNQUFBLEVBQUFBLE1BQUEsQ0FBQWxILEtBQUEsS0FDQSxJQUFBRCxHQUFBLENBQUFvSCxNQUFBLEVBQUFBLE1BQUEsQ0FBQW5ILEtBQUEsS0FFQTtBQUNBLElBQUEyRyxPQUFBLEVBQ0E7QUFDQTVHLEdBQUEsTUFBQTJHLHNCQUFBLENBQUFlLEdBQUEsb0JBQ0EsR0FBQU4sTUFBQSxFQUNBQSxNQUFBLENBQUFuSCxLQUFBLENBQUFELEdBQUE7QUFDQSxDQUNBLENBRUEsTUFBQWtLLEdBQUEsSUFBQW5ELEdBQUEsRUFBQUEsR0FBQSxDQUFBQyxPQUFBLEVBQ0FrQixPQUFBLENBQUFpQyxJQUFBLEVBQUExWSxLQUFBLENBQUFpVyxHQUFBLENBQUF6SCxLQUFBLENBQUFELEdBQUEsQ0FBQVYsUUFBQSxDQUFBNEssR0FBQSxHQUNBLENBRUEsSUFDQXBFLE1BQUEsQ0FBQTdGLEtBQUEsQ0FBQXJYLElBQUEsQ0FBQUksU0FBQSxDQUFBa2YsT0FBQSxFQUNBcEMsTUFBQSxDQUFBclQsYUFBQSxLQUFBMlgsS0FBQSxVQUFBelgsT0FBQSxTQUNBbVQsTUFBQSxDQUFBclQsYUFBQSxLQUFBMlgsS0FBQSxXQUFBelgsT0FBQSxTQUNBbVUsS0FBQSxDQUFBclUsYUFBQSxLQUFBQyxXQUFBLGdDQUNBQyxPQUFBLE1BQUFILE1BQUEsRUFDQTlDLEdBQUEsV0FBQXVRLEtBQUEsQ0FBQWlJLE9BQ0EsQ0FDQSxJQUNBLE9BQUFwZixDQUFBLEVBQ0EsQ0FFQSxLQUFBdWhCLHVCQUFBLENBQUF2RCxLQUFBLEVBQ0EsS0FBQXdELHFCQUFBLENBQUF4RCxLQUFBLEVBRUE7QUFDQSxNQUFBN0gsS0FBQSxDQUFBNkgsS0FBQSxDQUFBeUQsa0JBQUEsRUFDQXZlLFFBQUEsQ0FBQTVCLGFBQUEsNkRBQ0EsR0FBQTZVLEtBQUEsRUFDQSxJQUNBQSxLQUFBLENBQUEvVSxPQUFBLENBQUFnZSxPQUFBLENBQUF0ZixJQUFBLENBQUFJLFNBQUEsQ0FBQWtmLE9BQUEsRUFDQSxPQUFBcGYsQ0FBQSxFQUNBLENBQ0F6QyxJQUFBLENBQUErZCxTQUFBLEVBQUFDLGlCQUFBLEdBQUFwRixLQUFBLFdBQUFpSixPQUFBLEVBQ0FqSixLQUFBLENBQUF4TSxhQUFBLEtBQUFDLFdBQUEsZ0NBQ0FDLE9BQUEsTUFBQUgsTUFBQSxFQUFBOUMsR0FBQSxXQUFBdVEsS0FBQSxDQUFBaUksT0FBQSxDQUNBLElBQ0EsQ0FDQSxDQUdBLE9BQUFzQyxnQkFBQTFELEtBQUEsRUFFQSxNQUFBakIsSUFBQSxNQUFBZ0QsUUFBQSxDQUFBL0IsS0FBQSxFQUNBLElBQUFqQixJQUFBLEVBQ0EsT0FDQSxDQUVBLElBQ0EsTUFBQTRFLFFBQUEsQ0FBQS9RLE1BQUEsQ0FBQXVCLFFBQUEsRUFBQUMsR0FBQSxHQUFBMkssSUFBQSxFQUNBLEdBQUE0RSxRQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUF2WCxPQUFBLENBQUF3RyxNQUFBLENBQUFnUixZQUFBLEVBQUFDLFdBQUEsTUFBQWpSLE1BQUEsQ0FBQWtSLFFBQUEsT0FFQTtBQUNBO0FBQ0EsR0FBQTFYLE9BQUEsRUFBQUEsT0FBQSxDQUFBMlgsUUFBQSxTQUFBM1gsT0FBQSxDQUFBMlgsUUFBQSxDQUFBN04sTUFBQSxlQUVBOUosT0FBQSxDQUFBMlgsUUFBQSxDQUFBN04sTUFBQSxDQUNBNkksSUFBQSxDQUNBLFNBQ0EsQ0FDQTVJLGFBQUEsZUFDQWYsZUFBQSxNQUFBMEosRUFBQSxDQUFBSyxXQUFBLENBQ0E3SixrQkFBQSxNQUFBd0osRUFBQSxDQUFBdlgsR0FBQSxDQUNBME8sUUFBQSxDQUFBQSxDQUFBLElBQ0EsS0FBQWtOLGNBQUEsQ0FBQW5ELEtBQUEsRUFDQSxDQUNBLENBQ0EsRUFFQSxTQUFBcE4sTUFBQSxDQUFBdUIsUUFBQSxFQUFBVSxNQUFBLEVBQ0E7QUFDQWpDLE1BQUEsQ0FBQXVCLFFBQUEsQ0FBQVUsTUFBQSxDQUNBa0ssSUFBQSxDQUNBLENBQ0E1SixNQUFBLE1BQUEySixFQUFBLENBQUFLLFdBQUEsQ0FDQTlKLFNBQUEsTUFBQXlKLEVBQUEsQ0FBQXZYLEdBQUEsQ0FDQWlGLFNBQUEsS0FDQThILGFBQUEsTUFDQUMsY0FBQSxPQUNBQyxpQkFBQSxHQUNBQyxpQkFBQSxNQUNBd0IsUUFBQSxDQUFBQSxDQUFBLElBQ0EsS0FBQWtOLGNBQUEsQ0FBQW5ELEtBQUEsRUFDQSxDQUNBLENBQ0EsRUFDQSxDQUVBakIsSUFBQSxDQUFBM2IsT0FBQSxDQUFBNGdCLGFBQUEsS0FFQSxPQUFBekssQ0FBQSxFQUNBM0csTUFBQSxDQUFBMk8sS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLGlDQUFBbVgsQ0FBQSxFQUNBLENBQ0EsQ0FFQSxPQUFBMEssaUJBQUFqRSxLQUFBLEVBQ0EsTUFBQWpCLElBQUEsTUFBQWdELFFBQUEsQ0FBQS9CLEtBQUEsRUFDQSxNQUFBaEIsTUFBQSxNQUFBZ0QsVUFBQSxDQUFBaEMsS0FBQSxFQUNBLElBQUFqQixJQUFBLEdBQUFDLE1BQUEsRUFBQUQsSUFBQSxDQUFBckgsUUFBQSxDQUFBMVQsTUFBQSxRQUVBLElBQUE2UyxJQUFBLElBQ0EsSUFDQUEsSUFBQSxDQUFBL1UsSUFBQSxDQUFBQyxLQUFBLENBQUFpZCxNQUFBLENBQUE3RixLQUFBLFFBQ0EsT0FBQW5YLENBQUEsRUFDQTZVLElBQUEsSUFDQSxDQUVBLElBQUFoUixLQUFBLENBQUE0QixPQUFBLENBQUFvUCxJQUFBLElBQUFBLElBQUEsQ0FBQTdTLE1BQUEsRUFDQTZTLElBQUEsT0FBQXlFLFlBQUEsR0FBQThGLE9BQUEsTUFBQTFkLEtBQUEsSUFDQSxJQUNBc2IsTUFBQSxDQUFBN0YsS0FBQSxDQUFBclgsSUFBQSxDQUFBSSxTQUFBLENBQUEyVSxJQUFBLEVBQ0FtSSxNQUFBLENBQUFyVCxhQUFBLEtBQUEyWCxLQUFBLFVBQUF6WCxPQUFBLFNBQ0FtVCxNQUFBLENBQUFyVCxhQUFBLEtBQUEyWCxLQUFBLFdBQUF6WCxPQUFBLFNBQ0EsT0FBQTdKLENBQUEsRUFDQSxDQUNBLENBRUEsUUFBQWdGLENBQUEsR0FBQUEsQ0FBQSxDQUFBNlAsSUFBQSxDQUFBN1MsTUFBQSxDQUFBZ0QsQ0FBQSxJQUNBLEtBQUFrYixVQUFBLENBQUFsQyxLQUFBLEVBQ0FyVixLQUFBLENBQUFrTSxJQUFBLENBQUE3UCxDQUFBLEdBQUEyRCxLQUFBLEtBQ0F3TyxLQUFBLENBQUF0QyxJQUFBLENBQUE3UCxDQUFBLEdBQUFtUyxLQUFBLEtBQ0FYLFFBQUEsR0FBQTNCLElBQUEsQ0FBQTdQLENBQUEsR0FBQXdSLFFBQUEsQ0FDQThKLEtBQUEsQ0FBQXRiLENBQUEsQ0FDQTNELEdBQUEsTUFBQTRlLFFBQUEsRUFDQSxHQUNBLENBRUEsS0FBQXNCLHVCQUFBLENBQUF2RCxLQUFBLEVBQ0EsS0FBQXdELHFCQUFBLENBQUF4RCxLQUFBLEVBQ0EsS0FBQUcsNEJBQUEsQ0FBQUgsS0FBQSxFQUNBLENBRUEsT0FBQWtFLGlCQUFBbEUsS0FBQSxFQUNBLE1BQUFtRSxNQUFBLENBQUFuRSxLQUFBLEVBQUFqYyxnQkFBQSxNQUFBK2EsRUFBQSxDQUFBRyxNQUFBLEVBQ0EsSUFBQWtGLE1BQUEsRUFBQW5nQixNQUFBLGNBQ0EsUUFBQWdELENBQUEsR0FBQUEsQ0FBQSxDQUFBbWQsTUFBQSxDQUFBbmdCLE1BQUEsQ0FBQWdELENBQUEsTUFBQW1kLE1BQUEsQ0FBQW5kLENBQUEsRUFBQWtaLE9BQUEsYUFDQSxhQUNBLENBRUEsT0FBQWtFLG9CQUFBcEUsS0FBQSxFQUNBLE1BQUFDLEdBQUEsQ0FBQUQsS0FBQSxFQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBTSxZQUFBLEVBQ0EsU0FBQWEsR0FBQSxFQUFBQSxHQUFBLENBQUFDLE9BQUEsRUFDQSxDQUVBLE9BQUFtRSx1QkFBQXJFLEtBQUEsRUFDQSxNQUFBc0UsRUFBQSxDQUFBdEUsS0FBQSxFQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBTyxZQUFBLEVBQ0EsU0FBQWlGLEVBQUEsRUFBQXZrQixNQUFBLENBQUF1a0IsRUFBQSxDQUFBbkwsS0FBQSxNQUFBL1ksSUFBQSxHQUFBNEQsTUFBQSxFQUNBLENBRUEsT0FBQXVmLHdCQUFBdkQsS0FBQSxFQUNBLE1BQUFoWSxLQUFBLENBQUFnWSxLQUFBLEVBQUExYyxhQUFBLE1BQUF3YixFQUFBLENBQUFPLFlBQUEsRUFDQSxNQUFBa0YsSUFBQSxDQUFBdkUsS0FBQSxFQUFBMWMsYUFBQSwyQkFDQSxJQUFBMEUsS0FBQSxRQUVBLE1BQUF3YyxJQUFBLE1BQUFOLGdCQUFBLENBQUFsRSxLQUFBLEVBQ0FoWSxLQUFBLENBQUF5YyxRQUFBLEdBQUFELElBQUEsQ0FDQSxHQUFBQSxJQUFBLEVBQ0F4YyxLQUFBLENBQUF6RCxZQUFBLHlCQUNBLEdBQUFnZ0IsSUFBQSxDQUFBQSxJQUFBLENBQUF0ZSxLQUFBLENBQUFzYSxPQUFBLElBQ0EsTUFDQXZZLEtBQUEsQ0FBQWxELGVBQUEsa0JBQ0EsR0FBQXlmLElBQUEsQ0FBQUEsSUFBQSxDQUFBdGUsS0FBQSxDQUFBc2EsT0FBQSxRQUNBLENBQ0EsQ0FFQSxPQUFBaUQsc0JBQUF4RCxLQUFBLEVBQ0EsTUFBQWhZLEtBQUEsQ0FBQWdZLEtBQUEsRUFBQTFjLGFBQUEsTUFBQXdiLEVBQUEsQ0FBQVEsaUJBQUEsRUFDQSxNQUFBaUYsSUFBQSxDQUFBdkUsS0FBQSxFQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBUyxnQkFBQSxFQUVBO0FBQ0EsTUFBQW1GLFVBQUEsTUFBQU4sbUJBQUEsQ0FBQXBFLEtBQUEsRUFDQSxNQUFBMkUsY0FBQSxDQUFBM2MsS0FBQSxFQUFBMkksT0FBQSwwQkFDQSxNQUFBaVUsU0FBQSxDQUFBNUUsS0FBQSxFQUFBMWMsYUFBQSxNQUFBd2IsRUFBQSxDQUFBVSxVQUFBLFFBQ0EsTUFBQXFGLE9BQUEsQ0FBQUQsU0FBQSxFQUFBalUsT0FBQSwwQkFFQTtBQUNBLEdBQUFnVSxjQUFBLENBQUFBLGNBQUEsQ0FBQTFlLEtBQUEsQ0FBQXNhLE9BQUEsQ0FBQW1FLFVBQUEsV0FDQSxHQUFBRyxPQUFBLENBQUFBLE9BQUEsQ0FBQTVlLEtBQUEsQ0FBQXNhLE9BQUEsQ0FBQW1FLFVBQUEsV0FFQTtBQUNBLElBQUExYyxLQUFBLFFBRUEsTUFBQXdjLElBQUEsQ0FBQUUsVUFBQSxPQUFBUixnQkFBQSxDQUFBbEUsS0FBQSxRQUFBcUUsc0JBQUEsQ0FBQXJFLEtBQUEsRUFDQSxHQUFBdUUsSUFBQSxHQUFBQSxJQUFBLENBQUF2aEIsRUFBQSxDQUFBdWhCLElBQUEsQ0FBQXZoQixFQUFBLDBCQUFBdkIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsT0FFQXNFLEtBQUEsQ0FBQXljLFFBQUEsR0FBQUQsSUFBQSxDQUNBLEdBQUFBLElBQUEsRUFDQXhjLEtBQUEsQ0FBQXpELFlBQUEseUJBQ0EsR0FBQWdnQixJQUFBLEVBQ0FBLElBQUEsQ0FBQXRlLEtBQUEsQ0FBQXNhLE9BQUEsSUFDQXZZLEtBQUEsQ0FBQXpELFlBQUEsb0JBQUFnZ0IsSUFBQSxDQUFBdmhCLEVBQUEsRUFDQSxDQUNBLE1BQ0FnRixLQUFBLENBQUFsRCxlQUFBLGtCQUNBa0QsS0FBQSxDQUFBbEQsZUFBQSxxQkFDQSxHQUFBeWYsSUFBQSxDQUFBQSxJQUFBLENBQUF0ZSxLQUFBLENBQUFzYSxPQUFBLFFBQ0EsQ0FDQSxDQUVBLE9BQUF1RSx1QkFBQTlFLEtBQUEsQ0FBQStFLE9BQUEsRUFDQSxRQUFBWCxtQkFBQSxDQUFBcEUsS0FBQSxTQUVBLE1BQUFtRSxNQUFBLENBQUFuRSxLQUFBLEVBQUFqYyxnQkFBQSxNQUFBK2EsRUFBQSxDQUFBRyxNQUFBLEVBQ0EsSUFBQWtGLE1BQUEsRUFBQW5nQixNQUFBLFFBRUEsR0FBQStnQixPQUFBLEVBQUFBLE9BQUEsQ0FBQTdFLE9BQUEsRUFDQSxRQUFBbFosQ0FBQSxHQUFBQSxDQUFBLENBQUFtZCxNQUFBLENBQUFuZ0IsTUFBQSxDQUFBZ0QsQ0FBQSxNQUFBbWQsTUFBQSxDQUFBbmQsQ0FBQSxJQUFBK2QsT0FBQSxFQUNBWixNQUFBLENBQUFuZCxDQUFBLEVBQUFrWixPQUFBLE9BQ0FpRSxNQUFBLENBQUFuZCxDQUFBLEVBQUF6QyxZQUFBLHlCQUNBLENBQ0F3Z0IsT0FBQSxDQUFBeGdCLFlBQUEsd0JBQ0EsT0FDQSxDQUVBLElBQUF5Z0IsSUFBQSxPQUNBLFFBQUFDLENBQUEsR0FBQUEsQ0FBQSxDQUFBZCxNQUFBLENBQUFuZ0IsTUFBQSxDQUFBaWhCLENBQUEsTUFBQWQsTUFBQSxDQUFBYyxDQUFBLEVBQUEvRSxPQUFBLEVBQ0EsSUFBQThFLElBQUEsRUFDQUEsSUFBQSxNQUNBLE1BQ0FiLE1BQUEsQ0FBQWMsQ0FBQSxFQUFBL0UsT0FBQSxPQUNBaUUsTUFBQSxDQUFBYyxDQUFBLEVBQUExZ0IsWUFBQSx5QkFDQSxDQUNBLENBRUEsS0FBQWdmLHVCQUFBLENBQUF2RCxLQUFBLEVBQ0EsS0FBQXdELHFCQUFBLENBQUF4RCxLQUFBLEVBQ0EsQ0FFQTtBQUNBLE9BQUFrRixnQkFBQWxGLEtBQUEsRUFDQSxJQUFBQSxLQUFBLFFBQ0EsSUFBQUEsS0FBQSxDQUFBMWMsYUFBQTtBQUNBLEdBQUEwYyxLQUFBLENBQUE1YyxPQUFBLENBQUEraEIsdUJBQUEsUUFDQSxLQUFBekIsZUFBQSxDQUFBMUQsS0FBQSxFQUNBLE9BQ0EsQ0FFQSxLQUFBaUUsZ0JBQUEsQ0FBQWpFLEtBQUEsRUFDQSxLQUFBMEQsZUFBQSxDQUFBMUQsS0FBQSxFQUNBQSxLQUFBLENBQUE1YyxPQUFBLENBQUEraEIsdUJBQUEsS0FFQSxLQUFBNUIsdUJBQUEsQ0FBQXZELEtBQUEsRUFDQSxLQUFBd0QscUJBQUEsQ0FBQXhELEtBQUEsRUFDQSxLQUFBRyw0QkFBQSxDQUFBSCxLQUFBLEVBQ0EsQ0FFQTtBQUNBLE9BQUFvRixVQUFBLEVBQ0EsR0FBQTdsQixJQUFBLENBQUE4bEIsa0JBQUEsUUFDQTlsQixJQUFBLENBQUE4bEIsa0JBQUEsTUFFQSxNQUFBQyxrQkFBQSxDQUFBQyxFQUFBLEdBQ0EsTUFBQXZGLEtBQUEsQ0FBQXVGLEVBQUEsRUFBQTdaLE1BQUEsRUFBQXNVLEtBQUEsQ0FDQSxNQUFBN0gsS0FBQSxDQUFBb04sRUFBQSxFQUFBN1osTUFBQSxFQUFBL0MsRUFBQSxFQUFBNGMsRUFBQSxFQUFBN1osTUFBQSxFQUFBeU0sS0FBQSxPQUNBLElBQUE2SCxLQUFBLFFBQ0EsR0FBQTdILEtBQUEsQ0FBQTZILEtBQUEsQ0FBQXlELGtCQUFBLENBQUF0TCxLQUFBLENBQ0EsS0FBQStNLGVBQUEsQ0FBQWxGLEtBQUEsRUFDQTtBQUNBLEtBQUF3RixtQkFBQSxHQUNBLEVBRUF0Z0IsUUFBQSxDQUFBOEcsZ0JBQUEsNEJBQUFzWixrQkFBQSxFQUNBcGdCLFFBQUEsQ0FBQThHLGdCQUFBLDZCQUFBc1osa0JBQUEsRUFFQSxLQUFBRSxtQkFBQSxHQUNBLENBRUEsT0FBQUEsb0JBQUEsRUFFQTtBQUNBLFFBQUE1RyxZQUFBLE9BQUFDLFdBQUEsRUFBQTRHLFdBQUEsUUFFQSxNQUFBM1IsSUFBQSxDQUFBNU8sUUFBQSxDQUFBQyxjQUFBLHdCQUNBLElBQUEyTyxJQUFBLEVBQ0E7QUFDQSxLQUFBOEssWUFBQSxPQUNBLEtBQUFDLFdBQUEsTUFDQSxPQUNBLENBRUEsS0FBQUEsV0FBQSxDQUFBL0ssSUFBQSxDQUNBLEtBQUE4SyxZQUFBLE1BQ0E5SyxJQUFBLENBQUExUSxPQUFBLENBQUFzaUIscUJBQUEsS0FFQSxNQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFDQUEsTUFBQSxFQUFBalYsT0FBQSxrQ0FDQW1ELElBQUEsQ0FBQXhRLGFBQUEscUNBRUE7QUFDQXdRLElBQUEsQ0FBQTlILGdCQUFBLFNBQUF1TixDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTJGLFNBQUEsQ0FBQXBNLENBQUEsQ0FBQXFNLE1BQUEsRUFDQSxJQUFBNUYsS0FBQSxRQUVBLEtBQUFrRixlQUFBLENBQUFsRixLQUFBLEVBRUEsTUFBQWxCLEVBQUEsTUFBQUEsRUFBQSxDQUVBO0FBQ0EsTUFBQS9QLEdBQUEsQ0FBQXdLLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQWpWLE9BQUEsR0FBQW1PLEVBQUEsQ0FBQUksT0FBQSxFQUNBLEdBQUFuUSxHQUFBLEVBQ0EsS0FBQW1ULFVBQUEsQ0FBQWxDLEtBQUEsRUFBQXJWLEtBQUEsSUFBQXdPLEtBQUEsSUFBQVgsUUFBQSxTQUNBLEtBQUEySyxjQUFBLENBQUFuRCxLQUFBLEVBQ0EsS0FBQUcsNEJBQUEsQ0FBQUgsS0FBQSxFQUNBLE9BQ0EsQ0FFQTtBQUNBLE1BQUFMLFdBQUEsQ0FBQXBHLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQWpWLE9BQUEsR0FBQW1PLEVBQUEsQ0FBQWEsV0FBQSxFQUNBLEdBQUFBLFdBQUEsRUFDQXBHLENBQUEsQ0FBQXNNLGNBQUEsR0FDQXRNLENBQUEsQ0FBQXVNLGVBQUEsR0FFQSxNQUFBQyxNQUFBLEVBQUFwRyxXQUFBLENBQUFoYixZQUFBLHFCQUFBL0QsV0FBQSxHQUNBLE1BQUEyRyxHQUFBLENBQUFvWSxXQUFBLENBQUFoUCxPQUFBLEdBQUFtTyxFQUFBLENBQUF2WCxHQUFBLEVBRUEsSUFBQUEsR0FBQSxFQUNBLEtBQUF1YixjQUFBLENBQUFuRCxXQUFBLEVBQ0EsT0FDQSxDQUVBLGlCQUFBb0csTUFBQSxFQUNBO0FBQ0EsTUFBQUMsVUFBQSxNQUFBakUsUUFBQSxDQUFBL0IsS0FBQSxHQUFBdEksUUFBQSxDQUFBMVQsTUFBQSxJQUNBLEtBQUFrZSxVQUFBLENBQUFsQyxLQUFBLEVBQUFyVixLQUFBLElBQUF3TyxLQUFBLElBQUFYLFFBQUEsU0FDQTtBQUNBLE1BQUF1RyxJQUFBLE1BQUFnRCxRQUFBLENBQUEvQixLQUFBLEVBQ0EsR0FBQWpCLElBQUEsRUFBQUEsSUFBQSxDQUFBdkgsZ0JBQUEsRUFBQXVILElBQUEsQ0FBQXZILGdCQUFBLEdBQUFqUSxHQUFBLEVBQ0EsS0FBQXliLFlBQUEsQ0FBQWpFLElBQUEsQ0FBQXZILGdCQUFBLENBQUFqUSxHQUFBLEVBQ0EsQ0FDQSxLQUFBNGIsY0FBQSxDQUFBbkQsS0FBQSxFQUNBLEtBQUFHLDRCQUFBLENBQUFILEtBQUEsRUFDQSx1QkFBQStGLE1BQUEsRUFDQSxNQUFBbkYsR0FBQSxFQUFBclosR0FBQSxDQUFBakUsYUFBQSxDQUFBd2IsRUFBQSxDQUFBblUsS0FBQSxPQUFBd08sS0FBQSxLQUNBLE1BQUFELEdBQUEsRUFBQTNSLEdBQUEsQ0FBQWpFLGFBQUEsQ0FBQXdiLEVBQUEsQ0FBQTNGLEtBQUEsT0FBQUEsS0FBQSxLQUNBLE1BQUFpSyxHQUFBLElBQUE3YixHQUFBLENBQUFqRSxhQUFBLENBQUF3YixFQUFBLENBQUFHLE1BQUEsT0FBQWlCLE9BQUEsQ0FDQSxLQUFBZ0MsVUFBQSxDQUFBbEMsS0FBQSxFQUFBclYsS0FBQSxDQUFBaVcsR0FBQSxDQUFBekgsS0FBQSxDQUFBRCxHQUFBLENBQUFWLFFBQUEsQ0FBQTRLLEdBQUEsQ0FBQS9mLEdBQUEsTUFBQTRlLFFBQUEsS0FDQTtBQUNBLE1BQUFsRCxJQUFBLE1BQUFnRCxRQUFBLENBQUEvQixLQUFBLEVBRUEsR0FBQWpCLElBQUEsRUFBQUEsSUFBQSxDQUFBdkgsZ0JBQUEsRUFBQXVILElBQUEsQ0FBQXZILGdCQUFBLEdBQUFqUSxHQUFBLEVBQ0EsS0FBQXliLFlBQUEsQ0FBQWpFLElBQUEsQ0FBQXZILGdCQUFBLENBQUFqUSxHQUFBLEVBQ0EsQ0FDQSxLQUFBdWQsc0JBQUEsQ0FBQTlFLEtBQUEsT0FDQSxLQUFBbUQsY0FBQSxDQUFBbkQsS0FBQSxFQUNBLEtBQUFHLDRCQUFBLENBQUFILEtBQUEsRUFDQSxvQkFBQStGLE1BQUEsRUFDQSxHQUFBeGUsR0FBQSxFQUFBQSxHQUFBLENBQUFrRyxVQUFBLENBQUFsRyxHQUFBLENBQUFrRyxVQUFBLENBQUFDLFdBQUEsQ0FBQW5HLEdBQUEsRUFDQSxLQUFBNGIsY0FBQSxDQUFBbkQsS0FBQSxFQUNBLEtBQUFHLDRCQUFBLENBQUFILEtBQUEsRUFDQSxDQUVBLEtBQUE4QyxjQUFBLENBQUFuRCxXQUFBLEVBQ0EsT0FDQSxDQUVBLFFBR0E7QUFDQTdMLElBQUEsQ0FBQTlILGdCQUFBLFNBQUF1TixDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTJGLFNBQUEsQ0FBQXBNLENBQUEsQ0FBQXFNLE1BQUEsRUFDQSxJQUFBNUYsS0FBQSxFQUNBLE9BQ0EsQ0FDQSxNQUFBbEIsRUFBQSxNQUFBQSxFQUFBLENBQ0EsTUFBQW1ILGlCQUFBLENBQUExTSxDQUFBLENBQUFxTSxNQUFBLENBQUFwZSxTQUFBLEVBQUFuQyxRQUFBLHlCQUFBa1UsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBcGUsU0FBQSxFQUFBbkMsUUFBQSx3QkFDQSxNQUFBNmdCLFNBQUEsQ0FBQTNNLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXBlLFNBQUEsRUFBQW5DLFFBQUEsK0JBQ0EsTUFBQThnQixXQUFBLENBQUE1TSxDQUFBLENBQUFxTSxNQUFBLENBQUFRLE9BQUEsR0FBQXRILEVBQUEsQ0FBQU0sWUFBQSxFQUNBLE1BQUFpSCxlQUFBLENBQUE5TSxDQUFBLENBQUFxTSxNQUFBLENBQUFRLE9BQUEsR0FBQXRILEVBQUEsQ0FBQU8sWUFBQSxFQUNBLE1BQUFpSCxnQkFBQSxDQUFBL00sQ0FBQSxDQUFBcU0sTUFBQSxDQUFBUSxPQUFBLEdBQUF0SCxFQUFBLENBQUFjLGlCQUFBLEVBRUE7QUFDQSxHQUFBMEcsZ0JBQUEsRUFDQSxLQUFBbkcsNEJBQUEsQ0FBQUgsS0FBQSxFQUNBLEtBQUFtRCxjQUFBLENBQUFuRCxLQUFBLEVBQ0EsT0FDQSxDQUVBO0FBQ0EsR0FBQXpHLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXBlLFNBQUEsRUFBQW5DLFFBQUEseUJBQ0EsTUFBQWtDLEdBQUEsQ0FBQWdTLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQWpWLE9BQUEsTUFBQW1PLEVBQUEsQ0FBQXZYLEdBQUEsRUFDQSxLQUFBd1osMkJBQUEsQ0FBQXhaLEdBQUEsRUFDQTtBQUNBZ1MsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBeGlCLE9BQUEsQ0FBQXFkLFlBQUEsQ0FBQWxILENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXpNLEtBQUEsS0FDQSxDQUVBO0FBQ0EsR0FBQUksQ0FBQSxDQUFBcU0sTUFBQSxDQUFBcGUsU0FBQSxFQUFBbkMsUUFBQSx5QkFDQSxNQUFBa0MsR0FBQSxDQUFBZ1MsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBalYsT0FBQSxDQUFBbU8sRUFBQSxDQUFBdlgsR0FBQSxFQUNBLE1BQUErWSxNQUFBLENBQUEvWSxHQUFBLEVBQUFqRSxhQUFBLENBQUF3YixFQUFBLENBQUEzRixLQUFBLEVBQ0EsTUFBQTJHLE9BQUEsTUFBQUMsd0JBQUEsQ0FBQUMsS0FBQSxFQUVBLEdBQUFNLE1BQUEsRUFDQSxJQUFBUixPQUFBLEVBQ0E7QUFDQVEsTUFBQSxDQUFBbkgsS0FBQSxNQUFBMEcsc0JBQUEsQ0FBQXRHLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXpNLEtBQUEsUUFDQSxlQUFBMkgseUJBQUEsQ0FBQXZaLEdBQUEsR0FDQTtBQUNBK1ksTUFBQSxDQUFBbkgsS0FBQSxNQUFBMEcsc0JBQUEsQ0FBQXRHLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXpNLEtBQUEsT0FDQSxDQUNBLENBQ0EsQ0FHQSxHQUFBOE0saUJBQUEsRUFBQUMsU0FBQSxFQUFBQyxXQUFBLEVBQ0EsR0FBQUQsU0FBQSxDQUFBM00sQ0FBQSxDQUFBcU0sTUFBQSxDQUFBcmhCLFlBQUEsZ0JBQUFnVixDQUFBLENBQUFxTSxNQUFBLENBQUExRixPQUFBLGlCQUNBLEdBQUFnRyxTQUFBLEVBQUFDLFdBQUEsTUFBQXJCLHNCQUFBLENBQUE5RSxLQUFBLENBQUFrRyxTQUFBLENBQUEzTSxDQUFBLENBQUFxTSxNQUFBLE9BQ0EsS0FBQXpDLGNBQUEsQ0FBQW5ELEtBQUEsRUFDQSxDQUVBLEdBQUFxRyxlQUFBLEVBQ0EsS0FBQTlDLHVCQUFBLENBQUF2RCxLQUFBLEVBQ0EsS0FBQXdELHFCQUFBLENBQUF4RCxLQUFBLEVBQ0EsTUFBQWhCLE1BQUEsTUFBQWdELFVBQUEsQ0FBQWhDLEtBQUEsRUFDQSxHQUFBaEIsTUFBQSxFQUNBQSxNQUFBLENBQUFyVCxhQUFBLEtBQUEyWCxLQUFBLFVBQUF6WCxPQUFBLFNBQ0FtVCxNQUFBLENBQUFyVCxhQUFBLEtBQUEyWCxLQUFBLFdBQUF6WCxPQUFBLFNBQ0EsQ0FDQSxDQUNBLFFBR0E7QUFDQWlJLElBQUEsQ0FBQTlILGdCQUFBLFVBQUF1TixDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTJGLFNBQUEsQ0FBQXBNLENBQUEsQ0FBQXFNLE1BQUEsRUFDQSxJQUFBNUYsS0FBQSxRQUVBLE1BQUFsQixFQUFBLE1BQUFBLEVBQUEsQ0FDQSxNQUFBb0gsU0FBQSxDQUFBM00sQ0FBQSxDQUFBcU0sTUFBQSxDQUFBcGUsU0FBQSxFQUFBbkMsUUFBQSwrQkFDQSxNQUFBa2hCLFFBQUEsQ0FBQWhOLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQVEsT0FBQSxHQUFBdEgsRUFBQSxDQUFBTSxZQUFBLEVBQ0EsSUFBQThHLFNBQUEsR0FBQUssUUFBQSxRQUVBLEdBQUFMLFNBQUEsQ0FBQTNNLENBQUEsQ0FBQXFNLE1BQUEsQ0FBQXJoQixZQUFBLGdCQUFBZ1YsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBMUYsT0FBQSxpQkFDQSxLQUFBNEUsc0JBQUEsQ0FBQTlFLEtBQUEsQ0FBQWtHLFNBQUEsQ0FBQTNNLENBQUEsQ0FBQXFNLE1BQUEsT0FDQSxLQUFBekMsY0FBQSxDQUFBbkQsS0FBQSxFQUNBLFFBRUE7QUFDQWxNLElBQUEsQ0FBQTlILGdCQUFBLGNBQUF1TixDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTJGLFNBQUEsQ0FBQXBNLENBQUEsQ0FBQXFNLE1BQUEsRUFDQSxHQUFBNUYsS0FBQSxFQUFBekcsQ0FBQSxDQUFBcU0sTUFBQSxFQUFBalYsT0FBQSxRQUFBbU8sRUFBQSxDQUFBQyxJQUFBLE9BQUFtRyxlQUFBLENBQUFsRixLQUFBLEVBQ0EsUUFFQWxNLElBQUEsQ0FBQTlILGdCQUFBLGFBQUF1TixDQUFBLEdBQ0EsTUFBQXlHLEtBQUEsQ0FBQTJGLFNBQUEsQ0FBQXBNLENBQUEsQ0FBQXFNLE1BQUEsRUFDQSxHQUFBNUYsS0FBQSxFQUFBekcsQ0FBQSxDQUFBcU0sTUFBQSxFQUFBalYsT0FBQSxRQUFBbU8sRUFBQSxDQUFBSyxXQUFBLE9BQUErRixlQUFBLENBQUFsRixLQUFBLEVBQ0EsUUFDQSxDQUVBLEVBRUEsSUFBQXpnQixJQUFBLENBQUFrZixvQkFBQSxDQUFBMkcsU0FBQSxVQUFBcGpCLENBQUEsR0FDQTtBQUNBekMsSUFBQSxDQUFBa2Ysb0JBQUEsQ0FBQStHLG1CQUFBLEdBRUF0Z0IsUUFBQSxDQUFBOEcsZ0JBQUEseUJBQUF6TSxJQUFBLENBQUFrZixvQkFBQSxDQUFBK0csbUJBQUEsTUFFQSxHQUFBNVMsTUFBQSxFQ3pvQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBQXRULENBQUEsQ0FBQXljLENBQUEsRUFDQSxhQUVBO0FBQ0EsTUFBQXhjLElBQUEsQ0FBQUQsQ0FBQSxDQUFBRSxhQUFBLENBQUFGLENBQUEsQ0FBQUUsYUFBQSxLQUNBLE1BQUFDLEVBQUEsQ0FBQUYsSUFBQSxDQUFBRSxFQUFBLENBQUFGLElBQUEsQ0FBQUUsRUFBQSxLQUVBO0FBQ0FBLEVBQUEsQ0FBQSttQixhQUFBLENBQUEvbUIsRUFBQSxDQUFBK21CLGFBQUEsTUFBQXZMLEdBQUE7QUFDQXhiLEVBQUEsQ0FBQWduQixXQUFBLENBQUFobkIsRUFBQSxDQUFBZ25CLFdBQUEsTUFBQXhMLEdBQUE7QUFDQTtBQUNBeGIsRUFBQSxDQUFBaW5CLGlCQUFBLENBQUF0bEIsTUFBQSxDQUFBQyxRQUFBLENBQUE1QixFQUFBLENBQUFpbkIsaUJBQUEsRUFBQWpuQixFQUFBLENBQUFpbkIsaUJBQUEsS0FDQWpuQixFQUFBLENBQUFrbkIsaUJBQUEsQ0FBQXZsQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQWtuQixpQkFBQSxFQUFBbG5CLEVBQUEsQ0FBQWtuQixpQkFBQSxLQUVBO0FBQ0E7QUFDQWxuQixFQUFBLENBQUFtbkIsNEJBQUEsQ0FBQXhsQixNQUFBLENBQUFDLFFBQUEsQ0FBQTVCLEVBQUEsQ0FBQW1uQiw0QkFBQSxFQUFBbm5CLEVBQUEsQ0FBQW1uQiw0QkFBQSxLQUNBO0FBQ0FubkIsRUFBQSxDQUFBb25CLHdCQUFBLENBQUF6bEIsTUFBQSxDQUFBQyxRQUFBLENBQUE1QixFQUFBLENBQUFvbkIsd0JBQUEsRUFBQXBuQixFQUFBLENBQUFvbkIsd0JBQUEsS0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXBuQixFQUFBLENBQUFxbkIsWUFBQSxVQUFBbmUsRUFBQSxFQUNBLElBQUFBLEVBQUEsVUFDQSxJQUNBbVMsWUFBQSxDQUFBcmIsRUFBQSxDQUFBK21CLGFBQUEsQ0FBQXBTLEdBQUEsQ0FBQXpMLEVBQUEsR0FDQSxPQUFBM0csQ0FBQSxHQUNBdkMsRUFBQSxDQUFBK21CLGFBQUEsQ0FBQU8sTUFBQSxDQUFBcGUsRUFBQSxFQUVBLElBQUFxVSxJQUFBLENBQUF2ZCxFQUFBLENBQUFnbkIsV0FBQSxDQUFBclMsR0FBQSxDQUFBekwsRUFBQSxNQUNBcVUsSUFBQSxDQUFBZ0ssS0FBQSxFQUFBNWxCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBMmIsSUFBQSxDQUFBZ0ssS0FBQSxFQUFBaEssSUFBQSxDQUFBZ0ssS0FBQSxNQUNBaEssSUFBQSxDQUFBaUssU0FBQSxPQUNBLElBQUF0ZSxFQUFBLENBQUFuQixTQUFBLENBQUErRixNQUFBLDhEQUFBdkwsQ0FBQSxHQUNBLElBQUEyRyxFQUFBLENBQUExQyxLQUFBLENBQUErSSxjQUFBLGtDQUFBaE4sQ0FBQSxHQUNBdkMsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJMLEdBQUEsQ0FBQXpTLEVBQUEsQ0FBQXFVLElBQUEsRUFDQSxJQUFBbEMsWUFBQSxDQUFBa0MsSUFBQSxDQUFBa0ssV0FBQSxTQUFBbGxCLENBQUEsR0FDQWdiLElBQUEsQ0FBQWtLLFdBQUEsR0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXpuQixFQUFBLENBQUEwbkIsc0JBQUEsVUFBQXhlLEVBQUEsQ0FBQXllLEdBQUEsRUFDQSxJQUFBemUsRUFBQSxVQUNBLElBQ0FBLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQStGLE1BQUEsQ0FBQTZaLEdBQUEsRUFDQSxPQUFBcGxCLENBQUEsR0FDQTtBQUNBLEtBQUEyRyxFQUFBLENBQUEwZSxXQUFBLENBQ0EsSUFDQTFlLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQXVILEdBQUEsQ0FBQXFZLEdBQUEsRUFDQSxPQUFBcGxCLENBQUEsR0FDQSxFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXZDLEVBQUEsQ0FBQTZuQixVQUFBLFVBQUEzZSxFQUFBLENBQUE0ZSxNQUFBLEVBQ0EsSUFBQTVlLEVBQUEsVUFDQSxJQUFBeWUsR0FBQSwwQkFDQSxJQUFBSSxFQUFBLENBQUFwbUIsTUFBQSxDQUFBQyxRQUFBLENBQUFrbUIsTUFBQSxFQUFBQSxNQUFBLEtBRUE5bkIsRUFBQSxDQUFBcW5CLFlBQUEsQ0FBQW5lLEVBQUEsRUFFQSxJQUFBcVUsSUFBQSxDQUFBdmQsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJTLEdBQUEsQ0FBQXpMLEVBQUEsTUFDQSxJQUFBcWUsS0FBQSxFQUFBNWxCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBMmIsSUFBQSxDQUFBZ0ssS0FBQSxFQUFBaEssSUFBQSxDQUFBZ0ssS0FBQSxNQUNBaEssSUFBQSxDQUFBZ0ssS0FBQSxDQUFBQSxLQUFBLENBQ0F2bkIsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJMLEdBQUEsQ0FBQXpTLEVBQUEsQ0FBQXFVLElBQUEsRUFFQXZkLEVBQUEsQ0FBQTBuQixzQkFBQSxDQUFBeGUsRUFBQSxDQUFBeWUsR0FBQSxFQUNBLElBQUF6TSxDQUFBLENBQUEvRixVQUFBLFlBQ0E7QUFDQSxJQUFBdFMsQ0FBQSxDQUFBN0MsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJTLEdBQUEsQ0FBQXpMLEVBQUEsTUFDQSxHQUFBckcsQ0FBQSxDQUFBMGtCLEtBQUEsR0FBQUEsS0FBQSxVQUNBLElBQ0FyZSxFQUFBLENBQUFuQixTQUFBLENBQUErRixNQUFBLENBQUE2WixHQUFBLEVBQ0EsT0FBQXBsQixDQUFBLEdBQ0F2QyxFQUFBLENBQUErbUIsYUFBQSxDQUFBTyxNQUFBLENBQUFwZSxFQUFBLEVBQ0EsRUFBQTZlLEVBQUEsRUFDQS9uQixFQUFBLENBQUErbUIsYUFBQSxDQUFBcEwsR0FBQSxDQUFBelMsRUFBQSxDQUFBZ1MsQ0FBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBbGIsRUFBQSxDQUFBZ29CLGNBQUEsVUFBQTllLEVBQUEsQ0FBQStlLEtBQUEsQ0FBQUMsS0FBQSxDQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFDQSxJQUFBbGYsRUFBQSxHQUFBb1QsQ0FBQSxDQUFBK0wsSUFBQSxDQUFBemlCLFFBQUEsQ0FBQXNELEVBQUEsR0FDQSxPQUNBLENBQ0EsSUFBQXllLEdBQUEsNkJBQ0EsSUFBQVcsS0FBQSxDQUFBM21CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBcW1CLEtBQUEsRUFBQUEsS0FBQSxHQUNBLElBQUE1YixFQUFBLENBQUExSyxNQUFBLENBQUFDLFFBQUEsQ0FBQXNtQixLQUFBLEVBQUFBLEtBQUEsS0FDQSxJQUFBMWIsR0FBQSxDQUFBN0ssTUFBQSxDQUFBQyxRQUFBLENBQUF1bUIsTUFBQSxFQUFBQSxNQUFBLEtBRUE7QUFDQSxJQUFBNUssSUFBQSxDQUFBdmQsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJTLEdBQUEsQ0FBQXpMLEVBQUEsTUFDQSxJQUFBZ0ssR0FBQSxDQUFBRyxJQUFBLENBQUFILEdBQUEsR0FDQSxJQUFBcVYsV0FBQSxDQUFBNW1CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBaW5CLGlCQUFBLEVBQUFqbkIsRUFBQSxDQUFBaW5CLGlCQUFBLEtBQ0EsR0FBQXRsQixNQUFBLENBQUFDLFFBQUEsQ0FBQTJiLElBQUEsQ0FBQWlMLE9BQUEsR0FBQXRWLEdBQUEsQ0FBQXFLLElBQUEsQ0FBQWlMLE9BQUEsQ0FBQUQsV0FBQSxFQUNBLE9BQ0EsQ0FDQWhMLElBQUEsQ0FBQWlMLE9BQUEsQ0FBQXRWLEdBQUEsQ0FFQTtBQUNBbFQsRUFBQSxDQUFBcW5CLFlBQUEsQ0FBQW5lLEVBQUEsRUFFQTtBQUNBLElBQUFxZSxLQUFBLEVBQUE1bEIsTUFBQSxDQUFBQyxRQUFBLENBQUEyYixJQUFBLENBQUFnSyxLQUFBLEVBQUFoSyxJQUFBLENBQUFnSyxLQUFBLE1BQ0FoSyxJQUFBLENBQUFnSyxLQUFBLENBQUFBLEtBQUEsQ0FFQSxJQUFBa0IsVUFBQSxHQUFBTCxTQUFBLFNBQUFBLFNBQUEsWUFDQSxHQUFBSyxVQUFBLEVBQ0EsSUFDQXZmLEVBQUEsQ0FBQTFDLEtBQUEsQ0FBQTZJLFdBQUEsMEJBQUErWSxTQUFBLEVBQ0EsT0FBQTdsQixDQUFBLEdBQ0FnYixJQUFBLENBQUFpSyxTQUFBLE1BQ0EsQ0FDQXhuQixFQUFBLENBQUFnbkIsV0FBQSxDQUFBckwsR0FBQSxDQUFBelMsRUFBQSxDQUFBcVUsSUFBQSxFQUVBLElBQUFoVyxDQUFBLEdBQ0EsVUFBQW1oQixLQUFBLEVBQ0EsSUFBQTdsQixDQUFBLENBQUE3QyxFQUFBLENBQUFnbkIsV0FBQSxDQUFBclMsR0FBQSxDQUFBekwsRUFBQSxNQUNBLEdBQUFyRyxDQUFBLENBQUEwa0IsS0FBQSxHQUFBQSxLQUFBLEVBQ0E7QUFDQSxPQUNBLENBQ0EsR0FBQWhnQixDQUFBLEVBQUErZ0IsS0FBQSxFQUNBdG9CLEVBQUEsQ0FBQSttQixhQUFBLENBQUFPLE1BQUEsQ0FBQXBlLEVBQUEsRUFDQSxHQUFBdWYsVUFBQSxFQUNBLElBQ0F2ZixFQUFBLENBQUExQyxLQUFBLENBQUErSSxjQUFBLDJCQUNBLE9BQUFoTixDQUFBLEdBQ0EsQ0FDQSxPQUNBLENBQ0F2QyxFQUFBLENBQUEwbkIsc0JBQUEsQ0FBQXhlLEVBQUEsQ0FBQXllLEdBQUEsRUFDQTNuQixFQUFBLENBQUErbUIsYUFBQSxDQUFBcEwsR0FBQSxDQUFBelMsRUFBQSxDQUFBaU0sVUFBQTtBQUNBLElBQUF3VCxFQUFBLENBQUEzb0IsRUFBQSxDQUFBZ25CLFdBQUEsQ0FBQXJTLEdBQUEsQ0FBQXpMLEVBQUEsTUFDQSxHQUFBeWYsRUFBQSxDQUFBcEIsS0FBQSxHQUFBQSxLQUFBLFVBQ0EsSUFDQXJlLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQStGLE1BQUEsQ0FBQTZaLEdBQUEsRUFDQSxPQUFBcGxCLENBQUEsRUFDQSxDQUNBdkMsRUFBQSxDQUFBK21CLGFBQUEsQ0FBQXBMLEdBQUEsQ0FBQXpTLEVBQUEsQ0FBQWlNLFVBQUE7QUFDQSxJQUFBeVQsRUFBQSxDQUFBNW9CLEVBQUEsQ0FBQWduQixXQUFBLENBQUFyUyxHQUFBLENBQUF6TCxFQUFBLE1BQ0EsR0FBQTBmLEVBQUEsQ0FBQXJCLEtBQUEsR0FBQUEsS0FBQSxVQUNBaGdCLENBQUEsR0FDQW1oQixJQUFBLEdBQ0EsRUFBQWxjLEdBQUEsR0FDQSxFQUFBSCxFQUFBLEdBQ0EsS0FDQSxFQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBck0sRUFBQSxDQUFBNm9CLHFCQUFBLFVBQUFDLGdCQUFBLENBQUExa0IsUUFBQSxDQUFBMmtCLE9BQUEsQ0FBQWppQixDQUFBLENBQUFDLENBQUEsQ0FBQWlpQixDQUFBLENBQUFDLEtBQUEsRUFDQSxJQUFBNVUsSUFBQSxRQUFBeVUsZ0JBQUEsWUFBQXhNLENBQUEsQ0FBQXdNLGdCQUFBLEVBQUF4TSxDQUFBLENBQ0EsSUFBQXFILEdBQUEsUUFBQW1GLGdCQUFBLFlBQUFBLGdCQUFBLENBQUExa0IsUUFBQSxDQUNBLElBQUF1ZixHQUFBLFVBQ0EsSUFBQXphLEVBQUEsQ0FBQW1MLElBQUEsQ0FBQXhRLGFBQUEsQ0FBQThmLEdBQUEsRUFDQSxJQUFBemEsRUFBQSxVQUVBLElBQUFnZ0IsTUFBQSxDQUFBdm5CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBa25CLGlCQUFBLEVBQUFsbkIsRUFBQSxDQUFBa25CLGlCQUFBLEtBQ0EsSUFBQWEsRUFBQSxDQUFBcG1CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBbW5CLE9BQUEsRUFBQUEsT0FBQSxDQUFBRyxNQUFBLENBQ0EsSUFBQTNMLElBQUEsQ0FBQXZkLEVBQUEsQ0FBQWduQixXQUFBLENBQUFyUyxHQUFBLENBQUF6TCxFQUFBLE1BQ0EsSUFBQW1TLFlBQUEsQ0FBQWtDLElBQUEsQ0FBQWtLLFdBQUEsU0FBQWxsQixDQUFBLEdBQ0FnYixJQUFBLENBQUFrSyxXQUFBLENBQUF0UyxVQUFBLFlBQ0FuVixFQUFBLENBQUFnb0IsY0FBQSxDQUFBOWUsRUFBQSxDQUFBcEMsQ0FBQSxDQUFBQyxDQUFBLENBQUFpaUIsQ0FBQSxDQUFBQyxLQUFBLEVBQ0EsRUFBQWxCLEVBQUEsRUFDQS9uQixFQUFBLENBQUFnbkIsV0FBQSxDQUFBckwsR0FBQSxDQUFBelMsRUFBQSxDQUFBcVUsSUFBQSxFQUNBLEVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUNBdmQsRUFBQSxDQUFBbXBCLFdBQUEsVUFBQUwsZ0JBQUEsQ0FBQTFrQixRQUFBLENBQUEwQyxDQUFBLENBQUFDLENBQUEsQ0FBQWlpQixDQUFBLENBQUFDLEtBQUEsRUFDQSxJQUFBNVUsSUFBQSxRQUFBeVUsZ0JBQUEsWUFBQXhNLENBQUEsQ0FBQXdNLGdCQUFBLEVBQUF4TSxDQUFBLENBQ0EsSUFBQXFILEdBQUEsUUFBQW1GLGdCQUFBLFlBQUFBLGdCQUFBLENBQUExa0IsUUFBQSxDQUNBLElBQUF1ZixHQUFBLEVBQ0EsT0FDQSxDQUVBLElBQUF6YSxFQUFBLENBQUFtTCxJQUFBLENBQUF4USxhQUFBLENBQUE4ZixHQUFBLEVBQ0EsSUFBQXphLEVBQUEsRUFDQSxPQUNBLENBRUE7QUFDQSxHQUFBdkgsTUFBQSxDQUFBQyxRQUFBLENBQUFrRixDQUFBLEdBQUFDLENBQUEsR0FBQTJXLFNBQUEsRUFBQXNMLENBQUEsR0FBQXRMLFNBQUEsRUFDQSxPQUFBMWQsRUFBQSxDQUFBNm5CLFVBQUEsQ0FBQTNlLEVBQUEsQ0FBQXBDLENBQUEsRUFDQSxDQUNBO0FBQ0E5RyxFQUFBLENBQUFnb0IsY0FBQSxDQUFBOWUsRUFBQSxDQUFBcEMsQ0FBQSxDQUFBQyxDQUFBLENBQUFpaUIsQ0FBQSxDQUFBQyxLQUFBLEVBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQWpwQixFQUFBLENBQUFvcEIscUJBQUEsVUFBQWxnQixFQUFBLENBQUFwRCxJQUFBLEVBQ0FBLElBQUEsQ0FBQUEsSUFBQSxLQUNBOUYsRUFBQSxDQUFBZ29CLGNBQUEsQ0FDQTllLEVBQUEsQ0FDQXZILE1BQUEsQ0FBQUMsUUFBQSxDQUFBa0UsSUFBQSxDQUFBbWlCLEtBQUEsRUFBQW5pQixJQUFBLENBQUFtaUIsS0FBQSxHQUNBdG1CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBa0UsSUFBQSxDQUFBb2lCLEtBQUEsRUFBQXBpQixJQUFBLENBQUFvaUIsS0FBQSxLQUNBdm1CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBa0UsSUFBQSxDQUFBcWlCLE1BQUEsRUFBQXJpQixJQUFBLENBQUFxaUIsTUFBQSxLQUNBcmlCLElBQUEsQ0FBQW1qQixLQUNBLEVBQ0EsRUFHQTtBQUNBO0FBQ0EsSUFDQWpwQixFQUFBLENBQUFxcEIsZUFBQSxPQUNBLHlDQUNBcG1CLFlBQUEwSixPQUFBLEVBQ0EsS0FBQUEsT0FBQSxDQUFBQSxPQUFBLENBQ0EsQ0FFQSw2QkFDQTJjLEtBQUEsRUFDQSxDQUVBLDBCQUNBalIsUUFBQSxFQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUNBclksRUFBQSxDQUFBZ2lCLGdCQUFBLE9BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQXVILDRCQUFBNWMsT0FBQSxDQUFBNmMsZ0JBQUEsT0FFQSxNQUFBdG1CLGVBQUEsQ0FBQXlKLE9BQUEsRUFBQXpKLGVBQUEsQ0FDQSxJQUFBQSxlQUFBLEVBQUFvQixnQkFBQSxFQUNBLE9BQ0EsQ0FFQSxNQUFBbWxCLFNBQUEsQ0FBQWhrQixRQUFBLENBQUFDLGNBQUEsd0JBQ0EsTUFBQWdrQixpQkFBQSxHQUFBRCxTQUFBLEVBQ0EsQ0FBQUEsU0FBQSxDQUFBckwsWUFBQSxZQUNBcUwsU0FBQSxDQUFBdmtCLFlBQUEseUJBQ0EsTUFBQXlrQixnQkFBQSxJQUFBN3BCLElBQUEsQ0FBQXlZLFlBQUEsQ0FBQUMsU0FBQSxDQUFBRSxLQUFBLEtBQUE1WSxJQUFBLENBQUF5WSxZQUFBLENBQUFDLFNBQUEsQ0FBQVYsT0FBQSxHQUVBLE1BQUE4UixPQUFBLENBQUFKLGdCQUFBLEVBQUF0bUIsZUFBQSxDQUFBb0IsZ0JBQUEsNEJBRUE4QixLQUFBLENBQUFDLElBQUEsQ0FBQXVqQixPQUFBLEVBQUF0aUIsT0FBQSxDQUFBdWlCLGVBQUEsR0FDQSxNQUFBQyxLQUFBLENBQUFELGVBQUEsQ0FBQTNZLE9BQUEsQ0FBQXlZLGdCQUFBLEVBQ0EsTUFBQUksVUFBQSxDQUFBTCxpQkFBQSxFQUNBLEVBQUFJLEtBQUEsRUFBQS9oQixTQUFBLEVBQUFuQyxRQUFBLENBQUE5RixJQUFBLENBQUF5WSxZQUFBLENBQUFPLE9BQUEsQ0FBQUMsUUFBQSxFQUVBOFEsZUFBQSxDQUFBL2tCLFlBQUEsZ0JBQUFpbEIsVUFBQSxpQkFDQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUF0VCxPQUFBOUosT0FBQSxDQUFBekQsRUFBQSxFQUVBLElBQUFBLEVBQUEsRUFDQSxPQUNBLENBQ0EsTUFBQXFPLFNBQUEsQ0FBQXJPLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsc0JBRUE7QUFDQSxJQUFBaVQsT0FBQSxDQUFBM1AsRUFBQSxDQUFBckYsYUFBQSxhQUFBL0QsSUFBQSxDQUFBeVksWUFBQSxDQUFBQyxTQUFBLENBQUFLLE9BQUEsSUFDQSxJQUFBQSxPQUFBLEVBQ0FBLE9BQUEsQ0FBQS9ZLElBQUEsQ0FBQXVYLHdCQUFBLENBQUE0QixjQUFBLHFDQUNBL1AsRUFBQSxDQUFBOGdCLE9BQUEsQ0FBQW5SLE9BQUEsRUFDQSxDQUVBO0FBQ0EsSUFBQUEsT0FBQSxDQUFBaFYsYUFBQSw0QkFDQSxNQUFBcUosU0FBQSxDQUFBcUssU0FBQSxxRUFDQXNCLE9BQUEsQ0FBQWdDLFdBQUEsQ0FDQS9hLElBQUEsQ0FBQXVYLHdCQUFBLENBQUE0QixjQUFBLFFBQUEvTCxTQUFBLGlEQUNBLEVBQ0EsQ0FFQTtBQUNBLElBQUErYyxZQUFBLENBQUFwUixPQUFBLENBQUFoVixhQUFBLDRCQUNBLElBQUFvbUIsWUFBQSxFQUNBQSxZQUFBLENBQUFucUIsSUFBQSxDQUFBdVgsd0JBQUEsQ0FBQTRCLGNBQUEsNkdBQ0FnUixZQUFBLENBQUE1Z0IsSUFBQSxVQUNBNGdCLFlBQUEsQ0FBQTVNLEtBQUEsaUJBQ0E0TSxZQUFBLENBQUFubEIsWUFBQSxjQUFBbWxCLFlBQUEsQ0FBQTVNLEtBQUEsRUFDQTRNLFlBQUEsQ0FBQW5sQixZQUFBLHdDQUNBbWxCLFlBQUEsQ0FBQW5sQixZQUFBLHlCQUNBbWxCLFlBQUEsQ0FBQUMsT0FBQSxDQUFBcFEsQ0FBQSxHQUNBQSxDQUFBLENBQUFzTSxjQUFBLEdBQ0E7QUFDQXpaLE9BQUEsQ0FBQWlMLFlBQUEsQ0FBQTFPLEVBQUEsRUFBQWloQixjQUFBLFFBRUE7QUFDQUMsNkJBQUEsQ0FDQSxzQkFDQSxDQUNBQyxRQUFBLHVCQUNBQyxNQUFBLHFCQUNBLENBQ0EsRUFFQTtBQUNBLE1BQUF4TCxHQUFBLENBQUFyWixRQUFBLENBQUFDLGNBQUEsd0JBQ0EsR0FBQW9aLEdBQUEsRUFDQUEsR0FBQSxDQUFBcUwsY0FBQSxFQUFBSSxRQUFBLFVBQUFDLEtBQUEsYUFDQTtBQUNBclYsVUFBQSxNQUNBLE1BQUFzVixTQUFBLENBQUEzTCxHQUFBLENBQUFqYixhQUFBLG1GQUNBNG1CLFNBQUEsRUFBQUMsS0FBQSxLQUNBLE9BQ0EsQ0FDQSxFQUVBN1IsT0FBQSxDQUFBZ0MsV0FBQSxDQUFBb1AsWUFBQSxFQUNBLENBRUFwUixPQUFBLENBQUEvVCxZQUFBLG1CQUNBK1QsT0FBQSxDQUFBL1QsWUFBQSxjQUFBb0UsRUFBQSxDQUFBbkIsU0FBQSxDQUFBbkMsUUFBQSxxREFDQTVGLEVBQUEsQ0FBQWdpQixnQkFBQSxDQUFBdUgsMkJBQUEsQ0FBQTVjLE9BQUEsRUFBQXNkLFlBQUEsR0FFQSxPQUFBcFIsT0FBQSxDQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0E3WSxFQUFBLENBQUEycUIscUJBQUEsT0FFQSw4REFDQSxPQUFBQyxnQkFBQXJrQixHQUFBLEVBQ0EsTUFBQTlGLENBQUEsQ0FBQW9xQixnQkFBQSxDQUFBdGtCLEdBQUEsRUFBQXVJLGdCQUFBLHdCQUNBLE1BQUFyTixDQUFBLENBQUFDLFVBQUEsQ0FBQWpCLENBQUEsRUFDQSxPQUFBa0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQU8sSUFBQSxDQUFBRCxHQUFBLEdBQUFOLENBQUEsSUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBcXBCLDRCQUFBbmUsT0FBQSxDQUFBN0UsR0FBQSxDQUFBRCxPQUFBLEVBQ0EsTUFBQTFCLElBQUEsQ0FBQUMsS0FBQSxDQUFBQyxJQUFBLENBQUF5QixHQUFBLENBQUF4RCxnQkFBQSxnQ0FDQSxNQUFBN0MsQ0FBQSxDQUFBMEUsSUFBQSxDQUFBNUIsTUFBQSxDQUNBLElBQUE5QyxDQUFBLGFBQ0EsSUFBQTJFLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQUgsT0FBQSxHQUFBQSxPQUFBLENBQUF0RCxNQUFBLEdBQUE5QyxDQUFBLGFBRUE7QUFDQSxNQUFBdUYsRUFBQSxDQUFBMkYsT0FBQSxDQUFBNUcsZUFBQSxDQUNBLE1BQUFnbEIsR0FBQSxDQUFBcGUsT0FBQSxDQUFBcWUsTUFBQSxDQUFBaGxCLGdDQUFBLENBQUE4QixHQUFBLENBQUFkLEVBQUEsRUFDQSxNQUFBaWtCLFFBQUEsQ0FBQUYsR0FBQSxDQUFBN2pCLFNBQUE7QUFDQSxNQUFBZ2tCLEtBQUEsQ0FBQXBqQixHQUFBLENBQUE0RyxxQkFBQSxHQUFBc0IsS0FBQSxDQUNBLE1BQUFtYixPQUFBLENBQUFELEtBQUEsRUFBQUQsUUFBQSxNQUVBO0FBQ0EsTUFBQUcsTUFBQSxDQUFBamxCLElBQUEsQ0FBQUcsR0FBQSxDQUFBMGlCLENBQUEsR0FDQSxNQUFBcUMsS0FBQSxDQUFBcnJCLEVBQUEsQ0FBQTJxQixxQkFBQSxDQUFBQyxlQUFBLENBQUE1QixDQUFBLEVBQ0EsR0FBQW1DLE9BQUEsYUFDQSxPQUFBRSxLQUFBLENBQUFGLE9BQUEsQ0FBQUYsUUFBQSxDQUNBLEdBRUE7QUFDQSxNQUFBSyxNQUFBLENBQUFGLE1BQUEsQ0FBQXZrQixNQUFBLEVBQUFDLENBQUEsQ0FBQUMsQ0FBQSxHQUFBRCxDQUFBLENBQUFDLENBQUEsSUFDQSxHQUFBdWtCLE1BQUEsQ0FBQUwsUUFBQSxPQUNBO0FBQ0EsQ0FFQTtBQUNBLE1BQUFNLElBQUEsQ0FBQTFqQixPQUFBLENBQUFoQixNQUFBLEVBQUFDLENBQUEsQ0FBQWpILENBQUEsR0FBQWlILENBQUEsRUFBQW5GLE1BQUEsQ0FBQTlCLENBQUEsVUFBQTRCLENBQUEsQ0FDQSxNQUFBK3BCLFNBQUEsQ0FBQTNqQixPQUFBLENBQUF2QixHQUFBLENBQUF6RyxDQUFBLEdBQUE4QixNQUFBLENBQUE5QixDQUFBLE1BQUEwckIsSUFBQSxDQUFBTixRQUFBLEVBRUE7QUFDQTtBQUNBLE1BQUFRLE1BQUEsS0FBQXJsQixLQUFBLENBQUEzRSxDQUFBLEVBQUFpRyxJQUFBLFFBQ0EsSUFBQWdrQixTQUFBLEdBQ0EsUUFBQW5rQixDQUFBLEdBQUFBLENBQUEsQ0FBQTlGLENBQUEsQ0FBQThGLENBQUEsSUFDQSxHQUFBaWtCLFNBQUEsQ0FBQWprQixDQUFBLEVBQUE2akIsTUFBQSxDQUFBN2pCLENBQUEsR0FDQWtrQixNQUFBLENBQUFsa0IsQ0FBQSxPQUNBbWtCLFNBQUEsRUFBQU4sTUFBQSxDQUFBN2pCLENBQUEsRUFDQSxDQUNBLENBRUEsSUFBQW9rQixTQUFBLENBQUFWLFFBQUEsQ0FBQVMsU0FBQSxDQUNBLE1BQUFFLE9BQUEsSUFDQSxJQUFBQyxhQUFBLEdBQ0EsUUFBQXRrQixDQUFBLEdBQUFBLENBQUEsQ0FBQTlGLENBQUEsQ0FBQThGLENBQUEsSUFDQSxJQUFBa2tCLE1BQUEsQ0FBQWxrQixDQUFBLEdBQ0Fxa0IsT0FBQSxDQUFBaEksSUFBQSxDQUFBcmMsQ0FBQSxFQUNBc2tCLGFBQUEsRUFBQUwsU0FBQSxDQUFBamtCLENBQUEsRUFDQSxDQUNBLENBRUEsTUFBQXVrQixNQUFBLEtBQUExbEIsS0FBQSxDQUFBM0UsQ0FBQSxFQUFBaUcsSUFBQSxJQUNBO0FBQ0EsUUFBQUgsQ0FBQSxHQUFBQSxDQUFBLENBQUE5RixDQUFBLENBQUE4RixDQUFBLElBQ0EsR0FBQWtrQixNQUFBLENBQUFsa0IsQ0FBQSxFQUFBdWtCLE1BQUEsQ0FBQXZrQixDQUFBLEVBQUE2akIsTUFBQSxDQUFBN2pCLENBQUEsRUFDQSxDQUVBLEdBQUFxa0IsT0FBQSxDQUFBcm5CLE1BQUEsTUFDQTtBQUNBO0FBQ0EsT0FBQXVuQixNQUFBLENBQ0EsQ0FFQSxHQUFBSCxTQUFBLEtBQ0E7QUFDQTtBQUNBLE9BQUFHLE1BQUEsQ0FDQSxDQUVBLEdBQUFELGFBQUEsS0FDQTtBQUNBLE1BQUFwa0IsSUFBQSxDQUFBa2tCLFNBQUEsQ0FBQUMsT0FBQSxDQUFBcm5CLE1BQUEsQ0FDQXFuQixPQUFBLENBQUF0a0IsT0FBQSxDQUFBQyxDQUFBLEVBQUF1a0IsTUFBQSxDQUFBdmtCLENBQUEsRUFBQUUsSUFBQSxFQUNBLE9BQUFxa0IsTUFBQSxDQUNBLENBRUE7QUFDQUYsT0FBQSxDQUFBdGtCLE9BQUEsQ0FBQUMsQ0FBQSxHQUNBdWtCLE1BQUEsQ0FBQXZrQixDQUFBLEVBQUFva0IsU0FBQSxFQUFBSCxTQUFBLENBQUFqa0IsQ0FBQSxFQUFBc2tCLGFBQUEsRUFDQSxHQUNBLE9BQUFDLE1BQUEsQ0FDQSxDQUVBLHdGQUNBLE9BQUFDLDZCQUFBcGYsT0FBQSxDQUFBcWYsVUFBQSxDQUFBbmtCLE9BQUEsRUFDQSxNQUFBQyxHQUFBLENBQUFra0IsVUFBQSxDQUFBbm9CLGFBQUEsNEJBQ0EsSUFBQWlFLEdBQUEsY0FFQSxNQUFBbWtCLE1BQUEsQ0FBQWpzQixFQUFBLENBQUEycUIscUJBQUEsQ0FBQUcsMkJBQUEsQ0FBQW5lLE9BQUEsQ0FBQTdFLEdBQUEsQ0FBQUQsT0FBQSxFQUNBLElBQUFva0IsTUFBQSxFQUNBdGYsT0FBQSxFQUFBdWYsU0FBQSwwRUFDQSxhQUNBLENBRUE7QUFDQXZmLE9BQUEsQ0FBQXFlLE1BQUEsQ0FBQTNqQixrQkFBQSxDQUFBUyxHQUFBLENBQUFta0IsTUFBQSxFQUNBLFlBQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUUsbUJBQUF4ZixPQUFBLENBQUFxZixVQUFBLENBQUFJLE9BQUEsRUFFQSxJQUFBemYsT0FBQSxHQUFBcWYsVUFBQSxHQUFBSSxPQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUF0a0IsR0FBQSxDQUFBa2tCLFVBQUEsQ0FBQW5vQixhQUFBLDRCQUNBLElBQUFpRSxHQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUEzQixJQUFBLENBQUEyQixHQUFBLENBQUF4RCxnQkFBQSwrQkFBQUMsTUFBQSxJQUVBO0FBQ0E2bkIsT0FBQSxDQUFBL1MsU0FBQSxJQUVBO0FBQ0ErUyxPQUFBLENBQUF2UixXQUFBLENBQ0E3YSxFQUFBLENBQUEycUIscUJBQUEsQ0FBQTBCLFVBQUEsQ0FBQTFmLE9BQUEsQ0FBQXFmLFVBQUEsQ0FBQTVsQixLQUFBLENBQUFELElBQUEsRUFBQXVCLElBQUEsWUFDQSxFQUVBO0FBQ0EsTUFBQTRrQixPQUFBLENBQUEzZixPQUFBLENBQUFxZSxNQUFBLENBQUE5aUIseUJBQUEsQ0FBQS9CLElBQUEsRUFDQW1tQixPQUFBLENBQUFobEIsT0FBQSxDQUFBTyxPQUFBLEdBQ0F1a0IsT0FBQSxDQUFBdlIsV0FBQSxDQUNBN2EsRUFBQSxDQUFBMnFCLHFCQUFBLENBQUEwQixVQUFBLENBQUExZixPQUFBLENBQUFxZixVQUFBLENBQUFua0IsT0FBQSxNQUNBLEVBQ0EsR0FFQTtBQUNBLE1BQUEwa0IsU0FBQSxDQUFBOW1CLFFBQUEsQ0FBQThLLGFBQUEsV0FDQWdjLFNBQUEsQ0FBQWxqQixJQUFBLFVBQ0FrakIsU0FBQSxDQUFBL2IsU0FBQSx5QkFDQStiLFNBQUEsQ0FBQTNSLFdBQUEsV0FDQTJSLFNBQUEsQ0FBQWxQLEtBQUEsVUFBQWxYLElBQUEsZUFDQW9tQixTQUFBLENBQUFoZ0IsZ0JBQUEsY0FDQSxNQUFBaWdCLE9BQUEsQ0FBQXJtQixJQUFBLGFBQUFBLElBQUEsOEJBQ0EsTUFBQXNtQixJQUFBLENBQUFDLE1BQUEsVUFBQXZtQixJQUFBLDJDQUFBcW1CLE9BQUEsRUFDQSxHQUFBQyxJQUFBLGNBQ0EsTUFBQTVrQixPQUFBLENBQUE4RSxPQUFBLENBQUFxZSxNQUFBLENBQUExaUIsYUFBQSxDQUFBbWtCLElBQUEsRUFDQSxHQUFBNWtCLE9BQUEsQ0FBQXRELE1BQUEsR0FBQTRCLElBQUEsRUFDQWdGLEtBQUEseUJBQUFoRixJQUFBLGFBQ0EsT0FDQSxDQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUFuRyxFQUFBLENBQUEycUIscUJBQUEsQ0FBQW9CLDRCQUFBLENBQUFwZixPQUFBLENBQUFxZixVQUFBLENBQUFua0IsT0FBQSxHQUNBLE9BQ0EsQ0FDQXVrQixPQUFBLENBQUE5bkIsZ0JBQUEsMkJBQUFnRCxPQUFBLENBQUEwaEIsQ0FBQSxFQUFBQSxDQUFBLENBQUFqaEIsU0FBQSxDQUFBK0YsTUFBQSxlQUNBeWUsU0FBQSxDQUFBeGtCLFNBQUEsQ0FBQXVILEdBQUEsY0FDQSxHQUNBOGMsT0FBQSxDQUFBdlIsV0FBQSxDQUFBMFIsU0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBRixXQUFBMWYsT0FBQSxDQUFBcWYsVUFBQSxDQUFBbmtCLE9BQUEsQ0FBQXFELEtBQUEsT0FFQSxNQUFBeWhCLEdBQUEsQ0FBQWxuQixRQUFBLENBQUE4SyxhQUFBLFdBQ0FvYyxHQUFBLENBQUF0akIsSUFBQSxVQUNBc2pCLEdBQUEsQ0FBQW5jLFNBQUEseUJBRUEsTUFBQTZNLEtBQUEsQ0FBQW5TLEtBQUEsRUFBQXlCLE9BQUEsQ0FBQXFlLE1BQUEsQ0FBQTdpQixtQkFBQSxDQUFBTixPQUFBLEVBQ0E4a0IsR0FBQSxDQUFBdFAsS0FBQSxDQUFBQSxLQUFBLENBRUE7QUFDQSxNQUFBdVAsR0FBQSxDQUFBbm5CLFFBQUEsQ0FBQThLLGFBQUEsUUFDQXFjLEdBQUEsQ0FBQXBjLFNBQUEsNkJBQ0EsTUFBQXZJLEdBQUEsQ0FBQUosT0FBQSxDQUFBaEIsTUFBQSxFQUFBQyxDQUFBLENBQUFDLENBQUEsR0FBQUQsQ0FBQSxFQUFBbkYsTUFBQSxDQUFBb0YsQ0FBQSxZQUNBYyxPQUFBLENBQUFQLE9BQUEsQ0FBQXpILENBQUEsR0FDQSxNQUFBZ3RCLEdBQUEsQ0FBQXBuQixRQUFBLENBQUE4SyxhQUFBLFNBQ0FzYyxHQUFBLENBQUFybUIsS0FBQSxDQUFBc21CLElBQUEsZ0JBQUFuckIsTUFBQSxDQUFBOUIsQ0FBQSxNQUFBb0ksR0FBQSxNQUFBOGtCLE9BQUEsaUJBQ0FILEdBQUEsQ0FBQS9SLFdBQUEsQ0FBQWdTLEdBQUEsRUFDQSxHQUNBRixHQUFBLENBQUE5UixXQUFBLENBQUErUixHQUFBLEVBRUEsTUFBQUksR0FBQSxDQUFBdm5CLFFBQUEsQ0FBQThLLGFBQUEsU0FDQXljLEdBQUEsQ0FBQXhjLFNBQUEsK0JBQ0F3YyxHQUFBLENBQUFwUyxXQUFBLENBQUExUCxLQUFBLEVBQUF5QixPQUFBLENBQUFxZSxNQUFBLENBQUE3aUIsbUJBQUEsQ0FBQU4sT0FBQSxFQUNBOGtCLEdBQUEsQ0FBQTlSLFdBQUEsQ0FBQW1TLEdBQUEsRUFFQUwsR0FBQSxDQUFBcGdCLGdCQUFBLGNBQ0E7QUFDQTtBQUVBO0FBQ0EsSUFBQXZNLEVBQUEsQ0FBQTJxQixxQkFBQSxDQUFBb0IsNEJBQUEsQ0FBQXBmLE9BQUEsQ0FBQXFmLFVBQUEsQ0FBQW5rQixPQUFBLEdBQ0E7QUFDQSxDQUVBOGtCLEdBQUEsQ0FBQU0sYUFBQSxFQUFBM29CLGdCQUFBLDJCQUFBZ0QsT0FBQSxDQUFBMGhCLENBQUEsRUFBQUEsQ0FBQSxDQUFBamhCLFNBQUEsQ0FBQStGLE1BQUEsZUFDQTZlLEdBQUEsQ0FBQTVrQixTQUFBLENBQUF1SCxHQUFBLGNBQ0EsR0FFQSxPQUFBcWQsR0FBQSxDQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0EsSUFDQTNzQixFQUFBLENBQUFrdEIsNkJBQUEsZUFBQWx0QixFQUFBLENBQUFxcEIsZUFBQSxDQUVBQyxLQUFBLEVBRUEsS0FBQTZELGFBQUEsTUFDQSxLQUFBeGdCLE9BQUEsQ0FBQWlMLFlBQUEsTUFBQUEsWUFBQSxDQUFBWCxJQUFBLE9BQ0EsS0FBQXRLLE9BQUEsQ0FBQXlnQixrQkFBQSxNQUFBQSxrQkFBQSxDQUFBblcsSUFBQSxPQUNBLEtBQUFvVyxTQUFBLE1BQUFDLFFBQUEsQ0FBQXJXLElBQUEsT0FDQSxLQUFBc1csZUFBQSxNQUFBQyw0QkFBQSxDQUFBdlcsSUFBQSxPQUVBO0FBQ0EsS0FBQXRLLE9BQUEsQ0FBQThnQixXQUFBLENBQUF2a0IsRUFBQSxHQUNBLElBQUFBLEVBQUEsRUFDQSxZQUNBLENBQ0EsTUFBQW5DLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBK2dCLFFBQUEsQ0FBQTNtQixDQUFBLENBQUE0bUIseUJBQUEsR0FBQXprQixFQUFBLFFBQ0FBLEVBQUEsQ0FBQTRFLE1BQUEsR0FDQTtBQUNBL0csQ0FBQSxDQUFBbVEsR0FBQSxFQUFBbEwsSUFBQSxHQUFBbE0sSUFBQSxDQUFBdUwsZUFBQSxDQUFBTSxZQUFBLEVBQUF6QyxFQUFBLENBQUEzRixFQUFBLENBQUEyRixFQUFBLEVBQUF2RixPQUFBLEVBQUFKLEVBQUEsQ0FBQUssR0FBQSxDQUFBc0YsRUFBQSxFQUFBdkYsT0FBQSxFQUFBQyxHQUFBLEdBQ0FtRCxDQUFBLENBQUErQyxLQUFBLEVBQUFELGlCQUFBLEtBQ0E7QUFDQTlDLENBQUEsQ0FBQW1RLEdBQUEsRUFBQWxMLElBQUEsR0FBQWxNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQU8sZ0JBQUEsRUFBQXVMLE1BQUEsVUFBQWpPLEVBQUEsR0FDQTtBQUNBNEsscUJBQUEsTUFDQTtBQUNBL00sQ0FBQSxDQUFBNlEsWUFBQSxHQUFBOFYsUUFBQSxRQUFBdkQsY0FBQSxHQUFBdUQsUUFBQSxHQUNBLEdBQ0EsT0FBQUEsUUFBQSxDQUNBLEVBQ0EsS0FBQS9nQixPQUFBLENBQUF1SyxHQUFBLENBQUE3SyxFQUFBLENBQUF2TSxJQUFBLENBQUF1TCxlQUFBLENBQUFJLGVBQUEsTUFBQTRoQixTQUFBLEVBQ0EsS0FBQTFnQixPQUFBLENBQUF1SyxHQUFBLENBQUE3SyxFQUFBLENBQUF2TSxJQUFBLENBQUF1TCxlQUFBLENBQUFRLGdCQUFBLE1BQUF3aEIsU0FBQSxFQUNBO0FBQ0EsS0FBQU8sZ0JBQUEsTUFBQUMsb0JBQUEsQ0FBQTVXLElBQUEsT0FDQSxLQUFBdEssT0FBQSxDQUFBekosZUFBQSxDQUFBcUosZ0JBQUEsY0FBQXFoQixnQkFBQSxPQUNBbm9CLFFBQUEsQ0FBQThHLGdCQUFBLDZCQUFBZ2hCLGVBQUEsRUFDQSxLQUFBQyw0QkFBQSxHQUNBLENBRUFuVixRQUFBLEVBQ0EsS0FBQTFMLE9BQUEsQ0FBQXVLLEdBQUEsQ0FBQTFLLEdBQUEsQ0FBQTFNLElBQUEsQ0FBQXVMLGVBQUEsQ0FBQUksZUFBQSxNQUFBNGhCLFNBQUEsRUFFQSxRQUFBTyxnQkFBQSxFQUNBLEtBQUFqaEIsT0FBQSxDQUFBekosZUFBQSxDQUFBdUosbUJBQUEsY0FBQW1oQixnQkFBQSxPQUNBLEtBQUFBLGdCQUFBLE1BQ0EsQ0FFQSxRQUFBTCxlQUFBLEVBQ0E5bkIsUUFBQSxDQUFBZ0gsbUJBQUEsNkJBQUE4Z0IsZUFBQSxFQUNBLEtBQUFBLGVBQUEsTUFDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBQyw2QkFBQSxFQUNBeHRCLEVBQUEsQ0FBQWdpQixnQkFBQSxDQUFBdUgsMkJBQUEsTUFBQTVjLE9BQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQWtoQixxQkFBQS9ULENBQUEsRUFDQSxNQUFBekYsSUFBQSxNQUFBMUgsT0FBQSxDQUFBekosZUFBQSxDQUNBLElBQUFtUixJQUFBLFFBRUE7QUFDQSxNQUFBeVosTUFBQSxFQUNBLDhCQUNBLDJCQUNBLHlCQUNBLDhCQUNBLDJCQUNBLDZCQUNBLDRCQUNBLENBQUF6bEIsSUFBQSxNQUVBLEdBQUF5UixDQUFBLENBQUFxTSxNQUFBLENBQUFqVixPQUFBLENBQUE0YyxNQUFBLEdBQ0E7QUFDQSxDQUVBO0FBQ0EsSUFBQUMsR0FBQSxDQUFBalUsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBalYsT0FBQSxHQUNBLEdBQUFwUixJQUFBLENBQUF5WSxZQUFBLENBQUFDLFNBQUEsQ0FBQUcsVUFBQSxLQUFBN1ksSUFBQSxDQUFBeVksWUFBQSxDQUFBQyxTQUFBLENBQUFWLE9BQUEscUJBQ0EsRUFFQSxJQUFBaVcsR0FBQSxHQUFBMVosSUFBQSxDQUFBek8sUUFBQSxDQUFBbW9CLEdBQUEsR0FDQSxLQUFBblcsWUFBQTtBQUNBO0FBQ0EsQ0FFQTtBQUNBLElBQUFvVyxpQkFBQSxNQUNBLEdBQUFELEdBQUEsQ0FBQWhtQixTQUFBLENBQUFuQyxRQUFBLHNCQUNBLE1BQUFrQyxHQUFBLENBQUFpbUIsR0FBQSxDQUFBN2MsT0FBQSxtQkFDQSxNQUFBL0ssSUFBQSxDQUFBMkIsR0FBQSxDQUFBMUIsS0FBQSxDQUFBQyxJQUFBLENBQUF5QixHQUFBLENBQUF4RCxnQkFBQSxtQ0FDQSxNQUFBb2UsR0FBQSxDQUFBMWdCLElBQUEsQ0FBQUQsR0FBQSxHQUFBb0UsSUFBQSxDQUFBOG5CLE9BQUEsQ0FBQUYsR0FBQSxHQUNBLE1BQUFHLEdBQUEsQ0FBQUgsR0FBQSxDQUFBN2MsT0FBQSx1QkFDQSxHQUFBZ2QsR0FBQSxFQUNBRixpQkFBQSxDQUFBMXRCLE1BQUEsQ0FBQW9pQixHQUFBO0FBQ0E7QUFDQXdMLEdBQUEsQ0FBQXZxQixPQUFBLENBQUF3cUIscUJBQUEsQ0FBQUgsaUJBQUEsQ0FDQTtBQUNBRCxHQUFBLENBQUFHLEdBQUEsQ0FDQTtBQUNBLEdBQUFsdUIsRUFBQSxFQUFBQSxFQUFBLENBQUFvdUIsc0JBQUEsRUFBQXB1QixFQUFBLENBQUFvdUIsc0JBQUEsQ0FBQUMscUJBQUEsRUFDQXJ1QixFQUFBLENBQUFvdUIsc0JBQUEsQ0FBQUMscUJBQUEsQ0FBQUgsR0FBQSxDQUFBRixpQkFBQSxFQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsS0FBQXBXLFlBQUEsQ0FBQW1XLEdBQUEsRUFDQWpVLENBQUEsQ0FBQXVNLGVBQUEsR0FFQTtBQUNBLEdBQUEySCxpQkFBQSxFQUNBLENBQUE3YSxNQUFBLENBQUFXLHFCQUFBLEVBQUFxQixVQUFBLGFBQ0EsSUFDQSxNQUFBMkosR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHdCQUNBLE1BQUE0b0IsSUFBQSxDQUFBeFAsR0FBQSxFQUFBQSxHQUFBLENBQUFqYixhQUFBLHFEQUNBLEdBQUF5cUIsSUFBQSxFQUFBbmIsTUFBQSxDQUFBb2IsWUFBQSxTQUFBcGIsTUFBQSxDQUFBb2IsWUFBQSxDQUFBQyxVQUFBLGVBQ0FyYixNQUFBLENBQUFvYixZQUFBLENBQUFDLFVBQUEsQ0FBQUYsSUFBQSxDQUFBTixpQkFBQSxFQUNBLENBQ0EsT0FBQWhRLEVBQUEsRUFDQSxDQUNBLEtBRUE7QUFDQW9NLDZCQUFBLENBQ0EsMkJBQ0EsQ0FDQS9VLEtBQUEsaUJBQ0FvWixPQUFBLENBQUFULGlCQUNBLENBQ0EsRUFDQSxDQUNBLENBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FwVyxhQUFBblQsUUFBQSxFQUFBMGxCLGNBQUEsWUFDQSxNQUFBOVYsSUFBQSxNQUFBMUgsT0FBQSxDQUFBekosZUFBQSxDQUNBLE1BQUF3ckIsTUFBQSxNQUFBdEIsa0JBQUE7QUFFQTtBQUNBLEdBQUEzb0IsUUFBQSxHQUFBNFAsSUFBQSxDQUFBek8sUUFBQSxDQUFBbkIsUUFBQSxHQUNBQSxRQUFBO0FBQ0EsQ0FFQTtBQUNBLEdBQ0FpcUIsTUFBQSxFQUFBQSxNQUFBLEdBQUFqcUIsUUFBQSxFQUNBaXFCLE1BQUEsQ0FBQTNtQixTQUFBLEVBQUFuQyxRQUFBLHVCQUNBNUYsRUFBQSxFQUFBb3VCLHNCQUFBLEVBQUFPLHVCQUFBLENBQ0EsQ0FDQTN1QixFQUFBLENBQUFvdUIsc0JBQUEsQ0FBQU8sdUJBQUEsQ0FBQUQsTUFBQSxFQUNBLENBRUE7QUFDQSxHQUFBQSxNQUFBLEVBQUFBLE1BQUEsR0FBQWpxQixRQUFBLEVBQUFpcUIsTUFBQSxDQUFBM21CLFNBQUEsRUFBQW5DLFFBQUEscUJBQ0E4b0IsTUFBQSxDQUFBL3FCLE9BQUEsQ0FBQXVhLFFBQUEsS0FDQXdRLE1BQUEsQ0FBQS9xQixPQUFBLENBQUFzYSxLQUFBLEtBQ0EsQ0FFQTVKLElBQUEsQ0FBQS9QLGdCQUFBLGlCQUFBZ0QsT0FBQSxDQUFBN0YsQ0FBQSxHQUNBQSxDQUFBLENBQUFzRyxTQUFBLENBQUErRixNQUFBLGdCQUNBLEdBQ0EsSUFBQXJKLFFBQUEsRUFDQSxNQUFBbXFCLElBQUEsTUFBQXpCLGFBQUEsT0FDQSxLQUFBQSxhQUFBLE1BQ0EsS0FBQXhnQixPQUFBLENBQUE4YyxTQUFBLEVBQUFuUixLQUFBLEtBQ0FqRSxJQUFBLENBQUF0TSxTQUFBLENBQUErRixNQUFBLGtCQUNBLEtBQUFuQixPQUFBLENBQUF1SyxHQUFBLENBQUFsTCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFJLGVBQUEsRUFBQW9qQixRQUFBLENBQUFELElBQUEsQ0FBQUUsTUFBQSxhQUVBO0FBQ0ExRSw2QkFBQSxDQUNBLHNCQUNBLENBQ0FDLFFBQUEsNkJBQ0FDLE1BQUEsbUJBQ0EsQ0FDQSxFQUNBLEtBQUFrRCw0QkFBQSxHQUVBLE9BQ0EsQ0FDQS9vQixRQUFBLENBQUFzRCxTQUFBLENBQUF1SCxHQUFBLGdCQUNBLEtBQUE2ZCxhQUFBLENBQUExb0IsUUFBQSxDQUFBUyxZQUFBLG1CQUVBO0FBQ0EsR0FBQVQsUUFBQSxDQUFBc0QsU0FBQSxDQUFBbkMsUUFBQSx3QkFBQW5CLFFBQUEsQ0FBQWQsT0FBQSxDQUFBMEYsSUFBQSxFQUNBNUUsUUFBQSxDQUFBZCxPQUFBLENBQUEwRixJQUFBLFdBQ0EsQ0FFQSxHQUFBOGdCLGNBQUEsRUFDQTFsQixRQUFBLENBQUEwbEIsY0FBQSxFQUFBSSxRQUFBLFVBQUFDLEtBQUEsWUFDQSxDQUNBLEtBQUE3ZCxPQUFBLENBQUE4YyxTQUFBLEVBQUFzRixhQUFBLEdBQUF0cUIsUUFBQSxFQUVBO0FBQ0EsSUFDQSxNQUFBcWEsR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHlCQUNBRCxRQUFBLENBQUE1QixhQUFBLHlCQUNBLEdBQUFpYixHQUFBLEVBQ0E5ZSxFQUFBLENBQUFndkIsa0JBQUEsRUFBQUMsSUFBQSxHQUFBblEsR0FBQTtBQUNBOWUsRUFBQSxDQUFBa3ZCLG9CQUFBLEVBQUFDLE9BQUEsR0FBQXJRLEdBQUE7QUFDQSxDQUNBLE9BQUF2YyxDQUFBLEVBQ0EsQ0FFQTtBQUNBLEdBQUFrQyxRQUFBLENBQUFzRCxTQUFBLENBQUFuQyxRQUFBLHVCQUNBNUYsRUFBQSxFQUFBb3VCLHNCQUFBLEVBQUFDLHFCQUFBLEVBQ0EsSUFBQTVSLENBQUEsQ0FBQWhZLFFBQUEsQ0FBQWQsT0FBQSxFQUFBYyxRQUFBLENBQUFkLE9BQUEsQ0FBQXdxQixxQkFBQSxDQUNBMXBCLFFBQUEsQ0FBQWQsT0FBQSxDQUFBd3FCLHFCQUFBLEtBQ0FudUIsRUFBQSxDQUFBb3VCLHNCQUFBLENBQUFDLHFCQUFBLENBQUE1cEIsUUFBQSxDQUFBZ1ksQ0FBQSxFQUNBLENBRUE7QUFDQTtBQUNBLEdBQUFoWSxRQUFBLEVBQ0F6RSxFQUFBLENBQUFvdkIseUJBQUEsQ0FBQUMseUJBQUEsUUFBQTFpQixPQUFBLENBQUFsSSxRQUFBLEVBQ0F6RSxFQUFBLENBQUFvdkIseUJBQUEsQ0FBQUUseUJBQUEsUUFBQTNpQixPQUFBLENBQUFsSSxRQUFBLEVBQ0EsQ0FFQTtBQUNBMmxCLDZCQUFBLENBQ0Esc0JBQ0EsQ0FDQUMsUUFBQSx1QkFDQUMsTUFBQSxxQkFDQSxDQUNBLEVBQ0EsS0FBQWtELDRCQUFBLEdBRUFuWixJQUFBLENBQUF0TSxTQUFBLENBQUF1SCxHQUFBLGtCQUNBLEtBQUEzQyxPQUFBLENBQUF1SyxHQUFBLENBQUFsTCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFHLE1BQUEsRUFBQTVILEdBQUEsTUFBQXVwQixhQUFBLENBQUFqa0IsRUFBQSxDQUFBekUsUUFBQSxHQUNBLE1BQUF5RyxLQUFBLENBQUF6RyxRQUFBLEVBQUFaLGFBQUEsNEJBQUErVyxXQUFBLEdBQUFuVyxRQUFBLENBQUFzRCxTQUFBLENBQUFuQyxRQUFBLHFDQUFBbkIsUUFBQSxFQUFBZCxPQUFBLEVBQUFKLEVBQUEsU0FDQSxLQUFBb0osT0FBQSxDQUFBdWYsU0FBQSxhQUFBaGhCLEtBQUEsTUFDQSxDQUVBLGtDQUNBa2lCLG1CQUFBLEVBQ0EsU0FBQUQsYUFBQSxFQUNBLFlBQ0EsQ0FDQSxNQUFBb0MsUUFBQSxDQUFBenZCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQU8sMkJBQUEsTUFBQTJzQixhQUFBLEVBQ0EsWUFBQXhnQixPQUFBLENBQUF6SixlQUFBLENBQUFXLGFBQUEsK0JBQUEwckIsUUFBQSxvQ0FBQUEsUUFBQSxNQUNBLENBRUEsOEJBQ0FqQyxTQUFBeEgsRUFBQSxFQUNBLE1BQUEwSixHQUFBLENBQUExSixFQUFBLEVBQUE3WixNQUFBLEVBQUE2aUIsTUFBQSxFQUFBaEosRUFBQSxFQUFBZ0osTUFBQSxDQUNBLEdBQUFVLEdBQUEsY0FDQSxLQUFBNVgsWUFBQSxPQUNBLENBQ0EsQ0FFQSxFQUVBO0FBQ0E7QUFDQSxJQUNBNVgsRUFBQSxDQUFBb3ZCLHlCQUFBLGVBQUFwdkIsRUFBQSxDQUFBcXBCLGVBQUEsQ0FFQUMsS0FBQSxFQUNBLEtBQUFtRyxpQkFBQSxHQUNBLEtBQUFDLGtCQUFBLEdBQ0EsS0FBQUMsaUNBQUEsR0FDQSxLQUFBQyxxQkFBQSxHQUNBLENBRUFILGtCQUFBLEVBQ0EsTUFBQTFvQixDQUFBLE1BQUE0RixPQUFBLENBQ0EsTUFBQWtqQixNQUFBLENBQUFBLENBQUEsSUFDQSxVQUFBMWMsTUFBQSxDQUFBMmMsa0JBQUEsZUFDQS9vQixDQUFBLENBQUEwaUIsU0FBQSxLQUFBcUcsa0JBQUEsQ0FBQXJxQixRQUFBLENBQUFDLGNBQUEsd0JBQUFxQixDQUFBLEVBQ0EsS0FBQTJvQixrQkFBQSxHQUNBanFCLFFBQUEsQ0FBQWdILG1CQUFBLDRCQUFBb2pCLE1BQUEsRUFDQSxDQUNBLEVBQ0E7QUFDQSxVQUFBMWMsTUFBQSxDQUFBMmMsa0JBQUEsZUFDQUQsTUFBQSxHQUNBLE1BQ0E5b0IsQ0FBQSxDQUFBMGlCLFNBQUEsRUFDQXNGLGNBQUEsRUFDQSxFQUFBelcsTUFBQSxFQUNBLENBQ0EsRUFDQTdTLFFBQUEsQ0FBQThHLGdCQUFBLDRCQUFBc2pCLE1BQUEsRUFDQTFhLFVBQUEsQ0FBQTBhLE1BQUEsSUFDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRCxzQkFBQSxFQUNBLDZCQUNBLE1BQUFHLFFBQUEsQ0FBQWpXLENBQUEsR0FDQSxJQUNBLE1BQUFrVyxPQUFBLENBQUFsVyxDQUFBLEVBQUFBLENBQUEsQ0FBQTdOLE1BQUEsRUFBQTZOLENBQUEsQ0FBQTdOLE1BQUEsQ0FBQW9KLEtBQUEsQ0FDQSxNQUFBb1osT0FBQSxDQUFBM1UsQ0FBQSxFQUFBQSxDQUFBLENBQUE3TixNQUFBLEVBQUE2TixDQUFBLENBQUE3TixNQUFBLENBQUF3aUIsT0FBQSxDQUNBLElBQUF1QixPQUFBLEVBQ0EsT0FDQSxDQUVBLE1BQUFsUixHQUFBLENBQUFyWixRQUFBLENBQUFDLGNBQUEseUJBQUFELFFBQUEsQ0FBQTVCLGFBQUEseUJBQ0EsSUFBQWliLEdBQUEsRUFDQSxPQUNBLENBRUEsR0FBQWtSLE9BQUEsb0JBQ0E7QUFDQSxNQUFBQyxJQUFBLENBQUFuUixHQUFBLENBQUFqYixhQUFBLHFDQUFBaWIsR0FBQSxDQUFBamIsYUFBQSwrQ0FDQSxHQUFBb3NCLElBQUEsRUFDQTtBQUNBLE1BQUFDLFVBQUEsQ0FBQUQsSUFBQSxDQUFBL2UsT0FBQSx1QkFBQStlLElBQUEsQ0FBQS9lLE9BQUEsMkJBQ0EsR0FBQWdmLFVBQUEsR0FBQUEsVUFBQSxDQUFBbm9CLFNBQUEsQ0FBQW5DLFFBQUEsYUFDQXNxQixVQUFBLENBQUFub0IsU0FBQSxDQUFBdUgsR0FBQSxZQUNBO0FBQ0EsTUFBQTZnQixVQUFBLENBQUFELFVBQUEsQ0FBQXJzQixhQUFBLG9CQUNBLEdBQUFzc0IsVUFBQSxFQUNBQSxVQUFBLENBQUFyckIsWUFBQSx5QkFDQSxDQUNBLENBRUE7QUFDQSxHQUFBMnBCLE9BQUEsRUFDQSxNQUFBSCxJQUFBLENBQUEyQixJQUFBLENBQUFwc0IsYUFBQSxxQkFDQSxHQUFBeXFCLElBQUEsRUFBQW5iLE1BQUEsQ0FBQW9iLFlBQUEsU0FBQXBiLE1BQUEsQ0FBQW9iLFlBQUEsQ0FBQUMsVUFBQSxlQUNBcmIsTUFBQSxDQUFBb2IsWUFBQSxDQUFBQyxVQUFBLENBQUFGLElBQUEsQ0FBQWh1QixNQUFBLENBQUFtdUIsT0FBQSxHQUNBLENBQ0EsQ0FFQTtBQUNBLElBQ0E7QUFDQTtBQUFBLENBQ0EsTUFBQXpRLEVBQUEsR0FDQSxDQUNBLENBQ0EsT0FBQUEsRUFBQSxHQUNBLEVBRUEsS0FBQW9TLG1CQUFBLENBQUFMLFFBQUEsQ0FDQXRxQixRQUFBLENBQUE4RyxnQkFBQSw0QkFBQXdqQixRQUFBLE9BQ0EsQ0FFQTFYLFFBQUEsRUFDQSxJQUNBLFFBQUErWCxtQkFBQSxFQUNBM3FCLFFBQUEsQ0FBQWdILG1CQUFBLGlDQUFBMmpCLG1CQUFBLE9BQ0EsS0FBQUEsbUJBQUEsTUFDQSxDQUNBLE9BQUFwUyxFQUFBLEVBQ0EsQ0FDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLE9BQUFzUiwwQkFBQTNpQixPQUFBLENBQUFnWCxHQUFBLEVBQ0EsTUFBQTdFLEdBQUEsQ0FBQXJaLFFBQUEsQ0FBQUMsY0FBQSx3QkFDQSxJQUFBb1osR0FBQSxHQUFBNkUsR0FBQSxRQUVBLE1BQUEwTSxNQUFBLENBQUFBLENBQUFsbkIsR0FBQSxDQUFBc1EsR0FBQSxJQUNBLE1BQUE2VyxJQUFBLENBQUF4UixHQUFBLENBQUFqYixhQUFBLHlCQUFBc0YsR0FBQSxNQUNBLEdBQUFtbkIsSUFBQSxZQUFBQSxJQUFBLENBQUFBLElBQUEsQ0FBQTVXLEtBQUEsQ0FBQXBaLE1BQUEsQ0FBQW1aLEdBQUEsTUFDQSxFQUVBO0FBQ0E0VyxNQUFBLE1BQUExTSxHQUFBLENBQUF6ZSxZQUFBLGlCQUNBbXJCLE1BQUEsUUFBQTFNLEdBQUEsQ0FBQXplLFlBQUEsbUJBQ0FtckIsTUFBQSxXQUFBMU0sR0FBQSxDQUFBemUsWUFBQSxzQkFFQTtBQUNBbXJCLE1BQUEsWUFBQTFNLEdBQUEsQ0FBQXplLFlBQUEsdUJBQ0FtckIsTUFBQSxTQUFBMU0sR0FBQSxDQUFBemUsWUFBQSxvQkFDQSxDQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBbXFCLDBCQUFBMWlCLE9BQUEsQ0FBQWdYLEdBQUEsRUFDQSxNQUFBN0UsR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHdCQUNBLElBQUFvWixHQUFBLEdBQUE2RSxHQUFBLFFBRUEsTUFBQTRNLElBQUE7QUFFQTtBQUNBLE1BQUFDLE9BQUEsQ0FBQXJkLE1BQUEsQ0FBQXNkLGdCQUFBLEtBQ0EsTUFBQUMsT0FBQSxDQUFBL00sR0FBQSxDQUFBaGdCLE9BQUEsRUFBQWdnQixHQUFBLENBQUFoZ0IsT0FBQSxDQUFBMEYsSUFBQSxLQUNBLE1BQUFzbkIsV0FBQSxDQUFBSCxPQUFBLENBQUFFLE9BQUEsUUFDQSxNQUFBRSxXQUFBLENBQUFELFdBQUEsRUFBQUEsV0FBQSxDQUFBRSxNQUFBLEVBQUFGLFdBQUEsQ0FBQUUsTUFBQSxDQUFBQyxLQUFBLENBQUFILFdBQUEsQ0FBQUUsTUFBQSxDQUFBQyxLQUFBLElBQ0EsTUFBQUMsTUFBQSxDQUFBQyxRQUFBLENBQUFoWCxTQUFBLENBQUFFLElBQUEsQ0FBQWpELElBQUEsQ0FBQTNMLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxFQUNBLE1BQUFnWCxVQUFBLENBQUE5bkIsR0FBQSxHQUNBLE1BQUFvVSxJQUFBLENBQUFxVCxXQUFBLENBQUF6bkIsR0FBQSxFQUNBLE9BQUFvVSxJQUFBLEVBQUF3VCxNQUFBLENBQUF4VCxJQUFBLFlBQUFBLElBQUEsQ0FBQTJULE9BQUEsQ0FBQXhULFNBQUEsQ0FDQSxFQUVBb0IsR0FBQSxDQUFBeGEsZ0JBQUEseUJBQUFnRCxPQUFBLENBQUFncEIsSUFBQSxHQUNBLE1BQUFubkIsR0FBQSxDQUFBN0ksTUFBQSxDQUFBZ3dCLElBQUEsQ0FBQTNzQixPQUFBLEVBQUF3dEIsWUFBQSxNQUFBaHdCLFdBQUEsR0FDQSxJQUFBZ0ksR0FBQSxFQUFBb25CLElBQUEsQ0FBQTN2QixJQUFBLENBQUF1SSxHQUFBLFNBRUE7QUFDQSxNQUFBaW9CLEVBQUEsRUFBQWQsSUFBQSxDQUFBM3NCLE9BQUEsRUFBQThuQixNQUFBLE1BQUE5cUIsSUFBQSxHQUFBUSxXQUFBLEdBQ0EsR0FBQWl3QixFQUFBLFFBQUFBLEVBQUEsV0FBQUEsRUFBQSxnQkFFQTtBQUNBLEdBQUFkLElBQUEsQ0FBQTNzQixPQUFBLEVBQUEwdEIsVUFBQSxFQUFBZixJQUFBLENBQUEzc0IsT0FBQSxFQUFBMnRCLFNBQUEsUUFFQSxNQUFBcnNCLEdBQUEsQ0FBQTBlLEdBQUEsQ0FBQWhnQixPQUFBLENBQUFnZ0IsR0FBQSxDQUFBaGdCLE9BQUEsQ0FBQXdGLEdBQUEsRUFBQXVVLFNBQUEsQ0FDQSxNQUFBNlQsTUFBQSxDQUFBNU4sR0FBQSxDQUFBaGdCLE9BQUEsQ0FBQW90QixNQUFBLENBQUFwTixHQUFBLENBQUFoZ0IsT0FBQSxDQUFBd0YsR0FBQSxRQUNBLE1BQUFxb0IsUUFBQSxDQUFBUCxVQUFBLENBQUE5bkIsR0FBQSxFQUVBO0FBRUEsR0FBQW1uQixJQUFBLFlBQUFtQixnQkFBQSxHQUFBbkIsSUFBQSxDQUFBam5CLElBQUEsZUFBQWluQixJQUFBLENBQUFqbkIsSUFBQSxhQUNBO0FBQ0EsSUFBQWtvQixNQUFBLEVBQ0FqQixJQUFBLENBQUE3UCxPQUFBLEdBQUErUSxRQUFBLENBQ0EsTUFDQTtBQUNBbEIsSUFBQSxDQUFBN1AsT0FBQSxDQUFBM2dCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQW9CLGNBQUEsQ0FBQTRELEdBQUEsUUFDQSxDQUNBLG1CQUFBcXJCLElBQUEsRUFDQSxHQUFBaUIsTUFBQSxFQUNBakIsSUFBQSxDQUFBNVcsS0FBQSxDQUFBelUsR0FBQSxPQUFBM0UsTUFBQSxDQUFBMkUsR0FBQSxLQUNBLE1BQ0FxckIsSUFBQSxDQUFBNVcsS0FBQSxDQUFBOFgsUUFBQSxVQUFBbHhCLE1BQUEsQ0FBQWt4QixRQUFBLEVBQ0EsQ0FDQSxDQUNBLEdBQ0EsQ0FFQTlCLG1CQUFBLEVBQ0EsTUFBQTNvQixDQUFBLE1BQUE0RixPQUFBLENBQ0EsTUFBQW1TLEdBQUEsQ0FBQXJaLFFBQUEsQ0FBQUMsY0FBQSx3QkFDQSxJQUFBb1osR0FBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBQSxHQUFBLENBQUE0Uyw2QkFBQSxFQUNBLE9BQ0EsQ0FDQTVTLEdBQUEsQ0FBQTRTLDZCQUFBLE1BRUEsTUFBQXBsQixPQUFBLENBQUF3TixDQUFBLEdBRUEsTUFBQW9CLENBQUEsQ0FBQXBCLENBQUEsQ0FBQXFNLE1BQUEsQ0FDQSxJQUFBakwsQ0FBQSxjQUFBQSxDQUFBLEdBQ0EsT0FDQSxDQUNBLE1BQUEvUixHQUFBLEVBQUErUixDQUFBLENBQUF2WCxPQUFBLEVBQUF3dEIsWUFBQSxNQUFBaHdCLFdBQUEsR0FDQSxNQUFBd2lCLEdBQUEsQ0FBQTVjLENBQUEsQ0FBQXFtQixrQkFBQSxLQUNBLE1BQUE3VixTQUFBLENBQUFvTSxHQUFBLEVBQUE1YixTQUFBLEVBQUFuQyxRQUFBLHNCQUNBLElBQUErZCxHQUFBLFFBRUE7QUFDQSxNQUFBZ08sRUFBQSxDQUFBN3hCLElBQUEsQ0FBQXVMLGVBQUEsQ0FDQTtBQUNBO0FBQ0EsTUFBQXVtQix3QkFBQSxDQUFBQSxDQUFBLElBQ0EsR0FBQTdxQixDQUFBLENBQUE4cUIsNEJBQUEsRUFDQSxPQUFBOXFCLENBQUEsQ0FBQThxQiw0QkFBQSxDQUNBLENBQ0E5cUIsQ0FBQSxDQUFBOHFCLDRCQUFBLEVBQUFDLFFBQUEsR0FBQUMsZUFBQSxPQUNBLE9BQUFockIsQ0FBQSxDQUFBOHFCLDRCQUFBLENBQ0EsRUFFQSxNQUFBRyx3QkFBQSxDQUFBQSxDQUFBLElBQ0EsTUFBQUMsRUFBQSxDQUFBbHJCLENBQUEsQ0FBQThxQiw0QkFBQSxDQUNBLElBQUFJLEVBQUEsUUFDQSxJQUFBNVcsWUFBQSxDQUFBNFcsRUFBQSxDQUFBSCxRQUFBLFNBQUF2dkIsQ0FBQSxHQUNBMHZCLEVBQUEsQ0FBQUgsUUFBQSxHQUNBRyxFQUFBLENBQUFGLGVBQUEsTUFDQSxFQUVBLE1BQUFHLGVBQUEsQ0FBQUEsQ0FBQS9hLE1BQUEsQ0FBQWdiLEtBQUEsT0FDQTtBQUNBSCx3QkFBQSxHQUNBanJCLENBQUEsQ0FBQW1RLEdBQUEsRUFBQWxMLElBQUEsR0FBQTJsQixFQUFBLENBQUEvbEIsZ0JBQUEsRUFBQXVMLE1BQUEsQ0FBQWpPLEVBQUEsQ0FBQXlhLEdBQUEsSUFBQXdPLEtBQUEsR0FDQSxFQUVBLE1BQUFDLHlCQUFBLENBQUFBLENBQUFqYixNQUFBLENBQUFnYixLQUFBLElBQUFwSixPQUFBLElBQ0EsTUFBQWtKLEVBQUEsQ0FBQUwsd0JBQUEsR0FDQSxNQUFBN0osRUFBQSxDQUFBcG1CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBbW5CLE9BQUEsRUFDQUEsT0FBQSxDQUNBcG5CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBNUIsRUFBQSxDQUFBbW5CLDRCQUFBLEVBQUFubkIsRUFBQSxDQUFBbW5CLDRCQUFBLEtBRUE7QUFDQThLLEVBQUEsQ0FBQUYsZUFBQSxFQUFBNWEsTUFBQSxDQUFBak8sRUFBQSxDQUFBeWEsR0FBQSxJQUFBd08sS0FBQSxDQUFBaFgsU0FBQSxPQUVBLElBQUFFLFlBQUEsQ0FBQTRXLEVBQUEsQ0FBQUgsUUFBQSxTQUFBdnZCLENBQUEsR0FDQTB2QixFQUFBLENBQUFILFFBQUEsQ0FBQTNjLFVBQUEsWUFDQThjLEVBQUEsQ0FBQUgsUUFBQSxHQUNBLE1BQUFPLE9BQUEsQ0FBQUosRUFBQSxDQUFBRixlQUFBLENBQ0FFLEVBQUEsQ0FBQUYsZUFBQSxNQUNBLEdBQUFNLE9BQUEsRUFDQXRyQixDQUFBLENBQUFtUSxHQUFBLEVBQUFsTCxJQUFBLEdBQUEybEIsRUFBQSxDQUFBL2xCLGdCQUFBLENBQUF5bUIsT0FBQSxFQUNBLENBQ0EsRUFBQXRLLEVBQUEsRUFDQSxFQUVBO0FBQ0EsR0FBQTVlLEdBQUEsU0FDQSxNQUFBdEUsTUFBQSxDQUFBa0MsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBaUIsWUFBQSxDQUFBbWYsR0FBQSxDQUFBekksQ0FBQSxDQUFBeEIsS0FBQSxFQUNBLEdBQUEzUyxDQUFBLENBQUF1ckIsWUFBQSxHQUFBL2EsU0FBQSxFQUNBeFEsQ0FBQSxDQUFBd3JCLGNBQUEsQ0FBQTVPLEdBQUEsRUFDQSxDQUNBLEdBQUF6SSxDQUFBLENBQUF4QixLQUFBLEdBQUE3VSxNQUFBLEVBQ0FxVyxDQUFBLENBQUF4QixLQUFBLENBQUE3VSxNQUFBLENBQ0EsQ0FDQXF0QixlQUFBLGNBQ0EsT0FDQSxDQUVBO0FBQ0EsR0FBQS9vQixHQUFBLGNBQ0EsTUFBQXFwQixPQUFBLENBQUF6ckIsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBNEIsaUJBQUEsQ0FBQXdlLEdBQUEsQ0FBQXpJLENBQUEsQ0FBQXhCLEtBQUEsRUFDQTtBQUNBLEdBQUFuQyxTQUFBLEVBQ0FvTSxHQUFBLENBQUFwZ0IsRUFBQSxDQUFBaXZCLE9BQUEsS0FDQSxTQUFBenJCLENBQUEsQ0FBQXVyQixZQUFBLEVBQ0F2ckIsQ0FBQSxDQUFBd3JCLGNBQUEsQ0FBQTVPLEdBQUEsRUFDQSxDQUNBLEdBQUF6SSxDQUFBLENBQUF4QixLQUFBLEdBQUE4WSxPQUFBLEVBQ0F0WCxDQUFBLENBQUF4QixLQUFBLENBQUE4WSxPQUFBLENBQ0EsQ0FDQU4sZUFBQSxtQkFDQSxPQUNBLENBRUE7QUFDQSxHQUFBL29CLEdBQUEsWUFBQW9PLFNBQUEsRUFFQTtBQUNBLEdBQUF1QyxDQUFBLENBQUF6USxJQUFBLFlBQ0EsTUFBQW9wQixNQUFBLENBQUF2WCxDQUFBLENBQUF4QixLQUFBLENBQ0EsTUFBQWdaLFNBQUEsQ0FBQTV5QixJQUFBLENBQUFHLGlCQUFBLENBQUFZLGtCQUFBLENBQUE0eEIsTUFBQSxFQUNBLEdBQUFBLE1BQUEsR0FBQUMsU0FBQSxFQUNBO0FBQ0EsTUFBQUMsUUFBQSxDQUFBelgsQ0FBQSxDQUFBMFgsY0FBQSxDQUFBQyxNQUFBLENBQUEzWCxDQUFBLENBQUE0WCxZQUFBLENBQ0E1WCxDQUFBLENBQUF4QixLQUFBLENBQUFnWixTQUFBLENBQ0EsSUFDQXhYLENBQUEsQ0FBQTZYLGlCQUFBLENBQUFKLFFBQUEsQ0FBQUUsTUFBQSxFQUNBLE9BQUF0d0IsQ0FBQSxFQUNBLENBQ0EsQ0FDQTtBQUNBLENBRUE7QUFDQSxNQUFBMEMsR0FBQSxDQUFBM0UsTUFBQSxDQUFBNGEsQ0FBQSxDQUFBeEIsS0FBQSxNQUFBL1ksSUFBQSxHQUVBLElBQUFzRSxHQUFBLEVBQ0E7QUFDQSxNQUFBb1osQ0FBQSxDQUFBdmUsSUFBQSxDQUFBRyxpQkFBQSxDQUNBLE1BQUFxRCxJQUFBLENBQUErYSxDQUFBLENBQUF4ZCxrQkFBQSxDQUFBOGlCLEdBQUEsQ0FBQXplLFlBQUEsYUFBQXllLEdBQUEsQ0FBQWhnQixPQUFBLENBQUFKLEVBQUEsRUFBQW9nQixHQUFBLENBQUFoZ0IsT0FBQSxDQUFBMEYsSUFBQSxXQUNBLE1BQUFpVixJQUFBLENBQUF2WCxDQUFBLENBQUF4RCxFQUFBLENBQUFXLHdCQUFBLENBQUFaLElBQUEsQ0FBQXFnQixHQUFBLEVBRUFBLEdBQUEsQ0FBQTdlLFlBQUEsYUFBQXdaLElBQUEsRUFDQXFGLEdBQUEsQ0FBQWhnQixPQUFBLENBQUF1YSxRQUFBLEtBQ0F5RixHQUFBLENBQUFoZ0IsT0FBQSxDQUFBNGEsaUJBQUEsS0FFQTtBQUNBLElBQUF4WCxDQUFBLENBQUF1ckIsWUFBQSxFQUNBLE1BQUFoQyxJQUFBLENBQUEzTSxHQUFBLENBQUE5ZixhQUFBLDBCQUNBLEdBQUF5c0IsSUFBQSxDQUFBQSxJQUFBLENBQUF4ckIsWUFBQSxRQUFBd1osSUFBQSxFQUNBLE1BQ0F2WCxDQUFBLENBQUF3ckIsY0FBQSxDQUFBNU8sR0FBQSxFQUNBLENBRUEsR0FBQXpJLENBQUEsQ0FBQXhCLEtBQUEsR0FBQTRFLElBQUEsQ0FBQXBELENBQUEsQ0FBQXhCLEtBQUEsQ0FBQTRFLElBQUEsQ0FDQTRULGVBQUEsZ0JBQ0EsT0FDQSxDQUVBO0FBQ0F2TyxHQUFBLENBQUFoZ0IsT0FBQSxDQUFBNGEsaUJBQUEsS0FDQW9GLEdBQUEsQ0FBQWhnQixPQUFBLENBQUF1YSxRQUFBLEtBRUEsTUFBQXdVLFNBQUEsQ0FBQTV5QixJQUFBLENBQUFHLGlCQUFBLENBQUFZLGtCQUFBLENBQUFvRSxHQUFBLEVBQ0EsTUFBQUosTUFBQSxDQUFBa0MsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBd0IsY0FBQSxDQUFBNGUsR0FBQSxDQUFBK08sU0FBQSxFQUVBLElBQUEzckIsQ0FBQSxDQUFBdXJCLFlBQUEsRUFDQSxNQUFBaEMsSUFBQSxDQUFBM00sR0FBQSxDQUFBOWYsYUFBQSwwQkFDQSxHQUFBeXNCLElBQUEsQ0FBQUEsSUFBQSxDQUFBeHJCLFlBQUEsUUFBQUQsTUFBQSxFQUNBLE1BQ0FrQyxDQUFBLENBQUF3ckIsY0FBQSxDQUFBNU8sR0FBQSxFQUNBLENBRUEsR0FBQXpJLENBQUEsQ0FBQXhCLEtBQUEsR0FBQTdVLE1BQUEsQ0FBQXFXLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQTdVLE1BQUEsQ0FDQXF0QixlQUFBLGdCQUNBLE9BQ0EsQ0FFQTtBQUNBLEdBQUEvb0IsR0FBQSxlQUNBLE1BQUE2cEIsSUFBQSxDQUFBbHpCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQWUsc0JBQUEsQ0FBQWthLENBQUEsQ0FBQXhCLEtBQUEsTUFDQSxNQUFBdVosVUFBQSxDQUFBRCxJQUFBLENBQUF4cUIsS0FBQSxRQUFBQyxNQUFBLENBQUF3RyxPQUFBLEVBQ0EsTUFBQWlrQixVQUFBLEtBQUEzbEIsR0FBQSxDQUFBMGxCLFVBQUEsRUFFQTtBQUNBLE1BQUFFLE1BQUEsQ0FBQXhMLEdBQUEsRUFBQUEsR0FBQSxrQkFBQUEsR0FBQSxDQUFBOU4sVUFBQSxVQUVBO0FBQ0EsTUFBQXVaLGFBQUEsQ0FBQWh0QixLQUFBLENBQUFDLElBQUEsQ0FBQXNkLEdBQUEsQ0FBQTViLFNBQUEsRUFDQSxNQUFBc3JCLFlBQUEsQ0FBQUQsYUFBQSxDQUFBM3FCLE1BQUEsQ0FBQXVnQixDQUFBLEdBQUFtSyxNQUFBLENBQUFuSyxDQUFBLEdBRUE7QUFDQXFLLFlBQUEsQ0FBQS9yQixPQUFBLENBQUEwaEIsQ0FBQSxHQUNBLElBQUFrSyxVQUFBLENBQUFJLEdBQUEsQ0FBQXRLLENBQUEsRUFBQXJGLEdBQUEsQ0FBQTViLFNBQUEsQ0FBQStGLE1BQUEsQ0FBQWtiLENBQUEsRUFDQSxHQUVBO0FBQ0EsTUFBQXVLLE9BQUEsQ0FBQU4sVUFBQSxDQUFBeHFCLE1BQUEsQ0FBQXVnQixDQUFBLEdBQUFxSyxZQUFBLENBQUF6akIsUUFBQSxDQUFBb1osQ0FBQSxHQUNBLEdBQUF1SyxPQUFBLENBQUFodkIsTUFBQSxDQUFBb2YsR0FBQSxDQUFBNWIsU0FBQSxDQUFBdUgsR0FBQSxJQUFBaWtCLE9BQUEsRUFFQTtBQUNBLEdBQUE1UCxHQUFBLENBQUF6ZSxZQUFBLG9CQUFBOHRCLElBQUEsRUFDQXJQLEdBQUEsQ0FBQTdlLFlBQUEsaUJBQUFrdUIsSUFBQSxFQUNBLENBRUE7QUFDQSxNQUFBUSxZQUFBLENBQUFwdEIsS0FBQSxDQUFBQyxJQUFBLENBQUFzZCxHQUFBLENBQUE1YixTQUFBLEVBQ0EsTUFBQTByQixPQUFBLENBQUFELFlBQUEsQ0FBQWp2QixNQUFBLEdBQUE2dUIsYUFBQSxDQUFBN3VCLE1BQUEsRUFBQTZ1QixhQUFBLENBQUFNLElBQUEsRUFBQTFLLENBQUEsQ0FBQXpoQixDQUFBLEdBQUF5aEIsQ0FBQSxHQUFBd0ssWUFBQSxDQUFBanNCLENBQUEsR0FFQSxNQUFBMEUsTUFBQSxFQUFBOUMsR0FBQSxZQUFBd3FCLEtBQUEsQ0FBQTdaLENBQUEsQ0FBQXpRLElBQUEsRUFDQSxHQUFBa08sU0FBQSxFQUNBMmEsZUFBQSxtQkFBQWptQixNQUFBLEVBQ0EsTUFDQWltQixlQUFBLGVBQUFqbUIsTUFBQSxFQUNBLENBQ0EsT0FDQSxDQUdBO0FBQ0EsR0FBQXNMLFNBQUEsRUFBQXBPLEdBQUEsWUFDQSxNQUFBc1EsR0FBQSxDQUFBblosTUFBQSxDQUFBNGEsQ0FBQSxDQUFBeEIsS0FBQSxNQUNBaUssR0FBQSxDQUFBN2UsWUFBQSxjQUFBMlUsR0FBQSxFQUNBeVksZUFBQSxpQkFDQSxPQUNBLENBRUE7QUFDQSxJQUFBM2EsU0FBQSxFQUFBcE8sR0FBQSxZQUNBLE1BQUFzUSxHQUFBLENBQUFuWixNQUFBLENBQUE0YSxDQUFBLENBQUF4QixLQUFBLE1BQ0FpSyxHQUFBLENBQUFoZ0IsT0FBQSxDQUFBdUgsS0FBQSxDQUFBdU8sR0FBQSxDQUVBO0FBQ0EsSUFDQTNaLElBQUEsQ0FBQThiLG1CQUFBLENBQUE2Qyx5QkFBQSxDQUFBMVgsQ0FBQSxDQUFBNGMsR0FBQSxDQUFBbEssR0FBQSxFQUNBLE9BQUFsWCxDQUFBLEVBQ0EsQ0FFQTtBQUNBLEdBQUF1WCxDQUFBLENBQUF6USxJQUFBLFlBQ0FzYSxHQUFBLENBQUFoZ0IsT0FBQSxDQUFBdWEsUUFBQTtBQUNBeUYsR0FBQSxDQUFBaGdCLE9BQUEsQ0FBQXNhLEtBQUE7QUFDQSxDQUVBO0FBQ0EsTUFBQWEsR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHdCQUNBLE1BQUFxWixRQUFBLENBQUFELEdBQUEsRUFBQWpiLGFBQUEsZ0NBQ0EsR0FBQWtiLFFBQUEsRUFDQSxNQUFBNlUsVUFBQSxDQUNBLENBQUFqUSxHQUFBLENBQUFoZ0IsT0FBQSxDQUFBdWEsUUFBQSxjQUNBeUYsR0FBQSxDQUFBaGdCLE9BQUEsQ0FBQTRhLGlCQUFBLFFBQ0FvRixHQUFBLENBQUFoZ0IsT0FBQSxDQUFBd2EsVUFBQSxPQUNBWSxRQUFBLENBQUE4VSxlQUFBLFlBQUFELFVBQUEsRUFDQSxHQUFBQSxVQUFBLEdBQUE3VSxRQUFBLENBQUFoRCxXQUFBLEVBQ0FnRCxRQUFBLENBQUFoRCxXQUFBLENBQUFoVixDQUFBLEVBQUErc0IsSUFBQSxFQUFBQyxlQUFBLHNCQUNBLENBQ0EsSUFBQUgsVUFBQSxFQUFBN1UsUUFBQSxDQUFBaEQsV0FBQSxJQUFBaFYsQ0FBQSxFQUFBK3NCLElBQUEsRUFBQUMsZUFBQSx3QkFDQWhWLFFBQUEsQ0FBQWhELFdBQUEsSUFDQSxDQUNBLENBRUE7QUFDQWhWLENBQUEsQ0FBQXdyQixjQUFBLENBQUE1TyxHQUFBLEVBQ0F1TyxlQUFBLGlCQUNBLE9BQ0EsQ0FHQTtBQUNBO0FBQ0E7QUFDQSxHQUFBL29CLEdBQUEsRUFFQSxNQUFBNnFCLFVBQUEsbUJBQUFwekIsSUFBQSxFQUFBc2EsQ0FBQSxDQUFBdlgsT0FBQSxFQUFBOG5CLE1BQUEsTUFBQTlxQixJQUFBLElBQ0EsR0FBQXF6QixVQUFBLEVBQ0EsT0FDQSxDQUVBO0FBQ0EsR0FBQTdxQixHQUFBLFNBQUFBLEdBQUEsV0FBQUEsR0FBQSxjQUFBQSxHQUFBLGVBQUFBLEdBQUEsWUFDQSxPQUNBLENBQ0EsSUFBQThxQixPQUFBLElBQ0EsR0FBQS9ZLENBQUEsWUFBQXVXLGdCQUFBLEdBQUF2VyxDQUFBLENBQUE3UixJQUFBLGVBQUE2UixDQUFBLENBQUE3UixJQUFBLGFBQ0E7QUFDQTRxQixPQUFBLENBQUEvWSxDQUFBLENBQUF1RixPQUFBLGdCQUNBLG1CQUFBdkYsQ0FBQSxFQUNBK1ksT0FBQSxDQUFBM3pCLE1BQUEsQ0FBQTRhLENBQUEsQ0FBQXhCLEtBQUEsTUFDQSxDQUNBO0FBQ0EsR0FBQWlLLEdBQUEsRUFBQWhnQixPQUFBLENBQUFnZ0IsR0FBQSxDQUFBaGdCLE9BQUEsQ0FBQXdGLEdBQUEsRUFBQThxQixPQUFBLENBRUE7QUFDQSxNQUFBQyxVQUFBLENBQUEvcUIsR0FBQSxDQUFBOGtCLE9BQUEsYUFFQTtBQUNBLE1BQUFrRyxVQUFBLEtBQUE1bUIsR0FBQSxnREFDQSxJQUFBZ0ssU0FBQSxHQUFBNGMsVUFBQSxDQUFBYixHQUFBLENBQUFucUIsR0FBQSxHQUFBQSxHQUFBLENBQUEwUSxVQUFBLFVBQ0E7QUFDQSxHQUFBQyxDQUFBLENBQUF6USxJQUFBLGFBQUFGLEdBQUEsV0FBQUEsR0FBQSxrQkFDQXBDLENBQUEsQ0FBQXdyQixjQUFBLENBQUE1TyxHQUFBLEVBQ0EsQ0FDQSxDQUVBLEtBQUF1USxVQUFBLEVBQUFwYSxDQUFBLENBQUF6USxJQUFBLGFBQ0E7QUFDQTtBQUNBLE1BQUErcUIsaUJBQUEsSUFBQWxaLENBQUEsRUFBQUEsQ0FBQSxDQUFBaEssT0FBQSxFQUFBZ0ssQ0FBQSxDQUFBaEssT0FBQSxzQkFFQSxHQUFBa2pCLGlCQUFBLEVBQUF0YSxDQUFBLENBQUF6USxJQUFBLFlBQ0Erb0IseUJBQUEsZ0JBQUFqcEIsR0FBQSxDQUFBd3FCLEtBQUEsQ0FBQTdaLENBQUEsQ0FBQXpRLElBQUEsR0FDQSxNQUNBNm9CLGVBQUEsZ0JBQUEvb0IsR0FBQSxDQUFBd3FCLEtBQUEsQ0FBQTdaLENBQUEsQ0FBQXpRLElBQUEsR0FDQSxDQUNBLENBQ0EsT0FDQSxDQUNBLEVBRUF5VixHQUFBLENBQUF2UyxnQkFBQSxVQUFBRCxPQUFBLE9BQ0E7QUFDQXdTLEdBQUEsQ0FBQXZTLGdCQUFBLFNBQUFELE9BQUEsT0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FxakIsa0NBQUEsRUFDQSxNQUFBZ0MsRUFBQSxDQUFBN3hCLElBQUEsQ0FBQXVMLGVBQUEsQ0FDQSxLQUFBc0IsT0FBQSxFQUFBdUssR0FBQSxFQUFBN0ssRUFBQSxHQUFBc2xCLEVBQUEsQ0FBQWptQixTQUFBLENBQUFvTyxDQUFBLEdBQ0EsTUFBQTVRLEVBQUEsQ0FBQTRRLENBQUEsRUFBQTdOLE1BQUEsRUFBQS9DLEVBQUEsT0FDQSxHQUFBQSxFQUFBLE9BQUF5RCxPQUFBLEVBQUFpTCxZQUFBLEVBQ0EsS0FBQWpMLE9BQUEsQ0FBQWlMLFlBQUEsQ0FBQTFPLEVBQUEsRUFBQWloQixjQUFBLFFBQ0EsQ0FDQTtBQUNBQyw2QkFBQSxDQUNBLHNCQUNBLENBQ0FDLFFBQUEsdUJBQ0FDLE1BQUEscUJBQ0EsQ0FDQSxFQUNBLEdBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQSxJQUNBdHFCLEVBQUEsQ0FBQXEwQiw0QkFBQSxlQUFBcjBCLEVBQUEsQ0FBQXFwQixlQUFBLENBQ0FDLEtBQUEsRUFDQSxLQUFBZ0wsT0FBQSxNQUFBQyxNQUFBLENBQUF0ZCxJQUFBLE9BQ0F4UixRQUFBLENBQUE4RyxnQkFBQSxnQkFBQStuQixPQUFBLE9BQ0EsQ0FFQWpjLFFBQUEsRUFDQTVTLFFBQUEsQ0FBQWdILG1CQUFBLGdCQUFBNm5CLE9BQUEsT0FDQSxDQUVBLCtCQUNBQyxPQUFBemEsQ0FBQSxFQUNBLE1BQUEvUyxDQUFBLE1BQUE0RixPQUFBLENBQ0EsTUFBQTZuQixTQUFBLE1BQUFDLG1CQUFBLEdBQ0EsR0FBQTNhLENBQUEsQ0FBQTNRLEdBQUEsYUFDQSxHQUFBcXJCLFNBQUEsRUFDQSxPQUNBLENBQ0EsS0FBQTduQixPQUFBLENBQUF1SyxHQUFBLENBQUFsTCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFJLGVBQUEsRUFBQXFqQixNQUFBLFNBQ0EsT0FDQSxDQUNBLE1BQUEvVixRQUFBLENBQUFoUyxDQUFBLENBQUFxbUIsa0JBQUEsS0FDQSxJQUFBclUsUUFBQSxFQUFBeWIsU0FBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBMWEsQ0FBQSxDQUFBM1EsR0FBQSxhQUFBMlEsQ0FBQSxDQUFBM1EsR0FBQSxnQkFDQTJRLENBQUEsQ0FBQXNNLGNBQUEsR0FDQXJmLENBQUEsQ0FBQTBtQixXQUFBLEdBQUExVSxRQUFBLEVBQ0EsT0FDQSxDQUNBLElBQUFlLENBQUEsQ0FBQTRhLE1BQUEsRUFBQTVhLENBQUEsQ0FBQTZhLE9BQUEsRUFBQTdhLENBQUEsQ0FBQThhLE9BQUEsSUFBQTlhLENBQUEsQ0FBQTNRLEdBQUEsY0FBQTJRLENBQUEsQ0FBQTNRLEdBQUEsa0JBQUEyUSxDQUFBLENBQUErYSxRQUFBLEVBQ0EvYSxDQUFBLENBQUFzTSxjQUFBLEdBQ0EsTUFBQTBPLEdBQUEsQ0FBQWhiLENBQUEsQ0FBQTNRLEdBQUEseUJBQ0FwQyxDQUFBLENBQUFndUIsU0FBQSxHQUFBaGMsUUFBQSxDQUFBK2IsR0FBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBaGIsQ0FBQSxDQUFBM1EsR0FBQSxZQUNBMlEsQ0FBQSxDQUFBc00sY0FBQSxHQUNBcmYsQ0FBQSxDQUFBNlEsWUFBQSxDQUFBbUIsUUFBQSxFQUFBb1IsY0FBQSxRQUNBLENBQ0EsQ0FFQSx5QkFDQXNLLG9CQUFBLEVBQ0EsTUFBQTN0QixDQUFBLENBQUFyQixRQUFBLENBQUF1dkIsYUFBQSxDQUNBLE1BQUE5YixHQUFBLENBQUFwUyxDQUFBLEVBQUFtdUIsT0FBQSxDQUNBLEdBQUEvYixHQUFBLFlBQUFBLEdBQUEsZUFBQUEsR0FBQSxhQUFBcFMsQ0FBQSxFQUFBb3VCLGlCQUFBLFNBQ0EsWUFDQSxDQUNBLE1BQUFwVyxHQUFBLENBQUFyWixRQUFBLENBQUFDLGNBQUEsd0JBQ0EsU0FBQW9aLEdBQUEsRUFBQWhZLENBQUEsRUFBQWdZLEdBQUEsQ0FBQWxaLFFBQUEsQ0FBQWtCLENBQUEsR0FDQSxDQUNBLEVBRUE7QUFDQTtBQUNBLElBQ0E5RyxFQUFBLENBQUFtMUIsMEJBQUEsZUFBQW4xQixFQUFBLENBQUFxcEIsZUFBQSxDQUNBQyxLQUFBLEVBQ0EsS0FBQTNjLE9BQUEsQ0FBQXlvQixtQkFBQSxNQUFBQyxhQUFBLENBQUFwZSxJQUFBLE9BQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBMlQsZ0JBQUFya0IsR0FBQSxFQUNBLE1BQUE5RixDQUFBLENBQUFvcUIsZ0JBQUEsQ0FBQXRrQixHQUFBLEVBQUF1SSxnQkFBQSx3QkFDQSxNQUFBck4sQ0FBQSxDQUFBQyxVQUFBLENBQUFqQixDQUFBLEVBQ0EsT0FBQWtCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFPLElBQUEsQ0FBQUQsR0FBQSxHQUFBTixDQUFBLElBQ0EsQ0FFQSw0QkFDQTR6QixjQUFBdmIsQ0FBQSxFQUNBLE1BQUEvUyxDQUFBLE1BQUE0RixPQUFBLENBQ0FtTixDQUFBLENBQUFzTSxjQUFBLEdBQ0EsR0FBQXRNLENBQUEsQ0FBQXdiLE1BQUEsWUFFQSxNQUFBQyxPQUFBLENBQUF6YixDQUFBLENBQUEwYixhQUFBLENBQ0EsTUFBQXZ2QixNQUFBLENBQUFzdkIsT0FBQSxDQUFBdEksYUFBQSxDQUNBLE1BQUE5bUIsSUFBQSxDQUFBQyxLQUFBLENBQUFDLElBQUEsQ0FBQUosTUFBQSxDQUFBM0IsZ0JBQUEsZ0NBQ0EsTUFBQW14QixRQUFBLENBQUFGLE9BQUEsRUFBQUcsc0JBQUEsQ0FDQSxNQUFBQyxTQUFBLENBQUFKLE9BQUEsRUFBQUssa0JBQUEsQ0FDQSxJQUFBSCxRQUFBLEdBQUFFLFNBQUEsR0FBQUYsUUFBQSxDQUFBMXRCLFNBQUEsQ0FBQW5DLFFBQUEsdUJBQUErdkIsU0FBQSxDQUFBNXRCLFNBQUEsQ0FBQW5DLFFBQUEsNEJBRUEsTUFBQWl3QixVQUFBLENBQUExdkIsSUFBQSxDQUFBOG5CLE9BQUEsQ0FBQXdILFFBQUEsRUFDQSxNQUFBSyxXQUFBLENBQUEzdkIsSUFBQSxDQUFBOG5CLE9BQUEsQ0FBQTBILFNBQUEsRUFDQSxHQUFBRSxVQUFBLE9BQUFDLFdBQUEsR0FBQUQsVUFBQSxVQUVBLE1BQUFFLE9BQUEsQ0FBQWpjLENBQUEsQ0FBQXZJLE9BQUEsQ0FDQSxNQUFBeWtCLGFBQUEsQ0FBQVAsUUFBQSxDQUFBL21CLHFCQUFBLEdBQUFzQixLQUFBLENBQ0EsTUFBQWltQixjQUFBLENBQUFOLFNBQUEsQ0FBQWpuQixxQkFBQSxHQUFBc0IsS0FBQSxDQUNBLE1BQUFrbUIsT0FBQSxDQUFBbDBCLElBQUEsQ0FBQUQsR0FBQSxHQUFBaTBCLGFBQUEsQ0FBQUMsY0FBQSxFQUVBLE1BQUFqdkIsRUFBQSxDQUFBRCxDQUFBLENBQUFoQixlQUFBLENBQ0EsTUFBQW93QixRQUFBLENBQUFwdkIsQ0FBQSxDQUFBaWtCLE1BQUEsQ0FBQWhsQixnQ0FBQSxDQUFBQyxNQUFBLENBQUFlLEVBQUEsRUFDQSxNQUFBRSxTQUFBLENBQUFpdkIsUUFBQSxDQUFBanZCLFNBQUE7QUFDQSxNQUFBRSxLQUFBLENBQUErdUIsUUFBQSxDQUFBL3VCLEtBQUEsQ0FBQW5ELEtBQUE7QUFDQSxNQUFBbXlCLFVBQUEsQ0FBQWh2QixLQUFBLENBQUF5dUIsVUFBQSxFQUFBenVCLEtBQUEsQ0FBQTB1QixXQUFBLEVBRUE7QUFDQSxJQUFBSSxPQUFBLEdBQUF2MEIsTUFBQSxDQUFBQyxRQUFBLENBQUF3MEIsVUFBQSxHQUFBQSxVQUFBLFdBRUE7QUFDQSxNQUFBQyxPQUFBLENBQUFDLEdBQUEsRUFBQUosT0FBQSxFQUFBSSxHQUFBLENBQUFGLFVBQUE7QUFDQSxNQUFBRyxhQUFBLENBQUF2MEIsSUFBQSxDQUFBRixHQUFBLEtBQUFvRixTQUFBO0FBQ0EsTUFBQXN2QixZQUFBLENBQUFILE9BQUEsQ0FBQUUsYUFBQSxFQUVBLE1BQUFFLFNBQUEsQ0FBQXowQixJQUFBLENBQUFELEdBQUEsTUFBQTZvQixlQUFBLENBQUE2SyxRQUFBLEVBQUFlLFlBQUEsRUFDQSxNQUFBRSxVQUFBLENBQUExMEIsSUFBQSxDQUFBRCxHQUFBLE1BQUE2b0IsZUFBQSxDQUFBK0ssU0FBQSxFQUFBYSxZQUFBLEVBRUE7QUFDQSxNQUFBRyxnQkFBQSxDQUFBbHhCLFFBQUEsQ0FBQTRpQixJQUFBLENBQUE3aEIsS0FBQSxDQUFBb3dCLFVBQUEsQ0FDQW54QixRQUFBLENBQUE0aUIsSUFBQSxDQUFBN2hCLEtBQUEsQ0FBQW93QixVQUFBLFFBQ0Ezd0IsTUFBQSxDQUFBTyxLQUFBLENBQUFxd0IsTUFBQSxjQUVBLE1BQUFDLGFBQUEsQ0FBQWhSLEVBQUEsR0FDQSxJQUFBb1EsT0FBQSxRQUVBO0FBQ0EsTUFBQWEsUUFBQSxDQUFBalIsRUFBQSxDQUFBdlUsT0FBQSxDQUFBd2tCLE9BQUEsQ0FDQSxJQUFBaUIsU0FBQSxDQUFBaEIsYUFBQSxDQUFBZSxRQUFBLENBQ0FDLFNBQUEsQ0FBQWgxQixJQUFBLENBQUFELEdBQUEsQ0FBQTAwQixTQUFBLENBQUF6MEIsSUFBQSxDQUFBRixHQUFBLENBQUFvMEIsT0FBQSxDQUFBUSxVQUFBLENBQUFNLFNBQUEsR0FDQSxNQUFBQyxVQUFBLENBQUFmLE9BQUEsQ0FBQWMsU0FBQSxDQUVBO0FBQ0EsTUFBQUUsVUFBQSxDQUFBRixTQUFBLENBQUFkLE9BQUEsQ0FBQUUsVUFBQSxDQUNBLE1BQUFlLFFBQUEsQ0FBQS92QixLQUFBLENBQUFuRCxLQUFBLElBQ0FrekIsUUFBQSxDQUFBdEIsVUFBQSxFQUFBcUIsVUFBQSxDQUNBQyxRQUFBLENBQUFyQixXQUFBLEVBQUFNLFVBQUEsQ0FBQWMsVUFBQSxDQUVBbndCLENBQUEsQ0FBQWlrQixNQUFBLENBQUEzakIsa0JBQUEsQ0FBQXBCLE1BQUEsQ0FBQWt4QixRQUFBLEVBQ0EsRUFFQSxNQUFBQyxXQUFBLENBQUFBLENBQUEsSUFDQTN4QixRQUFBLENBQUFnSCxtQkFBQSxhQUFBcXFCLGFBQUEsRUFDQXJ4QixRQUFBLENBQUFnSCxtQkFBQSxXQUFBMnFCLFdBQUEsRUFDQWprQixNQUFBLENBQUExRyxtQkFBQSxXQUFBMnFCLFdBQUEsRUFDQTN4QixRQUFBLENBQUFnSCxtQkFBQSxjQUFBMnFCLFdBQUEsRUFDQTN4QixRQUFBLENBQUE0aUIsSUFBQSxDQUFBN2hCLEtBQUEsQ0FBQW93QixVQUFBLENBQUFELGdCQUFBLEtBQ0Exd0IsTUFBQSxDQUFBTyxLQUFBLENBQUFxd0IsTUFBQSxJQUVBO0FBQ0EsTUFBQVEsVUFBQSxDQUFBdHdCLENBQUEsQ0FBQWlrQixNQUFBLENBQUFobEIsZ0NBQUEsQ0FBQUMsTUFBQSxDQUFBZSxFQUFBLEVBQ0FELENBQUEsQ0FBQWlrQixNQUFBLENBQUEzakIsa0JBQUEsQ0FBQXBCLE1BQUEsQ0FBQW94QixVQUFBLENBQUFqd0IsS0FBQSxFQUNBLEVBRUEzQixRQUFBLENBQUE4RyxnQkFBQSxhQUFBdXFCLGFBQUEsRUFDQXJ4QixRQUFBLENBQUE4RyxnQkFBQSxXQUFBNnFCLFdBQUEsRUFDQWprQixNQUFBLENBQUE1RyxnQkFBQSxXQUFBNnFCLFdBQUEsRUFDQTN4QixRQUFBLENBQUE4RyxnQkFBQSxjQUFBNnFCLFdBQUEsRUFDQSxDQUVBLEVBRUE7QUFDQTtBQUNBLElBQ0FwM0IsRUFBQSxDQUFBczNCLHVCQUFBLGVBQUF0M0IsRUFBQSxDQUFBcXBCLGVBQUEsQ0FFQUMsS0FBQSxFQUNBLEtBQUEzYyxPQUFBLENBQUE0cUIsUUFBQSxDQUFBenhCLElBQUEsT0FBQXl4QixRQUFBLENBQUF6eEIsSUFBQSxFQUNBLEtBQUE2RyxPQUFBLENBQUFrTCxXQUFBLEVBQUFyRCxTQUFBLENBQUFyTyxJQUFBLFFBQUEwUixXQUFBLENBQUFyRCxTQUFBLENBQUFyTyxJQUFBLEVBQ0EsS0FBQXdHLE9BQUEsQ0FBQTZxQixlQUFBLEVBQUFDLFlBQUEsQ0FBQWpqQixTQUFBLFFBQUFnakIsZUFBQSxDQUFBQyxZQUFBLENBQUFqakIsU0FBQSxFQUNBLEtBQUE3SCxPQUFBLENBQUErSyx5QkFBQSxDQUFBeE8sRUFBQSxPQUFBd08seUJBQUEsQ0FBQXhPLEVBQUEsRUFDQSxLQUFBeUQsT0FBQSxDQUFBK3FCLHFCQUFBLENBQUF4dUIsRUFBQSxPQUFBd3VCLHFCQUFBLENBQUF4dUIsRUFBQSxFQUNBLEtBQUF5RCxPQUFBLENBQUE4SyxjQUFBLE1BQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBa2dCLHVCQUFBdGpCLElBQUEsRUFDQSxNQUFBdE4sQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLElBQUEwSCxJQUFBLFFBQ0EsTUFBQXVqQixLQUFBLElBQ0EsR0FBQXZqQixJQUFBLENBQUF0TSxTQUFBLEVBQUFuQyxRQUFBLHVCQUFBeU8sSUFBQSxDQUFBdE0sU0FBQSxFQUFBbkMsUUFBQSxxQkFDQWd5QixLQUFBLENBQUFoVSxJQUFBLENBQUF2UCxJQUFBLEVBQ0EsQ0FDQXVqQixLQUFBLENBQUFoVSxJQUFBLElBQUF2UCxJQUFBLENBQUEvUCxnQkFBQSwwQ0FDQXN6QixLQUFBLENBQUF0d0IsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUEydUIsTUFBQSxDQUFBM3VCLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsOEJBQ0FzRCxFQUFBLENBQUF2RixPQUFBLENBQUFDLEdBQUEsSUFBQWkwQixNQUFBLE1BQUE5d0IsQ0FBQSxDQUFBK3dCLFlBQUEsSUFBQXprQixJQUFBLENBQUFILEdBQUEsTUFBQWxSLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLFFBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQSxLQUNBOHpCLGFBQUF6MEIsSUFBQSxDQUFBMDBCLEtBQUEsRUFDQSxNQUFBNzNCLENBQUEsQ0FBQUwsSUFBQSxDQUFBRyxpQkFBQSxDQUNBLElBQUFRLENBQUEsQ0FBQUgsTUFBQSxDQUFBZ0QsSUFBQSxNQUNBLElBQUE3QyxDQUFBLENBQUFBLENBQUEsU0FDQSxNQUFBb0MsQ0FBQSxDQUFBcEMsQ0FBQSxDQUFBcUMsS0FBQSxZQUNBLElBQUFyQixDQUFBLENBQUFvQixDQUFBLENBQUFpRyxRQUFBLENBQUFqRyxDQUFBLGFBQ0EsSUFBQW8xQixJQUFBLENBQUFwMUIsQ0FBQSxDQUFBcEMsQ0FBQSxDQUFBRixPQUFBLGFBQUFFLENBQUEsQ0FDQSxNQUFBdTNCLEtBQUEsQ0FBQTFFLEdBQUEsQ0FBQTd5QixDQUFBLEdBQ0FnQixDQUFBLENBQUFPLElBQUEsQ0FBQUQsR0FBQSxHQUFBTixDQUFBLElBQ0FoQixDQUFBLElBQUF3M0IsSUFBQSxJQUFBeDJCLENBQUEsR0FDQSxDQUNBdTJCLEtBQUEsQ0FBQTFvQixHQUFBLENBQUE3TyxDQUFBLEVBQ0EsT0FBQUEsQ0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBeTNCLHVCQUFBN2pCLElBQUEsRUFDQSxNQUFBdE4sQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLE1BQUF4TSxDQUFBLENBQUFMLElBQUEsQ0FBQUcsaUJBQUEsQ0FDQSxJQUFBb1UsSUFBQSxHQUFBdE4sQ0FBQSxFQUFBN0QsZUFBQSxRQUVBO0FBQ0EsTUFBQWkxQixXQUFBLEtBQUE1cUIsR0FBQSxHQUNBLE1BQUE2cUIsYUFBQSxLQUFBN3FCLEdBQUEsR0FDQSxNQUFBOHFCLFdBQUEsS0FBQTlxQixHQUFBLEdBQ0EsTUFBQStxQixVQUFBLEtBQUEvcUIsR0FBQSxHQUVBO0FBQ0F4RyxDQUFBLENBQUE3RCxlQUFBLENBQUFvQixnQkFBQSx5Q0FBQWdELE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxHQUFBbUwsSUFBQSxDQUFBek8sUUFBQSxDQUFBc0QsRUFBQSxTQUNBLE1BQUFxdkIsR0FBQSxDQUFBcnZCLEVBQUEsQ0FBQWhFLFlBQUEsWUFDQSxNQUFBc3pCLElBQUEsQ0FBQXR2QixFQUFBLENBQUFoRSxZQUFBLGNBQ0EsTUFBQXV6QixHQUFBLENBQUF2dkIsRUFBQSxDQUFBaEUsWUFBQSxpQkFDQSxHQUFBcXpCLEdBQUEsQ0FBQUosV0FBQSxDQUFBN29CLEdBQUEsQ0FBQWlwQixHQUFBLEVBQ0EsR0FBQUMsSUFBQSxDQUFBSixhQUFBLENBQUE5b0IsR0FBQSxDQUFBa3BCLElBQUEsRUFDQSxHQUFBQyxHQUFBLENBQUFKLFdBQUEsQ0FBQS9vQixHQUFBLENBQUFtcEIsR0FBQSxFQUNBLEdBRUE7QUFDQWh6QixRQUFBLENBQUFuQixnQkFBQSxTQUFBZ0QsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLEdBQUFtTCxJQUFBLENBQUF6TyxRQUFBLENBQUFzRCxFQUFBLFNBQ0EsR0FBQUEsRUFBQSxDQUFBM0YsRUFBQSxDQUFBKzBCLFVBQUEsQ0FBQWhwQixHQUFBLENBQUFwRyxFQUFBLENBQUEzRixFQUFBLEVBQ0EsR0FFQSxNQUFBcTBCLEtBQUEsSUFDQSxHQUFBdmpCLElBQUEsQ0FBQXRNLFNBQUEsRUFBQW5DLFFBQUEsdUJBQUF5TyxJQUFBLENBQUF0TSxTQUFBLEVBQUFuQyxRQUFBLHFCQUNBZ3lCLEtBQUEsQ0FBQWhVLElBQUEsQ0FBQXZQLElBQUEsRUFDQSxDQUNBdWpCLEtBQUEsQ0FBQWhVLElBQUEsSUFBQXZQLElBQUEsQ0FBQS9QLGdCQUFBLDBDQUVBO0FBQ0FzekIsS0FBQSxDQUFBdHdCLE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBd3ZCLE9BQUEsQ0FBQXh2QixFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLG9CQUNBLE1BQUEyUixTQUFBLENBQUFyTyxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLHNCQUVBO0FBQ0EsQ0FDQSxNQUFBWCxHQUFBLENBQUFpRSxFQUFBLENBQUFoRSxZQUFBLGdCQUNBLE1BQUE1QixJQUFBLENBQUFuRCxDQUFBLENBQUFPLGdCQUFBLENBQUF1RSxHQUFBLElBQUFzUyxTQUFBLG9CQUNBLE1BQUErRyxJQUFBLE1BQUF5WixZQUFBLENBQUF6MEIsSUFBQSxDQUFBNjBCLFdBQUEsRUFDQSxHQUFBN1osSUFBQSxHQUFBclosR0FBQSxDQUFBaUUsRUFBQSxDQUFBcEUsWUFBQSxXQUFBd1osSUFBQSxFQUNBLENBRUE7QUFDQSxHQUFBb2EsT0FBQSxFQUNBLE1BQUF6ekIsR0FBQSxDQUFBaUUsRUFBQSxDQUFBaEUsWUFBQSxrQkFDQSxHQUFBRCxHQUFBLEVBQ0EsTUFBQTNCLElBQUEsQ0FBQW5ELENBQUEsQ0FBQVUsa0JBQUEsQ0FBQW9FLEdBQUEsRUFDQSxNQUFBcVosSUFBQSxNQUFBeVosWUFBQSxDQUFBejBCLElBQUEsQ0FBQTgwQixhQUFBLEVBQ0EsR0FBQTlaLElBQUEsR0FBQXJaLEdBQUEsRUFDQWlFLEVBQUEsQ0FBQXBFLFlBQUEsYUFBQXdaLElBQUEsRUFDQTtBQUNBLE1BQUEvVixLQUFBLENBQUFXLEVBQUEsQ0FBQXJGLGFBQUEsNEJBQ0EsR0FBQTBFLEtBQUEsQ0FBQUEsS0FBQSxDQUFBekQsWUFBQSxRQUFBd1osSUFBQSxFQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsQ0FDQSxNQUFBclosR0FBQSxDQUFBaUUsRUFBQSxDQUFBaEUsWUFBQSxxQkFDQSxHQUFBRCxHQUFBLEVBQ0EsTUFBQTNCLElBQUEsQ0FBQW5ELENBQUEsQ0FBQU8sZ0JBQUEsQ0FBQXVFLEdBQUEsRUFDQTtBQUNBLE1BQUEwekIsYUFBQSxLQUFBcHJCLEdBQUEsS0FBQThxQixXQUFBLElBQUFDLFVBQUEsR0FDQSxJQUFBM2xCLFNBQUEsTUFBQW9sQixZQUFBLENBQUF6MEIsSUFBQSxDQUFBcTFCLGFBQUEsRUFDQTtBQUNBTixXQUFBLENBQUEvb0IsR0FBQSxDQUFBcUQsU0FBQSxFQUNBMmxCLFVBQUEsQ0FBQWhwQixHQUFBLENBQUFxRCxTQUFBLEVBRUEsR0FBQUEsU0FBQSxHQUFBMU4sR0FBQSxDQUFBaUUsRUFBQSxDQUFBcEUsWUFBQSxnQkFBQTZOLFNBQUEsRUFFQTtBQUNBLEdBQUE0RSxTQUFBLEVBQ0FyTyxFQUFBLENBQUEzRixFQUFBLENBQUFvUCxTQUFBLEtBQ0EsTUFDQSxNQUFBcEssS0FBQSxDQUFBVyxFQUFBLENBQUFyRixhQUFBLDRCQUNBLE1BQUFxSCxLQUFBLENBQUFoQyxFQUFBLENBQUFyRixhQUFBLGdDQUNBLEdBQUEwRSxLQUFBLENBQUFBLEtBQUEsQ0FBQWhGLEVBQUEsQ0FBQW9QLFNBQUEsS0FDQSxHQUFBekgsS0FBQSxDQUFBQSxLQUFBLENBQUEwdEIsT0FBQSxDQUFBam1CLFNBQUEsS0FDQSxDQUNBLFNBQUE0RSxTQUFBLEVBQ0E7QUFDQXJPLEVBQUEsQ0FBQTdELGVBQUEsT0FDQSxDQUNBLENBQ0EsR0FDQSxDQUVBd3pCLDBCQUFBQyxPQUFBLENBQUFDLGlCQUFBLENBQUFDLFVBQUEsV0FFQTtBQUVBLE1BQUFuWCxHQUFBLENBQUFwYyxRQUFBLENBQUFDLGNBQUEsbUNBQ0EsSUFBQW1jLEdBQUEsRUFDQSxZQUNBLENBRUE7QUFDQSxNQUFBMk4sR0FBQSxDQUFBM04sR0FBQSxDQUFBb1gsT0FBQSxFQUFBcFgsR0FBQSxDQUFBb1gsT0FBQSxDQUFBL1YsaUJBQUEsQ0FBQXJCLEdBQUEsQ0FBQW9YLE9BQUEsQ0FBQS9WLGlCQUFBLENBQUFyQixHQUFBLENBQUFxQixpQkFBQSxDQUNBLElBQUFzTSxHQUFBLEVBQ0EsWUFDQSxDQUVBLE1BQUEwSixLQUFBLENBQUExSixHQUFBLENBQUEySixTQUFBLE9BQ0FELEtBQUEsQ0FBQTd6QixlQUFBLFdBQ0EsR0FBQTZ6QixLQUFBLENBQUEzMUIsRUFBQSxFQUNBMjFCLEtBQUEsQ0FBQTd6QixlQUFBLE9BQ0EsQ0FDQTZ6QixLQUFBLENBQUE1MEIsZ0JBQUEsU0FBQWdELE9BQUEsQ0FBQTdGLENBQUEsRUFBQUEsQ0FBQSxDQUFBNEQsZUFBQSxRQUVBO0FBQ0E2ekIsS0FBQSxDQUFBdjFCLE9BQUEsQ0FBQXkxQixNQUFBLENBQUFKLFVBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQUUsS0FBQSxDQUFBM3NCLGdCQUFBLFNBQUF1TixDQUFBLEdBQ0EsTUFBQWhULENBQUEsQ0FBQWdULENBQUEsQ0FBQXFNLE1BQUEsQ0FBQWpWLE9BQUEsNkNBQ0EsSUFBQXBLLENBQUEsRUFDQSxPQUNBLENBQ0FnVCxDQUFBLENBQUFzTSxjQUFBLEdBRUE7QUFDQSxJQUFBamdCLElBQUEsQ0FBQTJDLFFBQUEsQ0FBQWhDLENBQUEsQ0FBQW5ELE9BQUEsQ0FBQXdDLElBQUEsR0FBQVcsQ0FBQSxDQUFBOFQsV0FBQSxDQUFBOVgsS0FBQSxxQ0FDQXFELElBQUEsQ0FBQW5FLElBQUEsQ0FBQUQsR0FBQSxHQUFBQyxJQUFBLENBQUFGLEdBQUEsR0FBQXFFLElBQUEsR0FFQTtBQUNBLEtBQUEwUixXQUFBLENBQUFraEIsaUJBQUEsQ0FBQTV5QixJQUFBLENBQUE2eUIsVUFBQSxFQUVBO0FBQ0EsTUFBQXZmLEdBQUEsQ0FBQXlmLEtBQUEsQ0FBQXIxQixhQUFBLG9CQUNBLEdBQUE0VixHQUFBLEVBQ0FBLEdBQUEsQ0FBQW1CLFdBQUEsTUFBQXpVLElBQUEsSUFDQSxDQUNBLEdBRUEsT0FBQSt5QixLQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBM0IsU0FBQSxDQUFBbGhCLE1BQUEsV0FDQSxNQUFBdFAsQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLE1BQUFtc0IsT0FBQSxDQUFBaDVCLElBQUEsQ0FBQXVYLHdCQUFBLENBQUE0QixjQUFBLHVIQUNBNmYsT0FBQSxDQUFBaDBCLFlBQUEsZUFBQWlDLENBQUEsQ0FBQXN5QixZQUFBLEVBRUE7QUFDQSxNQUFBQyxhQUFBLENBQUF0NUIsRUFBQSxDQUFBdTVCLGtCQUFBLDZCQUFBQyxXQUFBLENBQUF6eUIsQ0FBQSxDQUFBc3lCLFlBQUEsR0FDQVAsT0FBQSxDQUFBemYsU0FBQSxDQUFBaWdCLGFBQUEsOEZBRUF2eUIsQ0FBQSxDQUFBN0QsZUFBQSxDQUFBMlgsV0FBQSxDQUFBaWUsT0FBQSxFQUNBLEdBQUF6aUIsTUFBQSxFQUNBeWlCLE9BQUEsQ0FBQTNPLGNBQUEsRUFBQUksUUFBQSxVQUFBQyxLQUFBLFdBQ0EsQ0FFQSxNQUFBdU8saUJBQUEsQ0FBQUQsT0FBQSxDQUFBajFCLGFBQUEsOENBQ0EsTUFBQTQxQix5QkFBQSxHQUNBLEtBQUEvQixxQkFBQSxDQUFBcUIsaUJBQUEsRUFDQSxLQUFBbGhCLFdBQUEsQ0FBQWtoQixpQkFBQSxDQUFBVSx5QkFBQSxFQUVBO0FBQ0EsTUFBQUMsaUJBQUEsQ0FBQVosT0FBQSxDQUFBajFCLGFBQUEsd0JBQ0EsTUFBQTgxQixRQUFBLE1BQUFkLHlCQUFBLENBQUFDLE9BQUEsQ0FBQUMsaUJBQUEsUUFDQSxHQUFBWSxRQUFBLEVBQ0FELGlCQUFBLENBQUE3ZSxXQUFBLENBQUE4ZSxRQUFBLEVBQ0EsQ0FDQTtBQUNBLE1BQUFDLG9CQUFBLENBQUE5NUIsSUFBQSxDQUFBdVgsd0JBQUEsQ0FBQTRCLGNBQUEsd0RBQ0E4ZixpQkFBQSxDQUFBYyxLQUFBLENBQUFELG9CQUFBLEVBQ0EsTUFBQUUsV0FBQSxNQUFBakIseUJBQUEsQ0FBQUMsT0FBQSxDQUFBQyxpQkFBQSxXQUNBLEdBQUFlLFdBQUEsRUFDQUYsb0JBQUEsQ0FBQS9lLFdBQUEsQ0FBQWlmLFdBQUEsRUFDQSxDQUVBLE9BQUFoQixPQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FqaEIsWUFBQXJELFNBQUEsQ0FBQXJPLElBQUEsQ0FBQTZ5QixVQUFBLFdBQ0EsTUFBQWp5QixDQUFBLE1BQUE0RixPQUFBLENBQ0F4RyxJQUFBLENBQUFuRSxJQUFBLENBQUFELEdBQUEsR0FBQStHLFFBQUEsQ0FBQTNDLElBQUEsU0FFQSxNQUFBMlIsT0FBQSxDQUFBaFksSUFBQSxDQUFBdVgsd0JBQUEsQ0FBQTRCLGNBQUEsNEJBQ0FuQixPQUFBLENBQUFoVCxZQUFBLHdCQUFBaUMsQ0FBQSxDQUFBZ3pCLGVBQUEsSUFBQTFtQixJQUFBLENBQUFILEdBQUEsTUFDQTRFLE9BQUEsQ0FBQWhULFlBQUEsbUJBQUFpQyxDQUFBLENBQUErd0IsWUFBQSxJQUFBemtCLElBQUEsQ0FBQUgsR0FBQSxNQUFBbFIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsU0FDQTZULE9BQUEsQ0FBQWhULFlBQUEsd0JBQ0FnVCxPQUFBLENBQUFoVCxZQUFBLHlCQUNBZ1QsT0FBQSxDQUFBaFQsWUFBQSxnQkFBQXhFLE1BQUEsQ0FBQTZGLElBQUEsR0FDQTtBQUVBLE1BQUEyQixHQUFBLENBQUFoSSxJQUFBLENBQUF1WCx3QkFBQSxDQUFBNEIsY0FBQSxrQ0FDQSxRQUFBMVIsQ0FBQSxHQUFBQSxDQUFBLENBQUFwQixJQUFBLENBQUFvQixDQUFBLElBQ0EsTUFBQWhCLEdBQUEsQ0FBQXpHLElBQUEsQ0FBQXVYLHdCQUFBLENBQUE0QixjQUFBLHVDQUNBMVMsR0FBQSxDQUFBQyxLQUFBLENBQUFDLFNBQUEsS0FBQU4sSUFBQSxLQUNBO0FBQ0FZLENBQUEsQ0FBQWl6QixhQUFBLEdBQUF6ekIsR0FBQSxFQUNBdUIsR0FBQSxDQUFBK1MsV0FBQSxDQUFBdFUsR0FBQSxFQUNBLEdBQUFnQixDQUFBLENBQUFwQixJQUFBLElBQ0EsTUFBQW92QixPQUFBLENBQUF6MUIsSUFBQSxDQUFBdVgsd0JBQUEsQ0FBQTRCLGNBQUEsbUNBQ0FzYyxPQUFBLENBQUFocEIsZ0JBQUEsYUFBQXhGLENBQUEsQ0FBQXF1QixtQkFBQSxFQUNBdHRCLEdBQUEsQ0FBQStTLFdBQUEsQ0FBQTBhLE9BQUEsRUFDQSxDQUNBLENBQ0F6ZCxPQUFBLENBQUErQyxXQUFBLENBQUEvUyxHQUFBLEVBQ0FmLENBQUEsQ0FBQWlrQixNQUFBLENBQUF4akIsZUFBQSxDQUFBTSxHQUFBLENBQUFmLENBQUEsQ0FBQWhCLGVBQUEsRUFDQWdCLENBQUEsQ0FBQXlRLG1CQUFBLENBQUFNLE9BQUEsRUFDQUEsT0FBQSxDQUFBaFQsWUFBQSxpQkFDQSxLQUFBNFMseUJBQUEsQ0FBQUksT0FBQSxFQUVBO0FBQ0EsR0FBQWtoQixVQUFBLFVBQUF4a0IsU0FBQSxDQUFBME8saUJBQUEsRUFDQTFPLFNBQUEsQ0FBQTlELFlBQUEsQ0FBQW9ILE9BQUEsQ0FBQXRELFNBQUEsQ0FBQTBPLGlCQUFBLEVBQ0EsTUFDQTFPLFNBQUEsQ0FBQXFHLFdBQUEsQ0FBQS9DLE9BQUEsRUFDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBMGYsZ0JBQUFDLFlBQUEsQ0FBQWpqQixTQUFBLEVBQ0EsTUFBQXpOLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBc3RCLFNBQUEsQ0FBQTd6QixLQUFBLENBQUE0QixPQUFBLENBQUF5dkIsWUFBQSxFQUFBOWYsT0FBQSxFQUFBOGYsWUFBQSxDQUFBOWYsT0FBQSxJQUNBLEtBQUFFLFdBQUEsQ0FBQXJELFNBQUEsQ0FBQXlsQixTQUFBLENBQUExMUIsTUFBQSxLQUNBLE1BQUF1VCxPQUFBLENBQUF0RCxTQUFBLENBQUF1RCxnQkFBQSxDQUNBLElBQUFELE9BQUEsQ0FBQW5VLE9BQUEsQ0FBQUMsR0FBQSxFQUNBa1UsT0FBQSxDQUFBaFQsWUFBQSxtQkFBQWlDLENBQUEsQ0FBQSt3QixZQUFBLElBQUF6a0IsSUFBQSxDQUFBSCxHQUFBLE1BQUFsUixJQUFBLENBQUErQixNQUFBLEdBQUFDLFFBQUEsS0FBQUMsS0FBQSxTQUNBLENBQ0E2VCxPQUFBLENBQUFoVCxZQUFBLFdBQUEyeUIsWUFBQSxFQUFBbDBCLEVBQUEsZUFBQXdELENBQUEsQ0FBQWd6QixlQUFBLElBQUExbUIsSUFBQSxDQUFBSCxHQUFBLE1BQ0E0RSxPQUFBLENBQUFoVCxZQUFBLHdCQUNBZ1QsT0FBQSxDQUFBaFQsWUFBQSxjQUFBMnlCLFlBQUEsRUFBQXZzQixLQUFBLGFBQ0E0TSxPQUFBLENBQUFoVCxZQUFBLGdCQUFBeEUsTUFBQSxFQUFBbTNCLFlBQUEsRUFBQTlmLE9BQUEsTUFBQXBULE1BQUEsTUFDQTtBQUNBLEdBQUFrekIsWUFBQSxFQUFBM2IsT0FBQSxFQUNBaEUsT0FBQSxDQUFBaFQsWUFBQSxnQkFBQXhFLE1BQUEsQ0FBQW0zQixZQUFBLENBQUEzYixPQUFBLEdBQ0E7QUFDQWhFLE9BQUEsQ0FBQXZVLEVBQUEsQ0FBQWpELE1BQUEsQ0FBQW0zQixZQUFBLENBQUEzYixPQUFBLEVBQ0EsQ0FFQTtBQUNBLEdBQUEyYixZQUFBLEVBQUF5QyxVQUFBLFFBQ0EsTUFBQUMsSUFBQSxDQUFBNzVCLE1BQUEsQ0FBQW0zQixZQUFBLENBQUF5QyxVQUFBLEVBQ0FwaUIsT0FBQSxDQUFBaFQsWUFBQSxtQkFBQXExQixJQUFBLEVBQ0EsSUFDQXJpQixPQUFBLENBQUFuVSxPQUFBLENBQUF1MkIsVUFBQSxDQUFBQyxJQUFBLENBQ0EsT0FBQW5jLEVBQUEsRUFDQSxDQUNBLENBQ0E7QUFHQSxHQUFBeVosWUFBQSxFQUFBdGIsUUFBQSxFQUNBckUsT0FBQSxDQUFBaFQsWUFBQSxpQkFBQXhFLE1BQUEsQ0FBQW0zQixZQUFBLENBQUF0YixRQUFBLEdBQ0E7QUFDQTdiLE1BQUEsQ0FBQW0zQixZQUFBLENBQUF0YixRQUFBLEVBQUEzVCxLQUFBLFFBQUFDLE1BQUEsQ0FBQXdHLE9BQUEsRUFBQTNILE9BQUEsQ0FBQXFnQixHQUFBLEVBQUE3UCxPQUFBLENBQUEvUCxTQUFBLENBQUF1SCxHQUFBLENBQUFxWSxHQUFBLEdBQ0EsQ0FFQSxNQUFBN2YsR0FBQSxDQUFBZ1EsT0FBQSxDQUFBalUsYUFBQSxtQkFDQTtBQUNBLElBQ0EsTUFBQXMyQixJQUFBLENBQUFyaUIsT0FBQSxDQUFBNVMsWUFBQSxzQkFDQTRTLE9BQUEsQ0FBQW5VLE9BQUEsQ0FBQW1VLE9BQUEsQ0FBQW5VLE9BQUEsQ0FBQXUyQixVQUFBLFNBQ0EsTUFBQUUsR0FBQSxDQUFBcDZCLEVBQUEsQ0FBQW91QixzQkFBQSxDQUFBaU0sZ0JBQUEsQ0FBQUYsSUFBQSxFQUNBbjZCLEVBQUEsQ0FBQW91QixzQkFBQSxDQUFBOVMsS0FBQSxDQUFBeEQsT0FBQSxDQUFBc2lCLEdBQUEsRUFDQSxPQUFBcGMsRUFBQSxFQUNBLENBRUFpYyxTQUFBLENBQUEzeUIsT0FBQSxFQUFBZ3pCLFFBQUEsQ0FBQXpYLEtBQUEsSUFDQSxNQUFBMFgsWUFBQSxDQUFBenlCLEdBQUEsQ0FBQXhELGdCQUFBLCtCQUNBLE1BQUFpQyxHQUFBLENBQUFnMEIsWUFBQSxDQUFBMVgsS0FBQSxFQUNBdGMsR0FBQSxDQUFBQyxLQUFBLENBQUFDLFNBQUEsQ0FBQTZ6QixRQUFBLENBQUF0cUIsS0FBQSxTQUNBLENBQUFzcUIsUUFBQSxDQUFBRSxLQUFBLE1BQUFsekIsT0FBQSxDQUFBdUcsSUFBQSxHQUNBLElBQUFBLElBQUEsR0FBQUEsSUFBQSxDQUFBeEUsSUFBQSxFQUNBLE9BQ0EsQ0FDQSxHQUFBd0UsSUFBQSxDQUFBeEUsSUFBQSxZQUNBLE1BQUFILEVBQUEsQ0FBQW5DLENBQUEsQ0FBQTB6QixXQUFBLENBQUE1c0IsSUFBQSxDQUFBdUosSUFBQSxFQUNBLEdBQUFsTyxFQUFBLEVBQ0EzQyxHQUFBLENBQUFzVSxXQUFBLENBQUEzUixFQUFBLEVBQ0FuQyxDQUFBLENBQUEyekIsMkJBQUEsQ0FBQXh4QixFQUFBLFNBQ0EsQ0FDQSxPQUNBLENBQ0EsR0FBQTJFLElBQUEsQ0FBQXhFLElBQUEsY0FDQSxLQUFBbXVCLGVBQUEsQ0FBQTNwQixJQUFBLENBQUF1SixJQUFBLENBQUE3USxHQUFBLEVBQ0EsQ0FDQSxHQUNBLEdBQ0EsTUFBQTR2QixRQUFBLENBQUFwdkIsQ0FBQSxDQUFBaWtCLE1BQUEsQ0FBQWhsQixnQ0FBQSxDQUFBOEIsR0FBQSxDQUFBZixDQUFBLENBQUFoQixlQUFBLEVBQ0FnQixDQUFBLENBQUFpa0IsTUFBQSxDQUFBM2pCLGtCQUFBLENBQUFTLEdBQUEsQ0FBQXF1QixRQUFBLENBQUEvdUIsS0FBQSxFQUNBLEtBQUFzUSx5QkFBQSxDQUFBSSxPQUFBLEVBRUE7QUFDQSxLQUFBNmYsc0JBQUEsQ0FBQTdmLE9BQUEsRUFDQSxLQUFBb2dCLHNCQUFBLENBQUFwZ0IsT0FBQSxFQUNBLE9BQUFBLE9BQUEsQ0FDQSxDQUVBLHFDQUNBSiwwQkFBQWxELFNBQUEsRUFDQSxNQUFBek4sQ0FBQSxNQUFBNEYsT0FBQSxDQUNBLEdBQUE2SCxTQUFBLENBQUF6TSxTQUFBLENBQUFuQyxRQUFBLDhDQUNBLEtBQUE4eEIscUJBQUEsQ0FBQWxqQixTQUFBLEVBQ0EsQ0FDQUEsU0FBQSxDQUFBbFEsZ0JBQUEsdUJBQUFnRCxPQUFBLENBQUF3USxPQUFBLEdBQ0FBLE9BQUEsQ0FBQXhULGdCQUFBLHNCQUFBZ0QsT0FBQSxDQUFBZixHQUFBLEdBQ0EsS0FBQW14QixxQkFBQSxDQUFBbnhCLEdBQUEsRUFDQSxHQUNBLEdBQ0EsQ0FFQSxxQ0FDQW14QixzQkFBQWxqQixTQUFBLEVBQ0EsTUFBQXpOLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxJQUFBNkgsU0FBQSxFQUNBLE9BQ0EsQ0FDQSxNQUFBbW1CLFNBQUEsQ0FBQW5tQixTQUFBLENBQUF6TSxTQUFBLENBQUFuQyxRQUFBLHFCQUNBLE1BQUFnMUIsWUFBQSxDQUFBcG1CLFNBQUEsQ0FBQXpNLFNBQUEsQ0FBQW5DLFFBQUEsNkNBQ0EsSUFBQSswQixTQUFBLEdBQUFDLFlBQUEsRUFDQSxPQUNBLENBQ0E3ekIsQ0FBQSxDQUFBaXpCLGFBQUEsR0FBQXhsQixTQUFBLEVBQ0EsQ0FDQSxFQUVBO0FBQ0E7QUFDQSxJQUNBeFUsRUFBQSxDQUFBNjZCLHFCQUFBLGVBQUE3NkIsRUFBQSxDQUFBcXBCLGVBQUEsQ0FDQUMsS0FBQSxFQUNBLEtBQUEzYyxPQUFBLENBQUFtdUIsYUFBQSxVQUFBQyxTQUFBLEdBQ0EsS0FBQXB1QixPQUFBLENBQUFxdUIsb0JBQUEsRUFBQTc2QixDQUFBLENBQUEyRixJQUFBLFFBQUFtMUIsV0FBQSxDQUFBOTZCLENBQUEsQ0FBQTJGLElBQUEsRUFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FvMUIsK0JBQUE1Z0IsVUFBQSxFQUNBLE1BQUE2Z0IsaUJBQUEsQ0FBQTd2QixNQUFBLENBQUEwTyxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBSSxVQUFBLGtCQUNBLElBQUE2Z0IsaUJBQUEsRUFDQSxPQUFBN2dCLFVBQUEsQ0FDQSxDQUVBLE1BQUE4Z0IsYUFBQSxDQUFBdDdCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQW9CLGNBQUEsQ0FBQWlaLFVBQUEsQ0FBQThnQixhQUFBLFFBQ0E5Z0IsVUFBQSxDQUFBOGdCLGFBQUEsQ0FBQUEsYUFBQSxDQUVBLElBQUFBLGFBQUEsRUFBQWgxQixLQUFBLENBQUE0QixPQUFBLENBQUFzUyxVQUFBLENBQUFxSCxPQUFBLEdBQ0FySCxVQUFBLENBQUFxSCxPQUFBLENBQUFySCxVQUFBLENBQUFxSCxPQUFBLENBQUFyYixHQUFBLENBQUErMEIsYUFBQSxHQUNBLElBQUFBLGFBQUEsU0FBQUEsYUFBQSxhQUNBLE9BQUFBLGFBQUEsQ0FDQSxDQUVBLE9BQUEvdkIsTUFBQSxDQUFBc1gsTUFBQSxDQUNBLEdBQ0F5WSxhQUFBLENBQ0EsQ0FBQTNoQixLQUFBLENBQUFwWixNQUFBLENBQUErNkIsYUFBQSxDQUFBbndCLEtBQUEsVUFBQW13QixhQUFBLENBQUFud0IsS0FBQSxFQUNBLEVBQ0EsR0FDQSxDQUVBLE9BQUFvUCxVQUFBLENBQ0EsQ0FFQSx1QkFDQXlnQixVQUFBLEVBQ0EsTUFBQWgwQixDQUFBLE1BQUE0RixPQUFBLENBQ0EsS0FBQTJ1QixjQUFBLEdBQ0EsS0FBQUMsZ0JBQUEsR0FDQSxNQUFBQyxLQUFBLElBQ0F6MEIsQ0FBQSxDQUFBN0QsZUFBQSxDQUFBb0IsZ0JBQUEsOEJBQUFnRCxPQUFBLEVBQUF3eEIsT0FBQSxDQUFBMkMsVUFBQSxJQUNBLE1BQUFqbkIsU0FBQSxDQUFBc2tCLE9BQUEsQ0FBQWoxQixhQUFBLDhDQUNBLE1BQUFvMUIsT0FBQSxJQUNBLElBQUF6a0IsU0FBQSxFQUNBZ25CLEtBQUEsQ0FBQTVYLElBQUEsRUFBQThYLElBQUEsQ0FBQUQsVUFBQSxHQUFBeEMsT0FBQSxHQUNBLE9BQ0EsQ0FDQXprQixTQUFBLENBQUFsUSxnQkFBQSxlQUFBZ0QsT0FBQSxDQUFBcTBCLEtBQUEsR0FDQSxHQUFBQSxLQUFBLENBQUE1ekIsU0FBQSxDQUFBbkMsUUFBQSx1QkFDQXF6QixPQUFBLENBQUFyVixJQUFBLEVBQUF2YSxJQUFBLFdBQUErTixJQUFBLE1BQUF3a0IsaUJBQUEsQ0FBQUQsS0FBQSxJQUNBLE9BQ0EsQ0FDQSxHQUFBQSxLQUFBLENBQUE1ekIsU0FBQSxDQUFBbkMsUUFBQSxxQkFDQSxHQUFBKzFCLEtBQUEsQ0FBQTV6QixTQUFBLENBQUFuQyxRQUFBLGdCQUNBLE9BQ0EsQ0FDQSxNQUFBaTJCLE1BQUEsTUFBQVgsOEJBQUEsQ0FDQXA3QixJQUFBLENBQUF1WCx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBcWtCLEtBQUEsQ0FDQSxFQUNBO0FBQ0EsNERBQ0FyMEIsT0FBQSxDQUFBbVYsQ0FBQSxHQUNBLEdBQUFBLENBQUEsSUFBQW9mLE1BQUEsUUFBQUEsTUFBQSxDQUFBcGYsQ0FBQSxFQUNBLEdBQ0F3YyxPQUFBLENBQUFyVixJQUFBLEVBQUF2YSxJQUFBLFNBQUErTixJQUFBLENBQUF5a0IsTUFBQSxHQUNBLENBQ0EsR0FDQUwsS0FBQSxDQUFBNVgsSUFBQSxFQUFBOFgsSUFBQSxDQUFBRCxVQUFBLEdBQUF4QyxPQUFBLEdBQ0EsR0FDQSxPQUFBdUMsS0FBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQUksa0JBQUE1UCxVQUFBLEVBQ0EsTUFBQWxrQixHQUFBLENBQUFra0IsVUFBQSxDQUFBbm9CLGFBQUEsNEJBRUE7QUFDQSxJQUFBaTRCLGNBQUEsQ0FDQTlQLFVBQUEsQ0FBQTltQixZQUFBLHNCQUNBOG1CLFVBQUEsQ0FBQXJvQixPQUFBLENBQUFxb0IsVUFBQSxDQUFBcm9CLE9BQUEsQ0FBQXUyQixVQUFBLE1BQ0EsR0FFQSxNQUFBNTJCLElBQUEsRUFDQUMsRUFBQSxDQUFBeW9CLFVBQUEsQ0FBQXJvQixPQUFBLENBQUFKLEVBQUEsQ0FDQTJILEtBQUEsQ0FBQThnQixVQUFBLENBQUFyb0IsT0FBQSxDQUFBdUgsS0FBQSxLQUNBNFEsT0FBQSxDQUFBa1EsVUFBQSxDQUFBcm9CLE9BQUEsQ0FBQW1ZLE9BQUEsS0FDQUssUUFBQSxDQUFBNlAsVUFBQSxDQUFBcm9CLE9BQUEsQ0FBQXdZLFFBQUEsS0FDQStkLFVBQUEsQ0FBQTU1QixNQUFBLENBQUF3N0IsY0FBQTtBQUNBLEVBRUEsSUFBQWgwQixHQUFBLEVBQ0EsT0FBQXdELE1BQUEsQ0FBQXNYLE1BQUEsSUFBQXRmLElBQUEsRUFBQXFVLE9BQUEsTUFDQSxDQUVBLE1BQUFBLE9BQUEsSUFDQTdQLEdBQUEsQ0FBQXhELGdCQUFBLCtCQUFBZ0QsT0FBQSxVQUFBZixHQUFBLEVBQ0EsTUFBQXlKLEtBQUEsQ0FBQXpKLEdBQUEsQ0FBQUMsS0FBQSxDQUFBQyxTQUFBLFNBQ0EsTUFBQSt6QixLQUFBLElBQ0FwMEIsS0FBQSxDQUFBNFQsU0FBQSxDQUFBMVMsT0FBQSxDQUFBNFMsSUFBQSxDQUFBM1QsR0FBQSxDQUFBMFIsUUFBQSxVQUFBMGpCLEtBQUEsRUFDQSxHQUFBQSxLQUFBLENBQUE1ekIsU0FBQSxDQUFBbkMsUUFBQSx1QkFDQTQwQixLQUFBLENBQUE1VyxJQUFBLEVBQUF2YSxJQUFBLFdBQUErTixJQUFBLE1BQUF3a0IsaUJBQUEsQ0FBQUQsS0FBQSxJQUNBLE9BQ0EsQ0FDQSxHQUFBQSxLQUFBLENBQUE1ekIsU0FBQSxDQUFBbkMsUUFBQSxxQkFDQSxHQUFBKzFCLEtBQUEsQ0FBQTV6QixTQUFBLENBQUFuQyxRQUFBLGdCQUNBLE9BQ0EsQ0FDQSxNQUFBaTJCLE1BQUEsTUFBQVgsOEJBQUEsQ0FDQXA3QixJQUFBLENBQUF1WCx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBcWtCLEtBQUEsQ0FDQSxFQUNBLDREQUFBcjBCLE9BQUEsVUFBQW1WLENBQUEsRUFDQSxHQUFBQSxDQUFBLElBQUFvZixNQUFBLEVBQ0EsT0FBQUEsTUFBQSxDQUFBcGYsQ0FBQSxFQUNBLENBQ0EsR0FDQStkLEtBQUEsQ0FBQTVXLElBQUEsRUFBQXZhLElBQUEsU0FBQStOLElBQUEsQ0FBQXlrQixNQUFBLEdBQ0EsQ0FDQSxFQUFBNWtCLElBQUEsUUFDQVUsT0FBQSxDQUFBaU0sSUFBQSxFQUFBNVQsS0FBQSxDQUFBQSxLQUFBLENBQUF3cUIsS0FBQSxDQUFBQSxLQUFBLEdBQ0EsRUFBQXZqQixJQUFBLFFBRUE7QUFDQSxJQUNBLE1BQUE4a0IsUUFBQSxDQUFBcGtCLE9BQUEsQ0FBQXBULE1BQUEsQ0FDQSxNQUFBVSxHQUFBLENBQUEzRSxNQUFBLENBQUF3N0IsY0FBQSxNQUFBbjdCLElBQUEsR0FFQSxHQUFBc0UsR0FBQSxFQUNBLElBQUFtMUIsR0FBQSxJQUNBLElBQ0EsTUFBQTRCLE1BQUEsQ0FBQTM1QixJQUFBLENBQUFDLEtBQUEsQ0FBQTJDLEdBQUEsRUFDQW0xQixHQUFBLENBQUFoMEIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBZzBCLE1BQUEsRUFBQUEsTUFBQSxDQUFBQSxNQUFBLEVBQUE1MUIsS0FBQSxDQUFBNEIsT0FBQSxDQUFBZzBCLE1BQUEsQ0FBQXJrQixPQUFBLEVBQUFxa0IsTUFBQSxDQUFBcmtCLE9BQUEsSUFDQSxPQUFBcUcsRUFBQSxFQUNBb2MsR0FBQSxJQUNBLENBRUEsR0FBQTJCLFFBQUEsS0FDQXo0QixJQUFBLENBQUE0MkIsVUFBQSxNQUNBLE1BQ0EsR0FBQUUsR0FBQSxDQUFBNzFCLE1BQUEsQ0FBQXczQixRQUFBLENBQUEzQixHQUFBLENBQUE3MUIsTUFBQSxDQUFBdzNCLFFBQUEsQ0FDQSxNQUFBM0IsR0FBQSxDQUFBNzFCLE1BQUEsQ0FBQXczQixRQUFBLENBQUEzQixHQUFBLENBQUF4VyxJQUFBLEtBQ0F0Z0IsSUFBQSxDQUFBNDJCLFVBQUEsQ0FBQTczQixJQUFBLENBQUFJLFNBQUEsQ0FBQTIzQixHQUFBLEVBQ0EsQ0FDQSxNQUNBOTJCLElBQUEsQ0FBQTQyQixVQUFBLElBQ0EsQ0FDQSxPQUFBbGMsRUFBQSxFQUNBLENBRUEsT0FBQTFTLE1BQUEsQ0FBQXNYLE1BQUEsSUFBQXRmLElBQUEsRUFBQXFVLE9BQUEsQ0FBQUEsT0FBQSxHQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0EsS0FDQXNqQixZQUFBZ0IsU0FBQSxFQUFBQyxhQUFBLFdBQ0EsTUFBQW4xQixDQUFBLE1BQUE0RixPQUFBLENBQ0EsR0FBQXV2QixhQUFBLE9BQUFDLHVCQUFBLElBQ0E5Z0IsWUFBQSxNQUFBK2dCLFlBQUEsRUFDQSxLQUFBQSxZQUFBLENBQUFqbkIsVUFBQSxNQUNBLEtBQUE4bEIsV0FBQSxDQUFBZ0IsU0FBQSxFQUFBQyxhQUFBLFNBQ0EsT0FDQSxPQUNBLENBQ0FuMUIsQ0FBQSxDQUFBN0QsZUFBQSxDQUFBbVcsU0FBQSxJQUNBdFMsQ0FBQSxDQUFBc3lCLFlBQUEsR0FDQSxDQUFBNEMsU0FBQSxNQUFBMzBCLE9BQUEsQ0FBQSswQixTQUFBLEdBQ0EsTUFBQXZELE9BQUEsQ0FBQS94QixDQUFBLENBQUEwUSxjQUFBLENBQUE4ZixRQUFBLEVBQUFsaEIsTUFBQSxTQUNBLE1BQUEwaUIsaUJBQUEsQ0FBQUQsT0FBQSxDQUFBajFCLGFBQUEsOENBQ0FrMUIsaUJBQUEsQ0FBQTFmLFNBQUEsSUFDQXRTLENBQUEsQ0FBQTJ3QixxQkFBQSxHQUFBcUIsaUJBQUEsRUFDQSxDQUFBc0QsU0FBQSxDQUFBcEQsT0FBQSxNQUFBM3hCLE9BQUEsQ0FBQXVHLElBQUEsR0FDQSxHQUFBQSxJQUFBLENBQUF4RSxJQUFBLGNBQ0E7QUFDQXRDLENBQUEsQ0FBQTBRLGNBQUEsQ0FBQStmLGVBQUEsQ0FBQTNwQixJQUFBLENBQUF1SixJQUFBLENBQUEyaEIsaUJBQUEsRUFDQSxPQUNBLENBQ0EsR0FBQWxyQixJQUFBLENBQUF4RSxJQUFBLFlBQ0EsTUFBQUgsRUFBQSxDQUFBbkMsQ0FBQSxDQUFBMHpCLFdBQUEsQ0FBQTVzQixJQUFBLENBQUF1SixJQUFBLEVBQ0EsR0FBQWxPLEVBQUEsRUFDQTZ2QixpQkFBQSxDQUFBbGUsV0FBQSxDQUFBM1IsRUFBQSxFQUNBbkMsQ0FBQSxDQUFBMnpCLDJCQUFBLENBQUF4eEIsRUFBQSxTQUNBLENBQ0EsQ0FDQSxHQUNBLEdBQ0FuQyxDQUFBLENBQUErQyxLQUFBLEVBQUFELGlCQUFBLEtBQ0E5QyxDQUFBLENBQUFtUSxHQUFBLENBQUFsTCxJQUFBLENBQUFsTSxJQUFBLENBQUF1TCxlQUFBLENBQUFRLGdCQUFBLEVBQUFvd0IsU0FBQSxHQUNBLENBRUFYLGVBQUEsRUFDQSxNQUFBdjBCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQTVGLENBQUEsQ0FBQTdELGVBQUEsQ0FBQW9CLGdCQUFBLGdFQUFBZ0QsT0FBQSxDQUFBNEIsRUFBQSxHQUNBLE1BQUFrTyxJQUFBLENBQUF0WCxJQUFBLENBQUF1WCx3QkFBQSxDQUFBQyx1QkFBQSxDQUFBcE8sRUFBQSxFQUNBLE1BQUFvekIsSUFBQSxDQUFBeDhCLElBQUEsQ0FBQUcsaUJBQUEsQ0FBQVMsZ0JBQUEsQ0FBQTBXLElBQUEsQ0FBQTdULEVBQUEsZUFDQSxNQUFBK2EsSUFBQSxDQUFBdlgsQ0FBQSxDQUFBeEQsRUFBQSxDQUFBSixzQkFBQSxDQUFBbTVCLElBQUEsQ0FBQXB6QixFQUFBLEVBQ0EsR0FBQWtPLElBQUEsQ0FBQTdULEVBQUEsR0FBQSthLElBQUEsRUFDQXBWLEVBQUEsQ0FBQXBFLFlBQUEsV0FBQXdaLElBQUEsRUFDQSxHQUFBdlgsQ0FBQSxDQUFBdXJCLFlBQUEsRUFDQXZyQixDQUFBLENBQUF3ckIsY0FBQSxDQUFBcnBCLEVBQUEsRUFDQSxDQUNBLENBQ0EsR0FDQSxDQUVBcXlCLGlCQUFBLEVBQ0EsTUFBQXgwQixDQUFBLE1BQUE0RixPQUFBLENBQ0E1RixDQUFBLENBQUE3RCxlQUFBLENBQUFvQixnQkFBQSxnRUFBQWdELE9BQUEsQ0FBQTRCLEVBQUEsR0FDQSxNQUFBa08sSUFBQSxDQUFBdFgsSUFBQSxDQUFBdVgsd0JBQUEsQ0FBQUMsdUJBQUEsQ0FBQXBPLEVBQUEsRUFDQSxNQUFBNUYsSUFBQSxDQUFBeEQsSUFBQSxDQUFBRyxpQkFBQSxDQUFBWSxrQkFBQSxDQUFBdVcsSUFBQSxDQUFBalQsSUFBQSxPQUFBaVQsSUFBQSxDQUFBalQsSUFBQSxDQUFBaVQsSUFBQSxDQUFBN1QsRUFBQSxXQUNBLE1BQUErYSxJQUFBLENBQUF2WCxDQUFBLENBQUF4RCxFQUFBLENBQUFXLHdCQUFBLENBQUFaLElBQUEsQ0FBQTRGLEVBQUEsRUFDQSxHQUFBa08sSUFBQSxDQUFBalQsSUFBQSxHQUFBbWEsSUFBQSxFQUNBcFYsRUFBQSxDQUFBcEUsWUFBQSxhQUFBd1osSUFBQSxFQUNBLEdBQUF2WCxDQUFBLENBQUF1ckIsWUFBQSxFQUNBdnJCLENBQUEsQ0FBQXdyQixjQUFBLENBQUFycEIsRUFBQSxFQUNBLENBQ0EsQ0FDQSxHQUNBLENBRUEseUJBQ0FpekIsd0JBQUEsRUFDQSxNQUFBcmQsR0FBQSxDQUFBclosUUFBQSxDQUFBQyxjQUFBLHdCQUNBLFNBQUFvWixHQUFBLEVBQUFyWixRQUFBLENBQUF1dkIsYUFBQSxFQUFBbFcsR0FBQSxDQUFBbFosUUFBQSxDQUFBSCxRQUFBLENBQUF1dkIsYUFBQSxHQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0FoMUIsRUFBQSxDQUFBdThCLHdCQUFBLGVBQUF2OEIsRUFBQSxDQUFBcXBCLGVBQUEsQ0FFQXBtQixZQUFBMEosT0FBQSxFQUNBLE1BQUFBLE9BQUEsRUFDQSxLQUFBNnZCLGFBQUEsTUFBQUEsYUFBQSxDQUFBdmxCLElBQUEsT0FDQSxLQUFBd2xCLGdCQUFBLE1BQUFBLGdCQUFBLENBQUF4bEIsSUFBQSxPQUNBLEtBQUF5bEIsb0JBQUEsTUFBQUEsb0JBQUEsQ0FBQXpsQixJQUFBLE9BQ0EsS0FBQTBsQixvQkFBQSxNQUFBQSxvQkFBQSxDQUFBMWxCLElBQUEsT0FDQSxLQUFBMmxCLGlCQUFBLE1BQUFBLGlCQUFBLENBQUEzbEIsSUFBQSxPQUVBLEtBQUE0bEIsYUFBQSxLQUFBdHZCLEdBQUEsR0FDQSxLQUFBdXZCLFlBQUEsT0FDQSxLQUFBQyxPQUFBLEdBQ0EsQ0FFQXpULEtBQUEsRUFDQSxNQUFBcUksRUFBQSxDQUFBN3hCLElBQUEsQ0FBQXVMLGVBQUEsQ0FDQSxLQUFBc0IsT0FBQSxFQUFBdUssR0FBQSxFQUFBN0ssRUFBQSxHQUFBc2xCLEVBQUEsQ0FBQWptQixTQUFBLE1BQUE4d0IsYUFBQSxFQUNBLEtBQUE3dkIsT0FBQSxFQUFBdUssR0FBQSxFQUFBN0ssRUFBQSxHQUFBc2xCLEVBQUEsQ0FBQWhtQixZQUFBLE1BQUE4d0IsZ0JBQUEsRUFDQSxLQUFBOXZCLE9BQUEsRUFBQXVLLEdBQUEsRUFBQTdLLEVBQUEsR0FBQXNsQixFQUFBLENBQUE5bEIsZ0JBQUEsTUFBQTZ3QixvQkFBQSxFQUNBO0FBQ0EsS0FBQS92QixPQUFBLEVBQUF1SyxHQUFBLEVBQUE3SyxFQUFBLEdBQUFzbEIsRUFBQSxDQUFBL2xCLGdCQUFBLE1BQUErd0Isb0JBQUEsRUFFQXhwQixNQUFBLENBQUE1RyxnQkFBQSxlQUFBcXdCLGlCQUFBLEVBQUFJLE9BQUEsUUFDQSxLQUFBQyxxQkFBQSxHQUNBLENBRUE1a0IsUUFBQSxFQUNBLE1BQUFzWixFQUFBLENBQUE3eEIsSUFBQSxDQUFBdUwsZUFBQSxDQUNBLEtBQUFzQixPQUFBLEVBQUF1SyxHQUFBLEVBQUExSyxHQUFBLEdBQUFtbEIsRUFBQSxDQUFBam1CLFNBQUEsTUFBQTh3QixhQUFBLEVBQ0EsS0FBQTd2QixPQUFBLEVBQUF1SyxHQUFBLEVBQUExSyxHQUFBLEdBQUFtbEIsRUFBQSxDQUFBaG1CLFlBQUEsTUFBQTh3QixnQkFBQSxFQUNBLEtBQUE5dkIsT0FBQSxFQUFBdUssR0FBQSxFQUFBMUssR0FBQSxHQUFBbWxCLEVBQUEsQ0FBQTlsQixnQkFBQSxNQUFBNndCLG9CQUFBLEVBQ0EsS0FBQS92QixPQUFBLEVBQUF1SyxHQUFBLEVBQUExSyxHQUFBLEdBQUFtbEIsRUFBQSxDQUFBL2xCLGdCQUFBLE1BQUErd0Isb0JBQUEsRUFDQXhwQixNQUFBLENBQUExRyxtQkFBQSxlQUFBbXdCLGlCQUFBLEVBQ0EsQ0FFQUosY0FBQTFpQixDQUFBLEVBQ0EsS0FBQW1qQixxQkFBQSxHQUNBO0FBQ0EsQ0FFQVIsaUJBQUEzaUIsQ0FBQSxFQUNBLE1BQUFvakIsTUFBQSxDQUFBcGpCLENBQUEsRUFBQTdOLE1BQUEsRUFBQS9DLEVBQUEsT0FDQSxNQUFBcEIsR0FBQSxDQUFBbzFCLE1BQUEsRUFBQUEsTUFBQSxDQUFBaHNCLE9BQUEsQ0FBQWdzQixNQUFBLENBQUFoc0IsT0FBQSx3QkFDQSxHQUFBcEosR0FBQSxFQUNBLEtBQUFxMUIscUJBQUEsQ0FBQXIxQixHQUFBLEVBQ0EsTUFDQSxLQUFBbTFCLHFCQUFBLEdBQ0EsQ0FDQSxDQUVBUCxxQkFBQSxFQUNBLEtBQUFPLHFCQUFBLEdBQ0EsQ0FFQU4scUJBQUE3aUIsQ0FBQSxFQUNBLE1BQUEzQyxNQUFBLENBQUEyQyxDQUFBLEVBQUE3TixNQUFBLEVBQUFrTCxNQUFBLEtBQ0EsTUFBQWhPLEdBQUEsQ0FBQTJRLENBQUEsRUFBQTdOLE1BQUEsRUFBQTlDLEdBQUEsS0FFQTtBQUNBLEdBQUFnTyxNQUFBLGtCQUFBaE8sR0FBQSxnQkFDQSxPQUNBLENBRUEsTUFBQUQsRUFBQSxDQUFBNFEsQ0FBQSxFQUFBN04sTUFBQSxFQUFBL0MsRUFBQSxPQUNBLE1BQUFwQixHQUFBLENBQUFvQixFQUFBLEVBQUFnSSxPQUFBLDJCQUNBLEdBQUFwSixHQUFBLEVBQ0EsS0FBQXExQixxQkFBQSxDQUFBcjFCLEdBQUEsRUFDQSxNQUNBLEtBQUFtMUIscUJBQUEsR0FDQSxDQUNBLENBRUFMLGtCQUFBLEVBQ0EsS0FBQUsscUJBQUEsR0FDQSxDQUVBRSxzQkFBQWwzQixNQUFBLEVBQ0EsSUFBQUEsTUFBQSxRQUNBLEtBQUE0MkIsYUFBQSxDQUFBdnRCLEdBQUEsQ0FBQXJKLE1BQUEsRUFDQSxLQUFBbTNCLFNBQUEsR0FDQSxDQUVBSCxzQkFBQSxFQUNBLEtBQUFILFlBQUEsTUFDQSxLQUFBRCxhQUFBLENBQUF2a0IsS0FBQSxHQUNBLEtBQUE4a0IsU0FBQSxHQUNBLENBRUFBLFVBQUEsRUFDQSxRQUFBTCxPQUFBLFFBQ0EsS0FBQUEsT0FBQSxFQUFBNXBCLE1BQUEsQ0FBQVcscUJBQUEsRUFBQXFCLFVBQUEsT0FDQSxLQUFBNG5CLE9BQUEsR0FDQSxRQUFBRCxZQUFBLEVBQ0EsS0FBQUEsWUFBQSxPQUNBLEtBQUFPLFdBQUEsR0FDQSxPQUNBLENBQ0EsTUFBQTFjLElBQUEsQ0FBQXZhLEtBQUEsQ0FBQUMsSUFBQSxNQUFBdzJCLGFBQUEsRUFDQSxLQUFBQSxhQUFBLENBQUF2a0IsS0FBQSxHQUNBcUksSUFBQSxDQUFBclosT0FBQSxDQUFBb0MsQ0FBQSxPQUFBNHpCLFdBQUEsQ0FBQTV6QixDQUFBLEdBQ0EsS0FDQSxDQUdBMnpCLFlBQUEsRUFDQSxLQUFBMXdCLE9BQUEsRUFBQXpKLGVBQUEsRUFDQW9CLGdCQUFBLHNCQUNBZ0QsT0FBQSxHQUFBUSxHQUFBLE9BQUF3MUIsV0FBQSxDQUFBeDFCLEdBQUEsR0FDQSxDQUVBdzFCLFlBQUFyM0IsTUFBQSxFQUNBLElBQUFBLE1BQUEsUUFFQSxNQUFBRSxJQUFBLENBQUFGLE1BQUEsQ0FBQTNCLGdCQUFBLCtCQUVBO0FBQ0E2QixJQUFBLENBQUFtQixPQUFBLENBQUFmLEdBQUEsT0FBQWczQixhQUFBLENBQUFoM0IsR0FBQSxHQUVBO0FBQ0FKLElBQUEsQ0FBQW1CLE9BQUEsQ0FBQWYsR0FBQSxHQUNBLE1BQUFpM0IsRUFBQSxDQUFBOTdCLFVBQUEsQ0FBQW1wQixnQkFBQSxDQUFBdGtCLEdBQUEsRUFBQXVJLGdCQUFBLDRCQUNBdkksR0FBQSxDQUFBQyxLQUFBLENBQUFpM0IsUUFBQSxDQUFBRCxFQUFBLEdBQUF4N0IsSUFBQSxDQUFBb0csS0FBQSxDQUFBbzFCLEVBQUEsVUFDQSxHQUVBO0FBQ0EsSUFDQSxNQUFBejJCLENBQUEsTUFBQTRGLE9BQUEsQ0FDQSxNQUFBM0YsRUFBQSxDQUFBRCxDQUFBLENBQUFoQixlQUFBLENBQ0EsTUFBQWdsQixHQUFBLENBQUFoa0IsQ0FBQSxDQUFBaWtCLE1BQUEsQ0FBQWhsQixnQ0FBQSxDQUFBQyxNQUFBLENBQUFlLEVBQUE7QUFDQTtBQUNBLE1BQUFpbEIsTUFBQSxDQUFBanNCLEVBQUEsQ0FBQTJxQixxQkFBQSxDQUFBRywyQkFBQSxDQUFBL2pCLENBQUEsQ0FBQWQsTUFBQSxDQUFBOGtCLEdBQUEsQ0FBQTNqQixLQUFBLEVBQ0EsR0FBQWhCLEtBQUEsQ0FBQTRCLE9BQUEsQ0FBQWlrQixNQUFBLEdBQ0EsTUFBQXdILE9BQUEsQ0FBQXhILE1BQUEsQ0FBQXlILElBQUEsRUFBQWp6QixDQUFBLENBQUE4RyxDQUFBLEdBQUF2RixJQUFBLENBQUEwN0IsR0FBQSxDQUFBajlCLENBQUEsQ0FBQXNxQixHQUFBLENBQUEzakIsS0FBQSxDQUFBRyxDQUFBLFNBQ0EsR0FBQWtzQixPQUFBLEVBQ0Exc0IsQ0FBQSxDQUFBaWtCLE1BQUEsQ0FBQTNqQixrQkFBQSxDQUFBcEIsTUFBQSxDQUFBZ21CLE1BQUEsRUFDQSxDQUNBLENBQ0EsT0FBQW5TLENBQUEsRUFDQWphLENBQUEsQ0FBQWlpQixLQUFBLEVBQUFDLEdBQUEsRUFBQXBmLEtBQUEsNENBQUFtWCxDQUFBLEVBQ0EsQ0FDQSxDQUVBeWpCLGNBQUFJLE1BQUEsRUFDQSxJQUFBQSxNQUFBLFFBQ0EsSUFBQUMsTUFBQSxHQUNBLE1BQUFDLE9BQUEsQ0FBQUYsTUFBQSxDQUFBanZCLHFCQUFBLEdBQ0FpdkIsTUFBQSxDQUFBcjVCLGdCQUFBLDhCQUFBZ0QsT0FBQSxDQUFBb1IsS0FBQSxHQUNBLE1BQUF6VCxHQUFBLENBQUF5VCxLQUFBLENBQUF4VCxZQUFBLG1CQUNBLElBQUFzNEIsRUFBQSxHQUNBLEdBQUF2NEIsR0FBQSxFQUNBLE1BQUE5RSxDQUFBLENBQUFHLE1BQUEsQ0FBQTJFLEdBQUEsRUFBQXRFLElBQUEsR0FBQVEsV0FBQSxHQUNBLEdBQUFoQixDQUFBLENBQUEyOUIsUUFBQSxPQUNBLE1BQUFyOEIsQ0FBQSxDQUFBQyxVQUFBLENBQUF2QixDQUFBLEVBQ0EsR0FBQXdCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEdBQUFvOEIsT0FBQSxDQUFBN3RCLEtBQUEsSUFDQXd0QixFQUFBLENBQUEvN0IsQ0FBQSxLQUFBbzhCLE9BQUEsQ0FBQTd0QixLQUFBLENBQ0EsTUFDQXd0QixFQUFBLEdBQ0EsQ0FDQSxNQUNBQSxFQUFBLE1BQUFPLFlBQUEsQ0FBQTU5QixDQUFBLEVBQ0EsQ0FDQSxNQUNBLE1BQUE2OUIsRUFBQSxDQUFBblQsZ0JBQUEsQ0FBQW5TLEtBQUEsRUFDQThrQixFQUFBLENBQUE5N0IsVUFBQSxDQUFBczhCLEVBQUEsQ0FBQVAsUUFBQSxVQUNBLENBQ0EsR0FBQUQsRUFBQSxDQUFBSSxNQUFBLENBQUFBLE1BQUEsQ0FBQUosRUFBQSxDQUNBLEdBQ0FHLE1BQUEsQ0FBQW4zQixLQUFBLENBQUE2SSxXQUFBLGtCQUFBdXVCLE1BQUEsR0FBQTU3QixJQUFBLENBQUFvRyxLQUFBLENBQUF3MUIsTUFBQSxjQUNBLENBRUFHLGFBQUFya0IsS0FBQSxFQUNBLEdBQUFBLEtBQUEsZ0JBQ0EsTUFBQXZaLENBQUEsQ0FBQUcsTUFBQSxDQUFBb1osS0FBQSxFQUFBL1ksSUFBQSxHQUFBUSxXQUFBLEdBQ0EsR0FBQWhCLENBQUEsZUFDQSxHQUFBQSxDQUFBLENBQUEyOUIsUUFBQSxRQUNBLE1BQUFyOEIsQ0FBQSxDQUFBQyxVQUFBLENBQUF2QixDQUFBLEVBQ0EsT0FBQXdCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsR0FDQSxDQUNBLEdBQUF0QixDQUFBLENBQUEyOUIsUUFBQSxTQUFBMzlCLENBQUEsQ0FBQTI5QixRQUFBLFFBQ0EsTUFBQXI4QixDQUFBLENBQUFDLFVBQUEsQ0FBQXZCLENBQUEsRUFDQSxNQUFBbUQsSUFBQSxDQUFBNUIsVUFBQSxDQUFBbXBCLGdCQUFBLENBQUFwbEIsUUFBQSxDQUFBNk8sZUFBQSxFQUFBMnBCLFFBQUEsTUFDQSxPQUFBdDhCLE1BQUEsQ0FBQUMsUUFBQSxDQUFBSCxDQUFBLEVBQUFBLENBQUEsQ0FBQTZCLElBQUEsR0FDQSxDQUNBLE1BQUE3QixDQUFBLENBQUFDLFVBQUEsQ0FBQXZCLENBQUEsRUFDQSxPQUFBd0IsTUFBQSxDQUFBQyxRQUFBLENBQUFILENBQUEsRUFBQUEsQ0FBQSxHQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQXpCLEVBQUEsQ0FBQWsrQiwwQkFBQSxPQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQUMsc0JBQUFDLE9BQUEsRUFFQSxJQUFBQSxPQUFBLEdBQUFBLE9BQUEsQ0FBQTk1QixnQkFBQSxFQUNBLE9BQ0EsQ0FFQSxJQUFBKzVCLE1BQUEsQ0FBQUQsT0FBQSxDQUFBOTVCLGdCQUFBLDJCQUNBLElBQUErNUIsTUFBQSxDQUFBOTVCLE1BQUEsRUFDQSxPQUNBLENBRUE2QixLQUFBLENBQUE0VCxTQUFBLENBQUExUyxPQUFBLENBQUE0UyxJQUFBLENBQUFta0IsTUFBQSxVQUFBOTFCLEtBQUEsRUFFQTtBQUNBLEdBQUFBLEtBQUEsQ0FBQTJJLE9BQUEsc0JBQ0EsT0FDQSxDQUNBO0FBQ0EsR0FBQTNJLEtBQUEsQ0FBQTZWLFlBQUEsNEJBQ0EsT0FDQSxDQUVBO0FBQ0EsSUFBQWtnQixRQUFBLENBQUEvMUIsS0FBQSxDQUFBckQsWUFBQSxPQUNBLElBQUFvNUIsUUFBQSxFQUNBLElBQUFuMUIsR0FBQSxDQUFBWixLQUFBLENBQUE1RSxPQUFBLEVBQUE0RSxLQUFBLENBQUE1RSxPQUFBLENBQUF3dEIsWUFBQSxDQUFBN3dCLE1BQUEsQ0FBQWlJLEtBQUEsQ0FBQTVFLE9BQUEsQ0FBQXd0QixZQUFBLFFBQ0FtTixRQUFBLENBQUF0K0IsRUFBQSxDQUFBaytCLDBCQUFBLENBQUFLLGtCQUFBLGtCQUFBcDFCLEdBQUEsTUFDQVosS0FBQSxDQUFBekQsWUFBQSxNQUFBdzVCLFFBQUEsRUFDQSxDQUVBO0FBQ0EsSUFBQUUsVUFBQSxDQUFBeCtCLEVBQUEsQ0FBQWsrQiwwQkFBQSxDQUFBTyxrQkFBQSxDQUFBTCxPQUFBLENBQUE3MUIsS0FBQSxDQUFBKzFCLFFBQUEsRUFFQTtBQUNBLElBQUE1akIsT0FBQSxDQUFBalYsUUFBQSxDQUFBOEssYUFBQSxRQUNBbUssT0FBQSxDQUFBbEssU0FBQSxzQ0FFQTtBQUNBakksS0FBQSxDQUFBUixTQUFBLENBQUF1SCxHQUFBLHFCQUNBL0csS0FBQSxDQUFBekQsWUFBQSxrQkFDQXlELEtBQUEsQ0FBQXpELFlBQUEsZ0JBQUF5RCxLQUFBLENBQUFrWSxPQUFBLGlCQUVBLElBQUFpZSxVQUFBLENBQUFqNUIsUUFBQSxDQUFBOEssYUFBQSxVQUNBbXVCLFVBQUEsQ0FBQWx1QixTQUFBLHdCQUNBa3VCLFVBQUEsQ0FBQTU1QixZQUFBLE9BQUF3NUIsUUFBQSxFQUVBLElBQUFLLFVBQUEsQ0FBQWw1QixRQUFBLENBQUE4SyxhQUFBLFVBQ0FvdUIsVUFBQSxDQUFBbnVCLFNBQUEseUJBQ0FtdUIsVUFBQSxDQUFBNzVCLFlBQUEsT0FBQXc1QixRQUFBLEVBQ0FLLFVBQUEsQ0FBQTlqQixXQUFBLENBQUFwVixRQUFBLENBQUFtNUIsY0FBQSxDQUFBSixVQUFBLEdBRUE7QUFDQTtBQUNBLElBQUFLLFFBQUEsQ0FBQTcrQixFQUFBLENBQUFrK0IsMEJBQUEsQ0FBQVkscUJBQUEsQ0FBQXYyQixLQUFBLENBQUFtUyxPQUFBLENBQUE4akIsVUFBQSxFQUVBLElBQUFLLFFBQUEsRUFDQSxJQUFBdDJCLEtBQUEsQ0FBQXlGLFVBQUE7QUFDQTtBQUNBekYsS0FBQSxDQUFBeUYsVUFBQSxDQUFBMEMsWUFBQSxDQUFBZ0ssT0FBQSxDQUFBblMsS0FBQSxFQUNBbVMsT0FBQSxDQUFBRyxXQUFBLENBQUF0UyxLQUFBLEVBQ0FtUyxPQUFBLENBQUFHLFdBQUEsQ0FBQTZqQixVQUFBLEVBQ0Foa0IsT0FBQSxDQUFBRyxXQUFBLENBQUE4akIsVUFBQSxFQUNBLENBRUE7QUFDQXAyQixLQUFBLENBQUFnRSxnQkFBQSxxQkFDQWhFLEtBQUEsQ0FBQXpELFlBQUEsZ0JBQUF5RCxLQUFBLENBQUFrWSxPQUFBLGlCQUNBLEdBQ0EsR0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBOGQsbUJBQUExRyxNQUFBLEVBQ0EsSUFBQXYwQixJQUFBLENBQUFoRCxNQUFBLENBQUF1M0IsTUFBQSxvQkFDQSxJQUFBajBCLEdBQUEsQ0FBQTVCLElBQUEsQ0FBQStCLE1BQUEsR0FBQUMsUUFBQSxLQUFBQyxLQUFBLE1BQ0EsSUFBQVYsRUFBQSxDQUFBRCxJQUFBLENBQUFNLEdBQUEsQ0FDQTtBQUNBLE1BQUE2QixRQUFBLENBQUFDLGNBQUEsQ0FBQW5DLEVBQUEsR0FDQUssR0FBQSxDQUFBNUIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsTUFDQVYsRUFBQSxDQUFBRCxJQUFBLENBQUFNLEdBQUEsQ0FDQSxDQUNBLE9BQUFMLEVBQUEsQ0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxPQUFBazdCLG1CQUFBTCxPQUFBLENBQUE3MUIsS0FBQSxDQUFBKzFCLFFBQUEsRUFDQTtBQUNBLEdBQUFBLFFBQUEsRUFDQSxJQUFBUyxLQUFBLENBQUFYLE9BQUEsQ0FBQXY2QixhQUFBLGVBQUE3RCxFQUFBLENBQUFrK0IsMEJBQUEsQ0FBQWMsVUFBQSxDQUFBVixRQUFBLFFBQ0EsR0FBQVMsS0FBQSxFQUFBQSxLQUFBLENBQUFua0IsV0FBQSxFQUNBLElBQUFvUyxHQUFBLENBQUErUixLQUFBLENBQUFua0IsV0FBQSxDQUFBamEsSUFBQSxHQUNBO0FBQ0FvK0IsS0FBQSxDQUFBL3dCLFVBQUEsRUFBQSt3QixLQUFBLENBQUEvd0IsVUFBQSxDQUFBQyxXQUFBLENBQUE4d0IsS0FBQSxFQUNBLEdBQUEvUixHQUFBLEVBQ0EsT0FBQUEsR0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0EsSUFBQWlTLFVBQUEsQ0FBQTEyQixLQUFBLENBQUEySSxPQUFBLG9CQUNBLEdBQUErdEIsVUFBQSxFQUNBLElBQUFDLEVBQUEsQ0FBQUQsVUFBQSxDQUFBcDdCLGFBQUEsc0JBQ0EsR0FBQXE3QixFQUFBLEVBQUFBLEVBQUEsQ0FBQXRrQixXQUFBLEVBQ0EsSUFBQXVrQixFQUFBLENBQUFELEVBQUEsQ0FBQXRrQixXQUFBLENBQUFqYSxJQUFBLEdBQ0E7QUFDQXUrQixFQUFBLENBQUFseEIsVUFBQSxFQUFBa3hCLEVBQUEsQ0FBQWx4QixVQUFBLENBQUFDLFdBQUEsQ0FBQWl4QixFQUFBLEVBQ0EsR0FBQUMsRUFBQSxFQUNBLE9BQUFBLEVBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FFQTtBQUNBLElBQUFDLElBQUEsQ0FBQTcyQixLQUFBLENBQUFyRCxZQUFBLGVBQ0EsR0FBQWs2QixJQUFBLEVBQ0EsT0FBQUEsSUFBQSxDQUNBLENBQ0EsR0FBQTcyQixLQUFBLENBQUE1RSxPQUFBLEVBQUE0RSxLQUFBLENBQUE1RSxPQUFBLENBQUF1SCxLQUFBLEVBQ0EsT0FBQTVLLE1BQUEsQ0FBQWlJLEtBQUEsQ0FBQTVFLE9BQUEsQ0FBQXVILEtBQUEsRUFDQSxDQUNBLEdBQUEzQyxLQUFBLENBQUE1RSxPQUFBLEVBQUE0RSxLQUFBLENBQUE1RSxPQUFBLENBQUF3dEIsWUFBQSxFQUNBLE9BQUE3d0IsTUFBQSxDQUFBaUksS0FBQSxDQUFBNUUsT0FBQSxDQUFBd3RCLFlBQUEsRUFDQSxDQUNBLEdBQUE1b0IsS0FBQSxDQUFBcEUsSUFBQSxFQUNBLE9BQUE3RCxNQUFBLENBQUFpSSxLQUFBLENBQUFwRSxJQUFBLEVBQ0EsQ0FDQSxlQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQTI2QixzQkFBQXYyQixLQUFBLENBQUFtUyxPQUFBLENBQUE4akIsVUFBQSxFQUNBLElBQUExMkIsR0FBQSxDQUFBUyxLQUFBLENBQUEySSxPQUFBLG9CQUNBLElBQUFtdUIsU0FBQSxDQUFBOTJCLEtBQUEsQ0FBQTBrQixhQUFBLENBRUEsR0FBQW5sQixHQUFBLEVBQUF1M0IsU0FBQSxFQUFBQSxTQUFBLENBQUF0M0IsU0FBQSxDQUFBbkMsUUFBQSx3QkFDQTtBQUNBLE1BQUF5NUIsU0FBQSxDQUFBQyxVQUFBLEVBQ0FELFNBQUEsQ0FBQXB4QixXQUFBLENBQUFveEIsU0FBQSxDQUFBQyxVQUFBLEVBQ0EsQ0FDQXgzQixHQUFBLENBQUFDLFNBQUEsQ0FBQXVILEdBQUEsMkJBRUErdkIsU0FBQSxDQUFBdDNCLFNBQUEsQ0FBQXVILEdBQUEsb0JBQ0ErdkIsU0FBQSxDQUFBeGtCLFdBQUEsQ0FBQXRTLEtBQUEsRUFFQSxJQUFBKzFCLFFBQUEsQ0FBQS8xQixLQUFBLENBQUFyRCxZQUFBLE9BQ0EsSUFBQXE2QixRQUFBLENBQUE5NUIsUUFBQSxDQUFBOEssYUFBQSxVQUNBZ3ZCLFFBQUEsQ0FBQS91QixTQUFBLHdCQUNBK3VCLFFBQUEsQ0FBQXo2QixZQUFBLE9BQUF3NUIsUUFBQSxFQUVBLElBQUFrQixRQUFBLENBQUEvNUIsUUFBQSxDQUFBOEssYUFBQSxVQUNBaXZCLFFBQUEsQ0FBQWh2QixTQUFBLHlCQUNBZ3ZCLFFBQUEsQ0FBQTE2QixZQUFBLE9BQUF3NUIsUUFBQSxFQUNBLEdBQUFFLFVBQUEsRUFDQWdCLFFBQUEsQ0FBQTNrQixXQUFBLENBQUFwVixRQUFBLENBQUFtNUIsY0FBQSxDQUFBSixVQUFBLEdBQ0EsQ0FDQTtBQUNBO0FBQ0E7QUFFQWEsU0FBQSxDQUFBeGtCLFdBQUEsQ0FBQTBrQixRQUFBLEVBQ0FGLFNBQUEsQ0FBQXhrQixXQUFBLENBQUEya0IsUUFBQSxFQUNBLFlBQ0EsQ0FFQTtBQUNBLGFBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsT0FBQVIsV0FBQTcrQixDQUFBLEVBQ0FBLENBQUEsQ0FBQUcsTUFBQSxDQUFBSCxDQUFBLEVBQ0EsR0FBQWdULE1BQUEsQ0FBQS9TLEdBQUEsU0FBQStTLE1BQUEsQ0FBQS9TLEdBQUEsQ0FBQUMsTUFBQSxlQUNBLE9BQUE4UyxNQUFBLENBQUEvUyxHQUFBLENBQUFDLE1BQUEsQ0FBQUYsQ0FBQSxFQUNBLENBQ0EsT0FBQUEsQ0FBQSxDQUFBSSxPQUFBLHFCQUNBLENBQ0EsRUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQVAsRUFBQSxDQUFBeS9CLGlCQUFBLFVBQUFwckIsSUFBQSxFQUNBLElBQUFBLElBQUEsRUFDQSxPQUNBLENBQ0EsSUFDQXJVLEVBQUEsQ0FBQWt2QixvQkFBQSxFQUFBQyxPQUFBLEdBQUE5YSxJQUFBLEVBQ0EsT0FBQXlGLENBQUEsYUFFQSxJQUNBLElBQUE0bEIsQ0FBQSxDQUFBMS9CLEVBQUEsQ0FBQWsrQiwwQkFBQSxDQUNBLEdBQUF3QixDQUFBLFNBQUFBLENBQUEsQ0FBQXZCLHFCQUFBLGVBQ0F1QixDQUFBLENBQUF2QixxQkFBQSxDQUFBOXBCLElBQUEsRUFDQSxDQUNBLE9BQUF5RixDQUFBLEVBQ0FqYSxDQUFBLENBQUFpaUIsS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLDhCQUFBbVgsQ0FBQSxFQUNBLENBRUE7QUFDQSxJQUNBekYsSUFBQSxDQUFBL1AsZ0JBQUEsNENBQUFnRCxPQUFBLFVBQUFxNEIsRUFBQSxFQUNBLEdBQUFBLEVBQUEsQ0FBQUMsa0JBQUEsRUFDQSxPQUNBLENBQ0FELEVBQUEsQ0FBQUMsa0JBQUEsTUFDQUQsRUFBQSxDQUFBNzZCLFlBQUEsZ0JBQUE2NkIsRUFBQSxDQUFBbGYsT0FBQSxpQkFDQTtBQUNBa2YsRUFBQSxDQUFBcHpCLGdCQUFBLGVBQ0FvekIsRUFBQSxDQUFBNzZCLFlBQUEsZ0JBQUE2NkIsRUFBQSxDQUFBbGYsT0FBQSxpQkFDQSxHQUFBdWMsT0FBQSxRQUNBLEdBQ0EsT0FBQWxqQixDQUFBLEVBQ0FqYSxDQUFBLENBQUFpaUIsS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLDRCQUFBbVgsQ0FBQSxFQUNBLENBQ0EsRUFFQTlaLEVBQUEsQ0FBQWd2QixrQkFBQSxDQUFBaHZCLEVBQUEsQ0FBQWd2QixrQkFBQSxhQUNBLElBQUE2USxJQUFBLElBRUEsU0FBQXBrQixTQUFBdFgsSUFBQSxDQUFBQyxRQUFBLENBQUFrbEIsSUFBQSxDQUFBalIsT0FBQSxFQUNBd25CLElBQUEsQ0FBQWpjLElBQUEsRUFBQXpmLElBQUEsQ0FBQUMsUUFBQSxDQUFBa2xCLElBQUEsQ0FBQWpSLE9BQUEsR0FDQSxDQUVBLFNBQUE0VyxLQUFBNWEsSUFBQSxFQUNBLElBQUFBLElBQUEsUUFDQXdyQixJQUFBLENBQUF2NEIsT0FBQSxVQUFBb0MsQ0FBQSxFQUNBMkssSUFBQSxDQUFBL1AsZ0JBQUEsQ0FBQW9GLENBQUEsQ0FBQXRGLFFBQUEsRUFBQWtELE9BQUEsVUFBQTJiLElBQUEsRUFDQUEsSUFBQSxDQUFBNmMsU0FBQSxDQUFBN2MsSUFBQSxDQUFBNmMsU0FBQSxLQUNBLEdBQUE3YyxJQUFBLENBQUE2YyxTQUFBLENBQUFwMkIsQ0FBQSxDQUFBdkYsSUFBQSxTQUNBLElBQ0F1RixDQUFBLENBQUE0ZixJQUFBLEVBQUE1ZixDQUFBLENBQUE0ZixJQUFBLENBQUFyRyxJQUFBLENBQUE1TyxJQUFBLEVBQ0E0TyxJQUFBLENBQUE2YyxTQUFBLENBQUFwMkIsQ0FBQSxDQUFBdkYsSUFBQSxPQUNBLE9BQUE2WixFQUFBLEVBQ0EsQ0FDQSxHQUNBLEdBQ0EsQ0FFQSxTQUFBM0YsUUFBQWhFLElBQUEsRUFDQSxJQUFBQSxJQUFBLFFBQ0F3ckIsSUFBQSxDQUFBdjRCLE9BQUEsVUFBQW9DLENBQUEsRUFDQTJLLElBQUEsQ0FBQS9QLGdCQUFBLENBQUFvRixDQUFBLENBQUF0RixRQUFBLEVBQUFrRCxPQUFBLFVBQUEyYixJQUFBLEVBQ0EsSUFDQXZaLENBQUEsQ0FBQTJPLE9BQUEsRUFBQTNPLENBQUEsQ0FBQTJPLE9BQUEsQ0FBQTRLLElBQUEsQ0FBQTVPLElBQUEsRUFDQSxPQUFBMkosRUFBQSxFQUNBLENBQ0EsR0FBQWlGLElBQUEsQ0FBQTZjLFNBQUEsUUFBQTdjLElBQUEsQ0FBQTZjLFNBQUEsQ0FBQXAyQixDQUFBLENBQUF2RixJQUFBLEVBQ0EsR0FDQSxHQUNBLENBRUEsT0FBQXNYLFFBQUEsQ0FBQXdULElBQUEsQ0FBQTVXLE9BQUEsRUFDQSxJQUVBclksRUFBQSxDQUFBa3ZCLG9CQUFBLEVBQ0FDLFFBQUE5YSxJQUFBLEVBQ0EsSUFBQTByQixNQUFBLEVBQUExckIsSUFBQSxDQUFBMnJCLFFBQUEsTUFBQTNyQixJQUFBLE1BQUE0ckIsTUFBQSxJQUFBaDhCLEtBQUEsQ0FBQWlXLElBQUEsQ0FBQTdGLElBQUEsQ0FBQS9QLGdCQUFBLDZCQUNBeTdCLE1BQUEsQ0FBQXo0QixPQUFBLFVBQUE0NEIsQ0FBQSxFQUNBLElBQUFBLENBQUEsQ0FBQXZaLE9BQUEsR0FBQXVaLENBQUEsQ0FBQXZaLE9BQUEsNEJBQ0EsR0FBQXVaLENBQUEsQ0FBQUMsZ0JBQUEsUUFFQSxJQUFBQyxNQUFBLENBQUFGLENBQUEsQ0FBQXI4QixhQUFBLHFCQUNBLElBQUF3OEIsS0FBQSxDQUFBSCxDQUFBLENBQUFyOEIsYUFBQSxxQkFDQSxJQUFBeThCLElBQUEsQ0FBQUosQ0FBQSxDQUFBcjhCLGFBQUEsb0JBRUEsSUFBQXU4QixNQUFBLEdBQUFDLEtBQUEsUUFFQTtBQUNBLHFCQUFBLzRCLE9BQUEsVUFBQVIsQ0FBQSxFQUNBLElBQUF1NUIsS0FBQSxDQUFBamlCLFlBQUEsQ0FBQXRYLENBQUEsR0FBQXM1QixNQUFBLENBQUFoaUIsWUFBQSxDQUFBdFgsQ0FBQSxHQUNBdTVCLEtBQUEsQ0FBQXY3QixZQUFBLENBQUFnQyxDQUFBLENBQUFzNUIsTUFBQSxDQUFBbDdCLFlBQUEsQ0FBQTRCLENBQUEsR0FDQSxDQUNBLEdBR0EsU0FBQXk1Qix1QkFBQSxFQUNBLEdBQUFMLENBQUEsQ0FBQTloQixZQUFBLCtCQUFBZ2lCLE1BQUEsQ0FBQTFtQixLQUFBLEVBQ0EsSUFBQThtQixpQkFBQSxDQUFBSCxLQUFBLENBQUF2K0IsR0FBQSxNQUNBLEdBQUF1K0IsS0FBQSxDQUFBM21CLEtBQUEsR0FBQThtQixpQkFBQSxFQUNBSCxLQUFBLENBQUEzbUIsS0FBQSxDQUFBOG1CLGlCQUFBLENBQ0EsQ0FDQSxPQUNBLENBQ0EsR0FBQUgsS0FBQSxDQUFBM21CLEtBQUEsR0FBQTBtQixNQUFBLENBQUExbUIsS0FBQSxFQUNBMm1CLEtBQUEsQ0FBQTNtQixLQUFBLENBQUEwbUIsTUFBQSxDQUFBMW1CLEtBQUEsQ0FDQSxDQUNBLENBRUEsU0FBQSttQixlQUFBdjNCLEVBQUEsRUFDQSxJQUFBQSxFQUFBLENBQUFnRCxhQUFBLEtBQUEyWCxLQUFBLFVBQUF6WCxPQUFBLGdCQUFBNFIsRUFBQSxHQUNBLENBQ0EsU0FBQTBpQixnQkFBQXgzQixFQUFBLEVBQ0EsSUFBQUEsRUFBQSxDQUFBZ0QsYUFBQSxLQUFBMlgsS0FBQSxXQUFBelgsT0FBQSxnQkFBQTRSLEVBQUEsR0FDQSxDQUVBO0FBQ0EsSUFBQThULFFBQUEsR0FDQSxJQUFBNk8sV0FBQSxNQUNBLElBQUFDLGNBQUEsT0FDQSxJQUFBQyxhQUFBLEdBRUE7QUFDQSxJQUFBQyxlQUFBLENBQUFoNEIsUUFBQSxDQUFBbzNCLENBQUEsQ0FBQXY4QixPQUFBLENBQUFvOUIsV0FBQSxFQUFBL2dDLEVBQUEsQ0FBQW9uQix3QkFBQSxLQUNBMFosZUFBQSxDQUFBbi9CLE1BQUEsQ0FBQUMsUUFBQSxDQUFBay9CLGVBQUEsRUFBQTkrQixJQUFBLENBQUFELEdBQUEsR0FBQSsrQixlQUFBLE1BRUEsU0FBQUUsc0JBQUEsRUFDQWxQLFFBQUEsR0FFQSxHQUFBNk8sV0FBQSxRQUNBLE9BQ0EsQ0FFQSxJQUFBM04sSUFBQSxDQUFBMXlCLE1BQUEsQ0FBQXFnQyxXQUFBLEVBQ0FBLFdBQUEsTUFFQSxHQUFBUCxNQUFBLENBQUExbUIsS0FBQSxHQUFBc1osSUFBQSxFQUNBb04sTUFBQSxDQUFBMW1CLEtBQUEsQ0FBQXNaLElBQUEsQ0FDQTtBQUNBeU4sY0FBQSxDQUFBTCxNQUFBLEVBQ0EsQ0FFQSxHQUFBUSxjQUFBLEVBQ0FBLGNBQUEsT0FDQUYsZUFBQSxDQUFBTixNQUFBLEVBQ0EsQ0FFQVMsYUFBQSxDQUFBeHRCLElBQUEsQ0FBQUgsR0FBQSxHQUNBLENBRUEsU0FBQSt0Qix5QkFBQXhuQixHQUFBLENBQUF5bkIsV0FBQSxFQUNBUCxXQUFBLENBQUFsbkIsR0FBQSxDQUNBLEdBQUF5bkIsV0FBQSxFQUNBTixjQUFBLE1BQ0EsQ0FFQTtBQUNBLEdBQUFBLGNBQUEsRUFDQSxHQUFBOU8sUUFBQSxFQUNBelcsWUFBQSxDQUFBeVcsUUFBQSxFQUNBQSxRQUFBLEdBQ0EsQ0FDQWtQLHFCQUFBLEdBQ0EsT0FDQSxDQUVBLElBQUE5dEIsR0FBQSxDQUFBRyxJQUFBLENBQUFILEdBQUEsR0FDQSxJQUFBbkksS0FBQSxDQUFBbUksR0FBQSxDQUFBMnRCLGFBQUEsQ0FFQTtBQUNBLEdBQUE5MUIsS0FBQSxFQUFBKzFCLGVBQUEsRUFDQUUscUJBQUEsR0FDQSxPQUNBLENBRUEsR0FBQWxQLFFBQUEsRUFDQSxPQUNBLENBRUFBLFFBQUEsQ0FBQTNjLFVBQUEsQ0FBQTZyQixxQkFBQSxDQUFBaC9CLElBQUEsQ0FBQUQsR0FBQSxHQUFBKytCLGVBQUEsQ0FBQS8xQixLQUFBLEdBQ0EsQ0FFQSxTQUFBbzJCLGdCQUFBLEVBQ0FaLHNCQUFBLEdBQ0EsQ0FFQSxTQUFBYSxpQkFBQSxFQUNBYixzQkFBQSxHQUNBLENBRUEsU0FBQWMsZUFBQSxFQUNBSix3QkFBQSxDQUFBWixLQUFBLENBQUEzbUIsS0FBQSxRQUNBLENBRUEsU0FBQTRuQixnQkFBQSxFQUNBTCx3QkFBQSxDQUFBWixLQUFBLENBQUEzbUIsS0FBQSxPQUNBLENBRUEwbUIsTUFBQSxDQUFBN3pCLGdCQUFBLFNBQUE0MEIsZUFBQSxFQUNBZixNQUFBLENBQUE3ekIsZ0JBQUEsVUFBQTYwQixnQkFBQSxFQUNBZixLQUFBLENBQUE5ekIsZ0JBQUEsU0FBQTgwQixjQUFBLEVBQ0FoQixLQUFBLENBQUE5ekIsZ0JBQUEsVUFBQSswQixlQUFBLEVBRUEsR0FBQWhCLElBQUEsRUFDQUEsSUFBQSxDQUFBL3pCLGdCQUFBLHFCQUNBO0FBQ0EsSUFDQTZ6QixNQUFBLENBQUFsMEIsYUFBQSxLQUFBMlgsS0FBQSxVQUFBelgsT0FBQSxTQUNBLE9BQUE0UixFQUFBLEVBQ0EsQ0FDQSxHQUNBLENBRUE7QUFDQXVpQixzQkFBQSxHQUVBTCxDQUFBLENBQUFDLGdCQUFBLEVBQ0E5bkIsUUFBQSxFQUNBK25CLE1BQUEsQ0FBQTN6QixtQkFBQSxTQUFBMDBCLGVBQUEsRUFDQWYsTUFBQSxDQUFBM3pCLG1CQUFBLFVBQUEyMEIsZ0JBQUEsRUFDQWYsS0FBQSxDQUFBNXpCLG1CQUFBLFNBQUE0MEIsY0FBQSxFQUNBaEIsS0FBQSxDQUFBNXpCLG1CQUFBLFVBQUE2MEIsZUFBQSxFQUNBLENBQ0EsRUFDQSxHQUNBLEVBQ0FDLFdBQUFsdEIsSUFBQSxFQUNBLElBQUEwckIsTUFBQSxFQUFBMXJCLElBQUEsRUFBQUEsSUFBQSxDQUFBMnJCLFFBQUEsTUFBQTNyQixJQUFBLE1BQUE0ckIsTUFBQSxDQUNBLEdBQUFoOEIsS0FBQSxDQUFBaVcsSUFBQSxDQUFBN0YsSUFBQSxDQUFBL1AsZ0JBQUEsMkJBQ0EsRUFDQXk3QixNQUFBLENBQUF6NEIsT0FBQSxVQUFBNDRCLENBQUEsRUFDQSxJQUFBQSxDQUFBLENBQUF2WixPQUFBLEdBQUF1WixDQUFBLENBQUF2WixPQUFBLDRCQUNBLElBQ0F1WixDQUFBLENBQUFDLGdCQUFBLEVBQUFELENBQUEsQ0FBQUMsZ0JBQUEsQ0FBQTluQixPQUFBLEVBQUE2bkIsQ0FBQSxDQUFBQyxnQkFBQSxDQUFBOW5CLE9BQUEsR0FDQSxPQUFBMkYsRUFBQSxFQUNBLENBQ0EsT0FBQWtpQixDQUFBLENBQUFDLGdCQUFBLENBQ0EsR0FDQSxDQUNBLEVBRUE7QUFDQW5nQyxFQUFBLENBQUFndkIsa0JBQUEsRUFBQWh2QixFQUFBLENBQUFndkIsa0JBQUEsQ0FBQXZULFFBQUEsQ0FDQSxlQUNBLG1CQUNBLFNBQUF2UyxFQUFBLENBQUFzNEIsS0FBQSxFQUNBeGhDLEVBQUEsQ0FBQWt2QixvQkFBQSxDQUFBQyxPQUFBLENBQUFqbUIsRUFBQSxFQUNBLEVBQ0EsU0FBQUEsRUFBQSxDQUFBczRCLEtBQUEsRUFDQXhoQyxFQUFBLENBQUFrdkIsb0JBQUEsQ0FBQXFTLFVBQUEsQ0FBQXI0QixFQUFBLEVBQ0EsQ0FDQSxFQUVBO0FBQ0EsVUFBQXU0Qix3QkFBQSxFQUNBLFNBQUFDLFdBQUEsRUFDQSxJQUFBQyxTQUFBLENBQUE5aEMsQ0FBQSxDQUFBaXdCLGtCQUFBLENBQ0EsSUFBQTZSLFNBQUEsRUFBQUEsU0FBQSxDQUFBQyx3QkFBQSxjQUNBRCxTQUFBLENBQUFDLHdCQUFBLE1BQ0EsSUFBQUMsSUFBQSxDQUFBRixTQUFBLENBQUEzbkIsU0FBQSxDQUFBK1UsYUFBQSxDQUNBNFMsU0FBQSxDQUFBM25CLFNBQUEsQ0FBQStVLGFBQUEsVUFBQTdsQixFQUFBLEVBQ0EyNEIsSUFBQSxDQUFBM25CLElBQUEsTUFBQWhSLEVBQUEsRUFDQSxJQUNBLElBQUE0VixHQUFBLE1BQUF5QixLQUFBLEVBQ0E5YSxRQUFBLENBQUFDLGNBQUEseUJBQ0FELFFBQUEsQ0FBQTVCLGFBQUEseUJBQ0E3RCxFQUFBLENBQUFndkIsa0JBQUEsRUFBQWh2QixFQUFBLENBQUFndkIsa0JBQUEsQ0FBQUMsSUFBQSxDQUFBblEsR0FBQSxFQUNBLE9BQUFkLEVBQUEsRUFDQSxDQUNBLEVBQ0E7QUFDQSxJQUNBLElBQUE4akIsS0FBQSxDQUFBcjhCLFFBQUEsQ0FBQUMsY0FBQSx5QkFDQUQsUUFBQSxDQUFBNUIsYUFBQSx5QkFDQTdELEVBQUEsQ0FBQWd2QixrQkFBQSxFQUFBaHZCLEVBQUEsQ0FBQWd2QixrQkFBQSxDQUFBQyxJQUFBLENBQUE2UyxLQUFBLEVBQ0EsT0FBQTlqQixFQUFBLEVBQ0EsQ0FDQSxZQUNBLENBRUE7QUFDQSxJQUFBMGpCLFVBQUEsSUFDQWo4QixRQUFBLENBQUE4RyxnQkFBQSxDQUNBLDJCQUNBLFdBQ0FtMUIsVUFBQSxHQUNBLEVBQ0EsQ0FBQUssSUFBQSxNQUNBLEVBQ0EsQ0FDQSxLQUVBLEdBQUE1dUIsTUFBQSxDQUFBMU4sUUFBQSxFQzczRkE7QUFDQTtBQUNBO0FBQ0EsVUFBQTVGLENBQUEsQ0FBQXljLENBQUEsRUFDQSxhQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQSxTQUFBMGxCLDhCQUFBM1gsUUFBQSxDQUFBQyxNQUFBLEVBRUEsSUFBQTJYLFlBQUEsQ0FFQSxJQUFBNVgsUUFBQSxHQUFBQyxNQUFBLEVBQ0EsT0FDQSxDQUVBMlgsWUFBQSxFQUNBNVgsUUFBQSxDQUFBQSxRQUFBLENBQ0FDLE1BQUEsQ0FBQUEsTUFDQSxFQUVBLFVBQUF6cUIsQ0FBQSxDQUFBdXFCLDZCQUFBLGVBQ0F2cUIsQ0FBQSxDQUFBdXFCLDZCQUFBLHVCQUFBNlgsWUFBQSxFQUNBLE9BQ0EsQ0FFQTNsQixDQUFBLENBQUFwUSxhQUFBLENBQ0EsSUFBQUMsV0FBQSxDQUNBLHNCQUNBLENBQ0FGLE1BQUEsQ0FBQWcyQixZQUNBLENBQ0EsQ0FDQSxFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFDQSxNQUFBQywyQkFBQSxDQUVBai9CLFlBQUEsRUFDQSxLQUFBay9CLFlBQUEsTUFDQSxLQUFBQyxpQkFBQSxNQUNBLEtBQUFDLGNBQUEsTUFDQSxLQUFBQyxpQkFBQSxNQUNBLEtBQUFDLFNBQUEsSUFDQSxLQUFBQyxrQkFBQSxNQUFBQSxrQkFBQSxDQUFBdnJCLElBQUEsT0FDQSxLQUFBd3JCLFlBQUEsTUFBQUEsWUFBQSxDQUFBeHJCLElBQUEsT0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXFTLEtBQUEsRUFDQSxLQUFBNlksWUFBQSxDQUFBN2xCLENBQUEsQ0FBQTVXLGNBQUEsaUNBQ0EsS0FBQTA4QixpQkFBQSxDQUFBOWxCLENBQUEsQ0FBQXpZLGFBQUEsaURBQ0EsS0FBQXcrQixjQUFBLENBQUEvbEIsQ0FBQSxDQUFBNVcsY0FBQSx1Q0FFQSxTQUFBMDhCLGlCQUFBLFFBQUFDLGNBQUEsRUFDQSxPQUNBLENBRUE7QUFDQSxRQUFBRixZQUFBLEVBQ0EsS0FBQUcsaUJBQUEsS0FBQUksZ0JBQUEsTUFBQUYsa0JBQUEsRUFDQSxLQUFBRixpQkFBQSxDQUFBSyxPQUFBLENBQ0EsS0FBQVIsWUFBQSxDQUNBLENBQ0F4b0IsVUFBQSxNQUNBaXBCLGVBQUEsb0JBQ0EsQ0FDQSxFQUNBLENBRUE7QUFDQXRtQixDQUFBLENBQUEvUCxnQkFBQSxjQUFBazJCLFlBQUEsT0FFQTtBQUNBLEtBQUFELGtCQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBSyxzQkFBQSxFQUNBLElBQUFDLGFBQUEsSUFDQSxJQUFBQyxXQUFBLE1BQ0EsSUFBQVYsY0FBQSxNQUNBLElBQUFXLGFBQUEsTUFFQSxRQUFBYixZQUFBLEVBQ0FXLGFBQUEsQ0FBQXhpQyxNQUFBLE1BQUE2aEMsWUFBQSxDQUFBajlCLFlBQUEseUJBQUF2RSxJQUFBLEdBQ0EsUUFBQW1pQyxhQUFBLEVBQ0EsT0FBQUEsYUFBQSxDQUNBLENBRUFDLFdBQUEsTUFBQVosWUFBQSxDQUFBdCtCLGFBQUEsMkRBQ0EsR0FBQWsvQixXQUFBLEVBQ0FELGFBQUEsQ0FBQXhpQyxNQUFBLENBQUF5aUMsV0FBQSxDQUFBNzlCLFlBQUEsMkJBQUF2RSxJQUFBLEdBQ0EsUUFBQW1pQyxhQUFBLEVBQ0EsT0FBQUEsYUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUVBO0FBQ0FULGNBQUEsQ0FBQS9sQixDQUFBLENBQUF6WSxhQUFBLDZDQUNBbS9CLGFBQUEsQ0FBQTFtQixDQUFBLENBQUF6WSxhQUFBLDRDQUVBLFFBQUFvL0Isa0JBQUEsQ0FBQVosY0FBQSxHQUNBLHFCQUNBLENBQ0EsUUFBQVksa0JBQUEsQ0FBQUQsYUFBQSxHQUNBLG9CQUNBLENBRUEsU0FDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLG1CQUFBLzVCLEVBQUEsRUFDQSxJQUFBMUMsS0FBQSxDQUVBLElBQUEwQyxFQUFBLEVBQ0EsYUFDQSxDQUVBMUMsS0FBQSxDQUFBM0csQ0FBQSxDQUFBZ3JCLGdCQUFBLENBQUEzaEIsRUFBQSxFQUVBLElBQUExQyxLQUFBLEVBQ0EsYUFDQSxDQUVBLFlBQUFBLEtBQUEsQ0FBQXNhLE9BQUEsRUFDQSxhQUNBLENBRUEsY0FBQXRhLEtBQUEsQ0FBQTA4QixVQUFBLEVBQ0EsYUFDQSxDQUVBLFlBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FDLHdCQUFBLEVBQ0EsNEJBQUFOLHFCQUFBLEdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FPLHdCQUFBLEVBQ0EsS0FBQWhCLGlCQUFBLENBQUEvOEIsZUFBQSxXQUNBLEtBQUErOEIsaUJBQUEsQ0FBQXQ5QixZQUFBLHdCQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBdStCLHdCQUFBLEVBQ0EsS0FBQWpCLGlCQUFBLENBQUF0OUIsWUFBQSxrQkFDQSxLQUFBczlCLGlCQUFBLENBQUF0OUIsWUFBQSx1QkFDQSxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQXcrQiwrQkFBQSxFQUNBLGNBQUFqQixjQUFBLFFBQUFBLGNBQUEsQ0FBQWprQixZQUFBLFlBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0FtbEIsMEJBQUEsRUFDQXZCLDZCQUFBLGlFQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBd0IsMEJBQUEsRUFDQXhCLDZCQUFBLGlEQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBUSxtQkFBQSxFQUNBLElBQUFpQixnQkFBQSxNQUFBTix1QkFBQSxHQUVBLEdBQUFNLGdCQUFBLEVBQ0EsS0FBQUwsdUJBQUEsR0FFQSxxQkFBQWIsU0FBQSxFQUNBLEtBQUFnQix5QkFBQSxHQUNBLENBRUEsS0FBQWhCLFNBQUEsWUFDQSxPQUNBLENBRUEsUUFBQWUsOEJBQUEsSUFDQSxLQUFBRSx5QkFBQSxHQUNBLENBRUEsS0FBQUgsdUJBQUEsR0FDQSxLQUFBZCxTQUFBLFdBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBRSxhQUFBaUIsS0FBQSxFQUNBLElBQUF2ZCxNQUFBLENBQUF1ZCxLQUFBLENBQUF2ZCxNQUFBLENBQUFqVixPQUFBLHdCQUNBLElBQUF5eUIsUUFBQSxNQUVBLElBQUF4ZCxNQUFBLEVBQ0EsT0FDQSxDQUVBaFIsVUFBQSxDQUNBLFdBQ0F3dUIsUUFBQSxDQUFBbkIsa0JBQUEsR0FDQSxFQUNBLENBQ0EsRUFDQSxDQUNBLENBRUEsR0FBQWxtQixDQUFBLENBQUFzbkIsVUFBQSxjQUNBdG5CLENBQUEsQ0FBQS9QLGdCQUFBLENBQ0EsbUJBQ0EsV0FDQSxJQUFBMjFCLDJCQUFBLEdBQUE1WSxJQUFBLEdBQ0EsQ0FDQSxFQUNBLE1BQ0EsSUFBQTRZLDJCQUFBLEdBQUE1WSxJQUFBLEdBQ0EsQ0FFQSxHQUFBblcsTUFBQSxDQUFBMU4sUUFBQSxFQ2hTQTtBQUNBO0FBQ0E7QUFDQSxVQUFBNUYsQ0FBQSxFQUNBLGFBRUE7QUFFQSxvRUFDQSxNQUFBZ2tDLHlCQUFBLENBQUF2NEIsTUFBQSxDQUFBOEosTUFBQSxPQUVBO0FBQ0F5dUIseUJBQUEsZUFBQWwzQixPQUFBLEtBQ0FBLE9BQUEsRUFBQWlMLFlBQUEsU0FDQSxFQUVBaXNCLHlCQUFBLGVBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxLQUNBLElBQUFBLEVBQUEsR0FBQXpELFFBQUEsQ0FBQTRpQixJQUFBLENBQUF6aUIsUUFBQSxDQUFBc0QsRUFBQSxTQUNBeUQsT0FBQSxFQUFBaUwsWUFBQSxHQUFBMU8sRUFBQSxFQUFBaWhCLGNBQUEsUUFDQWpoQixFQUFBLENBQUFuQixTQUFBLENBQUF1SCxHQUFBLDJCQUNBNkYsVUFBQSxLQUFBak0sRUFBQSxDQUFBbkIsU0FBQSxDQUFBK0YsTUFBQSxnQ0FDQSxFQUVBKzFCLHlCQUFBLGNBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxLQUNBLElBQUFBLEVBQUEsUUFDQXlELE9BQUEsRUFBQW9vQixTQUFBLEdBQUE3ckIsRUFBQSxPQUNBO0FBQ0E0SyxxQkFBQSxLQUFBK3ZCLHlCQUFBLGNBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxJQUNBLEVBRUEyNkIseUJBQUEsZ0JBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxLQUNBLElBQUFBLEVBQUEsUUFDQXlELE9BQUEsRUFBQW9vQixTQUFBLEdBQUE3ckIsRUFBQSxTQUNBO0FBQ0E0SyxxQkFBQSxLQUFBK3ZCLHlCQUFBLGNBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxJQUNBLEVBRUEyNkIseUJBQUEsYUFBQWwzQixPQUFBLENBQUF6RCxFQUFBLENBQUE0NkIsT0FBQSxDQUFBamtDLENBQUEsQ0FBQWlrQyxPQUFBLEtBQ0EsSUFBQTU2QixFQUFBLFFBQ0EsTUFBQTY2QixRQUFBLENBQUE3NkIsRUFBQSxDQUFBbkIsU0FBQSxDQUFBbkMsUUFBQSxvQkFDQSxNQUFBc0YsS0FBQSxDQUFBNjRCLFFBQUEsQ0FDQTc2QixFQUFBLENBQUFyRixhQUFBLDRCQUFBK1csV0FBQSxFQUFBMVIsRUFBQSxDQUFBdkYsT0FBQSxFQUFBSixFQUFBLFVBQ0EyRixFQUFBLENBQUF2RixPQUFBLEVBQUFKLEVBQUEsWUFFQXZELEVBQUEsQ0FBQWdrQyxvQkFBQSxDQUFBQyxJQUFBLENBQUEvNEIsS0FBQSxNQUNBO0FBQ0F5QixPQUFBLEVBQUE4Z0IsV0FBQSxHQUFBdmtCLEVBQUEsRUFDQSxHQUVBLEVBRUEyNkIseUJBQUEsZ0JBQUFsM0IsT0FBQSxDQUFBekQsRUFBQSxLQUNBLElBQUFBLEVBQUEsUUFDQSxNQUFBZ3dCLEtBQUEsQ0FBQXZzQixPQUFBLEVBQUF1M0IsY0FBQSxHQUFBaDdCLEVBQUEsRUFDQSxHQUFBZ3dCLEtBQUEsQ0FBQXZzQixPQUFBLEVBQUFpTCxZQUFBLEdBQUFzaEIsS0FBQSxFQUFBL08sY0FBQSxRQUNBLEVBRUE7QUFDQXRxQixDQUFBLENBQUFza0MsMEJBQUEsRUFDQUMsSUFBQWpnQyxJQUFBLENBQUErWSxHQUFBLEVBQ0EsTUFBQWxDLEVBQUEsQ0FBQTZvQix5QkFBQSxDQUFBMS9CLElBQUEsRUFDQSxVQUFBNlcsRUFBQSxjQUFBQSxFQUFBLENBQUFrQyxHQUFBLE1BQ0EsQ0FBQXhhLE9BQUEsQ0FBQTJoQyxJQUFBLHFDQUFBbGdDLElBQUEsRUFDQSxFQUNBc1gsU0FBQXRYLElBQUEsQ0FBQW1JLE9BQUEsRUFDQSxJQUFBbkksSUFBQSxTQUFBbUksT0FBQSxlQUNBLFVBQUFnNEIsS0FBQSwrQ0FDQSxDQUNBVCx5QkFBQSxDQUFBMS9CLElBQUEsRUFBQW1JLE9BQUEsQ0FDQSxFQUNBZ25CLElBQUFudkIsSUFBQSxFQUNBLGNBQUEwL0IseUJBQUEsQ0FBQTEvQixJQUFBLGVBQ0EsQ0FDQSxFQUVBO0FBRUEsSUFBQW5FLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsS0FFQTtBQUNBSCxDQUFBLENBQUEwa0MsZ0NBQUEsQ0FBQTFrQyxDQUFBLENBQUEwa0MsZ0NBQUEsS0FDQTFrQyxDQUFBLENBQUEya0MscUNBQUEsQ0FBQTNrQyxDQUFBLENBQUEya0MscUNBQUEsS0FFQTtBQUNBO0FBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQXQ3QixHQUFBZ1EsR0FBQSxDQUFBdXJCLEtBQUEsQ0FBQXhzQixRQUFBLEVBQ0EsSUFBQWdMLElBQUEsQ0FBQXhkLFFBQUEsQ0FBQThLLGFBQUEsQ0FBQTJJLEdBQUEsRUFDQSxHQUFBdXJCLEtBQUEsRUFDQW41QixNQUFBLENBQUFvNUIsSUFBQSxDQUFBRCxLQUFBLEVBQUFuOUIsT0FBQSxVQUFBbVYsQ0FBQSxFQUNBLElBQUFoYyxDQUFBLENBQUFna0MsS0FBQSxDQUFBaG9CLENBQUEsRUFDQSxHQUFBaGMsQ0FBQSxjQUNBLEdBQUFnYyxDQUFBLFlBQ0F3RyxJQUFBLENBQUF6UyxTQUFBLENBQUEvUCxDQUFBLENBQ0EsT0FDQSxDQUNBLEdBQUFnYyxDQUFBLGNBQ0FuUixNQUFBLENBQUFvNUIsSUFBQSxDQUFBamtDLENBQUEsRUFBQTZHLE9BQUEsVUFBQXE5QixFQUFBLEVBQ0ExaEIsSUFBQSxDQUFBdGYsT0FBQSxDQUFBZ2hDLEVBQUEsRUFBQXJrQyxNQUFBLENBQUFHLENBQUEsQ0FBQWtrQyxFQUFBLEdBQ0EsR0FDQSxPQUNBLENBQ0EsR0FBQWxvQixDQUFBLHFCQUFBaGMsQ0FBQSxjQUNBLEdBQUFBLENBQUEsQ0FBQXdpQixJQUFBLENBQUFuZSxZQUFBLHNCQUNBLE9BQ0EsQ0FDQSxHQUFBMlgsQ0FBQSxzQkFBQWhjLENBQUEsY0FDQSxHQUFBQSxDQUFBLENBQUF3aUIsSUFBQSxDQUFBbmUsWUFBQSx3QkFDQSxPQUNBLENBQ0E7QUFDQSxVQUFBckUsQ0FBQSxjQUNBd2lCLElBQUEsQ0FBQW5lLFlBQUEsQ0FBQTJYLENBQUEsQ0FBQWhjLENBQUEsaUJBQ0EsT0FDQSxDQUNBd2lCLElBQUEsQ0FBQW5lLFlBQUEsQ0FBQTJYLENBQUEsQ0FBQW5jLE1BQUEsQ0FBQUcsQ0FBQSxHQUNBLEdBQ0EsQ0FDQSxHQUFBd1gsUUFBQSxFQUNBLENBQUE3UixLQUFBLENBQUE0QixPQUFBLENBQUFpUSxRQUFBLEVBQUFBLFFBQUEsRUFBQUEsUUFBQSxHQUFBM1EsT0FBQSxVQUFBMGhCLENBQUEsRUFDQSxHQUFBQSxDQUFBLGNBQ0EvRixJQUFBLENBQUFwSSxXQUFBLFFBQUFtTyxDQUFBLFlBQUF2akIsUUFBQSxDQUFBbTVCLGNBQUEsQ0FBQTVWLENBQUEsRUFBQUEsQ0FBQSxFQUNBLEdBQ0EsQ0FDQSxPQUFBL0YsSUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQ0EsU0FBQTJoQixpQkFBQXRHLFFBQUEsQ0FBQW4xQixHQUFBLENBQUFzWCxPQUFBLENBQUErZCxVQUFBLEVBRUEsSUFBQXY0QixNQUFBLENBQUFpRCxFQUFBLDBEQUNBLElBQUFtMkIsU0FBQSxDQUFBbjJCLEVBQUEsdURBRUEsSUFBQTI3QixRQUFBLENBQUEzN0IsRUFBQSxVQUNBM0YsRUFBQSxDQUFBKzZCLFFBQUEsQ0FDQWoxQixJQUFBLFlBQ0EscUJBQUFGLEdBQUEsQ0FDQSwyQkFDQXNYLE9BQUEsR0FBQUEsT0FBQSxDQUNBdk0sSUFBQSxVQUNBLGlCQUFBdU0sT0FDQSxHQUNBLElBQUE4ZSxRQUFBLENBQUFyMkIsRUFBQSwrQ0FBQW8xQixRQUFBLEdBQ0EsSUFBQWtCLFFBQUEsQ0FBQXQyQixFQUFBLGdEQUFBbzFCLFFBQUEsRUFBQUUsVUFBQSxNQUVBYSxTQUFBLENBQUF4a0IsV0FBQSxDQUFBZ3FCLFFBQUEsRUFDQXhGLFNBQUEsQ0FBQXhrQixXQUFBLENBQUEwa0IsUUFBQSxFQUNBRixTQUFBLENBQUF4a0IsV0FBQSxDQUFBMmtCLFFBQUEsRUFFQXY1QixNQUFBLENBQUE0VSxXQUFBLENBQUF3a0IsU0FBQSxFQUNBLE9BQUFwNUIsTUFBQSxDQUNBLENBRUE7QUFDQTtBQUNBLElBQ0EsU0FBQTYrQixrQkFBQTM3QixHQUFBLENBQUFpTyxJQUFBLENBQUEydEIsWUFBQSxFQUNBLEdBQUEzdEIsSUFBQSxFQUFBOUwsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQTlDLElBQUEsQ0FBQWpPLEdBQUEsU0FBQWlPLElBQUEsQ0FBQWpPLEdBQUEsRUFDQSxJQUFBb1UsSUFBQSxDQUFBd25CLFlBQUEsRUFBQUEsWUFBQSxDQUFBNTdCLEdBQUEsRUFDQSxPQUFBb1UsSUFBQSxFQUFBalMsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQXFELElBQUEsWUFBQUEsSUFBQSxDQUFBMlQsT0FBQSxJQUNBLENBRUE7QUFDQTtBQUNBLElBR0EsU0FBQThULGVBQUF0ckIsS0FBQSxDQUFBclEsSUFBQSxFQUNBLE9BQUFBLElBQUEsRUFDQSxhQUNBLFVBQ0EsWUFDQSxHQUFBcVEsS0FBQSxPQUFBQSxLQUFBLFFBQ0EsU0FDQSxDQUNBLElBQUFqWSxDQUFBLENBQUFFLE1BQUEsQ0FBQStYLEtBQUEsRUFDQSxPQUFBdXJCLEtBQUEsQ0FBQXhqQyxDQUFBLEtBQUFBLENBQUEsQ0FDQSxjQUNBLFFBQUFpWSxLQUFBLENBQ0EsWUFDQSxPQUFBdFQsS0FBQSxDQUFBNEIsT0FBQSxDQUFBMFIsS0FBQSxFQUFBQSxLQUFBLElBQ0EsUUFDQSxPQUFBQSxLQUFBLFVBQUFwWixNQUFBLENBQUFvWixLQUFBLEVBQ0EsQ0FDQSxDQUVBO0FBQ0E7QUFDQSxJQUNBLFNBQUF3ckIseUJBQUF2akIsT0FBQSxFQUNBLEdBQUF2YixLQUFBLENBQUE0QixPQUFBLENBQUEyWixPQUFBLEdBQ0EsT0FBQUEsT0FBQSxDQUFBcmIsR0FBQSxVQUFBNGIsQ0FBQSxFQUNBLFVBQUFBLENBQUEsYUFBQUEsQ0FBQSxZQUFBQSxDQUFBLEVBQ0EsT0FBQXhJLEtBQUEsQ0FBQXBaLE1BQUEsQ0FBQTRoQixDQUFBLENBQUF4SSxLQUFBLEVBQUF4TyxLQUFBLENBQUE1SyxNQUFBLENBQUE0aEIsQ0FBQSxDQUFBaFgsS0FBQSxFQUFBZ1gsQ0FBQSxDQUFBeEksS0FBQSxHQUNBLENBQ0EsT0FBQUEsS0FBQSxDQUFBcFosTUFBQSxDQUFBNGhCLENBQUEsRUFBQWhYLEtBQUEsQ0FBQTVLLE1BQUEsQ0FBQTRoQixDQUFBLEdBQ0EsR0FDQSxDQUNBLEdBQUFQLE9BQUEsU0FBQUEsT0FBQSxhQUNBLE9BQUFyVyxNQUFBLENBQUFvNUIsSUFBQSxDQUFBL2lCLE9BQUEsRUFBQXJiLEdBQUEsVUFBQW1XLENBQUEsRUFDQSxPQUFBL0MsS0FBQSxDQUFBcFosTUFBQSxDQUFBbWMsQ0FBQSxFQUFBdlIsS0FBQSxDQUFBNUssTUFBQSxDQUFBcWhCLE9BQUEsQ0FBQWxGLENBQUEsSUFDQSxHQUNBLENBQ0EsU0FDQSxDQUVBLG1GQUNBLFNBQUEwb0IsVUFBQXpyQixLQUFBLENBQUEwckIsYUFBQSxFQUNBMXJCLEtBQUEsQ0FBQUEsS0FBQSxVQUFBcFosTUFBQSxDQUFBb1osS0FBQSxFQUFBL1ksSUFBQSxHQUNBLElBQUFrQyxDQUFBLENBQUE2VyxLQUFBLENBQUE1VyxLQUFBLHNDQUNBLEdBQUFELENBQUEsRUFDQSxPQUFBNlcsS0FBQSxDQUFBaFksVUFBQSxDQUFBbUIsQ0FBQSxLQUFBeTlCLElBQUEsQ0FBQXo5QixDQUFBLElBQUExQixXQUFBLElBQ0EsQ0FDQTtBQUNBLEdBQUF1WSxLQUFBLFFBQUF1ckIsS0FBQSxDQUFBdGpDLE1BQUEsQ0FBQStYLEtBQUEsSUFDQSxPQUFBQSxLQUFBLENBQUEvWCxNQUFBLENBQUErWCxLQUFBLEVBQUE0bUIsSUFBQSxDQUFBOEUsYUFBQSxRQUNBLENBQ0EsT0FBQTFyQixLQUFBLEdBQUE0bUIsSUFBQSxDQUFBOEUsYUFBQSxRQUNBLENBRUEsb0JBQ0EsU0FBQUMsVUFBQTVrQyxDQUFBLENBQUFxQixHQUFBLENBQUFDLEdBQUEsRUFDQSxVQUFBdEIsQ0FBQSxhQUFBd2tDLEtBQUEsQ0FBQXhrQyxDQUFBLFNBQUFxQixHQUFBLE9BQUFBLEdBQUEsR0FDQSxHQUFBQSxHQUFBLFFBQUFyQixDQUFBLENBQUFxQixHQUFBLENBQUFyQixDQUFBLENBQUFxQixHQUFBLENBQ0EsR0FBQUMsR0FBQSxRQUFBdEIsQ0FBQSxDQUFBc0IsR0FBQSxDQUFBdEIsQ0FBQSxDQUFBc0IsR0FBQSxDQUNBLE9BQUF0QixDQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0EsU0FBQTZrQyxxQkFBQWp4QixJQUFBLEVBQ0EsSUFBQUEsSUFBQSxHQUFBeFUsQ0FBQSxDQUFBMGxDLE9BQUEsUUFDQTtBQUNBLElBQUFsSCxNQUFBLENBQUFocUIsSUFBQSxDQUFBL1AsZ0JBQUEsdUNBQ0EsSUFBQSs1QixNQUFBLENBQUE5NUIsTUFBQSxRQUVBO0FBQ0E4NUIsTUFBQSxDQUFBLzJCLE9BQUEsVUFBQWlCLEtBQUEsRUFDQSxHQUFBQSxLQUFBLENBQUFSLFNBQUEsQ0FBQW5DLFFBQUEsNEJBQ0EyQyxLQUFBLENBQUFSLFNBQUEsQ0FBQXVILEdBQUEscUJBQ0EsR0FFQTtBQUNBO0FBQ0EsSUFDQXpQLENBQUEsQ0FBQTBsQyxPQUFBLEVBQ0FyOEIsRUFBQSxxQkFDQXM4QixLQUFBLE9BQ0FDLE1BQUEsT0FDQUMsU0FBQSxPQUNBLEdBQ0E7QUFDQSxPQUFBNXJCLENBQUEsRUFDQTtBQUNBcFgsT0FBQSxDQUFBMmhDLElBQUEsd0NBQUF2cUIsQ0FBQSxFQUNBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLFNBQUE2ckIsdUJBQUFySCxRQUFBLENBQUFuMUIsR0FBQSxDQUFBcTFCLFVBQUEsQ0FBQTlrQixLQUFBLENBQUE2RCxJQUFBLEVBQ0EsSUFBQXRYLE1BQUEsQ0FBQWlELEVBQUEsbUNBQ0EsSUFBQTA4QixRQUFBLENBQUExOEIsRUFBQSxnQkFBQW8xQixRQUFBLDZCQUFBRSxVQUFBLEVBQUFyMUIsR0FBQSxNQUNBLElBQUFtbkIsSUFBQSxDQUFBcG5CLEVBQUEsdUNBRUEsSUFBQXBILEdBQUEsQ0FBQXliLElBQUEsRUFBQUEsSUFBQSxDQUFBemIsR0FBQSxPQUFBeWIsSUFBQSxDQUFBemIsR0FBQSxHQUNBLElBQUFDLEdBQUEsQ0FBQXdiLElBQUEsRUFBQUEsSUFBQSxDQUFBeGIsR0FBQSxPQUFBd2IsSUFBQSxDQUFBeGIsR0FBQSxLQUNBLElBQUE4akMsSUFBQSxDQUFBdG9CLElBQUEsRUFBQUEsSUFBQSxDQUFBc29CLElBQUEsT0FBQXRvQixJQUFBLENBQUFzb0IsSUFBQSxHQUVBLElBQUF4d0IsS0FBQSxDQUFBbk0sRUFBQSxxRUFBQUMsR0FBQSxHQUVBLElBQUFrM0IsS0FBQSxDQUFBbjNCLEVBQUEsVUFDQUcsSUFBQSxTQUNBLDJCQUNBLG9CQUNBdkgsR0FBQSxDQUFBeEIsTUFBQSxDQUFBd0IsR0FBQSxFQUNBQyxHQUFBLENBQUF6QixNQUFBLENBQUF5QixHQUFBLEVBQ0E4akMsSUFBQSxDQUFBdmxDLE1BQUEsQ0FBQXVsQyxJQUFBLEVBQ0Fuc0IsS0FBQSxDQUFBcFosTUFBQSxDQUFBb1osS0FBQSxRQUFBQSxLQUFBLE1BQUE1WCxHQUFBLENBQUE0WCxLQUFBLENBQ0EsR0FFQSxJQUFBb3NCLEdBQUEsQ0FBQTU4QixFQUFBLFVBQ0EzRixFQUFBLENBQUErNkIsUUFBQSxDQUNBajFCLElBQUEsVUFDQSwyQ0FDQSxvQkFDQSxxQkFBQUYsR0FBQSxDQUNBckgsR0FBQSxDQUFBeEIsTUFBQSxDQUFBd0IsR0FBQSxFQUNBQyxHQUFBLENBQUF6QixNQUFBLENBQUF5QixHQUFBLEVBQ0E4akMsSUFBQSxDQUFBdmxDLE1BQUEsQ0FBQXVsQyxJQUFBLEVBQ0Fuc0IsS0FBQSxDQUFBQSxLQUFBLFFBQUFBLEtBQUEsTUFBQXBaLE1BQUEsQ0FBQXdCLEdBQUEsRUFBQXhCLE1BQUEsQ0FBQW9aLEtBQUEsQ0FDQSxHQUVBckUsS0FBQSxDQUFBd0YsV0FBQSxDQUFBd2xCLEtBQUEsRUFDQWhyQixLQUFBLENBQUF3RixXQUFBLENBQUFpckIsR0FBQSxFQUNBeFYsSUFBQSxDQUFBelYsV0FBQSxDQUFBeEYsS0FBQSxFQUNBcFAsTUFBQSxDQUFBNFUsV0FBQSxDQUFBK3FCLFFBQUEsRUFDQTMvQixNQUFBLENBQUE0VSxXQUFBLENBQUF5VixJQUFBLEVBQ0EsT0FBQXJxQixNQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxTQUFBOC9CLHVCQUFBQyxPQUFBLENBQUFqQixZQUFBLENBQUEzdEIsSUFBQSxDQUFBeFQsR0FBQSxFQUNBLElBQUF1RixHQUFBLENBQUE2OEIsT0FBQSxDQUFBNzhCLEdBQUEsQ0FDQSxJQUFBcTFCLFVBQUEsQ0FBQXdILE9BQUEsQ0FBQTk2QixLQUFBLEVBQUEvQixHQUFBLEtBQ0EsSUFBQTg4QixPQUFBLENBQUFuQixpQkFBQSxDQUFBMzdCLEdBQUEsQ0FBQWlPLElBQUEsQ0FBQTJ0QixZQUFBLEVBQ0EsSUFBQW1CLFVBQUEsQ0FBQUYsT0FBQSxDQUFBWixhQUFBLE9BQ0EsSUFBQXBKLE1BQUEsQ0FBQW1KLFNBQUEsQ0FBQWMsT0FBQSxDQUFBQyxVQUFBLEVBRUEsSUFBQXArQixHQUFBLENBQUFvQixFQUFBLG1DQUNBLElBQUFnQyxLQUFBLENBQUFoQyxFQUFBLHNDQUFBczFCLFVBQUEsRUFDQSxJQUFBbE8sSUFBQSxDQUFBcG5CLEVBQUEsdUNBRUEsSUFBQWk5QixLQUFBLENBQUEvL0IsS0FBQSxDQUFBNEIsT0FBQSxDQUFBZytCLE9BQUEsQ0FBQUcsS0FBQSxHQUFBSCxPQUFBLENBQUFHLEtBQUEsQ0FBQTVoQyxNQUFBLENBQUF5aEMsT0FBQSxDQUFBRyxLQUFBLHVCQUNBLElBQUFDLFVBQUEsQ0FBQUosT0FBQSxDQUFBSyxNQUFBLEdBQ0EsTUFBQXZrQyxHQUFBLEdBQUFDLEdBQUEsS0FBQThqQyxJQUFBLElBQ0EsS0FBQS9qQyxHQUFBLEdBQUFDLEdBQUEsS0FBQThqQyxJQUFBLElBQ0EsT0FBQS9qQyxHQUFBLEdBQUFDLEdBQUEsSUFBQThqQyxJQUFBLE1BQ0EsTUFBQS9qQyxHQUFBLEdBQUFDLEdBQUEsSUFBQThqQyxJQUFBLEtBQ0EsRUFFQTtBQUNBLElBQUF4d0IsS0FBQSxDQUFBbk0sRUFBQSxrREFBQUMsR0FBQSxHQUVBLElBQUFtOUIsTUFBQSxDQUFBcDlCLEVBQUEsdUNBRUEsSUFBQTQ4QixHQUFBLENBQUE1OEIsRUFBQSxVQUNBRyxJQUFBLFVBQ0EsMkJBQ0Esb0JBQ0F2SCxHQUFBLEtBQ0ErakMsSUFBQSxPQUNBbnNCLEtBQUEsQ0FBQXBaLE1BQUEsQ0FBQTA3QixNQUFBLENBQUF0aUIsS0FBQSxDQUNBLEdBRUEsSUFBQWlLLEdBQUEsQ0FBQXphLEVBQUEsMkRBQ0FpOUIsS0FBQSxDQUFBNytCLE9BQUEsVUFBQWkvQixDQUFBLEVBQ0EsSUFBQUMsR0FBQSxDQUFBdDlCLEVBQUEsV0FBQXdRLEtBQUEsQ0FBQTZzQixDQUFBLEVBQUFBLENBQUEsRUFDQSxHQUFBQSxDQUFBLEdBQUF2SyxNQUFBLENBQUFzRSxJQUFBLENBQUFrRyxHQUFBLENBQUExaEMsWUFBQSx3QkFDQTZlLEdBQUEsQ0FBQTlJLFdBQUEsQ0FBQTJyQixHQUFBLEVBQ0EsR0FFQUYsTUFBQSxDQUFBenJCLFdBQUEsQ0FBQWlyQixHQUFBLEVBQ0FRLE1BQUEsQ0FBQXpyQixXQUFBLENBQUE4SSxHQUFBLEVBRUE7QUFDQSxJQUFBcFosT0FBQSxDQUFBNjdCLFVBQUEsQ0FBQXBLLE1BQUEsQ0FBQXNFLElBQUEsR0FBQThGLFVBQUEsQ0FBQUQsS0FBQSxLQUNBLElBQUE5RixLQUFBLENBQUFuM0IsRUFBQSxVQUNBRyxJQUFBLFNBQ0EsMkJBQ0Esb0JBQ0F2SCxHQUFBLENBQUF4QixNQUFBLENBQUFpSyxPQUFBLENBQUF6SSxHQUFBLEVBQ0FDLEdBQUEsQ0FBQXpCLE1BQUEsQ0FBQWlLLE9BQUEsQ0FBQXhJLEdBQUEsRUFDQThqQyxJQUFBLENBQUF2bEMsTUFBQSxDQUFBaUssT0FBQSxDQUFBczdCLElBQUEsRUFDQW5zQixLQUFBLENBQUFwWixNQUFBLENBQUEra0MsU0FBQSxDQUFBckosTUFBQSxDQUFBdGlCLEtBQUEsQ0FBQW5QLE9BQUEsQ0FBQXpJLEdBQUEsQ0FBQXlJLE9BQUEsQ0FBQXhJLEdBQUEsRUFDQSxHQUVBO0FBQ0EsSUFBQWlTLE1BQUEsQ0FBQTlLLEVBQUEsVUFDQUcsSUFBQSxRQUNBLDJCQUNBN0MsS0FBQSxnQkFDQSxxQkFDQWlnQyxRQUFBLE1BQ0FsakMsRUFBQSxhQUFBNEYsR0FBQSxLQUFBdkYsR0FBQSxlQUNBLHFCQUFBdUYsR0FBQSxDQUNBdVEsS0FBQSxDQUFBcFosTUFBQSxDQUFBMDdCLE1BQUEsQ0FBQXRpQixLQUFBLEVBQUFzaUIsTUFBQSxDQUFBc0UsSUFDQSxHQUVBanJCLEtBQUEsQ0FBQXdGLFdBQUEsQ0FBQXlyQixNQUFBLEVBQ0FqeEIsS0FBQSxDQUFBd0YsV0FBQSxDQUFBd2xCLEtBQUEsRUFDQWhyQixLQUFBLENBQUF3RixXQUFBLENBQUE3RyxNQUFBLEVBRUFzYyxJQUFBLENBQUF6VixXQUFBLENBQUF4RixLQUFBLEVBQ0F2TixHQUFBLENBQUErUyxXQUFBLENBQUEzUCxLQUFBLEVBQ0FwRCxHQUFBLENBQUErUyxXQUFBLENBQUF5VixJQUFBLEVBQ0EsT0FBQXhvQixHQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxTQUFBNCtCLGVBQUFyeUIsSUFBQSxFQUNBLElBQUFBLElBQUEsUUFFQSxTQUFBc3lCLFdBQUF6OUIsRUFBQSxFQUNBLE9BQUFBLEVBQUEsRUFBQUEsRUFBQSxDQUFBZ0ksT0FBQSxFQUFBaEksRUFBQSxDQUFBZ0ksT0FBQSxvQkFDQSxDQUVBbUQsSUFBQSxDQUFBOUgsZ0JBQUEsa0JBQUF1TixDQUFBLEVBQ0EsSUFBQW9CLENBQUEsQ0FBQXBCLENBQUEsQ0FBQXFNLE1BQUEsQ0FDQTtBQUNBLEdBQUFqTCxDQUFBLEVBQUFBLENBQUEsQ0FBQWtELFlBQUEsb0JBQ0EsSUFBQThoQixDQUFBLENBQUF5RyxVQUFBLENBQUF6ckIsQ0FBQSxFQUNBLElBQUFnbEIsQ0FBQSxRQUNBLElBQUE0RixHQUFBLENBQUE1RixDQUFBLENBQUFyOEIsYUFBQSxxQkFDQSxHQUFBaWlDLEdBQUEsRUFDQUEsR0FBQSxDQUFBcHNCLEtBQUEsQ0FBQXdCLENBQUEsQ0FBQXhCLEtBQUEsQ0FDQSxDQUNBLElBQUFrdEIsTUFBQSxDQUFBMUcsQ0FBQSxDQUFBcjhCLGFBQUEseUJBQ0EsR0FBQStpQyxNQUFBLEVBQUFBLE1BQUEsQ0FBQXY5QixJQUFBLFdBQ0EsSUFBQWkzQixJQUFBLENBQUFKLENBQUEsQ0FBQXI4QixhQUFBLG9CQUNBeThCLElBQUEsQ0FBQUEsSUFBQSxDQUFBQSxJQUFBLENBQUE1bUIsS0FBQSxNQUNBa3RCLE1BQUEsQ0FBQWx0QixLQUFBLENBQUFwWixNQUFBLENBQUE0YSxDQUFBLENBQUF4QixLQUFBLEVBQUFwWixNQUFBLENBQUFnZ0MsSUFBQSxFQUNBO0FBQ0FzRyxNQUFBLENBQUExNkIsYUFBQSxLQUFBMlgsS0FBQSxVQUFBelgsT0FBQSxTQUNBLE1BQ0E7QUFDQSxHQUFBMDVCLEdBQUEsRUFBQUEsR0FBQSxDQUFBMW5CLFlBQUEsd0JBQ0EwbkIsR0FBQSxDQUFBNTVCLGFBQUEsS0FBQTJYLEtBQUEsVUFBQXpYLE9BQUEsU0FDQSxDQUNBLENBQ0EsQ0FFQTtBQUNBLEdBQUE4TyxDQUFBLEVBQUFBLENBQUEsQ0FBQWtELFlBQUEsb0JBQ0EsSUFBQThoQixDQUFBLENBQUF5RyxVQUFBLENBQUF6ckIsQ0FBQSxFQUNBLElBQUFnbEIsQ0FBQSxRQUNBLElBQUF4MkIsQ0FBQSxDQUFBdzJCLENBQUEsQ0FBQXI4QixhQUFBLHFCQUNBLEdBQUE2RixDQUFBLEVBQ0E7QUFDQSxJQUFBNUgsR0FBQSxDQUFBSCxNQUFBLENBQUErSCxDQUFBLENBQUE1SCxHQUFBLEVBQ0EsSUFBQUMsR0FBQSxDQUFBSixNQUFBLENBQUErSCxDQUFBLENBQUEzSCxHQUFBLEVBQ0EsSUFBQXRCLENBQUEsQ0FBQWtCLE1BQUEsQ0FBQXVaLENBQUEsQ0FBQXhCLEtBQUEsRUFDQSxJQUFBdXJCLEtBQUEsQ0FBQXhrQyxDQUFBLEdBQ0FBLENBQUEsQ0FBQTRrQyxTQUFBLENBQUE1a0MsQ0FBQSxDQUFBd2tDLEtBQUEsQ0FBQW5qQyxHQUFBLEVBQUE0YixTQUFBLENBQUE1YixHQUFBLENBQUFtakMsS0FBQSxDQUFBbGpDLEdBQUEsRUFBQTJiLFNBQUEsQ0FBQTNiLEdBQUEsRUFDQTJILENBQUEsQ0FBQWdRLEtBQUEsQ0FBQXBaLE1BQUEsQ0FBQUcsQ0FBQSxFQUNBLEdBQUFILE1BQUEsQ0FBQUcsQ0FBQSxJQUFBeWEsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBd0IsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBcFosTUFBQSxDQUFBRyxDQUFBLEVBQ0EsQ0FDQSxDQUNBLElBQUFtbUMsTUFBQSxDQUFBMUcsQ0FBQSxDQUFBcjhCLGFBQUEseUJBQ0EsR0FBQStpQyxNQUFBLEVBQUFBLE1BQUEsQ0FBQXY5QixJQUFBLFdBQ0EsSUFBQWkzQixJQUFBLENBQUFKLENBQUEsQ0FBQXI4QixhQUFBLG9CQUNBeThCLElBQUEsQ0FBQUEsSUFBQSxDQUFBQSxJQUFBLENBQUE1bUIsS0FBQSxNQUNBa3RCLE1BQUEsQ0FBQWx0QixLQUFBLENBQUFwWixNQUFBLENBQUE0YSxDQUFBLENBQUF4QixLQUFBLEtBQUFwWixNQUFBLENBQUFnZ0MsSUFBQSxFQUNBc0csTUFBQSxDQUFBMTZCLGFBQUEsS0FBQTJYLEtBQUEsVUFBQXpYLE9BQUEsU0FDQSxDQUNBO0FBQ0EsQ0FDQSxRQUVBaUksSUFBQSxDQUFBOUgsZ0JBQUEsbUJBQUF1TixDQUFBLEVBQ0EsSUFBQW9CLENBQUEsQ0FBQXBCLENBQUEsQ0FBQXFNLE1BQUEsQ0FDQTtBQUNBLEdBQUFqTCxDQUFBLEVBQUFBLENBQUEsQ0FBQWtELFlBQUEsbUJBQ0EsSUFBQThoQixDQUFBLENBQUF5RyxVQUFBLENBQUF6ckIsQ0FBQSxFQUNBLElBQUFnbEIsQ0FBQSxRQUVBO0FBQ0E7QUFDQSxJQUFBeDJCLENBQUEsQ0FBQXcyQixDQUFBLENBQUFyOEIsYUFBQSxxQkFDQSxJQUFBaWlDLEdBQUEsQ0FBQTVGLENBQUEsQ0FBQXI4QixhQUFBLHFCQUNBLElBQUEraUMsTUFBQSxDQUFBMUcsQ0FBQSxDQUFBcjhCLGFBQUEseUJBQ0EsSUFBQXk4QixJQUFBLENBQUFwbEIsQ0FBQSxDQUFBeEIsS0FBQSxPQUVBO0FBQ0EsSUFBQW10QixjQUFBLEVBQ0EsTUFBQS9rQyxHQUFBLEdBQUFDLEdBQUEsS0FBQThqQyxJQUFBLElBQ0EsS0FBQS9qQyxHQUFBLEdBQUFDLEdBQUEsS0FBQThqQyxJQUFBLElBQ0EsT0FBQS9qQyxHQUFBLEdBQUFDLEdBQUEsSUFBQThqQyxJQUFBLE1BQ0EsTUFBQS9qQyxHQUFBLEdBQUFDLEdBQUEsSUFBQThqQyxJQUFBLEtBQ0EsRUFDQSxHQUFBbjhCLENBQUEsRUFDQSxJQUFBM0MsQ0FBQSxDQUFBOC9CLGNBQUEsQ0FBQXZHLElBQUEsR0FBQXVHLGNBQUEsT0FDQW45QixDQUFBLENBQUE1SCxHQUFBLENBQUF4QixNQUFBLENBQUF5RyxDQUFBLENBQUFqRixHQUFBLEVBQ0E0SCxDQUFBLENBQUEzSCxHQUFBLENBQUF6QixNQUFBLENBQUF5RyxDQUFBLENBQUFoRixHQUFBLEVBQ0EySCxDQUFBLENBQUFtOEIsSUFBQSxDQUFBdmxDLE1BQUEsQ0FBQXlHLENBQUEsQ0FBQTgrQixJQUFBLEVBQ0E7QUFDQSxJQUFBcGxDLENBQUEsQ0FBQWtCLE1BQUEsQ0FBQW1rQyxHQUFBLEVBQUFBLEdBQUEsQ0FBQXBzQixLQUFBLENBQUFvc0IsR0FBQSxDQUFBcHNCLEtBQUEsQ0FBQWhRLENBQUEsQ0FBQWdRLEtBQUEsRUFDQSxJQUFBdXJCLEtBQUEsQ0FBQXhrQyxDQUFBLEdBQ0FBLENBQUEsQ0FBQTRrQyxTQUFBLENBQUE1a0MsQ0FBQSxDQUFBc0csQ0FBQSxDQUFBakYsR0FBQSxDQUFBaUYsQ0FBQSxDQUFBaEYsR0FBQSxFQUNBMkgsQ0FBQSxDQUFBZ1EsS0FBQSxDQUFBcFosTUFBQSxDQUFBRyxDQUFBLEVBQ0EsR0FBQXFsQyxHQUFBLENBQUFBLEdBQUEsQ0FBQXBzQixLQUFBLENBQUFwWixNQUFBLENBQUFHLENBQUEsRUFDQSxDQUNBLENBQ0EsR0FBQW1tQyxNQUFBLEVBQUFBLE1BQUEsQ0FBQXY5QixJQUFBLFdBQ0EsSUFBQTVJLENBQUEsQ0FBQXFsQyxHQUFBLEVBQUFBLEdBQUEsQ0FBQXBzQixLQUFBLENBQUFvc0IsR0FBQSxDQUFBcHNCLEtBQUEsQ0FBQWhRLENBQUEsQ0FBQUEsQ0FBQSxDQUFBZ1EsS0FBQSxLQUNBa3RCLE1BQUEsQ0FBQWx0QixLQUFBLENBQUFwWixNQUFBLENBQUFHLENBQUEsRUFBQUgsTUFBQSxDQUFBZ2dDLElBQUEsRUFDQXNHLE1BQUEsQ0FBQTE2QixhQUFBLEtBQUEyWCxLQUFBLFVBQUF6WCxPQUFBLFNBQ0EsQ0FDQSxDQUNBLFFBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQ0EsU0FBQTA2QixjQUFBZCxPQUFBLENBQUFqQixZQUFBLENBQUEzdEIsSUFBQSxDQUFBeFQsR0FBQSxDQUFBc1osR0FBQSxFQUNBLElBQUE3VCxJQUFBLENBQUEyOEIsT0FBQSxDQUFBMzhCLElBQUEsQ0FDQSxJQUFBRixHQUFBLENBQUE2OEIsT0FBQSxDQUFBNzhCLEdBQUEsQ0FFQSxJQUFBcTFCLFVBQUEsQ0FBQXdILE9BQUEsQ0FBQTk2QixLQUFBLEVBQUEvQixHQUFBLEtBQ0EsSUFBQTQ5QixTQUFBLENBQUE1OUIsR0FBQSxDQUFBNDdCLFlBQUEsQ0FBQTU3QixHQUFBLElBQUFFLElBQUEsWUFBQUEsSUFBQSxXQUNBLElBQUFxUSxLQUFBLENBQUFzckIsY0FBQSxDQUFBRixpQkFBQSxDQUFBMzdCLEdBQUEsQ0FBQWlPLElBQUEsQ0FBQTJ0QixZQUFBLEVBQUFnQyxTQUFBLENBQUExOUIsSUFBQSxFQUNBO0FBQ0EsR0FBQTI4QixPQUFBLEVBQUFBLE9BQUEsQ0FBQTNVLFVBQUEsRUFBQXh4QixDQUFBLENBQUEya0MscUNBQUEsQ0FBQXdCLE9BQUEsQ0FBQTNVLFVBQUEsR0FDQSxJQUNBLElBQUE4RSxRQUFBLENBQUF0MkIsQ0FBQSxDQUFBMmtDLHFDQUFBLENBQUF3QixPQUFBLENBQUEzVSxVQUFBLEVBQUFuVSxHQUFBLE1BQ0F4RCxLQUFBLENBQUFzckIsY0FBQSxDQUFBN08sUUFBQSxDQUFBNFEsU0FBQSxDQUFBMTlCLElBQUEsRUFDQSxPQUFBeVEsQ0FBQSxFQUNBcFgsT0FBQSxDQUFBMmhDLElBQUEseUJBQUEyQixPQUFBLENBQUEzVSxVQUFBLENBQUF2WCxDQUFBLEVBQ0EsQ0FDQSxDQUVBLElBQUF3a0IsUUFBQSxhQUFBbjFCLEdBQUEsS0FBQXZGLEdBQUEsQ0FFQSxJQUFBcUMsTUFBQSxDQUFBaUQsRUFBQSxtQ0FDQSxJQUFBMDhCLFFBQUEsQ0FBQTE4QixFQUFBLGdCQUFBbzFCLFFBQUEsNkJBQUFFLFVBQUEsRUFDQSxJQUFBYSxTQUFBLENBQUFuMkIsRUFBQSx1Q0FFQSxJQUFBekUsUUFBQSxDQUVBO0FBQ0EsR0FBQTRFLElBQUEsV0FBQTI4QixPQUFBLENBQUEvVixJQUFBLEVBQ0E7QUFDQSxJQUFBK1csT0FBQSx1Q0FDQSxHQUFBaEIsT0FBQSxDQUFBL1YsSUFBQSxrQkFBQStXLE9BQUEsa0NBRUEsSUFBQUMsUUFBQSxDQUFBLzlCLEVBQUEsZ0JBQUE4OUIsT0FBQSxHQUVBLEdBQUF4SSxVQUFBLENBQUF5SSxRQUFBLENBQUFwc0IsV0FBQSxDQUFBM1IsRUFBQSxzQ0FBQXMxQixVQUFBLEdBRUE7QUFDQSxJQUFBMEksVUFBQSxnQ0FDQSxHQUFBbEIsT0FBQSxDQUFBL1YsSUFBQSxrQkFBQWlYLFVBQUEsaUNBRUEsSUFBQUMsU0FBQSxDQUFBaitCLEVBQUEsT0FBQWcrQixVQUFBLEVBQ0FELFFBQUEsQ0FBQXBzQixXQUFBLENBQUFzc0IsU0FBQSxFQUVBLElBQUFDLE9BQUEsQ0FBQXZuQyxDQUFBLENBQUEwa0MsZ0NBQUEsQ0FBQXlCLE9BQUEsQ0FBQS9WLElBQUEsRUFDQSxVQUFBbVgsT0FBQSxlQUNBanlCLFVBQUEsWUFDQSxJQUNBaXlCLE9BQUEsQ0FBQUQsU0FBQSxDQUFBanFCLEdBQUEsTUFDQSxPQUFBcEQsQ0FBQSxFQUNBcFgsT0FBQSxDQUFBMmhDLElBQUEsVUFBQTJCLE9BQUEsQ0FBQS9WLElBQUEsYUFBQW5XLENBQUEsRUFDQSxDQUNBLEtBQ0EsTUFDQXF0QixTQUFBLENBQUF0c0IsV0FBQSxDQUFBM1IsRUFBQSxxREFBQTg4QixPQUFBLENBQUEvVixJQUFBLE9BQ0EsQ0FDQSxPQUFBZ1gsUUFBQSxDQUNBLENBR0EsR0FBQTU5QixJQUFBLGVBQ0E1RSxRQUFBLENBQUF5RSxFQUFBLGFBQ0EzRixFQUFBLENBQUErNkIsUUFBQSxDQUNBLHFCQUFBbjFCLEdBQUEsQ0FDQXdYLElBQUEsQ0FBQXFsQixPQUFBLENBQUFybEIsSUFBQSxJQUNBLDBCQUNBLEVBQUFqSCxLQUFBLFVBQUFwWixNQUFBLENBQUFvWixLQUFBLEdBQ0EsU0FBQXJRLElBQUEsYUFDQTVFLFFBQUEsQ0FBQXlFLEVBQUEsV0FDQTNGLEVBQUEsQ0FBQSs2QixRQUFBLENBQ0EscUJBQUFuMUIsR0FBQSxDQUNBLDBCQUNBLEdBQ0ErN0Isd0JBQUEsQ0FBQWMsT0FBQSxDQUFBcmtCLE9BQUEsTUFBQXJhLE9BQUEsVUFBQWsvQixHQUFBLEVBQ0EsSUFBQWEsTUFBQSxDQUFBbitCLEVBQUEsV0FBQXdRLEtBQUEsQ0FBQThzQixHQUFBLENBQUE5c0IsS0FBQSxFQUFBOHNCLEdBQUEsQ0FBQXQ3QixLQUFBLEVBQ0EsR0FBQTVLLE1BQUEsQ0FBQW9aLEtBQUEsSUFBQThzQixHQUFBLENBQUE5c0IsS0FBQSxDQUFBMnRCLE1BQUEsQ0FBQXZpQyxZQUFBLHdCQUNBTCxRQUFBLENBQUFvVyxXQUFBLENBQUF3c0IsTUFBQSxFQUNBLEdBQ0EsU0FBQWgrQixJQUFBLGVBQ0E7QUFFQTtBQUNBLE9BQUF1N0IsZ0JBQUEsQ0FBQXRHLFFBQUEsQ0FBQW4xQixHQUFBLEdBQUF1USxLQUFBLENBQUE4a0IsVUFBQSxFQUVBLFNBQUFuMUIsSUFBQSxtQkFDQTtBQUNBLElBQUFpK0IsS0FBQSxhQUFBbitCLEdBQUEsS0FBQXZGLEdBQUEsQ0FDQSxJQUFBMmpDLE1BQUEsQ0FBQTd0QixLQUFBO0FBQ0EsT0FBQWlzQixzQkFBQSxDQUFBMkIsS0FBQSxDQUFBbitCLEdBQUEsQ0FBQXExQixVQUFBLENBQUErSSxNQUFBLENBQUF2QixPQUFBLEVBRUEsU0FBQTM4QixJQUFBLFVBQ0E7QUFDQSxPQUFBMDhCLHNCQUFBLENBQUFDLE9BQUEsQ0FBQWpCLFlBQUEsQ0FBQTN0QixJQUFBLENBQUF4VCxHQUFBLEVBRUEsU0FBQXlGLElBQUEsWUFDQTtBQUNBNUUsUUFBQSxDQUFBeUUsRUFBQSxVQUNBM0YsRUFBQSxDQUFBKzZCLFFBQUEsQ0FDQWoxQixJQUFBLFFBQ0EscUJBQUFGLEdBQUEsQ0FDQSw4QkFDQSxrQkFDQSwyQkFDQSxxQkFBQXVRLEtBQUEsUUFBQUEsS0FBQSxNQUFBcFosTUFBQSxDQUFBb1osS0FBQSxFQUFBc3NCLE9BQUEsQ0FBQWpxQixXQUFBLElBQ0EsR0FDQSxHQUFBckMsS0FBQSxPQUNBalYsUUFBQSxDQUFBaVYsS0FBQSxDQUFBcFosTUFBQSxDQUFBb1osS0FBQSxFQUNBLENBQ0EsTUFDQTtBQUNBLElBQUErcUIsS0FBQSxFQUNBbGhDLEVBQUEsQ0FBQSs2QixRQUFBLENBQ0FqMUIsSUFBQSxDQUFBQSxJQUFBLDRCQUNBLHFCQUFBRixHQUFBLENBQ0EsMEJBQ0EsRUFDQTtBQUNBLEdBQUFFLElBQUEsYUFDQSxHQUFBaUMsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQTZzQixTQUFBLFFBQUF0QyxLQUFBLENBQUEzaUMsR0FBQSxDQUFBaWxDLFNBQUEsQ0FBQWpsQyxHQUFBLENBQ0EsR0FBQXdKLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUE2c0IsU0FBQSxRQUFBdEMsS0FBQSxDQUFBMWlDLEdBQUEsQ0FBQWdsQyxTQUFBLENBQUFobEMsR0FBQSxDQUNBLEdBQUF1SixNQUFBLENBQUEwTyxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBNnNCLFNBQUEsU0FBQXRDLEtBQUEsQ0FBQW9CLElBQUEsQ0FBQWtCLFNBQUEsQ0FBQWxCLElBQUEsQ0FDQSxHQUFBdjZCLE1BQUEsQ0FBQTBPLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUE4ckIsT0FBQSxRQUFBdkIsS0FBQSxDQUFBM2lDLEdBQUEsQ0FBQWtrQyxPQUFBLENBQUFsa0MsR0FBQSxDQUNBLEdBQUF3SixNQUFBLENBQUEwTyxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBOHJCLE9BQUEsUUFBQXZCLEtBQUEsQ0FBQTFpQyxHQUFBLENBQUFpa0MsT0FBQSxDQUFBamtDLEdBQUEsQ0FDQSxHQUFBdUosTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQThyQixPQUFBLFNBQUF2QixLQUFBLENBQUFvQixJQUFBLENBQUFHLE9BQUEsQ0FBQUgsSUFBQSxDQUNBLENBQ0FwaEMsUUFBQSxDQUFBeUUsRUFBQSxTQUFBdTdCLEtBQUEsRUFDQSxHQUFBL3FCLEtBQUEsTUFBQWpWLFFBQUEsQ0FBQWlWLEtBQUEsQ0FBQXBaLE1BQUEsQ0FBQW9aLEtBQUEsRUFDQSxDQUVBMmxCLFNBQUEsQ0FBQXhrQixXQUFBLENBQUFwVyxRQUFBLEVBQ0F3QixNQUFBLENBQUE0VSxXQUFBLENBQUErcUIsUUFBQSxFQUNBMy9CLE1BQUEsQ0FBQTRVLFdBQUEsQ0FBQXdrQixTQUFBLEVBQ0EsT0FBQXA1QixNQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FDQSxTQUFBdWhDLFlBQUFueUIsS0FBQSxDQUFBMHZCLFlBQUEsQ0FBQTN0QixJQUFBLENBQUF4VCxHQUFBLENBQUFzWixHQUFBLEVBQ0EsSUFBQXVxQixPQUFBLEdBQUFweUIsS0FBQSxDQUFBNHVCLElBQUEsQ0FDQSxJQUFBNVosUUFBQSwyQkFBQXptQixHQUFBLE1BQUF5UixLQUFBLENBQUFsTSxHQUFBLE9BRUEsSUFBQTJPLE9BQUEsQ0FBQTVPLEVBQUEsWUFDQSxpRUFBQXUrQixPQUFBLGdCQUNBLGFBQUFweUIsS0FBQSxDQUFBbE0sR0FBQSxJQUNBLEdBRUEsSUFBQWduQixVQUFBLENBQUFqbkIsRUFBQSxXQUNBRyxJQUFBLFVBQ0Esd0JBQ0E2SyxJQUFBLFVBQ0EsZ0JBQUF1ekIsT0FBQSxnQkFDQSxnQkFBQXBkLFFBQ0EsR0FDQW5oQixFQUFBLFdBQUFtTSxLQUFBLENBQUFnSSxLQUFBLEVBQUFoSSxLQUFBLENBQUFuSyxLQUFBLEVBQUFtSyxLQUFBLENBQUFsTSxHQUFBLE1BQ0FELEVBQUEsa0dBQ0EsRUFFQSxJQUFBdytCLE1BQUEsQ0FBQXgrQixFQUFBLFFBQ0Esd0JBQ0EzRixFQUFBLENBQUE4bUIsUUFBQSxDQUNBLGNBQUFvZCxPQUFBLGVBQ0EsR0FFQSxTQUFBRSxRQUFBcjBCLENBQUEsRUFDQSxHQUFBbE4sS0FBQSxDQUFBNEIsT0FBQSxDQUFBc0wsQ0FBQSxTQUFBQSxDQUFBLENBQ0EsR0FBQUEsQ0FBQSxTQUFBQSxDQUFBLG1CQUFBaEksTUFBQSxDQUFBczhCLE1BQUEsQ0FBQXQwQixDQUFBLEVBQ0EsT0FBQUEsQ0FBQSxRQUFBQSxDQUFBLEtBQ0EsQ0FFQXEwQixPQUFBLENBQUF0eUIsS0FBQSxDQUFBd3lCLFFBQUEsRUFBQXZnQyxPQUFBLFVBQUEwK0IsT0FBQSxFQUNBMEIsTUFBQSxDQUFBN3NCLFdBQUEsQ0FBQWlzQixhQUFBLENBQUFkLE9BQUEsQ0FBQWpCLFlBQUEsQ0FBQTN0QixJQUFBLENBQUF4VCxHQUFBLENBQUFzWixHQUFBLEdBQ0EsR0FFQXBGLE9BQUEsQ0FBQStDLFdBQUEsQ0FBQXNWLFVBQUEsRUFDQXJZLE9BQUEsQ0FBQStDLFdBQUEsQ0FBQTZzQixNQUFBLEVBQ0EsT0FBQTV2QixPQUFBLENBQ0EsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBLFNBQUFnd0IsYUFBQUMsWUFBQSxDQUFBQyxjQUFBLENBQUFDLGVBQUEsRUFFQUYsWUFBQSxDQUFBQSxZQUFBLEtBQ0FFLGVBQUEsQ0FBQUEsZUFBQSxLQUNBLElBQUFDLE9BQUEsQ0FBQUgsWUFBQSxDQUFBSSxjQUFBLFlBQ0EsSUFBQUMsYUFBQSxDQUFBTCxZQUFBLENBQUFNLGNBQUEsRUFDQUosZUFBQSxDQUFBSSxjQUFBLEVBQ0EsbUVBRUEsSUFBQWhyQixLQUFBLENBQUEwcUIsWUFBQSxDQUFBMXFCLEtBQUEsRUFBQTJxQixjQUFBLEtBQ0EsSUFBQU0sV0FBQSxDQUFBUCxZQUFBLENBQUFPLFdBQUEsS0FFQTtBQUNBLFNBQUFDLFVBQUFDLEdBQUEsQ0FBQUMsT0FBQSxFQUNBLEdBQUFBLE9BQUEsRUFDQSxPQUFBdi9CLEVBQUEsV0FBQUcsSUFBQSw4Q0FBQW0vQixHQUFBLE1BQ0EsQ0FDQTtBQUNBLElBQUFFLE9BQUEsRUFDQSx1Q0FDQSxvREFDQSxrQ0FDQSxzQ0FDQSxvQ0FDQSxrQ0FDQSxFQUNBLElBQUExQixPQUFBLDBEQUNBLEdBQUF3QixHQUFBLFlBQUF4QixPQUFBLDhDQUVBLElBQUFyYSxHQUFBLENBQUF6akIsRUFBQSxXQUNBRyxJQUFBLFVBQ0EsUUFBQTI5QixPQUFBLENBQ0EsY0FBQXdCLEdBQUEsQ0FDQSxhQUFBQSxHQUFBLENBQUFqb0MsT0FBQSxVQUNBLEdBRUEsR0FBQWlvQyxHQUFBLGFBQ0E3YixHQUFBLENBQUE5UixXQUFBLENBQUEzUixFQUFBLDhDQUNBeWpCLEdBQUEsQ0FBQTlSLFdBQUEsQ0FBQXBWLFFBQUEsQ0FBQW01QixjQUFBO0FBQ0EsQ0FDQWpTLEdBQUEsQ0FBQTlSLFdBQUEsQ0FBQTNSLEVBQUEsb0NBQUF3L0IsT0FBQSxDQUFBRixHQUFBLFVBQ0EsT0FBQTdiLEdBQUEsQ0FDQSxDQUVBO0FBQ0EsR0FBQXViLE9BQUEsY0FDQSxJQUFBUyxNQUFBLENBQUF6L0IsRUFBQSxtREFDQXkvQixNQUFBLENBQUE5dEIsV0FBQSxDQUFBM1IsRUFBQSxXQUFBbVUsS0FBQSxPQUVBLElBQUF1ckIsT0FBQSxDQUFBMS9CLEVBQUEsd0RBQ0FrL0IsYUFBQSxDQUFBOWdDLE9BQUEsVUFBQWtoQyxHQUFBLEVBQ0FJLE9BQUEsQ0FBQS90QixXQUFBLENBQUEwdEIsU0FBQSxDQUFBQyxHQUFBLG1CQUNBLEdBQ0FHLE1BQUEsQ0FBQTl0QixXQUFBLENBQUErdEIsT0FBQSxFQUNBLE9BQUFELE1BQUEsQ0FDQSxDQUVBO0FBQ0EsSUFBQXQwQixJQUFBLENBQUFuTCxFQUFBLDhDQUNBLElBQUE4WixJQUFBLENBQUE5WixFQUFBLHFDQUNBLElBQUE0SSxJQUFBLENBQUE1SSxFQUFBLHlDQUNBLElBQUEyL0IsRUFBQSxDQUFBMy9CLEVBQUEsd0JBQUFtVSxLQUFBLE1BQ0F2TCxJQUFBLENBQUErSSxXQUFBLENBQUFndUIsRUFBQSxFQUNBLEdBQUFQLFdBQUEsRUFDQXgyQixJQUFBLENBQUErSSxXQUFBLENBQUEzUixFQUFBLHdCQUFBby9CLFdBQUEsR0FDQSxDQUVBLElBQUE1MUIsS0FBQSxDQUFBeEosRUFBQSw2REFDQSxJQUFBNC9CLEdBQUEsQ0FBQTUvQixFQUFBLG9EQUNBLElBQUE2L0IsR0FBQSxDQUFBNy9CLEVBQUEsNkJBRUE7QUFDQSxJQUFBOC9CLEVBQUEsQ0FBQTkvQixFQUFBLCtCQUNBLElBQUErL0IsRUFBQSxDQUFBLy9CLEVBQUEsK0JBQ0EsSUFBQWdnQyxFQUFBLENBQUFoZ0MsRUFBQSwrQkFFQWsvQixhQUFBLENBQUFua0MsS0FBQSxNQUFBcUQsT0FBQSxVQUFBa2hDLEdBQUEsRUFDQVEsRUFBQSxDQUFBbnVCLFdBQUEsQ0FBQTB0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUNBSixhQUFBLENBQUFua0MsS0FBQSxNQUFBcUQsT0FBQSxVQUFBa2hDLEdBQUEsRUFDQVMsRUFBQSxDQUFBcHVCLFdBQUEsQ0FBQTB0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUNBSixhQUFBLENBQUFua0MsS0FBQSxJQUFBcUQsT0FBQSxVQUFBa2hDLEdBQUEsRUFDQVUsRUFBQSxDQUFBcnVCLFdBQUEsQ0FBQTB0QixTQUFBLENBQUFDLEdBQUEsU0FDQSxHQUVBTyxHQUFBLENBQUFsdUIsV0FBQSxDQUFBbXVCLEVBQUEsRUFDQUQsR0FBQSxDQUFBbHVCLFdBQUEsQ0FBQW91QixFQUFBLEVBQ0FGLEdBQUEsQ0FBQWx1QixXQUFBLENBQUFxdUIsRUFBQSxFQUNBSixHQUFBLENBQUFqdUIsV0FBQSxDQUFBa3VCLEdBQUEsRUFDQXIyQixLQUFBLENBQUFtSSxXQUFBLENBQUFpdUIsR0FBQSxFQUVBOWxCLElBQUEsQ0FBQW5JLFdBQUEsQ0FBQS9JLElBQUEsRUFDQWtSLElBQUEsQ0FBQW5JLFdBQUEsQ0FBQW5JLEtBQUEsRUFDQTJCLElBQUEsQ0FBQXdHLFdBQUEsQ0FBQW1JLElBQUEsRUFFQSxPQUFBM08sSUFBQSxDQUNBLENBR0EsU0FBQTgwQixlQUFBQyxRQUFBLENBQUFuQixlQUFBLENBQUE3d0IsSUFBQSxDQUFBdFIsSUFBQSxFQUNBLElBQUFzakMsUUFBQSxRQUFBQSxRQUFBLENBRUFuQixlQUFBLENBQUFBLGVBQUEsS0FDQSxJQUFBbEQsWUFBQSxDQUFBa0QsZUFBQSxDQUFBcFgsTUFBQSxFQUFBb1gsZUFBQSxDQUFBcFgsTUFBQSxDQUFBQyxLQUFBLENBQUFtWCxlQUFBLENBQUFwWCxNQUFBLENBQUFDLEtBQUEsSUFDQSxJQUFBaVgsWUFBQSxDQUFBRSxlQUFBLENBQUFGLFlBQUEsS0FDQSxJQUFBaEksTUFBQSxDQUFBZ0ksWUFBQSxDQUFBaEksTUFBQSxLQUVBLElBQUFzSSxjQUFBLENBQUFOLFlBQUEsQ0FBQU0sY0FBQSxFQUFBSixlQUFBLENBQUFJLGNBQUEsS0FDQSxJQUFBZ0IsVUFBQSxDQUFBdmpDLElBQUEsRUFBQUEsSUFBQSxDQUFBdVgsS0FBQSxFQUFBMHFCLFlBQUEsQ0FBQTFxQixLQUFBLEVBQUE0cUIsZUFBQSxDQUFBLzhCLEtBQUEsRUFBQWtNLElBQUEsRUFBQUEsSUFBQSxDQUFBbE0sS0FBQSxLQUVBO0FBQ0EsSUFBQWdTLEdBQUEsRUFDQWhVLEVBQUEsQ0FBQXBELElBQUEsRUFBQUEsSUFBQSxDQUFBb0QsRUFBQSxPQUNBeUQsT0FBQSxDQUFBN0csSUFBQSxFQUFBQSxJQUFBLENBQUE2RyxPQUFBLE9BQ0F0RCxJQUFBLENBQUF2RCxJQUFBLEVBQUFBLElBQUEsQ0FBQXVELElBQUEsT0FDQStOLElBQUEsQ0FBQUEsSUFBQSxJQUNBLEVBRUE7QUFDQSxNQUFBZ3lCLFFBQUEsQ0FBQTlKLFVBQUEsQ0FBQThKLFFBQUEsQ0FBQW43QixXQUFBLENBQUFtN0IsUUFBQSxDQUFBOUosVUFBQSxFQUVBLElBQUExN0IsR0FBQSxDQUFBNUIsSUFBQSxDQUFBK0IsTUFBQSxHQUFBQyxRQUFBLEtBQUFDLEtBQUEsTUFFQTtBQUNBbWxDLFFBQUEsQ0FBQXZ1QixXQUFBLENBQUFpdEIsWUFBQSxDQUFBQyxZQUFBLENBQUFzQixVQUFBLENBQUFwQixlQUFBLEdBR0E7QUFDQWxJLE1BQUEsQ0FBQXo0QixPQUFBLFVBQUE0NEIsQ0FBQSxFQUNBa0osUUFBQSxDQUFBdnVCLFdBQUEsQ0FBQTJzQixXQUFBLENBQUF0SCxDQUFBLENBQUE2RSxZQUFBLENBQUEzdEIsSUFBQSxLQUFBeFQsR0FBQSxDQUFBc1osR0FBQSxHQUNBLEdBRUE7QUFDQSxJQUNBO0FBQ0FsZCxFQUFBLENBQUF5L0IsaUJBQUEsQ0FBQTJKLFFBQUEsRUFDQSxJQUNBMUMsY0FBQSxDQUFBMEMsUUFBQSxFQUNBO0FBQ0E5RCxvQkFBQSxDQUFBOEQsUUFBQSxFQUNBLE9BQUE3bUMsQ0FBQSxHQUNBLE9BQUFBLENBQUEsR0FFQSxPQUFBNm1DLFFBQUEsQ0FDQSxDQUVBcHBDLEVBQUEsQ0FBQXNwQywwQkFBQSxFQUFBcnNCLE1BQUEsQ0FBQWtzQixjQUFBO0FBRUE7QUFFQSxTQUFBSSxrQkFBQUMsSUFBQSxDQUFBdHNCLEdBQUEsRUFDQSxJQUNBLElBQUF1c0IsQ0FBQSxDQUFBNXBDLENBQUEsQ0FBQUUsYUFBQSxFQUFBRixDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxFQUFBSCxDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxDQUFBMnFCLHFCQUFBLENBQ0EsR0FBQThlLENBQUEsU0FBQUEsQ0FBQSxDQUFBdGQsa0JBQUEsZUFDQXNkLENBQUEsQ0FBQXRkLGtCQUFBLENBQUFqUCxHQUFBLENBQUF2USxPQUFBLENBQUF1USxHQUFBLENBQUFoVSxFQUFBLENBQUFzZ0MsSUFBQSxFQUNBLE1BQ0FBLElBQUEsQ0FBQTN1QixXQUFBLENBQUFwVixRQUFBLENBQUFtNUIsY0FBQSxrQ0FDQSxDQUNBLE9BQUE5a0IsQ0FBQSxFQUNBcFgsT0FBQSxDQUFBMmhDLElBQUEsc0NBQUF2cUIsQ0FBQSxFQUNBLENBQ0EsQ0FFQWphLENBQUEsQ0FBQTBrQyxnQ0FBQSxDQUFBbUYsWUFBQSxDQUFBSCxpQkFBQSxDQUVBLFNBQUFJLG1DQUFBenNCLEdBQUEsRUFDQSxJQUNBLElBQUFwVixHQUFBLENBQUFvVixHQUFBLEVBQUFBLEdBQUEsQ0FBQWhVLEVBQUEsRUFBQWdVLEdBQUEsQ0FBQWhVLEVBQUEsQ0FBQXJGLGFBQUEsRUFBQXFaLEdBQUEsQ0FBQWhVLEVBQUEsQ0FBQXJGLGFBQUEsNEJBQ0EsSUFBQWlFLEdBQUEsVUFDQSxJQUFBckcsQ0FBQSxDQUFBcUcsR0FBQSxDQUFBeEQsZ0JBQUEsK0JBQUFDLE1BQUEsSUFDQSxHQUFBOUMsQ0FBQSxHQUFBQSxDQUFBLEdBQ0EsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBLEdBQ0EsT0FBQUEsQ0FBQSxDQUNBLE9BQUFjLENBQUEsRUFDQSxTQUNBLENBQ0EsQ0FFQTFDLENBQUEsQ0FBQTJrQyxxQ0FBQSxDQUFBb0YsdUJBQUEsQ0FBQUQsa0NBQUEsQ0FDQSxDQUVBO0FBRUEsTUFBQTdaLGtCQUFBLENBRUE3c0IsWUFBQW1tQyxRQUFBLENBQUF6OEIsT0FBQSxFQUNBLEtBQUE0VCxLQUFBLENBQUE2b0IsUUFBQSxPQUFBUyxzQkFBQSxHQUNBLEtBQUFsOUIsT0FBQSxDQUFBQSxPQUFBLENBQ0EsS0FBQW05QixXQUFBLE1BQ0EsS0FBQUMsYUFBQSxNQUVBLEtBQUFDLG1CQUFBLENBQUFsd0IsQ0FBQSxPQUFBbXdCLHlCQUFBLENBQUFud0IsQ0FBQSxFQUNBLEtBQUFvd0Isb0JBQUEsQ0FBQXB3QixDQUFBLE9BQUFtd0IseUJBQUEsQ0FBQW53QixDQUFBLEVBQ0EsS0FBQXlHLEtBQUEsQ0FBQWhVLGdCQUFBLGNBQUF5OUIsbUJBQUEsT0FDQSxLQUFBenBCLEtBQUEsQ0FBQWhVLGdCQUFBLGVBQUEyOUIsb0JBQUEsT0FFQSxLQUFBQyxtQkFBQSxDQUFBcndCLENBQUEsR0FDQSxNQUFBNlMsR0FBQSxDQUFBN1MsQ0FBQSxDQUFBcU0sTUFBQSxDQUFBalYsT0FBQSxrQkFDQSxJQUFBeWIsR0FBQSxRQUFBcE0sS0FBQSxDQUFBM2EsUUFBQSxDQUFBK21CLEdBQUEsU0FDQTdTLENBQUEsQ0FBQXNNLGNBQUEsR0FDQXRNLENBQUEsQ0FBQXVNLGVBQUEsR0FFQSxNQUFBQyxNQUFBLENBQUFxRyxHQUFBLENBQUF6bkIsWUFBQSxnQkFDQSxNQUFBZ0UsRUFBQSxNQUFBNGdDLFdBQUEsQ0FDQSxJQUFBNWdDLEVBQUEsUUFFQXJKLENBQUEsQ0FBQXNrQywwQkFBQSxFQUFBQyxHQUFBLENBQUE5ZCxNQUFBLEVBQ0EzWixPQUFBLE1BQUFBLE9BQUEsQ0FDQXpELEVBQUEsQ0FDQXFYLEtBQUEsTUFBQUEsS0FBQSxDQUNBbWpCLEtBQUEsQ0FBQTVwQixDQUNBLEdBRUEsR0FBQXdNLE1BQUEsaUJBQUFoTyxLQUFBLEdBQ0EsRUFDQSxLQUFBaUksS0FBQSxDQUFBaFUsZ0JBQUEsY0FBQTQ5QixtQkFBQSxFQUNBLENBRUFDLGdCQUFBLEVBQ0EsSUFDQSxJQUFBcHFDLEVBQUEsQ0FBQUgsQ0FBQSxDQUFBRSxhQUFBLEVBQUFGLENBQUEsQ0FBQUUsYUFBQSxDQUFBQyxFQUFBLENBQ0EsR0FBQUEsRUFBQSxTQUFBQSxFQUFBLENBQUF5L0IsaUJBQUEsZUFDQXovQixFQUFBLENBQUF5L0IsaUJBQUEsTUFBQWxmLEtBQUEsRUFDQSxDQUNBO0FBQ0EsSUFDQW1tQixjQUFBLE1BQUFubUIsS0FBQSxFQUNBK2tCLG9CQUFBLE1BQUEva0IsS0FBQSxFQUNBLE9BQUFoZSxDQUFBLEVBQ0EsQ0FDQSxPQUFBdVgsQ0FBQSxFQUNBZ0ksS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLCtCQUFBbVgsQ0FBQSxFQUNBLENBQ0EsQ0FHQW13QiwwQkFBQW53QixDQUFBLEVBQ0EsU0FBQXlHLEtBQUEsQ0FBQTNhLFFBQUEsQ0FBQWtVLENBQUEsQ0FBQXFNLE1BQUEsU0FFQSxNQUFBakwsQ0FBQSxzRUFBQXBCLENBQUEsQ0FBQXFNLE1BQUEsQ0FDQSxNQUFBaGQsR0FBQSxDQUFBK1IsQ0FBQSxFQUFBdlgsT0FBQSxFQUFBd3RCLFlBQUEsQ0FDQSxJQUFBaG9CLEdBQUEsUUFFQSxNQUFBRCxFQUFBLE1BQUE0Z0MsV0FBQSxDQUNBLElBQUE1Z0MsRUFBQSxHQUFBekQsUUFBQSxDQUFBNGlCLElBQUEsQ0FBQXppQixRQUFBLENBQUFzRCxFQUFBLFNBRUEsSUFBQXpJLENBQUEsQ0FDQSxHQUFBeWEsQ0FBQSxZQUFBdVcsZ0JBQUEsRUFBQXZXLENBQUEsQ0FBQTdSLElBQUEsZUFDQTVJLENBQUEsR0FBQXlhLENBQUEsQ0FBQXVGLE9BQUEsQ0FDQXZGLENBQUEsQ0FBQXBXLFlBQUEsZ0JBQUFyRSxDQUFBO0FBQ0EsU0FBQXlhLENBQUEsWUFBQXVXLGdCQUFBLEVBQUF2VyxDQUFBLENBQUE3UixJQUFBLGFBQ0E1SSxDQUFBLENBQUF5YSxDQUFBLENBQUF4QixLQUFBLFNBQUEvWCxNQUFBLENBQUF1WixDQUFBLENBQUF4QixLQUFBLEVBQ0EsTUFDQWpaLENBQUEsQ0FBQXlhLENBQUEsQ0FBQXhCLEtBQUEsQ0FDQSxDQUVBLEdBQUF2USxHQUFBLFNBQ0EsTUFBQXRFLE1BQUEsTUFBQThILE9BQUEsRUFBQXBKLEVBQUEsRUFBQWlCLFlBQUEsR0FBQTBFLEVBQUEsQ0FBQXpJLENBQUEsRUFDQSxHQUFBb0UsTUFBQSxRQUFBcVcsQ0FBQSxDQUFBeEIsS0FBQSxHQUFBN1UsTUFBQSxDQUFBcVcsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBN1UsTUFBQSxDQUVBLFNBQUFzRSxHQUFBLFdBQ0EsTUFBQXRFLE1BQUEsTUFBQThILE9BQUEsRUFBQXBKLEVBQUEsRUFBQXdCLGNBQUEsR0FBQW1FLEVBQUEsQ0FBQXpJLENBQUEsRUFDQSxHQUFBb0UsTUFBQSxRQUFBcVcsQ0FBQSxDQUFBeEIsS0FBQSxHQUFBN1UsTUFBQSxDQUFBcVcsQ0FBQSxDQUFBeEIsS0FBQSxDQUFBN1UsTUFBQSxDQUVBLFNBQUFzRSxHQUFBLGNBQ0EsTUFBQXFwQixPQUFBLE1BQUE3bEIsT0FBQSxFQUFBcEosRUFBQSxFQUFBNEIsaUJBQUEsR0FBQStELEVBQUEsQ0FBQXpJLENBQUEsRUFDQSxHQUFBK3hCLE9BQUEsUUFBQXRYLENBQUEsQ0FBQXhCLEtBQUEsR0FBQThZLE9BQUEsQ0FBQXRYLENBQUEsQ0FBQXhCLEtBQUEsQ0FBQThZLE9BQUEsQ0FFQSxTQUFBcnBCLEdBQUEsY0FBQUQsRUFBQSxDQUFBbkIsU0FBQSxDQUFBbkMsUUFBQSx1QkFDQSxNQUFBeWtDLEtBQUEsQ0FBQXZoQyxRQUFBLENBQUF4SSxNQUFBLENBQUFHLENBQUEsTUFDQSxHQUFBa0IsTUFBQSxDQUFBQyxRQUFBLENBQUF5b0MsS0FBQSxHQUNBLE1BQUFDLE9BQUEsQ0FBQXpxQyxDQUFBLENBQUFFLGFBQUEsQ0FBQUUsaUJBQUEsQ0FBQTRCLEtBQUEsQ0FBQXdvQyxLQUFBLE1BQ0EsS0FBQTE5QixPQUFBLEVBQUE0OUIsbUJBQUEsR0FBQXJoQyxFQUFBLENBQUFvaEMsT0FBQSxFQUNBLEdBQUFocUMsTUFBQSxDQUFBZ3FDLE9BQUEsSUFBQXB2QixDQUFBLENBQUF4QixLQUFBLENBQUF3QixDQUFBLENBQUF4QixLQUFBLENBQUFwWixNQUFBLENBQUFncUMsT0FBQSxFQUNBLENBRUEsTUFDQSxHQUFBcHZCLENBQUEsWUFBQXVXLGdCQUFBLEVBQUF2VyxDQUFBLENBQUE3UixJQUFBLGVBQ0FILEVBQUEsQ0FBQXBFLFlBQUEsU0FBQXFFLEdBQUEsQ0FBQTdJLE1BQUEsR0FBQUcsQ0FBQSxHQUNBLFNBQUF5YSxDQUFBLFlBQUF1VyxnQkFBQSxFQUFBdlcsQ0FBQSxDQUFBN1IsSUFBQSxhQUNBLEdBQUE2UixDQUFBLENBQUF4QixLQUFBLFFBQUEvWCxNQUFBLENBQUFDLFFBQUEsQ0FBQW5CLENBQUEsR0FDQXlJLEVBQUEsQ0FBQTdELGVBQUEsU0FBQThELEdBQUEsRUFDQSxNQUNBRCxFQUFBLENBQUFwRSxZQUFBLFNBQUFxRSxHQUFBLENBQUE3SSxNQUFBLENBQUFHLENBQUEsR0FDQSxDQUNBLFNBQUFBLENBQUEsUUFDQXlJLEVBQUEsQ0FBQTdELGVBQUEsU0FBQThELEdBQUEsRUFDQSxNQUNBRCxFQUFBLENBQUFwRSxZQUFBLFNBQUFxRSxHQUFBLFFBQUExSSxDQUFBLFlBQUE0QixJQUFBLENBQUFJLFNBQUEsQ0FBQWhDLENBQUEsRUFBQUgsTUFBQSxDQUFBRyxDQUFBLEdBQ0EsQ0FDQSxDQUVBO0FBQ0EsR0FBQXlJLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEscUJBQ0EsUUFBQStHLE9BQUEsRUFBQTJsQixZQUFBLE1BQUEzbEIsT0FBQSxDQUFBNGxCLGNBQUEsQ0FBQXJwQixFQUFBLE1BQ0EsTUFBQXlELE9BQUEsQ0FBQTZLLG1CQUFBLENBQUF0TyxFQUFBLEVBQ0EsTUFDQSxLQUFBeUQsT0FBQSxDQUFBNkssbUJBQUEsQ0FBQXRPLEVBQUEsRUFDQSxDQUVBLFFBQUFzaEMsZUFBQSxDQUFBdGhDLEVBQUEsQ0FBQUMsR0FBQSxDQUFBMlEsQ0FBQSxHQUNBLEtBQUEyd0IsaUNBQUEsSUFDQSxDQUNBLENBRUFELGdCQUFBdGhDLEVBQUEsQ0FBQUMsR0FBQSxDQUFBNlUsRUFBQSxFQUNBLEdBQUE5VSxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLHVCQUFBdUQsR0FBQSx5QkFDQSxhQUNBLENBRUE0bEIsY0FBQXRxQixRQUFBLEVBQ0EsS0FBQXFsQyxXQUFBLENBQUFybEMsUUFBQSxDQUNBLEtBQUF3WSxNQUFBLEdBQ0EsQ0FFQTNFLE1BQUEsRUFDQSxLQUFBd3hCLFdBQUEsTUFDQSxRQUFBQyxhQUFBLEVBQ0ExdUIsWUFBQSxNQUFBMHVCLGFBQUEsRUFDQSxLQUFBQSxhQUFBLE1BQ0EsQ0FDQTtBQUNBLEtBQUF4cEIsS0FBQSxDQUFBbGIsZUFBQSwwQkFDQSxLQUFBa2IsS0FBQSxDQUFBbEgsU0FBQSxxRkFDQSxDQUVBb3hCLGtDQUFBQyxLQUFBLE1BQ0EsTUFBQXQyQixNQUFBLHFFQUFBM08sUUFBQSxDQUFBdXZCLGFBQUEsQ0FDQSxNQUFBMlYsU0FBQSxDQUFBdjJCLE1BQUEsRUFBQXpRLE9BQUEsRUFBQXd0QixZQUFBLE9BQ0EsSUFBQXdCLFFBQUEsTUFBQUUsTUFBQSxNQUVBLEdBQUF6ZSxNQUFBLHFCQUFBQSxNQUFBLG1CQUFBQSxNQUFBLEVBQ0E7QUFDQXVlLFFBQUEsQ0FBQXZlLE1BQUEsQ0FBQXdlLGNBQUEsQ0FDQTtBQUNBQyxNQUFBLENBQUF6ZSxNQUFBLENBQUEwZSxZQUFBLENBQ0EsQ0FFQSxRQUFBaVgsYUFBQSxDQUFBMXVCLFlBQUEsTUFBQTB1QixhQUFBLEVBQ0EsS0FBQUEsYUFBQSx1QkFBQTUwQixVQUFBLE1BQ0EsS0FBQThILE1BQUEsR0FDQSxHQUFBMHRCLFNBQUEsRUFDQSxNQUFBM1gsSUFBQSxxRUFDQSxLQUFBelMsS0FBQSxDQUFBMWMsYUFBQSx5QkFBQThtQyxTQUFBLEtBQ0EsQ0FDQSxHQUFBM1gsSUFBQSxFQUNBQSxJQUFBLENBQUF0SSxLQUFBLEdBQ0EsSUFDQSxHQUFBaUksUUFBQSxRQUFBRSxNQUFBLGVBQUFHLElBQUEsQ0FBQUQsaUJBQUEsZUFDQTtBQUNBQyxJQUFBLENBQUFELGlCQUFBLENBQUFKLFFBQUEsQ0FBQUUsTUFBQSxFQUNBLENBQ0EsT0FBQS9ZLENBQUEsRUFBQWdJLEtBQUEsRUFBQUMsR0FBQSxFQUFBcGYsS0FBQSxpQkFBQW1YLENBQUEsR0FDQSxDQUNBLENBQ0EsRUFBQTR3QixLQUFBLEVBQ0EsQ0FFQXp0QixPQUFBLEVBRUEsTUFBQS9ULEVBQUEsTUFBQTRnQyxXQUFBLENBQ0EsSUFBQTVnQyxFQUFBLEdBQUF6RCxRQUFBLENBQUE0aUIsSUFBQSxDQUFBemlCLFFBQUEsQ0FBQXNELEVBQUEsY0FBQW9QLEtBQUEsR0FFQTtBQUNBLEtBQUFpSSxLQUFBLENBQUFsYixlQUFBLDBCQUVBLE1BQUF1bEMsV0FBQSxNQUFBcnFCLEtBQUEsQ0FBQXNxQixTQUFBLENBRUE7QUFDQSxHQUFBM2hDLEVBQUEsQ0FBQW5CLFNBQUEsQ0FBQW5DLFFBQUEsdUJBQ0EsSUFBQWljLEdBQUEsTUFDQSxJQUNBQSxHQUFBLENBQUFoaUIsQ0FBQSxDQUFBK2MsRUFBQSxFQUFBQSxFQUFBLENBQUFDLFFBQUEsRUFBQXBYLFFBQUEsQ0FBQUMsY0FBQSxvQ0FBQWtYLEVBQUEsQ0FBQUMsUUFBQSxvQ0FDQSxPQUFBdGEsQ0FBQSxFQUNBc2YsR0FBQSxNQUNBLENBRUEsR0FBQUEsR0FBQSxFQUNBLEtBQUF0QixLQUFBLENBQUFsSCxTQUFBLENBQUF3SSxHQUFBLEtBQ0EsS0FBQWlwQiwyQkFBQSxHQUNBLEtBQUFDLHVCQUFBLENBQUE3aEMsRUFBQSxFQUNBLEtBQUFraEMsZUFBQSxHQUNBLEtBQUE3cEIsS0FBQSxDQUFBc3FCLFNBQUEsQ0FBQUQsV0FBQSxDQUNBLE9BQ0EsQ0FFQSxNQUFBSSxPQUFBLENBQUFuckMsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsRUFBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQXNwQywwQkFBQSxDQUNBLE1BQUE5WSxPQUFBLENBQUEzd0IsQ0FBQSxDQUFBNHdCLGdCQUFBLEtBQ0EsTUFBQXdhLEtBQUEsQ0FBQXphLE9BQUEsa0JBQ0EsR0FBQXlhLEtBQUEsRUFBQUQsT0FBQSxFQUNBLEtBQUF6cUIsS0FBQSxDQUFBbEgsU0FBQSxJQUNBMnhCLE9BQUEsQ0FBQS90QixNQUFBLENBQ0EsS0FBQXNELEtBQUEsQ0FDQTBxQixLQUFBLENBQ0EsR0FDQSxDQUFBL2hDLEVBQUEsQ0FBQXlELE9BQUEsTUFBQUEsT0FBQSxDQUFBdEQsSUFBQSxXQUFBZ1UsS0FBQSxDQUFBNHRCLEtBQUEsQ0FBQS8vQixLQUFBLFlBQ0EsRUFDQSxLQUFBNC9CLDJCQUFBLEdBRUE7QUFDQSxJQUNBLE1BQUFJLFdBQUEsQ0FDQSxLQUFBM3FCLEtBQUEsQ0FBQTFjLGFBQUEsb0NBQ0EsS0FBQTBjLEtBQUEsQ0FBQTFjLGFBQUEsMkRBQ0EsS0FBQTBjLEtBQUEsQ0FBQTFjLGFBQUEsaUNBRUEsTUFBQXNuQyxRQUFBLENBQ0EsT0FBQTVxQixLQUFBLENBQUExYyxhQUFBLDJCQUVBLElBQUFzbkMsUUFBQSxFQUNBO0FBQ0EsTUFBQTNCLElBQUEsVUFBQTRCLFdBQUEvMkIsSUFBQSxFQUNBLElBQUFnM0IsQ0FBQSxDQUNBaDNCLElBQUEsQ0FBQXhRLGFBQUEsb0NBQ0F3USxJQUFBLENBQUF4USxhQUFBLDJEQUNBd1EsSUFBQSxDQUFBeFEsYUFBQSxpQ0FDQSxHQUFBd25DLENBQUEsUUFBQUEsQ0FBQSxDQUNBO0FBQ0EsTUFBQTNELE1BQUEsQ0FDQXJ6QixJQUFBLENBQUF4USxhQUFBLHFFQUNBd1EsSUFBQSxDQUFBeFEsYUFBQSxvQkFBQXdRLElBQUEsQ0FDQSxNQUFBdk0sR0FBQSxDQUFBckMsUUFBQSxDQUFBOEssYUFBQSxRQUNBekksR0FBQSxDQUFBMEksU0FBQSwrQ0FDQSxNQUFBODZCLEdBQUEsQ0FBQTdsQyxRQUFBLENBQUE4SyxhQUFBLFVBQ0ErNkIsR0FBQSxDQUFBOTZCLFNBQUEsb0JBQ0E4NkIsR0FBQSxDQUFBMXdCLFdBQUEsVUFDQSxNQUFBMndCLEdBQUEsQ0FBQTlsQyxRQUFBLENBQUE4SyxhQUFBLFFBQ0FnN0IsR0FBQSxDQUFBLzZCLFNBQUEsc0JBQ0E2NkIsQ0FBQSxDQUFBNWxDLFFBQUEsQ0FBQThLLGFBQUEsUUFDQTg2QixDQUFBLENBQUE3NkIsU0FBQSwwQkFDQTY2QixDQUFBLENBQUF2bUMsWUFBQSxpQ0FDQXltQyxHQUFBLENBQUExd0IsV0FBQSxDQUFBd3dCLENBQUEsRUFDQXZqQyxHQUFBLENBQUErUyxXQUFBLENBQUF5d0IsR0FBQSxFQUNBeGpDLEdBQUEsQ0FBQStTLFdBQUEsQ0FBQTB3QixHQUFBLEVBQ0E3RCxNQUFBLENBQUE3c0IsV0FBQSxDQUFBL1MsR0FBQSxFQUNBLE9BQUF1akMsQ0FBQSxDQUNBLE9BQUE5cUIsS0FBQSxFQUVBLE1BQUFrcEIsQ0FBQSxDQUFBNXBDLENBQUEsQ0FBQUUsYUFBQSxFQUFBRixDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxFQUFBSCxDQUFBLENBQUFFLGFBQUEsQ0FBQUMsRUFBQSxDQUFBMnFCLHFCQUFBLENBQ0EsR0FBQThlLENBQUEsU0FBQUEsQ0FBQSxDQUFBdGQsa0JBQUEsZUFDQXFkLElBQUEsQ0FBQW53QixTQUFBLElBQ0Fvd0IsQ0FBQSxDQUFBdGQsa0JBQUEsTUFBQXhmLE9BQUEsQ0FBQXpELEVBQUEsQ0FBQXNnQyxJQUFBLEVBQ0EsQ0FDQSxDQUNBLE9BQUExdkIsQ0FBQSxFQUFBZ0ksS0FBQSxFQUFBQyxHQUFBLEVBQUFwZixLQUFBLCtCQUFBbVgsQ0FBQSxHQUVBLEtBQUFpeEIsdUJBQUEsQ0FBQTdoQyxFQUFBLEVBQ0EsS0FBQXFYLEtBQUEsQ0FBQXNxQixTQUFBLENBQUFELFdBQUEsQ0FDQSxPQUNBLENBRUEsS0FBQXJxQixLQUFBLENBQUFsSCxTQUFBLHFGQUNBLE9BQ0EsQ0FFQTtBQUNBLElBQUFuUSxFQUFBLENBQUFuQixTQUFBLENBQUFuQyxRQUFBLGdDQUFBMFMsS0FBQSxHQUVBLE1BQUFsQixJQUFBLENBQUF2WCxDQUFBLENBQUFFLGFBQUEsQ0FBQXNYLHdCQUFBLENBQUFDLHVCQUFBLENBQUFwTyxFQUFBLEVBQ0EsTUFBQUcsSUFBQSxDQUFBK04sSUFBQSxDQUFBL04sSUFBQSxTQUVBLFNBQUFtaUMsU0FBQWpvQyxFQUFBLEVBQ0EsSUFBQTFELENBQUEsQ0FBQStjLEVBQUEsR0FBQUEsRUFBQSxDQUFBQyxRQUFBLGFBQ0EsSUFBQXBYLFFBQUEsQ0FBQUMsY0FBQSxTQUFBbkMsRUFBQSxjQUNBLElBQ0EsT0FBQXFaLEVBQUEsQ0FBQUMsUUFBQSxDQUFBdFosRUFBQSxFQUNBLE9BQUF1VyxDQUFBLEVBQ0EsWUFDQSxDQUNBLENBRUEsTUFBQWdKLE1BQUEsdUJBQUF6WixJQUFBLEdBQ0EsTUFBQXdZLEdBQUEsQ0FBQTJwQixRQUFBLENBQUExb0IsTUFBQSxFQUNBLE1BQUEyb0IsV0FBQSxDQUFBRCxRQUFBLCtCQUVBLE1BQUFoYixPQUFBLENBQUEzd0IsQ0FBQSxDQUFBNHdCLGdCQUFBLEtBQ0EsTUFBQXdYLGVBQUEsQ0FBQXpYLE9BQUEsQ0FBQW5uQixJQUFBLFFBQ0EsTUFBQTJoQyxPQUFBLENBQUFuckMsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsRUFBQUgsQ0FBQSxDQUFBRSxhQUFBLENBQUFDLEVBQUEsQ0FBQXNwQywwQkFBQSxDQUVBLEdBQUF6bkIsR0FBQSxFQUNBO0FBQ0EsTUFBQWtQLE1BQUEsQ0FBQUMsUUFBQSxDQUFBOVcsSUFBQSxDQUFBakQsSUFBQSxDQUFBM0wsTUFBQSxDQUFBME8sU0FBQSxDQUFBQyxjQUFBLEVBQ0EsTUFBQTZXLEtBQUEsQ0FBQW1YLGVBQUEsRUFBQUEsZUFBQSxDQUFBcFgsTUFBQSxFQUFBb1gsZUFBQSxDQUFBcFgsTUFBQSxDQUFBQyxLQUFBLENBQUFtWCxlQUFBLENBQUFwWCxNQUFBLENBQUFDLEtBQUEsSUFDQSxNQUFBNGEsTUFBQSxLQUFBdDBCLElBQUEsRUFDQSxHQUFBMFosS0FBQSxFQUNBeGxCLE1BQUEsQ0FBQW81QixJQUFBLENBQUE1VCxLQUFBLEVBQUF4cEIsT0FBQSxDQUFBbVYsQ0FBQSxHQUNBLE1BQUFjLElBQUEsQ0FBQXVULEtBQUEsQ0FBQXJVLENBQUEsTUFDQSxJQUFBc1UsTUFBQSxDQUFBM1osSUFBQSxDQUFBcUYsQ0FBQSxHQUNBLEdBQUFzVSxNQUFBLENBQUF4VCxJQUFBLGFBQ0E7QUFDQW11QixNQUFBLENBQUFqdkIsQ0FBQSxFQUFBYyxJQUFBLENBQUFsVSxJQUFBLGVBQUFrVSxJQUFBLENBQUEyVCxPQUFBLENBQUEzVCxJQUFBLENBQUEyVCxPQUFBLENBQ0EsQ0FDQSxTQUFBM1QsSUFBQSxDQUFBbFUsSUFBQSxjQUNBO0FBQ0FxaUMsTUFBQSxDQUFBanZCLENBQUEsRUFBQTVjLENBQUEsQ0FBQUUsYUFBQSxDQUFBRSxpQkFBQSxDQUFBb0IsY0FBQSxDQUFBK1YsSUFBQSxDQUFBcUYsQ0FBQSxTQUNBLFNBQUFyRixJQUFBLENBQUFxRixDQUFBLFFBQUFzVSxNQUFBLENBQUF4VCxJQUFBLGFBQ0FtdUIsTUFBQSxDQUFBanZCLENBQUEsRUFBQWMsSUFBQSxDQUFBMlQsT0FBQSxDQUNBLENBQ0EsR0FDQSxDQUNBLEtBQUEzUSxLQUFBLENBQUFsSCxTQUFBLENBQUF3SSxHQUFBLENBQUE2cEIsTUFBQSxFQUVBLEtBQUF0QixlQUFBLEdBQ0EsU0FBQW5DLGVBQUEsRUFBQStDLE9BQUEsRUFDQSxLQUFBenFCLEtBQUEsQ0FBQWxILFNBQUEsSUFDQTJ4QixPQUFBLENBQUEvdEIsTUFBQSxDQUNBLEtBQUFzRCxLQUFBLENBQ0EwbkIsZUFBQSxDQUNBLElBQUE3d0IsSUFBQSxFQUNBLENBQUFsTyxFQUFBLENBQUF5RCxPQUFBLE1BQUFBLE9BQUEsQ0FBQXRELElBQUEsQ0FBQWdVLEtBQUEsQ0FBQWpHLElBQUEsQ0FBQWxNLEtBQUEsS0FDQSxFQUNBO0FBQ0EsS0FBQWsvQixlQUFBLEdBQ0EsU0FBQXFCLFdBQUEsRUFDQSxLQUFBbHJCLEtBQUEsQ0FBQWxILFNBQUEsQ0FBQW95QixXQUFBLEtBQUFyMEIsSUFBQSxHQUNBLEtBQUFnekIsZUFBQSxHQUNBLE1BRUEsTUFBQXVCLEdBQUEsd0NBQUE3b0IsTUFBQSx5QkFBQXhpQixNQUFBLENBQUErSSxJQUFBLGtCQUNBLEtBQUFrWCxLQUFBLENBQUFsSCxTQUFBLElBQ0EsTUFBQXV5QixHQUFBLENBQUFubUMsUUFBQSxDQUFBOEssYUFBQSxRQUNBcTdCLEdBQUEsQ0FBQXA3QixTQUFBLDhCQUNBbzdCLEdBQUEsQ0FBQWh4QixXQUFBLENBQUErd0IsR0FBQTtBQUNBLEtBQUFwckIsS0FBQSxDQUFBMUYsV0FBQSxDQUFBK3dCLEdBQUEsRUFDQSxDQUVBLEtBQUFkLDJCQUFBLEdBQ0EsS0FBQXZxQixLQUFBLENBQUFzcUIsU0FBQSxDQUFBRCxXQUFBLENBQ0EsQ0FFQUUsNEJBQUEsRUFDQSxNQUFBL0ssTUFBQSxDQUFBMzVCLEtBQUEsQ0FBQUMsSUFBQSxNQUFBa2EsS0FBQSxDQUFBamMsZ0JBQUEsaUNBQ0EsSUFBQXk3QixNQUFBLENBQUF4N0IsTUFBQSxRQUVBLElBQUFULEtBQUEsT0FDQWk4QixNQUFBLENBQUF6NEIsT0FBQSxDQUFBNDRCLENBQUEsR0FDQSxJQUFBcDhCLEtBQUEsRUFBQW84QixDQUFBLENBQUFuNEIsU0FBQSxDQUFBbkMsUUFBQSxhQUNBOUIsS0FBQSxNQUNBLE1BQ0EsR0FBQW84QixDQUFBLENBQUFuNEIsU0FBQSxDQUFBbkMsUUFBQSxhQUNBczZCLENBQUEsQ0FBQW40QixTQUFBLENBQUErRixNQUFBLFlBQ0FveUIsQ0FBQSxDQUFBaDBCLGFBQUEsS0FBQTJYLEtBQUEsMkJBQUF6WCxPQUFBLFNBQ0EsTUFDQTh6QixDQUFBLENBQUFuNEIsU0FBQSxDQUFBK0YsTUFBQSxZQUNBLENBQ0EsQ0FDQSxHQUVBLElBQUFoSyxLQUFBLEVBQ0FpOEIsTUFBQSxJQUFBaDRCLFNBQUEsQ0FBQXVILEdBQUEsWUFDQXl3QixNQUFBLElBQUE3ekIsYUFBQSxLQUFBMlgsS0FBQSwwQkFBQXpYLE9BQUEsU0FDQSxDQUNBLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUNBMitCLHdCQUFBYyxTQUFBLEVBQ0EsSUFDQTtBQUNBLElBQUFDLE9BQUEsQ0FBQWpzQyxDQUFBLENBQUEya0MscUNBQUEsRUFBQTNrQyxDQUFBLENBQUEya0MscUNBQUEsQ0FBQW9GLHVCQUFBLENBRUEsSUFBQXpqQyxJQUFBLEdBQ0EsVUFBQTJsQyxPQUFBLGVBQ0EzbEMsSUFBQSxDQUFBMmxDLE9BQUEsRUFBQTVpQyxFQUFBLENBQUEyaUMsU0FBQSxNQUNBLE1BQ0E7QUFDQSxJQUFBL2pDLEdBQUEsQ0FBQStqQyxTQUFBLEVBQUFBLFNBQUEsQ0FBQWhvQyxhQUFBLDRCQUNBc0MsSUFBQSxDQUFBMkIsR0FBQSxDQUFBQSxHQUFBLENBQUF4RCxnQkFBQSwrQkFBQUMsTUFBQSxNQUNBLEdBQUE0QixJQUFBLEdBQUFBLElBQUEsR0FDQSxHQUFBQSxJQUFBLEdBQUFBLElBQUEsR0FDQSxDQUNBLEtBQUFvYSxLQUFBLENBQUF6YixZQUFBLHlCQUFBeEUsTUFBQSxDQUFBNkYsSUFBQSxHQUNBLE9BQUE1RCxDQUFBLEVBQ0EsQ0FDQSxDQUdBc25DLHVCQUFBLEVBQ0EsTUFBQW5qQyxDQUFBLENBQUFqQixRQUFBLENBQUE4SyxhQUFBLFFBQ0E3SixDQUFBLENBQUFuRCxFQUFBLHVCQUNBbUQsQ0FBQSxDQUFBOEosU0FBQSx1QkFDQS9LLFFBQUEsQ0FBQTRpQixJQUFBLENBQUF4TixXQUFBLENBQUFuVSxDQUFBLEVBQ0EsbUNBQUFBLENBQUEsQ0FDQSxDQUNBLENBRUE7QUFDQTdHLENBQUEsQ0FBQWl3QixrQkFBQSxDQUFBQSxrQkFBQSxDQUNBcnFCLFFBQUEsQ0FBQXlHLGFBQUEsS0FBQTJYLEtBQUEsOEJBRUEsR0FBQTFRLE1BQUEiLCJpZ25vcmVMaXN0IjpbXX0=