WordPress.org

Plugin Directory

Changeset 1762953


Ignore:
Timestamp:
11/10/17 13:21:03 (5 weeks ago)
Author:
podpirate
Message:

v1.0.4

Location:
the-paste
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • the-paste/tags/1.0.4/include/ThePaste/Admin/Admin.php

    r1730916 r1762953  
    3838        } 
    3939 
    40         wp_register_script( 'the-paste-base',  
     40        wp_register_script( 'the-paste-base', 
    4141            $this->core->get_asset_url( $script_source ), 
    42             array( 'jquery', 'swfobject', 'media-editor' ),  
     42            array( 'jquery', 'swfobject', 'media-editor' ), 
    4343            $version 
    4444        ); 
    4545        wp_localize_script( 'the-paste-base' , 'thepaste' , array( 
    4646            'l10n' => array( 
    47                 'snapshot'                      => __('Snapshot','the-paste'), 
    48                 'take_snapshot'                 => __('Take Snapshot','the-paste'), 
    49                 'copy_paste'                    => __('Copy & Paste' , 'the-paste'), 
    50                 'pasted'                        => __('Pasted' , 'the-paste'), 
    51                 'image'                         => __('Image'), 
    52                 'paste_error_no_image'          => __('No image data pasted.','the-paste'), 
    53                 'paste_error'                   => __('Error pasting image data.','the-paste'), 
    54                 'upload_pasted_images'          => __('Upload pasted images', 'the-paste'), 
    55                 'upload_image'                  => __('Upload image', 'the-paste'), 
     47                'snapshot'                      => __( 'Snapshot','the-paste' ), 
     48                'take_snapshot'                 => __( 'Take Snapshot','the-paste' ), 
     49                'copy_paste'                    => __( 'Copy & Paste', 'the-paste' ), 
     50                'pasted'                        => __( 'Pasted', 'the-paste' ), 
     51                'pasted_into'                   => __( 'Pasted into', 'the-paste' ), 
     52                'image'                         => __( 'Image', 'the-paste' ), 
     53                'paste_error_no_image'          => __( 'No image data pasted.', 'the-paste' ), 
     54                'paste_error'                   => __( 'Error pasting image data.', 'the-paste' ), 
     55                'upload_pasted_images'          => __( 'Upload pasted images', 'the-paste' ), 
     56                'upload_image'                  => __( 'Upload image', 'the-paste' ), 
     57 
    5658            ), 
    5759            'options'   => array( 
     
    9799    function print_media_templates() { 
    98100        $rp = THE_PASTE_DIRECTORY . 'include' . DIRECTORY_SEPARATOR . '/template/{,*/,*/*/,*/*/*/}*.php'; 
    99         foreach ( glob( $rp, GLOB_BRACE ) as $template_file ) {  
     101        foreach ( glob( $rp, GLOB_BRACE ) as $template_file ) { 
    100102            include $template_file; 
    101103        } 
    102104    } 
    103105} 
    104  
  • the-paste/tags/1.0.4/include/ThePaste/Admin/TinyMce/TinyMce.php

    r1729167 r1762953  
    3838     */ 
    3939    protected $plugin_params = false; 
    40      
     40 
    4141    /** 
    4242     *  TinyMCE Settings 
     
    4949     */ 
    5050    protected $toolbar_css = false; 
    51      
     51 
    5252    /** 
    5353     *  Load custom css for toolbar. 
     
    9494            throw( new Exception( '`$module_name` must be defined in a derived classes.' ) ); 
    9595        } 
    96          
    97         $this->prefix = str_replace('-','_',$this->module_name); 
     96 
     97        $this->prefix = str_replace( '-', '_', $this->module_name ); 
    9898 
    9999        $parts = array_slice( explode( '\\', get_class( $this ) ), 0, -1 ); 
     
    109109            'mce_buttons_2' => false, 
    110110        ) ); 
    111          
     111 
    112112        foreach ( $this->editor_buttons as $hook => $buttons ) { 
    113113            if ( $buttons !== false ) { 
     
    115115            } 
    116116        } 
    117          
     117 
    118118 
    119119        // add tinymce plugin parameters 
     
    131131            add_action( "admin_print_scripts", array( $this, 'enqueue_toolbar_css') ); 
    132132        } 
    133         if ( $this->text_widget !== false ) { 
    134             add_action( 'print_default_editor_scripts', array( $this, 'print_editor_scripts' ) ); 
    135         } 
    136  
    137         // add tinymce plugin 
     133 
    138134        if ( $this->text_widget !== false ) { 
    139135            // looks like it will only works with widget? 
    140136            add_action( 'print_default_editor_scripts', array( $this, 'print_editor_scripts' ) ); 
     137            if ( $this->toolbar_css ) { 
     138                add_action( 'load-widgets.php', array( $this,'enqueue_toolbar_css' ) ); 
     139            } 
    141140        } 
    142141        // will only work with default editor 
     
    151150     */ 
    152151    public function print_editor_scripts() { 
     152 
    153153        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
     154 
     155        $js_settings = array() + $this->mce_settings; 
     156 
     157        // add editor css 
     158        if ( $this->editor_css ) { 
     159            $js_settings = wp_parse_args( $js_settings, array( 
     160                'content_css'   => $this->get_mce_css_url(), 
     161            ) ); 
     162        } 
     163 
     164        // add buttons 
     165        foreach ( $this->editor_buttons as $row => $btns ) { 
     166 
     167            $toolbar_idx = preg_replace('/([^0-9]+)/imsU','', $row ); 
     168 
     169            if ( ! $btns ) { 
     170                continue; 
     171            } 
     172 
     173            $js_settings[ 'toolbar' . $toolbar_idx ] = implode( ',', array_keys($btns) ); 
     174        } 
     175 
     176        // add plugin 
     177        $js_settings['external_plugins'] = $this->add_plugin( array() ); 
     178 
    154179        ?> 
    155         <script type="text/javascript"> 
    156         /* TinyMCE plugin <?php echo $this->module_name ?> */ 
    157         jQuery( document ).on( 'tinymce-editor-setup', function( event, editor ) { 
    158 <?php echo file_get_contents( $this->core->get_asset_path( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ) ); ?>; 
    159 <?php echo $this->prefix ?>PluginCallback( editor ); 
     180<script type="text/javascript"> 
     181/* TinyMCE plugin <?php echo $this->module_name ?> */ 
     182// extend wp editor settings 
     183(function($){ 
     184    var orig = window.wp.editor.getDefaultSettings; 
     185    window.wp.editor.getDefaultSettings = function() { 
     186        var settings = orig.apply( this, arguments ), 
     187            mergeSettings = <?php echo json_encode( $js_settings ); ?>; 
     188        $.each( mergeSettings, function(i,el) { 
     189            var type, 
     190                override = ['entity_encoding', 'language', 'resize', 'skin', 'theme','wp_lang_attr']; 
     191            if ( ! ( i in settings.tinymce ) || (i in override) || 'booelan' === typeof settings.tinymce[i] ) { 
     192                settings.tinymce[i] = el; 
     193            } else { 
     194                type = typeof settings.tinymce[i]; 
     195                if ( 'string' === type ) { 
     196                    settings.tinymce[i] += ',' + el; 
     197                } else if ( 'object' === type ) { 
     198                    settings.tinymce[i] = $.extend( true, settings.tinymce[i], el ); 
     199                } 
     200            } 
    160201        }); 
    161         /* END: TinyMCE plugin <?php echo $this->module_name ?> */ 
    162         </script> 
     202        return settings; 
     203    } 
     204})(jQuery); 
     205/* END: TinyMCE plugin <?php echo $this->module_name ?> */ 
     206 
     207</script> 
    163208        <?php 
    164209    } 
     
    171216    public function add_plugin( $plugins_array ) { 
    172217        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
    173         $plugins_array[ $this->module_name ] = $this->core->get_asset_url( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ); 
     218        $plugins_array[ $this->prefix ] = $this->core->get_asset_url( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ); 
    174219        return $plugins_array; 
    175220    } 
     
    201246     */ 
    202247    public function enqueue_toolbar_css() { 
     248        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
    203249        $asset_id = sprintf( 'tinymce-%s-toolbar-css', $this->module_name ); 
    204         $asset_url = $this->core->get_asset_url( $this->styles_dir . '/admin/mce/the-paste-toolbar.css' ); 
    205         wp_enqueue_style( $asset_id, $asset_url ); 
    206     } 
     250        wp_enqueue_style( $asset_id, $this->get_toolbar_css_url() ); 
     251    } 
     252 
     253    /** 
     254     *  @return string URL to editor css 
     255     */ 
     256     protected function get_toolbar_css_url() { 
     257        return $this->core->get_asset_url( $this->styles_dir . '/admin/mce/'. $this->module_name.'-toolbar.css' ); 
     258    } 
    207259 
    208260    /** 
     
    212264     */ 
    213265    public function mce_css( $styles ) { 
    214         $mce_css = $this->core->get_asset_url( $this->styles_dir . '/admin/mce/the-paste-editor.css' ); 
    215         $styles .= ','. $mce_css; 
     266        $styles .= ','. $this->get_mce_css_url(); 
    216267        return $styles; 
    217268    } 
    218269 
     270    /** 
     271     *  @return string URL to editor css 
     272     */ 
     273    protected function get_mce_css_url() { 
     274        return $this->core->get_asset_url( $this->styles_dir . '/admin/mce/'. $this->module_name.'-editor.css' ); 
     275    } 
    219276    /** 
    220277     *  print plugin settings 
  • the-paste/tags/1.0.4/include/ThePaste/Admin/TinyMce/TinyMceThePaste.php

    r1760781 r1762953  
    55class TinyMceThePaste extends TinyMce { 
    66 
     7    /** 
     8     *  @inheritdoc 
     9     */ 
    710    protected $module_name = 'the-paste'; 
    811 
     12    /** 
     13     *  @inheritdoc 
     14     */ 
    915    protected $editor_buttons = array( 
    1016        'mce_buttons_2' => array( 
     
    1319    ); 
    1420 
     21    /** 
     22     *  @inheritdoc 
     23     */ 
    1524    protected $toolbar_css = true; 
     25 
     26    /** 
     27     *  @inheritdoc 
     28     */ 
    1629    protected $editor_css = true; 
     30 
     31    /** 
     32     *  @inheritdoc 
     33     */ 
    1734    protected $text_widget = true; 
    1835 
    1936    /** 
    20      * Private constructor 
     37     *  @inheritdoc 
    2138     */ 
    2239    protected function __construct() { 
    2340        $this->plugin_params = array(); 
    2441        $this->mce_settings =  array( 
    25             'extended_valid_elements'   => 'canvas', 
    26             'custom_elements'           => 'canvas', 
    2742            'paste_data_images'         => true, 
    2843        ); 
  • the-paste/tags/1.0.4/include/template/pasteboard.php

    r1729167 r1762953  
    11<?php 
    22 
    3 if ( ! defined('ABSPATH') )  
     3if ( ! defined('ABSPATH') ) 
    44    die(); 
    55 
  • the-paste/tags/1.0.4/index.php

    r1762085 r1762953  
    66Description: Paste Images in WordPress from many applications and upload them to the media library. 
    77Author: Jörn Lund 
    8 Version: 1.0.3 
     8Version: 1.0.4 
    99Author URI: https://github.com/mcguffin/ 
    1010License: GPL2 
     
    1717 
    1818define( 'THE_PASTE_FILE', __FILE__ ); 
    19 define( 'THE_PASTE_VERSION', '1.0.3' ); 
     19define( 'THE_PASTE_VERSION', '1.0.4' ); 
    2020define( 'THE_PASTE_DIRECTORY', plugin_dir_path(__FILE__) ); 
    2121 
  • the-paste/tags/1.0.4/js/admin/mce/the-paste-plugin.js

    r1762085 r1762953  
    469469            if ( event.element.nodeName === 'IMG' && ! editor.wp.isPlaceholder( event.element ) ) { 
    470470                event.toolbar = toolbar; 
     471 
    471472                uploadBtn = toolbar.$el.find('.thepaste-upload').closest('.mce-btn'); 
    472473 
     
    513514    }; 
    514515 
    515     tinymce.PluginManager.add( 'thepaste', the_pastePluginCallback ); 
     516    tinymce.PluginManager.add( 'the_paste', the_pastePluginCallback ); 
    516517 
    517518} )(jQuery); 
  • the-paste/tags/1.0.4/js/admin/mce/the-paste-plugin.min.js

    r1762085 r1762953  
    1 (function(){var t,e,n,a,o;t=window.jQuery,t.paste=function(t){var n;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),n=e.mountNonInputable(t),n._container},t.fn.pastableNonInputable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is("textarea, input:text, [contenteditable]")||(e.mountNonInputable(n),n._pastable=!0);return this},t.fn.pastableTextarea=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not(textarea, input:text)")||(e.mountTextarea(n),n._pastable=!0);return this},t.fn.pastableContenteditable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not([contenteditable])")||(e.mountContenteditable(n),n._pastable=!0);return this},a=function(t,e){var n,a,o,r,i,u,s,l,c,p,d;if(null==e&&(e=512),!(l=t.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(p=l,l=p[0],u=p[1],n=p[2],r=atob(n),o=[],c=0;c<r.length;){for(d=r.slice(c,c+e),i=new Array(d.length),s=0;s<d.length;)i[s]=d.charCodeAt(s),s++;a=new Uint8Array(i),o.push(a),c+=e}return new Blob(o,{type:u})},n=function(){return t(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},o=function(e,n){var a,o,r,i,u,s;return i=void 0,u=void 0,r=void 0,o=void 0,a=void 0,"area"===(s=e.nodeName.toLowerCase())?(i=e.parentNode,u=i.name,!(!e.href||!u||"map"!==i.nodeName.toLowerCase())&&(r=t("img[usemap='#"+u+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(s)?(o=!e.disabled)&&(a=t(e).closest("fieldset")[0])&&(o=!a.disabled):o="a"===s?e.href||n:n,(o=o||t(e).is("[contenteditable]"))&&t(e).is(":visible"))},e=function(){function e(e,n){this._container=e,this._target=n,this._container=t(this._container),this._target=t(this._target).addClass("pastable"),this._container.on("paste",function(t){return function(e){var n,a,o,r,i,u,s,l,c,p,d,g,f;if(e.currentTarget!==e.target)return e.preventDefault();if(t._paste_event_fired=!0,null!=(null!=(c=e.originalEvent)?c.clipboardData:void 0))if(n=e.originalEvent.clipboardData,n.items)for(p=n.items,r=0,u=p.length;r<u;r++){if(o=p[r],o.type.match(/^image\//)){l=new FileReader,l.onload=function(e){return t._handleImage(e.target.result)};try{l.readAsDataURL(o.getAsFile())}catch(t){}e.preventDefault();break}"text/plain"===o.type&&o.getAsString(function(e){return t._target.trigger("pasteText",{text:e})})}else-1!==Array.prototype.indexOf.call(n.types,"text/plain")&&(f=n.getData("Text"),setTimeout(function(){return t._target.trigger("pasteText",{text:f})},1)),t._checkImagesInContainer(function(e){return t._handleImage(e)});if(n=window.clipboardData)if(null!=(d=f=n.getData("Text"))?d.length:void 0)setTimeout(function(){return t._target.trigger("pasteText",{text:f}),t._target.trigger("_pasteCheckContainerDone")},1);else{for(g=n.files,i=0,s=g.length;i<s;i++)a=g[i],t._handleImage(URL.createObjectURL(a));t._checkImagesInContainer(function(t){})}return null}}(this))}return e.prototype._target=null,e.prototype._container=null,e.mountNonInputable=function(a){var r;return r=new e(n().appendTo(a),a),t(a).on("click",function(t){return function(t){if(!o(t.target,!1))return r._container.focus()}}()),r._container.on("focus",function(e){return function(){return t(a).addClass("pastable-focus")}}()),r._container.on("blur",function(e){return function(){return t(a).removeClass("pastable-focus")}}())},e.mountTextarea=function(a){var o,r,i,u;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(i=Object.getOwnPropertyDescriptor)&&null!=(u=i.call(Object,DataTransfer.prototype,"items"))?u.get:void 0)?this.mountContenteditable(a):(r=new e(n().insertBefore(a),a),o=!1,t(a).on("keyup",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(o=!1),null}),t(a).on("keydown",function(e){var n;return 17!==(n=e.keyCode)&&224!==n||(o=!0),null!=e.ctrlKey&&null!=e.metaKey&&(o=e.ctrlKey||e.metaKey),o&&86===e.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(e){return function(){if(!r._paste_event_fired)return t(a).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),t(a).on("paste",function(t){return function(){}}()),t(a).on("focus",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).addClass("pastable-focus")}}()),t(a).on("blur",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).removeClass("pastable-focus")}}()),t(r._target).on("_pasteCheckContainerDone",function(e){return function(){return t(a).focus(),r._textarea_focus_stolen=!1}}()),t(r._target).on("pasteText",function(e){return function(e,n){var o,r,i;return i=t(a).prop("selectionStart"),r=t(a).prop("selectionEnd"),o=t(a).val(),t(a).val(""+o.slice(0,i)+n.text+o.slice(r)),t(a)[0].setSelectionRange(i+n.text.length,i+n.text.length),t(a).trigger("change")}}()))},e.mountContenteditable=function(n){return new e(n,n),t(n).on("focus",function(e){return function(){return t(n).addClass("pastable-focus")}}()),t(n).on("blur",function(e){return function(){return t(n).removeClass("pastable-focus")}}())},e.prototype._handleImage=function(t){var e;return t.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),e=new Image,e.crossOrigin="anonymous",e.onload=function(t){return function(){var n,o,r,i;o=document.createElement("canvas"),o.width=e.width,o.height=e.height,r=o.getContext("2d"),r.drawImage(e,0,0,o.width,o.height),i=null;try{i=o.toDataURL("image/png"),n=a(i)}catch(t){}return i&&t._target.trigger("pasteImage",{blob:n,dataURL:i,width:e.width,height:e.height}),t._target.trigger("pasteImageEnd")}}(this),e.onerror=function(e){return function(){return e._target.trigger("pasteImageError",{message:"Failed to get image from: "+t,url:t}),e._target.trigger("pasteImageEnd")}}(this),e.src=t)},e.prototype._checkImagesInContainer=function(e){var n,a,o,r,i;for(i=Math.floor(1e3*Math.random()),r=this._container.find("img"),a=0,o=r.length;a<o;a++)n=r[a],n["_paste_marked_"+i]=!0;return setTimeout(function(a){return function(){var o,r,u;for(u=a._container.find("img"),o=0,r=u.length;o<r;o++)n=u[o],n["_paste_marked_"+i]||(e(n.src),t(n).remove());return a._target.trigger("_pasteCheckContainerDone")}}(this),1)},e}()}).call(this);var the_pastePluginCallback;!function(t){the_pastePluginCallback=function(e){function n(t){var e=t.src.substring(0,5);return"blob:"===e||"data:"===e}var a,o,r=wp.media.thepaste;r.options.editor.auto_upload="false"!==localStorage.getItem("thepaste.auto_upload"),e.addCommand("cmd_thepaste",function(){r.options.editor.auto_upload=!r.options.editor.auto_upload,localStorage.setItem("thepaste.auto_upload",r.options.editor.auto_upload.toString()),a.active(r.options.editor.auto_upload)}),e.addButton("thepaste",{icon:"thepaste",tooltip:r.l10n.upload_pasted_images,cmd:"cmd_thepaste",onPostRender:function(){a=this},active:r.options.editor.auto_upload}),e.addButton("wp_img_thepaste_upload",{icon:"dashicon dashicons dashicons-upload thepaste-upload",tooltip:r.l10n.upload_image,onclick:function(){var t;t=e.selection.getNode(),r.uploadImage(t,e)}}),e.once("preinit",function(){e.wp&&e.wp._createToolbar&&(o=e.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_thepaste_upload","wp_img_edit","wp_img_remove"]))}),e.on("wptoolbar",function(t){var a;"IMG"!==t.element.nodeName||e.wp.isPlaceholder(t.element)||(t.toolbar=o,a=o.$el.find(".thepaste-upload").closest(".mce-btn"),n(t.element)?a.show():a.hide())}),e.on("BeforePastePreProcess",function(t){return t.content.match(/&lt;svg[\s\S.]*&lt;\/svg&gt;/i)&&(t.preventDefault(),t.content=""),t}).on("PastePostProcess",function(a){var o,i;r.options.editor.auto_upload&&(o=t(a.node).children().first(),o.is("img")&&n(o.get(0))&&(i=r.uploadImage(o.get(0),e),o.remove(),t(a.node).append(i)))})},tinymce.PluginManager.add("thepaste",the_pastePluginCallback)}(jQuery); 
    2 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS1wbHVnaW4uanMiXSwibmFtZXMiOlsiJCIsIlBhc3RlIiwiY3JlYXRlSGlkZGVuRWRpdGFibGUiLCJkYXRhVVJMdG9CbG9iIiwiaXNGb2N1c2FibGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJwYXN0ZSIsInBhc3RlQ29udGFpbmVyIiwicG0iLCJjb25zb2xlIiwibG9nIiwibW91bnROb25JbnB1dGFibGUiLCJfY29udGFpbmVyIiwiZm4iLCJwYXN0YWJsZU5vbklucHV0YWJsZSIsImVsIiwiaiIsImxlbiIsInJlZiIsInRoaXMiLCJsZW5ndGgiLCJfcGFzdGFibGUiLCJpcyIsInBhc3RhYmxlVGV4dGFyZWEiLCJtb3VudFRleHRhcmVhIiwicGFzdGFibGVDb250ZW50ZWRpdGFibGUiLCJtb3VudENvbnRlbnRlZGl0YWJsZSIsImRhdGFVUkwiLCJzbGljZVNpemUiLCJiNjREYXRhIiwiYnl0ZUFycmF5IiwiYnl0ZUFycmF5cyIsImJ5dGVDaGFyYWN0ZXJzIiwiYnl0ZU51bWJlcnMiLCJjb250ZW50VHlwZSIsImkiLCJtIiwib2Zmc2V0Iiwic2xpY2UiLCJtYXRjaCIsImF0b2IiLCJBcnJheSIsImNoYXJDb2RlQXQiLCJVaW50OEFycmF5IiwicHVzaCIsIkJsb2IiLCJ0eXBlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0ciIsImNzcyIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJlbGVtZW50IiwiaGFzVGFiaW5kZXgiLCJmaWVsZHNldCIsImZvY3VzYWJsZUlmVmlzaWJsZSIsImltZyIsIm1hcCIsIm1hcE5hbWUiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwicGFyZW50Tm9kZSIsIm5hbWUiLCJocmVmIiwidGVzdCIsImRpc2FibGVkIiwiY2xvc2VzdCIsIl90YXJnZXQiLCJhZGRDbGFzcyIsIm9uIiwiX3RoaXMiLCJldiIsImNsaXBib2FyZERhdGEiLCJmaWxlIiwiaXRlbSIsImsiLCJsZW4xIiwicmVhZGVyIiwicmVmMSIsInJlZjIiLCJyZWYzIiwidGV4dCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJwcmV2ZW50RGVmYXVsdCIsIl9wYXN0ZV9ldmVudF9maXJlZCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJldmVudCIsIl9oYW5kbGVJbWFnZSIsInJlc3VsdCIsInJlYWRBc0RhdGFVUkwiLCJnZXRBc0ZpbGUiLCJlcnJvciIsImdldEFzU3RyaW5nIiwic3RyaW5nIiwidHJpZ2dlciIsInByb3RvdHlwZSIsImluZGV4T2YiLCJjYWxsIiwidHlwZXMiLCJnZXREYXRhIiwic2V0VGltZW91dCIsIl9jaGVja0ltYWdlc0luQ29udGFpbmVyIiwic3JjIiwiZmlsZXMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJub25JbnB1dGFibGUiLCJhcHBlbmRUbyIsImZvY3VzIiwicmVtb3ZlQ2xhc3MiLCJ0ZXh0YXJlYSIsImN0bERvd24iLCJEYXRhVHJhbnNmZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXQiLCJpbnNlcnRCZWZvcmUiLCJrZXlDb2RlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJfdGV4dGFyZWFfZm9jdXNfc3RvbGVuIiwiZGF0YSIsImNvbnRlbnQiLCJjdXJFbmQiLCJjdXJTdGFydCIsInByb3AiLCJ2YWwiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRlbnRlZGl0YWJsZSIsImxvYWRlciIsIm1lc3NhZ2UiLCJJbWFnZSIsImNyb3NzT3JpZ2luIiwiYmxvYiIsImNhbnZhcyIsImN0eCIsImdldENvbnRleHQiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJvbmVycm9yIiwidXJsIiwiY2IiLCJ0aW1lc3BhbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImZpbmQiLCJyZW1vdmUiLCJ0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayIsImVkaXRvciIsImNhblVwbG9hZCIsInN1YiIsInN1YnN0cmluZyIsInBhc3RlQnRuIiwidG9vbGJhciIsInRoZXBhc3RlIiwid3AiLCJtZWRpYSIsIm9wdGlvbnMiLCJhdXRvX3VwbG9hZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhZGRDb21tYW5kIiwic2V0SXRlbSIsInRvU3RyaW5nIiwiYWN0aXZlIiwiYWRkQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJsMTBuIiwidXBsb2FkX3Bhc3RlZF9pbWFnZXMiLCJjbWQiLCJvblBvc3RSZW5kZXIiLCJ1cGxvYWRfaW1hZ2UiLCJvbmNsaWNrIiwiaW1hZ2UiLCJzZWxlY3Rpb24iLCJnZXROb2RlIiwidXBsb2FkSW1hZ2UiLCJvbmNlIiwiX2NyZWF0ZVRvb2xiYXIiLCJ1cGxvYWRCdG4iLCJpc1BsYWNlaG9sZGVyIiwiJGVsIiwic2hvdyIsImhpZGUiLCJlIiwiJGZpcnN0Q2hpbGQiLCIkdXBsb2FkQm94Iiwibm9kZSIsImNoaWxkcmVuIiwiZmlyc3QiLCJhcHBlbmQiLCJ0aW55bWNlIiwiUGx1Z2luTWFuYWdlciIsImFkZCJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJB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V0FDbEI5QixFQUFPTyxJQUFNUCxFQUFPTyxHQUFHd0IsaUJBQzNCMUIsRUFBVUwsRUFBT08sR0FBR3dCLGdCQUNuQixtQkFDQSxxQkFDQSxvQkFDQSxtQkFDQSx5QkFDQSxjQUNBLHFCQU1IL0IsRUFBT3BGLEdBQUksWUFBYSxTQUFVcUIsR0FDakMsR0FBSStGLEVBQzRCLFNBQTNCL0YsRUFBTXRDLFFBQVFPLFVBQXdCOEYsRUFBT08sR0FBRzBCLGNBQWVoRyxFQUFNdEMsV0FDekVzQyxFQUFNb0UsUUFBVUEsRUFDaEIyQixFQUFZM0IsRUFBUTZCLElBQUlyQyxLQUFLLG9CQUFvQnBGLFFBQVEsWUFFcER3RixFQUFXaEUsRUFBTXRDLFNBQ3JCcUksRUFBVUcsT0FFVkgsRUFBVUksVUFZYnBDLEVBQ0VwRixHQUFJLHdCQUF5QixTQUFTeUgsR0FNdEMsTUFKTUEsR0FBRWhFLFFBQVEzRixNQUFPLG1DQUN0QjJKLEVBQUUxRyxpQkFDRjBHLEVBQUVoRSxRQUFVLElBRU5nRSxJQUdQekgsR0FBSSxtQkFBb0IsU0FBU3lILEdBRWpDLEdBQUlDLEdBQWFDLENBRVpqQyxHQUFTRyxRQUFRVCxPQUFPVSxjQUM1QjRCLEVBQWNwTSxFQUFFbU0sRUFBRUcsTUFBTUMsV0FBV0MsUUFDOUJKLEVBQVk3SyxHQUFHLFFBQVV3SSxFQUFXcUMsRUFBWXhFLElBQUksTUFDeER5RSxFQUFhakMsRUFBU3VCLFlBQWFTLEVBQVl4RSxJQUFJLEdBQUlrQyxHQUN2RHNDLEVBQVl4QyxTQUNaNUosRUFBRW1NLEVBQUVHLE1BQU1HLE9BQVFKLFFBUXZCSyxRQUFRQyxjQUFjQyxJQUFLLFdBQVkvQywwQkFFcEN2SiIsImZpbGUiOiJ0aGUtcGFzdGUtcGx1Z2luLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG5cbi8qXG5wYXN0ZS5qcyBpcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBkYXRhICggdGV4dCAvIGltYWdlICkgZnJvbSBjbGlwYm9hcmQgaW4gZGlmZmVyZW50IGJyb3dzZXJzLiBJdCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgaGFja3MuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9sYXllcnNzc3MvcGFzdGUuanNcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gIHZhciAkLCBQYXN0ZSwgY3JlYXRlSGlkZGVuRWRpdGFibGUsIGRhdGFVUkx0b0Jsb2IsIGlzRm9jdXNhYmxlO1xuXG4gICQgPSB3aW5kb3cualF1ZXJ5O1xuXG4gICQucGFzdGUgPSBmdW5jdGlvbihwYXN0ZUNvbnRhaW5lcikge1xuICAgIHZhciBwbTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICQuZm4ucGFzdGFibGVOb25JbnB1dGFibGUoKSBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgcG0gPSBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShwYXN0ZUNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHBtLl9jb250YWluZXI7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygndGV4dGFyZWEsIGlucHV0OnRleHQsIFtjb250ZW50ZWRpdGFibGVdJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlVGV4dGFyZWEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QodGV4dGFyZWEsIGlucHV0OnRleHQpJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudFRleHRhcmVhKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QoW2NvbnRlbnRlZGl0YWJsZV0pJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudENvbnRlbnRlZGl0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBkYXRhVVJMdG9CbG9iID0gZnVuY3Rpb24oZGF0YVVSTCwgc2xpY2VTaXplKSB7XG4gICAgdmFyIGI2NERhdGEsIGJ5dGVBcnJheSwgYnl0ZUFycmF5cywgYnl0ZUNoYXJhY3RlcnMsIGJ5dGVOdW1iZXJzLCBjb250ZW50VHlwZSwgaSwgbSwgb2Zmc2V0LCByZWYsIHNsaWNlO1xuICAgIGlmIChzbGljZVNpemUgPT0gbnVsbCkge1xuICAgICAgc2xpY2VTaXplID0gNTEyO1xuICAgIH1cbiAgICBpZiAoIShtID0gZGF0YVVSTC5tYXRjaCgvXmRhdGFcXDooW15cXDtdKylcXDtiYXNlNjRcXCwoLispJC8pKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJlZiA9IG0sIG0gPSByZWZbMF0sIGNvbnRlbnRUeXBlID0gcmVmWzFdLCBiNjREYXRhID0gcmVmWzJdO1xuICAgIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICBieXRlQXJyYXlzID0gW107XG4gICAgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKSB7XG4gICAgICBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcbiAgICAgIGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgc2xpY2UubGVuZ3RoKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgICBvZmZzZXQgKz0gc2xpY2VTaXplO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge1xuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9KTtcbiAgfTtcblxuICBjcmVhdGVIaWRkZW5FZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpLmF0dHIoJ3RhYmluZGV4JywgLTEpLmNzcyh7XG4gICAgICB3aWR0aDogMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgIH0pO1xuICB9O1xuXG4gIGlzRm9jdXNhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgaGFzVGFiaW5kZXgpIHtcbiAgICB2YXIgZmllbGRzZXQsIGZvY3VzYWJsZUlmVmlzaWJsZSwgaW1nLCBtYXAsIG1hcE5hbWUsIG5vZGVOYW1lO1xuICAgIG1hcCA9IHZvaWQgMDtcbiAgICBtYXBOYW1lID0gdm9pZCAwO1xuICAgIGltZyA9IHZvaWQgMDtcbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSB2b2lkIDA7XG4gICAgZmllbGRzZXQgPSB2b2lkIDA7XG4gICAgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCdhcmVhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIG1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIG1hcE5hbWUgPSBtYXAubmFtZTtcbiAgICAgIGlmICghZWxlbWVudC5ocmVmIHx8ICFtYXBOYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnbWFwJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbWcgPSAkKCdpbWdbdXNlbWFwPVxcJyMnICsgbWFwTmFtZSArICdcXCddJyk7XG4gICAgICByZXR1cm4gaW1nLmxlbmd0aCA+IDAgJiYgaW1nLmlzKCc6dmlzaWJsZScpO1xuICAgIH1cbiAgICBpZiAoL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChub2RlTmFtZSkpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuICAgICAgaWYgKGZvY3VzYWJsZUlmVmlzaWJsZSkge1xuICAgICAgICBmaWVsZHNldCA9ICQoZWxlbWVudCkuY2xvc2VzdCgnZmllbGRzZXQnKVswXTtcbiAgICAgICAgaWYgKGZpZWxkc2V0KSB7XG4gICAgICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWZpZWxkc2V0LmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnYScgPT09IG5vZGVOYW1lKSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSBlbGVtZW50LmhyZWYgfHwgaGFzVGFiaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGhhc1RhYmluZGV4O1xuICAgIH1cbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSBmb2N1c2FibGVJZlZpc2libGUgfHwgJChlbGVtZW50KS5pcygnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICByZXR1cm4gZm9jdXNhYmxlSWZWaXNpYmxlICYmICQoZWxlbWVudCkuaXMoJzp2aXNpYmxlJyk7XG4gIH07XG5cbiAgUGFzdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgUGFzdGUucHJvdG90eXBlLl90YXJnZXQgPSBudWxsO1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jb250YWluZXIgPSBudWxsO1xuXG4gICAgUGFzdGUubW91bnROb25JbnB1dGFibGUgPSBmdW5jdGlvbihub25JbnB1dGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuYXBwZW5kVG8obm9uSW5wdXRhYmxlKSwgbm9uSW5wdXRhYmxlKTtcbiAgICAgICQobm9uSW5wdXRhYmxlKS5vbignY2xpY2snLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZShldi50YXJnZXQsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICBwYXN0ZS5fY29udGFpbmVyLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQobm9uSW5wdXRhYmxlKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHJldHVybiBwYXN0ZS5fY29udGFpbmVyLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBQYXN0ZS5tb3VudFRleHRhcmVhID0gZnVuY3Rpb24odGV4dGFyZWEpIHtcbiAgICAgIHZhciBjdGxEb3duLCBwYXN0ZSwgcmVmLCByZWYxO1xuICAgICAgaWYgKCh0eXBlb2YgRGF0YVRyYW5zZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIERhdGFUcmFuc2ZlciAhPT0gbnVsbCA/IERhdGFUcmFuc2Zlci5wcm90b3R5cGUgOiB2b2lkIDApICYmICgocmVmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNhbGwoT2JqZWN0LCBEYXRhVHJhbnNmZXIucHJvdG90eXBlLCAnaXRlbXMnKSkgIT0gbnVsbCA/IHJlZjEuZ2V0IDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VudENvbnRlbnRlZGl0YWJsZSh0ZXh0YXJlYSk7XG4gICAgICB9XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmluc2VydEJlZm9yZSh0ZXh0YXJlYSksIHRleHRhcmVhKTtcbiAgICAgIGN0bERvd24gPSBmYWxzZTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAkKHRleHRhcmVhKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChldi5jdHJsS2V5ICE9IG51bGwpICYmIChldi5tZXRhS2V5ICE9IG51bGwpKSB7XG4gICAgICAgICAgY3RsRG93biA9IGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RsRG93biAmJiBldi5rZXlDb2RlID09PSA4Nikge1xuICAgICAgICAgIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSB0cnVlO1xuICAgICAgICAgIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICBwYXN0ZS5fcGFzdGVfZXZlbnRfZmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoIXBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCkge1xuICAgICAgICAgICAgICAgICQodGV4dGFyZWEpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdwYXN0ZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbikge1xuICAgICAgICAgICAgcmV0dXJuICQodGV4dGFyZWEpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQocGFzdGUuX3RhcmdldCkub24oJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQocGFzdGUuX3RhcmdldCkub24oJ3Bhc3RlVGV4dCcsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCwgY3VyRW5kLCBjdXJTdGFydDtcbiAgICAgICAgICBjdXJTdGFydCA9ICQodGV4dGFyZWEpLnByb3AoJ3NlbGVjdGlvblN0YXJ0Jyk7XG4gICAgICAgICAgY3VyRW5kID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uRW5kJyk7XG4gICAgICAgICAgY29udGVudCA9ICQodGV4dGFyZWEpLnZhbCgpO1xuICAgICAgICAgICQodGV4dGFyZWEpLnZhbChcIlwiICsgY29udGVudC5zbGljZSgwLCBjdXJTdGFydCkgKyBkYXRhLnRleHQgKyBjb250ZW50LnNsaWNlKGN1ckVuZCkpO1xuICAgICAgICAgICQodGV4dGFyZWEpWzBdLnNldFNlbGVjdGlvblJhbmdlKGN1clN0YXJ0ICsgZGF0YS50ZXh0Lmxlbmd0aCwgY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlID0gZnVuY3Rpb24oY29udGVudGVkaXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjb250ZW50ZWRpdGFibGUsIGNvbnRlbnRlZGl0YWJsZSk7XG4gICAgICAkKGNvbnRlbnRlZGl0YWJsZSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5yZW1vdmVDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUGFzdGUoX2NvbnRhaW5lciwgX3RhcmdldCkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gX2NvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSAkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl90YXJnZXQgPSAkKHRoaXMuX3RhcmdldCkuYWRkQ2xhc3MoJ3Bhc3RhYmxlJyk7XG4gICAgICB0aGlzLl9jb250YWluZXIub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIHZhciBjbGlwYm9hcmREYXRhLCBmaWxlLCBpdGVtLCBqLCBrLCBsZW4sIGxlbjEsIHJlYWRlciwgcmVmLCByZWYxLCByZWYyLCByZWYzLCB0ZXh0O1xuICAgICAgICAgIGlmIChldi5jdXJyZW50VGFyZ2V0ICE9PSBldi50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5fcGFzdGVfZXZlbnRfZmlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICgoKHJlZiA9IGV2Lm9yaWdpbmFsRXZlbnQpICE9IG51bGwgPyByZWYuY2xpcGJvYXJkRGF0YSA6IHZvaWQgMCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IGV2Lm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgIHJlZjEgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHJlZjFbal07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpdGVtLmdldEFzRmlsZSgpKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgtMSAhPT0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjbGlwYm9hcmREYXRhLnR5cGVzLCAndGV4dC9wbGFpbicpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlSW1hZ2Uoc3JjKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgIGlmICgocmVmMiA9ICh0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0JykpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdfcGFzdGVDaGVja0NvbnRhaW5lckRvbmUnKTtcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWYzID0gY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHJlZjNba107XG4gICAgICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUltYWdlKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2hhbmRsZUltYWdlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgICB2YXIgbG9hZGVyO1xuICAgICAgaWYgKHNyYy5tYXRjaCgvXndlYmtpdFxcLWZha2VcXC11cmxcXDpcXC9cXC8vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBhcmUgdHJ5aW5nIHRvIHBhc3RlIGFuIGltYWdlIGluIFNhZmFyaSwgaG93ZXZlciB3ZSBhcmUgdW5hYmxlIHRvIHJldGlldmUgaXRzIGRhdGEuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZVN0YXJ0Jyk7XG4gICAgICBsb2FkZXIgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGxvYWRlci5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICBsb2FkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYmxvYiwgY2FudmFzLCBjdHgsIGRhdGFVUkw7XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gbG9hZGVyLndpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBsb2FkZXIuaGVpZ2h0O1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobG9hZGVyLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgIGRhdGFVUkwgPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgICBibG9iID0gZGF0YVVSTHRvQmxvYihkYXRhVVJMKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICBpZiAoZGF0YVVSTCkge1xuICAgICAgICAgICAgX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlJywge1xuICAgICAgICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICAgICAgICBkYXRhVVJMOiBkYXRhVVJMLFxuICAgICAgICAgICAgICB3aWR0aDogbG9hZGVyLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGxvYWRlci5oZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGxvYWRlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGdldCBpbWFnZSBmcm9tOiBcIiArIHNyYyxcbiAgICAgICAgICAgIHVybDogc3JjXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVuZCcpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gbG9hZGVyLnNyYyA9IHNyYztcbiAgICB9O1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jaGVja0ltYWdlc0luQ29udGFpbmVyID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBpbWcsIGosIGxlbiwgcmVmLCB0aW1lc3BhbjtcbiAgICAgIHRpbWVzcGFuID0gTWF0aC5mbG9vcigxMDAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICByZWYgPSB0aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgaW1nID0gcmVmW2pdO1xuICAgICAgICBpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGssIGxlbjEsIHJlZjE7XG4gICAgICAgICAgcmVmMSA9IF90aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICBpbWcgPSByZWYxW2tdO1xuICAgICAgICAgICAgaWYgKCFpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dKSB7XG4gICAgICAgICAgICAgIGNiKGltZy5zcmMpO1xuICAgICAgICAgICAgICAkKGltZykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFzdGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxudmFyIHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrO1xuXG4oZnVuY3Rpb24oJCl7XG5cdHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrID0gZnVuY3Rpb24oIGVkaXRvciApIHtcblx0XHR2YXIgcGFzdGVCdG4sXG5cdFx0XHRvcmlnRG9tQWRkLFxuXHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2UgPSBmYWxzZSxcblx0XHRcdGN1cnJlbnRDbGlwYm9hcmRFdmVudCA9IG51bGwsXG5cdFx0XHRwcmV2ZW50SW1hZ2VQYXN0ZSA9IGZhbHNlLFxuXHRcdFx0dGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRcdHRvb2xiYXIsXG5cdFx0XHRwYXN0ZWRfaW1hZ2VfdG1wX3ByZWZpeCA9ICdfX3Bhc3RlZF9pbWFnZV90bXBfJyxcblx0XHRcdHBhc3RlZF9pbWFnZV90bXBfY2xhc3MgPSAnJztcblxuXHRcdC8vIGRlZmF1bHQgb25cblx0XHR0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCAndGhlcGFzdGUuYXV0b191cGxvYWQnICkgIT09ICdmYWxzZSc7XG5cblx0XHQvLyBlbmFibGUgLyBkaXNhYmxlIGF1dG91cGxvYWRcblx0XHRlZGl0b3IuYWRkQ29tbWFuZCggJ2NtZF90aGVwYXN0ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgPSAhIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd0aGVwYXN0ZS5hdXRvX3VwbG9hZCcsIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkLnRvU3RyaW5nKCkgKTtcblx0XHRcdHBhc3RlQnRuLmFjdGl2ZSggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKTtcblxuXHRcdH0pO1xuXG5cdFx0Ly8gZW5hYmxlIC8gZGlzYWJsZSBhdXRvdXBsb2FkIGJ1dHRvblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3RoZXBhc3RlJywge1xuXHRcdFx0aWNvbjogJ3RoZXBhc3RlJyxcblx0XHRcdHRvb2x0aXA6IHRoZXBhc3RlLmwxMG4udXBsb2FkX3Bhc3RlZF9pbWFnZXMsXG5cdFx0XHRjbWQgOiAnY21kX3RoZXBhc3RlJyxcblx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHBhc3RlQnRuID0gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRhY3RpdmU6dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWRcblx0XHR9KTtcblxuXHRcdC8vIHVwbG9hZCBidXR0b24gaW4gbWVkaWEgdG9vbGJhciBmbHlvdXRcblx0XHRlZGl0b3IuYWRkQnV0dG9uKCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJywge1xuXHRcdFx0aWNvbjogJ2Rhc2hpY29uIGRhc2hpY29ucyBkYXNoaWNvbnMtdXBsb2FkIHRoZXBhc3RlLXVwbG9hZCcsXG5cdFx0XHR0b29sdGlwOiB0aGVwYXN0ZS5sMTBuLnVwbG9hZF9pbWFnZSxcblx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyB3cmFwIGltZywgdXBsb2FkXG5cdFx0XHRcdHZhciBpbWFnZTtcblx0XHRcdFx0aW1hZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcblxuXHRcdFx0XHR0aGVwYXN0ZS51cGxvYWRJbWFnZSggaW1hZ2UsIGVkaXRvciApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gaW5pdCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvci5vbmNlKCAncHJlaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBlZGl0b3Iud3AgJiYgZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyICkge1xuXHRcdFx0XHR0b29sYmFyID0gZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyKCBbXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbmxlZnQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25jZW50ZXInLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25yaWdodCcsXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbm5vbmUnLFxuXHRcdFx0XHRcdCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJyxcblx0XHRcdFx0XHQnd3BfaW1nX2VkaXQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfcmVtb3ZlJyxcblx0XHRcdFx0XSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0IG9uIG5vZGUgY2hhbmdlXG5cdFx0ZWRpdG9yLm9uKCAnd3B0b29sYmFyJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHVwbG9hZEJ0bjtcblx0XHRcdGlmICggZXZlbnQuZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0lNRycgJiYgISBlZGl0b3Iud3AuaXNQbGFjZWhvbGRlciggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRldmVudC50b29sYmFyID0gdG9vbGJhcjtcblx0XHRcdFx0dXBsb2FkQnRuID0gdG9vbGJhci4kZWwuZmluZCgnLnRoZXBhc3RlLXVwbG9hZCcpLmNsb3Nlc3QoJy5tY2UtYnRuJyk7XG5cblx0XHRcdFx0aWYgKCBjYW5VcGxvYWQoIGV2ZW50LmVsZW1lbnQgKSApIHtcblx0XHRcdFx0XHR1cGxvYWRCdG4uc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVwbG9hZEJ0bi5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyB0cnUgaWYgZGF0YSBzb3VyY2Ugb3IgYmxvYiBpbWFnZVxuXHRcdGZ1bmN0aW9uIGNhblVwbG9hZCggaW1nICkge1xuXHRcdFx0dmFyIHN1YiA9IGltZy5zcmMuc3Vic3RyaW5nKDAsNSk7XG5cdFx0XHRyZXR1cm4gc3ViID09PSAnYmxvYjonIHx8IHN1YiA9PT0gJ2RhdGE6Jztcblx0XHR9XG5cblx0XHQvLyBzZXR1cCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvclxuXHRcdFx0Lm9uKCAnQmVmb3JlUGFzdGVQcmVQcm9jZXNzJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdC8vIHJlbW92ZSBzdmcgZGF0YVxuXHRcdFx0XHRpZiAoICBlLmNvbnRlbnQubWF0Y2goIC8mbHQ7c3ZnW1xcc1xcUy5dKiZsdDtcXC9zdmcmZ3Q7L2kgKSApIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0ZS5jb250ZW50ID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGU7XG5cblx0XHRcdH0gKVxuXHRcdFx0Lm9uKCAnUGFzdGVQb3N0UHJvY2VzcycsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHQvLyB1cGxvYWQgaW1hZ2Vcblx0XHRcdFx0dmFyICRmaXJzdENoaWxkLCAkdXBsb2FkQm94O1xuXG5cdFx0XHRcdGlmICggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKSB7XG5cdFx0XHRcdFx0JGZpcnN0Q2hpbGQgPSAkKGUubm9kZSkuY2hpbGRyZW4oKS5maXJzdCgpO1xuXHRcdFx0XHRcdGlmICggJGZpcnN0Q2hpbGQuaXMoJ2ltZycpICYmIGNhblVwbG9hZCggJGZpcnN0Q2hpbGQuZ2V0KDApICkgKSB7XG5cdFx0XHRcdFx0XHQkdXBsb2FkQm94ID0gdGhlcGFzdGUudXBsb2FkSW1hZ2UoICRmaXJzdENoaWxkLmdldCgwKSwgZWRpdG9yICk7XG5cdFx0XHRcdFx0XHQkZmlyc3RDaGlsZC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdCQoZS5ub2RlKS5hcHBlbmQoICR1cGxvYWRCb3ggKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQ7XG5cblx0fTtcblxuXHR0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCAndGhlcGFzdGUnLCB0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayApO1xuXG59ICkoalF1ZXJ5KTtcbiJdfQ== 
     1(function(){var t,e,n,a,o;t=window.jQuery,t.paste=function(t){var n;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),n=e.mountNonInputable(t),n._container},t.fn.pastableNonInputable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is("textarea, input:text, [contenteditable]")||(e.mountNonInputable(n),n._pastable=!0);return this},t.fn.pastableTextarea=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not(textarea, input:text)")||(e.mountTextarea(n),n._pastable=!0);return this},t.fn.pastableContenteditable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not([contenteditable])")||(e.mountContenteditable(n),n._pastable=!0);return this},a=function(t,e){var n,a,o,r,i,u,s,l,c,p,d;if(null==e&&(e=512),!(l=t.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(p=l,l=p[0],u=p[1],n=p[2],r=atob(n),o=[],c=0;c<r.length;){for(d=r.slice(c,c+e),i=new Array(d.length),s=0;s<d.length;)i[s]=d.charCodeAt(s),s++;a=new Uint8Array(i),o.push(a),c+=e}return new Blob(o,{type:u})},n=function(){return t(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},o=function(e,n){var a,o,r,i,u,s;return i=void 0,u=void 0,r=void 0,o=void 0,a=void 0,"area"===(s=e.nodeName.toLowerCase())?(i=e.parentNode,u=i.name,!(!e.href||!u||"map"!==i.nodeName.toLowerCase())&&(r=t("img[usemap='#"+u+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(s)?(o=!e.disabled)&&(a=t(e).closest("fieldset")[0])&&(o=!a.disabled):o="a"===s?e.href||n:n,(o=o||t(e).is("[contenteditable]"))&&t(e).is(":visible"))},e=function(){function e(e,n){this._container=e,this._target=n,this._container=t(this._container),this._target=t(this._target).addClass("pastable"),this._container.on("paste",function(t){return function(e){var n,a,o,r,i,u,s,l,c,p,d,g,f;if(e.currentTarget!==e.target)return e.preventDefault();if(t._paste_event_fired=!0,null!=(null!=(c=e.originalEvent)?c.clipboardData:void 0))if(n=e.originalEvent.clipboardData,n.items)for(p=n.items,r=0,u=p.length;r<u;r++){if(o=p[r],o.type.match(/^image\//)){l=new FileReader,l.onload=function(e){return t._handleImage(e.target.result)};try{l.readAsDataURL(o.getAsFile())}catch(t){}e.preventDefault();break}"text/plain"===o.type&&o.getAsString(function(e){return t._target.trigger("pasteText",{text:e})})}else-1!==Array.prototype.indexOf.call(n.types,"text/plain")&&(f=n.getData("Text"),setTimeout(function(){return t._target.trigger("pasteText",{text:f})},1)),t._checkImagesInContainer(function(e){return t._handleImage(e)});if(n=window.clipboardData)if(null!=(d=f=n.getData("Text"))?d.length:void 0)setTimeout(function(){return t._target.trigger("pasteText",{text:f}),t._target.trigger("_pasteCheckContainerDone")},1);else{for(g=n.files,i=0,s=g.length;i<s;i++)a=g[i],t._handleImage(URL.createObjectURL(a));t._checkImagesInContainer(function(t){})}return null}}(this))}return e.prototype._target=null,e.prototype._container=null,e.mountNonInputable=function(a){var r;return r=new e(n().appendTo(a),a),t(a).on("click",function(t){return function(t){if(!o(t.target,!1))return r._container.focus()}}()),r._container.on("focus",function(e){return function(){return t(a).addClass("pastable-focus")}}()),r._container.on("blur",function(e){return function(){return t(a).removeClass("pastable-focus")}}())},e.mountTextarea=function(a){var o,r,i,u;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(i=Object.getOwnPropertyDescriptor)&&null!=(u=i.call(Object,DataTransfer.prototype,"items"))?u.get:void 0)?this.mountContenteditable(a):(r=new e(n().insertBefore(a),a),o=!1,t(a).on("keyup",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(o=!1),null}),t(a).on("keydown",function(e){var n;return 17!==(n=e.keyCode)&&224!==n||(o=!0),null!=e.ctrlKey&&null!=e.metaKey&&(o=e.ctrlKey||e.metaKey),o&&86===e.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(e){return function(){if(!r._paste_event_fired)return t(a).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),t(a).on("paste",function(t){return function(){}}()),t(a).on("focus",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).addClass("pastable-focus")}}()),t(a).on("blur",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).removeClass("pastable-focus")}}()),t(r._target).on("_pasteCheckContainerDone",function(e){return function(){return t(a).focus(),r._textarea_focus_stolen=!1}}()),t(r._target).on("pasteText",function(e){return function(e,n){var o,r,i;return i=t(a).prop("selectionStart"),r=t(a).prop("selectionEnd"),o=t(a).val(),t(a).val(""+o.slice(0,i)+n.text+o.slice(r)),t(a)[0].setSelectionRange(i+n.text.length,i+n.text.length),t(a).trigger("change")}}()))},e.mountContenteditable=function(n){return new e(n,n),t(n).on("focus",function(e){return function(){return t(n).addClass("pastable-focus")}}()),t(n).on("blur",function(e){return function(){return t(n).removeClass("pastable-focus")}}())},e.prototype._handleImage=function(t){var e;return t.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),e=new Image,e.crossOrigin="anonymous",e.onload=function(t){return function(){var n,o,r,i;o=document.createElement("canvas"),o.width=e.width,o.height=e.height,r=o.getContext("2d"),r.drawImage(e,0,0,o.width,o.height),i=null;try{i=o.toDataURL("image/png"),n=a(i)}catch(t){}return i&&t._target.trigger("pasteImage",{blob:n,dataURL:i,width:e.width,height:e.height}),t._target.trigger("pasteImageEnd")}}(this),e.onerror=function(e){return function(){return e._target.trigger("pasteImageError",{message:"Failed to get image from: "+t,url:t}),e._target.trigger("pasteImageEnd")}}(this),e.src=t)},e.prototype._checkImagesInContainer=function(e){var n,a,o,r,i;for(i=Math.floor(1e3*Math.random()),r=this._container.find("img"),a=0,o=r.length;a<o;a++)n=r[a],n["_paste_marked_"+i]=!0;return setTimeout(function(a){return function(){var o,r,u;for(u=a._container.find("img"),o=0,r=u.length;o<r;o++)n=u[o],n["_paste_marked_"+i]||(e(n.src),t(n).remove());return a._target.trigger("_pasteCheckContainerDone")}}(this),1)},e}()}).call(this);var the_pastePluginCallback;!function(t){the_pastePluginCallback=function(e){function n(t){var e=t.src.substring(0,5);return"blob:"===e||"data:"===e}var a,o,r=wp.media.thepaste;r.options.editor.auto_upload="false"!==localStorage.getItem("thepaste.auto_upload"),e.addCommand("cmd_thepaste",function(){r.options.editor.auto_upload=!r.options.editor.auto_upload,localStorage.setItem("thepaste.auto_upload",r.options.editor.auto_upload.toString()),a.active(r.options.editor.auto_upload)}),e.addButton("thepaste",{icon:"thepaste",tooltip:r.l10n.upload_pasted_images,cmd:"cmd_thepaste",onPostRender:function(){a=this},active:r.options.editor.auto_upload}),e.addButton("wp_img_thepaste_upload",{icon:"dashicon dashicons dashicons-upload thepaste-upload",tooltip:r.l10n.upload_image,onclick:function(){var t;t=e.selection.getNode(),r.uploadImage(t,e)}}),e.once("preinit",function(){e.wp&&e.wp._createToolbar&&(o=e.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_thepaste_upload","wp_img_edit","wp_img_remove"]))}),e.on("wptoolbar",function(t){var a;"IMG"!==t.element.nodeName||e.wp.isPlaceholder(t.element)||(t.toolbar=o,a=o.$el.find(".thepaste-upload").closest(".mce-btn"),n(t.element)?a.show():a.hide())}),e.on("BeforePastePreProcess",function(t){return t.content.match(/&lt;svg[\s\S.]*&lt;\/svg&gt;/i)&&(t.preventDefault(),t.content=""),t}).on("PastePostProcess",function(a){var o,i;r.options.editor.auto_upload&&(o=t(a.node).children().first(),o.is("img")&&n(o.get(0))&&(i=r.uploadImage(o.get(0),e),o.remove(),t(a.node).append(i)))})},tinymce.PluginManager.add("the_paste",the_pastePluginCallback)}(jQuery); 
     2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS1wbHVnaW4uanMiXSwibmFtZXMiOlsiJCIsIlBhc3RlIiwiY3JlYXRlSGlkZGVuRWRpdGFibGUiLCJkYXRhVVJMdG9CbG9iIiwiaXNGb2N1c2FibGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJwYXN0ZSIsInBhc3RlQ29udGFpbmVyIiwicG0iLCJjb25zb2xlIiwibG9nIiwibW91bnROb25JbnB1dGFibGUiLCJfY29udGFpbmVyIiwiZm4iLCJwYXN0YWJsZU5vbklucHV0YWJsZSIsImVsIiwiaiIsImxlbiIsInJlZiIsInRoaXMiLCJsZW5ndGgiLCJfcGFzdGFibGUiLCJpcyIsInBhc3RhYmxlVGV4dGFyZWEiLCJtb3VudFRleHRhcmVhIiwicGFzdGFibGVDb250ZW50ZWRpdGFibGUiLCJtb3VudENvbnRlbnRlZGl0YWJsZSIsImRhdGFVUkwiLCJzbGljZVNpemUiLCJiNjREYXRhIiwiYnl0ZUFycmF5IiwiYnl0ZUFycmF5cyIsImJ5dGVDaGFyYWN0ZXJzIiwiYnl0ZU51bWJlcnMiLCJjb250ZW50VHlwZSIsImkiLCJtIiwib2Zmc2V0Iiwic2xpY2UiLCJtYXRjaCIsImF0b2IiLCJBcnJheSIsImNoYXJDb2RlQXQiLCJVaW50OEFycmF5IiwicHVzaCIsIkJsb2IiLCJ0eXBlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0ciIsImNzcyIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJlbGVtZW50IiwiaGFzVGFiaW5kZXgiLCJmaWVsZHNldCIsImZvY3VzYWJsZUlmVmlzaWJsZSIsImltZyIsIm1hcCIsIm1hcE5hbWUiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwicGFyZW50Tm9kZSIsIm5hbWUiLCJocmVmIiwidGVzdCIsImRpc2FibGVkIiwiY2xvc2VzdCIsIl90YXJnZXQiLCJhZGRDbGFzcyIsIm9uIiwiX3RoaXMiLCJldiIsImNsaXBib2FyZERhdGEiLCJmaWxlIiwiaXRlbSIsImsiLCJsZW4xIiwicmVhZGVyIiwicmVmMSIsInJlZjIiLCJyZWYzIiwidGV4dCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJwcmV2ZW50RGVmYXVsdCIsIl9wYXN0ZV9ldmVudF9maXJlZCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJldmVudCIsIl9oYW5kbGVJbWFnZSIsInJlc3VsdCIsInJlYWRBc0RhdGFVUkwiLCJnZXRBc0ZpbGUiLCJlcnJvciIsImdldEFzU3RyaW5nIiwic3RyaW5nIiwidHJpZ2dlciIsInByb3RvdHlwZSIsImluZGV4T2YiLCJjYWxsIiwidHlwZXMiLCJnZXREYXRhIiwic2V0VGltZW91dCIsIl9jaGVja0ltYWdlc0luQ29udGFpbmVyIiwic3JjIiwiZmlsZXMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJub25JbnB1dGFibGUiLCJhcHBlbmRUbyIsImZvY3VzIiwicmVtb3ZlQ2xhc3MiLCJ0ZXh0YXJlYSIsImN0bERvd24iLCJEYXRhVHJhbnNmZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXQiLCJpbnNlcnRCZWZvcmUiLCJrZXlDb2RlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJfdGV4dGFyZWFfZm9jdXNfc3RvbGVuIiwiZGF0YSIsImNvbnRlbnQiLCJjdXJFbmQiLCJjdXJTdGFydCIsInByb3AiLCJ2YWwiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRlbnRlZGl0YWJsZSIsImxvYWRlciIsIm1lc3NhZ2UiLCJJbWFnZSIsImNyb3NzT3JpZ2luIiwiYmxvYiIsImNhbnZhcyIsImN0eCIsImdldENvbnRleHQiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJvbmVycm9yIiwidXJsIiwiY2IiLCJ0aW1lc3BhbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImZpbmQiLCJyZW1vdmUiLCJ0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayIsImVkaXRvciIsImNhblVwbG9hZCIsInN1YiIsInN1YnN0cmluZyIsInBhc3RlQnRuIiwidG9vbGJhciIsInRoZXBhc3RlIiwid3AiLCJtZWRpYSIsIm9wdGlvbnMiLCJhdXRvX3VwbG9hZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhZGRDb21tYW5kIiwic2V0SXRlbSIsInRvU3RyaW5nIiwiYWN0aXZlIiwiYWRkQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJsMTBuIiwidXBsb2FkX3Bhc3RlZF9pbWFnZXMiLCJjbWQiLCJvblBvc3RSZW5kZXIiLCJ1cGxvYWRfaW1hZ2UiLCJvbmNsaWNrIiwiaW1hZ2UiLCJzZWxlY3Rpb24iLCJnZXROb2RlIiwidXBsb2FkSW1hZ2UiLCJvbmNlIiwiX2NyZWF0ZVRvb2xiYXIiLCJ1cGxvYWRCdG4iLCJpc1BsYWNlaG9sZGVyIiwiJGVsIiwic2hvdyIsImhpZGUiLCJlIiwiJGZpcnN0Q2hpbGQiLCIkdXBsb2FkQm94Iiwibm9kZSIsImNoaWxkcmVuIiwiZmlyc3QiLCJhcHBlbmQiLCJ0aW55bWNlIiwiUGx1Z2luTWFuYWdlciIsImFkZCJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJB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V0FDbEI5QixFQUFPTyxJQUFNUCxFQUFPTyxHQUFHd0IsaUJBQzNCMUIsRUFBVUwsRUFBT08sR0FBR3dCLGdCQUNuQixtQkFDQSxxQkFDQSxvQkFDQSxtQkFDQSx5QkFDQSxjQUNBLHFCQU1IL0IsRUFBT3BGLEdBQUksWUFBYSxTQUFVcUIsR0FDakMsR0FBSStGLEVBQzRCLFNBQTNCL0YsRUFBTXRDLFFBQVFPLFVBQXdCOEYsRUFBT08sR0FBRzBCLGNBQWVoRyxFQUFNdEMsV0FDekVzQyxFQUFNb0UsUUFBVUEsRUFFaEIyQixFQUFZM0IsRUFBUTZCLElBQUlyQyxLQUFLLG9CQUFvQnBGLFFBQVEsWUFFcER3RixFQUFXaEUsRUFBTXRDLFNBQ3JCcUksRUFBVUcsT0FFVkgsRUFBVUksVUFZYnBDLEVBQ0VwRixHQUFJLHdCQUF5QixTQUFTeUgsR0FNdEMsTUFKTUEsR0FBRWhFLFFBQVEzRixNQUFPLG1DQUN0QjJKLEVBQUUxRyxpQkFDRjBHLEVBQUVoRSxRQUFVLElBRU5nRSxJQUdQekgsR0FBSSxtQkFBb0IsU0FBU3lILEdBRWpDLEdBQUlDLEdBQWFDLENBRVpqQyxHQUFTRyxRQUFRVCxPQUFPVSxjQUM1QjRCLEVBQWNwTSxFQUFFbU0sRUFBRUcsTUFBTUMsV0FBV0MsUUFDOUJKLEVBQVk3SyxHQUFHLFFBQVV3SSxFQUFXcUMsRUFBWXhFLElBQUksTUFDeER5RSxFQUFhakMsRUFBU3VCLFlBQWFTLEVBQVl4RSxJQUFJLEdBQUlrQyxHQUN2RHNDLEVBQVl4QyxTQUNaNUosRUFBRW1NLEVBQUVHLE1BQU1HLE9BQVFKLFFBUXZCSyxRQUFRQyxjQUFjQyxJQUFLLFlBQWEvQywwQkFFckN2SiIsImZpbGUiOiJ0aGUtcGFzdGUtcGx1Z2luLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG5cbi8qXG5wYXN0ZS5qcyBpcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBkYXRhICggdGV4dCAvIGltYWdlICkgZnJvbSBjbGlwYm9hcmQgaW4gZGlmZmVyZW50IGJyb3dzZXJzLiBJdCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgaGFja3MuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9sYXllcnNzc3MvcGFzdGUuanNcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gIHZhciAkLCBQYXN0ZSwgY3JlYXRlSGlkZGVuRWRpdGFibGUsIGRhdGFVUkx0b0Jsb2IsIGlzRm9jdXNhYmxlO1xuXG4gICQgPSB3aW5kb3cualF1ZXJ5O1xuXG4gICQucGFzdGUgPSBmdW5jdGlvbihwYXN0ZUNvbnRhaW5lcikge1xuICAgIHZhciBwbTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICQuZm4ucGFzdGFibGVOb25JbnB1dGFibGUoKSBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgcG0gPSBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShwYXN0ZUNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHBtLl9jb250YWluZXI7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygndGV4dGFyZWEsIGlucHV0OnRleHQsIFtjb250ZW50ZWRpdGFibGVdJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlVGV4dGFyZWEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QodGV4dGFyZWEsIGlucHV0OnRleHQpJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudFRleHRhcmVhKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QoW2NvbnRlbnRlZGl0YWJsZV0pJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudENvbnRlbnRlZGl0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBkYXRhVVJMdG9CbG9iID0gZnVuY3Rpb24oZGF0YVVSTCwgc2xpY2VTaXplKSB7XG4gICAgdmFyIGI2NERhdGEsIGJ5dGVBcnJheSwgYnl0ZUFycmF5cywgYnl0ZUNoYXJhY3RlcnMsIGJ5dGVOdW1iZXJzLCBjb250ZW50VHlwZSwgaSwgbSwgb2Zmc2V0LCByZWYsIHNsaWNlO1xuICAgIGlmIChzbGljZVNpemUgPT0gbnVsbCkge1xuICAgICAgc2xpY2VTaXplID0gNTEyO1xuICAgIH1cbiAgICBpZiAoIShtID0gZGF0YVVSTC5tYXRjaCgvXmRhdGFcXDooW15cXDtdKylcXDtiYXNlNjRcXCwoLispJC8pKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJlZiA9IG0sIG0gPSByZWZbMF0sIGNvbnRlbnRUeXBlID0gcmVmWzFdLCBiNjREYXRhID0gcmVmWzJdO1xuICAgIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICBieXRlQXJyYXlzID0gW107XG4gICAgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKSB7XG4gICAgICBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcbiAgICAgIGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgc2xpY2UubGVuZ3RoKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgICBvZmZzZXQgKz0gc2xpY2VTaXplO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge1xuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9KTtcbiAgfTtcblxuICBjcmVhdGVIaWRkZW5FZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpLmF0dHIoJ3RhYmluZGV4JywgLTEpLmNzcyh7XG4gICAgICB3aWR0aDogMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgIH0pO1xuICB9O1xuXG4gIGlzRm9jdXNhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgaGFzVGFiaW5kZXgpIHtcbiAgICB2YXIgZmllbGRzZXQsIGZvY3VzYWJsZUlmVmlzaWJsZSwgaW1nLCBtYXAsIG1hcE5hbWUsIG5vZGVOYW1lO1xuICAgIG1hcCA9IHZvaWQgMDtcbiAgICBtYXBOYW1lID0gdm9pZCAwO1xuICAgIGltZyA9IHZvaWQgMDtcbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSB2b2lkIDA7XG4gICAgZmllbGRzZXQgPSB2b2lkIDA7XG4gICAgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCdhcmVhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIG1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIG1hcE5hbWUgPSBtYXAubmFtZTtcbiAgICAgIGlmICghZWxlbWVudC5ocmVmIHx8ICFtYXBOYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnbWFwJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbWcgPSAkKCdpbWdbdXNlbWFwPVxcJyMnICsgbWFwTmFtZSArICdcXCddJyk7XG4gICAgICByZXR1cm4gaW1nLmxlbmd0aCA+IDAgJiYgaW1nLmlzKCc6dmlzaWJsZScpO1xuICAgIH1cbiAgICBpZiAoL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChub2RlTmFtZSkpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuICAgICAgaWYgKGZvY3VzYWJsZUlmVmlzaWJsZSkge1xuICAgICAgICBmaWVsZHNldCA9ICQoZWxlbWVudCkuY2xvc2VzdCgnZmllbGRzZXQnKVswXTtcbiAgICAgICAgaWYgKGZpZWxkc2V0KSB7XG4gICAgICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWZpZWxkc2V0LmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnYScgPT09IG5vZGVOYW1lKSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSBlbGVtZW50LmhyZWYgfHwgaGFzVGFiaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGhhc1RhYmluZGV4O1xuICAgIH1cbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSBmb2N1c2FibGVJZlZpc2libGUgfHwgJChlbGVtZW50KS5pcygnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICByZXR1cm4gZm9jdXNhYmxlSWZWaXNpYmxlICYmICQoZWxlbWVudCkuaXMoJzp2aXNpYmxlJyk7XG4gIH07XG5cbiAgUGFzdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgUGFzdGUucHJvdG90eXBlLl90YXJnZXQgPSBudWxsO1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jb250YWluZXIgPSBudWxsO1xuXG4gICAgUGFzdGUubW91bnROb25JbnB1dGFibGUgPSBmdW5jdGlvbihub25JbnB1dGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuYXBwZW5kVG8obm9uSW5wdXRhYmxlKSwgbm9uSW5wdXRhYmxlKTtcbiAgICAgICQobm9uSW5wdXRhYmxlKS5vbignY2xpY2snLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZShldi50YXJnZXQsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICBwYXN0ZS5fY29udGFpbmVyLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQobm9uSW5wdXRhYmxlKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHJldHVybiBwYXN0ZS5fY29udGFpbmVyLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBQYXN0ZS5tb3VudFRleHRhcmVhID0gZnVuY3Rpb24odGV4dGFyZWEpIHtcbiAgICAgIHZhciBjdGxEb3duLCBwYXN0ZSwgcmVmLCByZWYxO1xuICAgICAgaWYgKCh0eXBlb2YgRGF0YVRyYW5zZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIERhdGFUcmFuc2ZlciAhPT0gbnVsbCA/IERhdGFUcmFuc2Zlci5wcm90b3R5cGUgOiB2b2lkIDApICYmICgocmVmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNhbGwoT2JqZWN0LCBEYXRhVHJhbnNmZXIucHJvdG90eXBlLCAnaXRlbXMnKSkgIT0gbnVsbCA/IHJlZjEuZ2V0IDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VudENvbnRlbnRlZGl0YWJsZSh0ZXh0YXJlYSk7XG4gICAgICB9XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmluc2VydEJlZm9yZSh0ZXh0YXJlYSksIHRleHRhcmVhKTtcbiAgICAgIGN0bERvd24gPSBmYWxzZTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAkKHRleHRhcmVhKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChldi5jdHJsS2V5ICE9IG51bGwpICYmIChldi5tZXRhS2V5ICE9IG51bGwpKSB7XG4gICAgICAgICAgY3RsRG93biA9IGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RsRG93biAmJiBldi5rZXlDb2RlID09PSA4Nikge1xuICAgICAgICAgIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSB0cnVlO1xuICAgICAgICAgIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICBwYXN0ZS5fcGFzdGVfZXZlbnRfZmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoIXBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCkge1xuICAgICAgICAgICAgICAgICQodGV4dGFyZWEpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdwYXN0ZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbikge1xuICAgICAgICAgICAgcmV0dXJuICQodGV4dGFyZWEpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQocGFzdGUuX3RhcmdldCkub24oJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQocGFzdGUuX3RhcmdldCkub24oJ3Bhc3RlVGV4dCcsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCwgY3VyRW5kLCBjdXJTdGFydDtcbiAgICAgICAgICBjdXJTdGFydCA9ICQodGV4dGFyZWEpLnByb3AoJ3NlbGVjdGlvblN0YXJ0Jyk7XG4gICAgICAgICAgY3VyRW5kID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uRW5kJyk7XG4gICAgICAgICAgY29udGVudCA9ICQodGV4dGFyZWEpLnZhbCgpO1xuICAgICAgICAgICQodGV4dGFyZWEpLnZhbChcIlwiICsgY29udGVudC5zbGljZSgwLCBjdXJTdGFydCkgKyBkYXRhLnRleHQgKyBjb250ZW50LnNsaWNlKGN1ckVuZCkpO1xuICAgICAgICAgICQodGV4dGFyZWEpWzBdLnNldFNlbGVjdGlvblJhbmdlKGN1clN0YXJ0ICsgZGF0YS50ZXh0Lmxlbmd0aCwgY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlID0gZnVuY3Rpb24oY29udGVudGVkaXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjb250ZW50ZWRpdGFibGUsIGNvbnRlbnRlZGl0YWJsZSk7XG4gICAgICAkKGNvbnRlbnRlZGl0YWJsZSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5yZW1vdmVDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUGFzdGUoX2NvbnRhaW5lciwgX3RhcmdldCkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gX2NvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSAkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl90YXJnZXQgPSAkKHRoaXMuX3RhcmdldCkuYWRkQ2xhc3MoJ3Bhc3RhYmxlJyk7XG4gICAgICB0aGlzLl9jb250YWluZXIub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIHZhciBjbGlwYm9hcmREYXRhLCBmaWxlLCBpdGVtLCBqLCBrLCBsZW4sIGxlbjEsIHJlYWRlciwgcmVmLCByZWYxLCByZWYyLCByZWYzLCB0ZXh0O1xuICAgICAgICAgIGlmIChldi5jdXJyZW50VGFyZ2V0ICE9PSBldi50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5fcGFzdGVfZXZlbnRfZmlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICgoKHJlZiA9IGV2Lm9yaWdpbmFsRXZlbnQpICE9IG51bGwgPyByZWYuY2xpcGJvYXJkRGF0YSA6IHZvaWQgMCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IGV2Lm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgIHJlZjEgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHJlZjFbal07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpdGVtLmdldEFzRmlsZSgpKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgtMSAhPT0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjbGlwYm9hcmREYXRhLnR5cGVzLCAndGV4dC9wbGFpbicpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlSW1hZ2Uoc3JjKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgIGlmICgocmVmMiA9ICh0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0JykpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdfcGFzdGVDaGVja0NvbnRhaW5lckRvbmUnKTtcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWYzID0gY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHJlZjNba107XG4gICAgICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUltYWdlKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2hhbmRsZUltYWdlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgICB2YXIgbG9hZGVyO1xuICAgICAgaWYgKHNyYy5tYXRjaCgvXndlYmtpdFxcLWZha2VcXC11cmxcXDpcXC9cXC8vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBhcmUgdHJ5aW5nIHRvIHBhc3RlIGFuIGltYWdlIGluIFNhZmFyaSwgaG93ZXZlciB3ZSBhcmUgdW5hYmxlIHRvIHJldGlldmUgaXRzIGRhdGEuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZVN0YXJ0Jyk7XG4gICAgICBsb2FkZXIgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGxvYWRlci5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICBsb2FkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYmxvYiwgY2FudmFzLCBjdHgsIGRhdGFVUkw7XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gbG9hZGVyLndpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBsb2FkZXIuaGVpZ2h0O1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobG9hZGVyLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgIGRhdGFVUkwgPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgICBibG9iID0gZGF0YVVSTHRvQmxvYihkYXRhVVJMKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICBpZiAoZGF0YVVSTCkge1xuICAgICAgICAgICAgX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlJywge1xuICAgICAgICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICAgICAgICBkYXRhVVJMOiBkYXRhVVJMLFxuICAgICAgICAgICAgICB3aWR0aDogbG9hZGVyLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGxvYWRlci5oZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGxvYWRlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGdldCBpbWFnZSBmcm9tOiBcIiArIHNyYyxcbiAgICAgICAgICAgIHVybDogc3JjXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVuZCcpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gbG9hZGVyLnNyYyA9IHNyYztcbiAgICB9O1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jaGVja0ltYWdlc0luQ29udGFpbmVyID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBpbWcsIGosIGxlbiwgcmVmLCB0aW1lc3BhbjtcbiAgICAgIHRpbWVzcGFuID0gTWF0aC5mbG9vcigxMDAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICByZWYgPSB0aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgaW1nID0gcmVmW2pdO1xuICAgICAgICBpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGssIGxlbjEsIHJlZjE7XG4gICAgICAgICAgcmVmMSA9IF90aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICBpbWcgPSByZWYxW2tdO1xuICAgICAgICAgICAgaWYgKCFpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dKSB7XG4gICAgICAgICAgICAgIGNiKGltZy5zcmMpO1xuICAgICAgICAgICAgICAkKGltZykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFzdGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxudmFyIHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrO1xuXG4oZnVuY3Rpb24oJCl7XG5cdHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrID0gZnVuY3Rpb24oIGVkaXRvciApIHtcblx0XHR2YXIgcGFzdGVCdG4sXG5cdFx0XHRvcmlnRG9tQWRkLFxuXHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2UgPSBmYWxzZSxcblx0XHRcdGN1cnJlbnRDbGlwYm9hcmRFdmVudCA9IG51bGwsXG5cdFx0XHRwcmV2ZW50SW1hZ2VQYXN0ZSA9IGZhbHNlLFxuXHRcdFx0dGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRcdHRvb2xiYXIsXG5cdFx0XHRwYXN0ZWRfaW1hZ2VfdG1wX3ByZWZpeCA9ICdfX3Bhc3RlZF9pbWFnZV90bXBfJyxcblx0XHRcdHBhc3RlZF9pbWFnZV90bXBfY2xhc3MgPSAnJztcblxuXHRcdC8vIGRlZmF1bHQgb25cblx0XHR0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCAndGhlcGFzdGUuYXV0b191cGxvYWQnICkgIT09ICdmYWxzZSc7XG5cblx0XHQvLyBlbmFibGUgLyBkaXNhYmxlIGF1dG91cGxvYWRcblx0XHRlZGl0b3IuYWRkQ29tbWFuZCggJ2NtZF90aGVwYXN0ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgPSAhIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd0aGVwYXN0ZS5hdXRvX3VwbG9hZCcsIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkLnRvU3RyaW5nKCkgKTtcblx0XHRcdHBhc3RlQnRuLmFjdGl2ZSggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKTtcblxuXHRcdH0pO1xuXG5cdFx0Ly8gZW5hYmxlIC8gZGlzYWJsZSBhdXRvdXBsb2FkIGJ1dHRvblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3RoZXBhc3RlJywge1xuXHRcdFx0aWNvbjogJ3RoZXBhc3RlJyxcblx0XHRcdHRvb2x0aXA6IHRoZXBhc3RlLmwxMG4udXBsb2FkX3Bhc3RlZF9pbWFnZXMsXG5cdFx0XHRjbWQgOiAnY21kX3RoZXBhc3RlJyxcblx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHBhc3RlQnRuID0gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRhY3RpdmU6dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWRcblx0XHR9KTtcblxuXHRcdC8vIHVwbG9hZCBidXR0b24gaW4gbWVkaWEgdG9vbGJhciBmbHlvdXRcblx0XHRlZGl0b3IuYWRkQnV0dG9uKCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJywge1xuXHRcdFx0aWNvbjogJ2Rhc2hpY29uIGRhc2hpY29ucyBkYXNoaWNvbnMtdXBsb2FkIHRoZXBhc3RlLXVwbG9hZCcsXG5cdFx0XHR0b29sdGlwOiB0aGVwYXN0ZS5sMTBuLnVwbG9hZF9pbWFnZSxcblx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyB3cmFwIGltZywgdXBsb2FkXG5cdFx0XHRcdHZhciBpbWFnZTtcblx0XHRcdFx0aW1hZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcblxuXHRcdFx0XHR0aGVwYXN0ZS51cGxvYWRJbWFnZSggaW1hZ2UsIGVkaXRvciApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gaW5pdCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvci5vbmNlKCAncHJlaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBlZGl0b3Iud3AgJiYgZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyICkge1xuXHRcdFx0XHR0b29sYmFyID0gZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyKCBbXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbmxlZnQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25jZW50ZXInLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25yaWdodCcsXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbm5vbmUnLFxuXHRcdFx0XHRcdCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJyxcblx0XHRcdFx0XHQnd3BfaW1nX2VkaXQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfcmVtb3ZlJyxcblx0XHRcdFx0XSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0IG9uIG5vZGUgY2hhbmdlXG5cdFx0ZWRpdG9yLm9uKCAnd3B0b29sYmFyJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHVwbG9hZEJ0bjtcblx0XHRcdGlmICggZXZlbnQuZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0lNRycgJiYgISBlZGl0b3Iud3AuaXNQbGFjZWhvbGRlciggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRldmVudC50b29sYmFyID0gdG9vbGJhcjtcblxuXHRcdFx0XHR1cGxvYWRCdG4gPSB0b29sYmFyLiRlbC5maW5kKCcudGhlcGFzdGUtdXBsb2FkJykuY2xvc2VzdCgnLm1jZS1idG4nKTtcblxuXHRcdFx0XHRpZiAoIGNhblVwbG9hZCggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRcdHVwbG9hZEJ0bi5zaG93KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXBsb2FkQnRuLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHRydSBpZiBkYXRhIHNvdXJjZSBvciBibG9iIGltYWdlXG5cdFx0ZnVuY3Rpb24gY2FuVXBsb2FkKCBpbWcgKSB7XG5cdFx0XHR2YXIgc3ViID0gaW1nLnNyYy5zdWJzdHJpbmcoMCw1KTtcblx0XHRcdHJldHVybiBzdWIgPT09ICdibG9iOicgfHwgc3ViID09PSAnZGF0YTonO1xuXHRcdH1cblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0XG5cdFx0ZWRpdG9yXG5cdFx0XHQub24oICdCZWZvcmVQYXN0ZVByZVByb2Nlc3MnLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0Ly8gcmVtb3ZlIHN2ZyBkYXRhXG5cdFx0XHRcdGlmICggIGUuY29udGVudC5tYXRjaCggLyZsdDtzdmdbXFxzXFxTLl0qJmx0O1xcL3N2ZyZndDsvaSApICkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRlLmNvbnRlbnQgPSAnJztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZTtcblxuXHRcdFx0fSApXG5cdFx0XHQub24oICdQYXN0ZVBvc3RQcm9jZXNzJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdC8vIHVwbG9hZCBpbWFnZVxuXHRcdFx0XHR2YXIgJGZpcnN0Q2hpbGQsICR1cGxvYWRCb3g7XG5cblx0XHRcdFx0aWYgKCB0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCApIHtcblx0XHRcdFx0XHQkZmlyc3RDaGlsZCA9ICQoZS5ub2RlKS5jaGlsZHJlbigpLmZpcnN0KCk7XG5cdFx0XHRcdFx0aWYgKCAkZmlyc3RDaGlsZC5pcygnaW1nJykgJiYgY2FuVXBsb2FkKCAkZmlyc3RDaGlsZC5nZXQoMCkgKSApIHtcblx0XHRcdFx0XHRcdCR1cGxvYWRCb3ggPSB0aGVwYXN0ZS51cGxvYWRJbWFnZSggJGZpcnN0Q2hpbGQuZ2V0KDApLCBlZGl0b3IgKTtcblx0XHRcdFx0XHRcdCRmaXJzdENoaWxkLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0JChlLm5vZGUpLmFwcGVuZCggJHVwbG9hZEJveCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdDtcblxuXHR9O1xuXG5cdHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoICd0aGVfcGFzdGUnLCB0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayApO1xuXG59ICkoalF1ZXJ5KTtcbiJdfQ== 
  • the-paste/tags/1.0.4/js/admin/the-paste.js

    r1760790 r1762953  
    400400}).call(this); 
    401401 
    402 (function($,exports){ 
     402(function( $, exports, o ) { 
    403403 
    404404    var is_chrome   = navigator.userAgent.indexOf('Chrome') > -1, 
     
    429429                src = image.src, 
    430430                upload = function( dataURL ){ 
    431                     var type = dataURL.match(/^data\:([^\;]+)\;/)[1] 
    432                         file = new o.Blob( null, { data: dataURL } ) 
    433                         suffix = thepaste.options.mime_types.convert[ type ]; 
     431                    var type = dataURL.match(/^data\:([^\;]+)\;/)[1], 
     432                        file = new o.Blob( null, { data: dataURL } ), 
     433                        suffix = thepaste.options.mime_types.convert[ type ], 
     434                        postname = $('#post [name="post_title"]#title').val(); 
    434435                    if ( 'undefined' === typeof suffix ) { 
    435436                        console.trace( 'Won\'t upload, bad mime type: ' + type ); 
    436437                    } 
    437438 
    438                     file.name = thepaste.l10n.pasted + '.' + suffix; 
     439                    if ( 'undefined' !== typeof postname ) { 
     440                        postname = postname.replace(/([\^\!\?<>:"'\/\|\*§])/g,'').replace(/ +/g,' '); 
     441                        file.name = thepaste.l10n.pasted_into + ' ' + postname + '.' + suffix; 
     442                    } else { 
     443                        file.name = thepaste.l10n.pasted + '.' + suffix; 
     444                    } 
    439445                    file.type = type; 
    440446 
     
    535541    }, thepaste ); 
    536542 
    537 })( jQuery, wp.media ); 
     543})( jQuery, wp.media, mOxie ); 
    538544 
    539545(function($,exports){ 
  • the-paste/tags/1.0.4/js/admin/the-paste.min.js

    r1760790 r1762953  
    1 (function(){var e,t,a,i,n;e=window.jQuery,e.paste=function(e){var a;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),a=t.mountNonInputable(e),a._container},e.fn.pastableNonInputable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is("textarea, input:text, [contenteditable]")||(t.mountNonInputable(a),a._pastable=!0);return this},e.fn.pastableTextarea=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not(textarea, input:text)")||(t.mountTextarea(a),a._pastable=!0);return this},e.fn.pastableContenteditable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not([contenteditable])")||(t.mountContenteditable(a),a._pastable=!0);return this},i=function(e,t){var a,i,n,r,o,s,l,p,d,u,h;if(null==t&&(t=512),!(p=e.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(u=p,p=u[0],s=u[1],a=u[2],r=atob(a),n=[],d=0;d<r.length;){for(h=r.slice(d,d+t),o=new Array(h.length),l=0;l<h.length;)o[l]=h.charCodeAt(l),l++;i=new Uint8Array(o),n.push(i),d+=t}return new Blob(n,{type:s})},a=function(){return e(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},n=function(t,a){var i,n,r,o,s,l;return o=void 0,s=void 0,r=void 0,n=void 0,i=void 0,"area"===(l=t.nodeName.toLowerCase())?(o=t.parentNode,s=o.name,!(!t.href||!s||"map"!==o.nodeName.toLowerCase())&&(r=e("img[usemap='#"+s+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(n=!t.disabled)&&(i=e(t).closest("fieldset")[0])&&(n=!i.disabled):n="a"===l?t.href||a:a,(n=n||e(t).is("[contenteditable]"))&&e(t).is(":visible"))},t=function(){function t(t,a){this._container=t,this._target=a,this._container=e(this._container),this._target=e(this._target).addClass("pastable"),this._container.on("paste",function(e){return function(t){var a,i,n,r,o,s,l,p,d,u,h,c,g;if(t.currentTarget!==t.target)return t.preventDefault();if(e._paste_event_fired=!0,null!=(null!=(d=t.originalEvent)?d.clipboardData:void 0))if(a=t.originalEvent.clipboardData,a.items)for(u=a.items,r=0,s=u.length;r<s;r++){if(n=u[r],n.type.match(/^image\//)){p=new FileReader,p.onload=function(t){return e._handleImage(t.target.result)};try{p.readAsDataURL(n.getAsFile())}catch(e){}t.preventDefault();break}"text/plain"===n.type&&n.getAsString(function(t){return e._target.trigger("pasteText",{text:t})})}else-1!==Array.prototype.indexOf.call(a.types,"text/plain")&&(g=a.getData("Text"),setTimeout(function(){return e._target.trigger("pasteText",{text:g})},1)),e._checkImagesInContainer(function(t){return e._handleImage(t)});if(a=window.clipboardData)if(null!=(h=g=a.getData("Text"))?h.length:void 0)setTimeout(function(){return e._target.trigger("pasteText",{text:g}),e._target.trigger("_pasteCheckContainerDone")},1);else{for(c=a.files,o=0,l=c.length;o<l;o++)i=c[o],e._handleImage(URL.createObjectURL(i));e._checkImagesInContainer(function(e){})}return null}}(this))}return t.prototype._target=null,t.prototype._container=null,t.mountNonInputable=function(i){var r;return r=new t(a().appendTo(i),i),e(i).on("click",function(e){return function(e){if(!n(e.target,!1))return r._container.focus()}}()),r._container.on("focus",function(t){return function(){return e(i).addClass("pastable-focus")}}()),r._container.on("blur",function(t){return function(){return e(i).removeClass("pastable-focus")}}())},t.mountTextarea=function(i){var n,r,o,s;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(o=Object.getOwnPropertyDescriptor)&&null!=(s=o.call(Object,DataTransfer.prototype,"items"))?s.get:void 0)?this.mountContenteditable(i):(r=new t(a().insertBefore(i),i),n=!1,e(i).on("keyup",function(e){var t;return 17!==(t=e.keyCode)&&224!==t||(n=!1),null}),e(i).on("keydown",function(t){var a;return 17!==(a=t.keyCode)&&224!==a||(n=!0),null!=t.ctrlKey&&null!=t.metaKey&&(n=t.ctrlKey||t.metaKey),n&&86===t.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(t){return function(){if(!r._paste_event_fired)return e(i).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),e(i).on("paste",function(e){return function(){}}()),e(i).on("focus",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).addClass("pastable-focus")}}()),e(i).on("blur",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).removeClass("pastable-focus")}}()),e(r._target).on("_pasteCheckContainerDone",function(t){return function(){return e(i).focus(),r._textarea_focus_stolen=!1}}()),e(r._target).on("pasteText",function(t){return function(t,a){var n,r,o;return o=e(i).prop("selectionStart"),r=e(i).prop("selectionEnd"),n=e(i).val(),e(i).val(""+n.slice(0,o)+a.text+n.slice(r)),e(i)[0].setSelectionRange(o+a.text.length,o+a.text.length),e(i).trigger("change")}}()))},t.mountContenteditable=function(a){return new t(a,a),e(a).on("focus",function(t){return function(){return e(a).addClass("pastable-focus")}}()),e(a).on("blur",function(t){return function(){return e(a).removeClass("pastable-focus")}}())},t.prototype._handleImage=function(e){var t;return e.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),t=new Image,t.crossOrigin="anonymous",t.onload=function(e){return function(){var a,n,r,o;n=document.createElement("canvas"),n.width=t.width,n.height=t.height,r=n.getContext("2d"),r.drawImage(t,0,0,n.width,n.height),o=null;try{o=n.toDataURL("image/png"),a=i(o)}catch(e){}return o&&e._target.trigger("pasteImage",{blob:a,dataURL:o,width:t.width,height:t.height}),e._target.trigger("pasteImageEnd")}}(this),t.onerror=function(t){return function(){return t._target.trigger("pasteImageError",{message:"Failed to get image from: "+e,url:e}),t._target.trigger("pasteImageEnd")}}(this),t.src=e)},t.prototype._checkImagesInContainer=function(t){var a,i,n,r,o;for(o=Math.floor(1e3*Math.random()),r=this._container.find("img"),i=0,n=r.length;i<n;i++)a=r[i],a["_paste_marked_"+o]=!0;return setTimeout(function(i){return function(){var n,r,s;for(s=i._container.find("img"),n=0,r=s.length;n<r;n++)a=s[n],a["_paste_marked_"+o]||(t(a.src),e(a).remove());return i._target.trigger("_pasteCheckContainerDone")}}(this),1)},t}()}).call(this),function(e,t){var a=(navigator.userAgent.indexOf("Chrome"),0);thepaste=t.thepaste=e.extend({supports:{paste:"paste"in document||"onpaste"in document||"object"==typeof window.onpaste||"onpaste"in document.createElement("DIV")},view:{},uploadImage:function(t,i,n){var r="__thepaste_box_"+a++,s=e(t).wrap('<div id="'+r+'" data-progress="0" class="thepaste-image-placeholder" contenteditable="false"></div>').parent();t.onload=function(){e(i.$("#"+r)).width(this.naturalWidth),e(i.$("#"+r)).height(this.naturalHeight)};var l,p,d=t.src,u=function(t){var a=t.match(/^data\:([^\;]+)\;/)[1];file=new o.Blob(null,{data:t}),suffix=thepaste.options.mime_types.convert[a],"undefined"==typeof suffix&&console.trace("Won't upload, bad mime type: "+a),file.name=thepaste.l10n.pasted+"."+suffix,file.type=a;var n=function(){p.uploader.uploader.uploader.addFile(file)};p?(p.state().reset(),n()):(p=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:thepaste.l10n.copy_paste,multiple:!1}),p.close(),p.uploader.uploader&&p.uploader.uploader.ready?n():p.on("uploader:ready",n)),p.uploader.uploader.uploader.bind("UploadProgress",function(e){i.$("#"+r).attr("data-progress",e.total.percent)}),p.uploader.uploader.uploader.bind("FileUploaded",function(t,a){var n=i.$("#"+r),o='<img class="alignnone wp-image-'+a.attachment.id+' size-full" src="'+a.attachment.changed.url+'" />';n.replaceWith(o),i.$('img[src="'+d+'"]').each(function(){e(this).replaceWith(o)})}),p.uploader.uploader.uploader.bind("Error",function(e,t){console.log(e,t)})};return"blob:"===d.substr(0,5)?(l=new XMLHttpRequest,l.responseType="blob",l.onreadystatechange=function(){var e;4==l.readyState&&(e=new FileReader,e.onload=function(){u(e.result)},e.readAsDataURL(new Blob([l.response],{type:"image/png"})))},l.open("GET",d),l.send(null)):"data:"===d.substr(0,5)&&u(d),s},clipboardHasImage:function(t){var a=!1;return t.items?(e.each(t.items,function(e,t){if(t.type in thepaste.options.mime_types.paste)return a=!0,!1}),a):t.types?(e.each(thepaste.options.mime_types.paste,function(e,i){if(t.types.indexOf(e)>-1)return a=!0,!1}),a):null}},thepaste)}(jQuery,wp.media),function(e,t){var a=wp.media.thepaste.l10n;e.extend(wp.Uploader.prototype,{success:function(e){}}),_.extend(wp.media.view.MediaFrame.Select.prototype,{_parentInitialize:wp.media.view.MediaFrame.Select.prototype.initialize,initialize:function(){this._parentInitialize.apply(this,arguments),this.bindPasteHandlers()},_parentBrowseRouter:wp.media.view.MediaFrame.Select.prototype.browseRouter,browseRouter:function(e){this._parentBrowseRouter.apply(this,arguments),wp.media.thepaste.supports.paste&&e.set({pasteboard:{text:a.copy_paste,priority:35}})},bindPasteHandlers:function(){var e=!1;this.on("content:render close",function(t){e&&"function"==typeof e.dismiss&&e.dismiss(),void 0!==t&&(e=t)},this),this.on("content:create:pasteboard",this.contentCreatePasteboard,this),this.on("content:render:pasteboard",this.contentRenderGrabber,this),frame=this},contentCreatePasteboard:function(e){this.state();this.currentPasteView=e.view=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this,grabber:wp.media.thepaste.view.Pasteboard}),this.listenTo(this.currentPasteView.uploader,"action:uploaded:dataimage",this.uploadedDataImage)},contentRenderGrabber:function(e){e.startGrabbing()},uploadedDataImage:function(e){this.stopListening(this.currentPasteView.uploader,"action:uploaded:dataimage");var t={view:null};this.browseContent(t),this.content.set(t.view),this.router.get().select("browse")}}),_.extend(wp.media.view.AttachmentsBrowser.prototype,{_parentInitialize:wp.media.view.AttachmentsBrowser.prototype.initialize,initialize:function(){var e,t=this;this._parentInitialize.apply(this,arguments),this.thepaste={paste:{grabber:!1,modal:!1,mode:"paste"},current:!1},this.controller instanceof wp.media.view.MediaFrame.Select||wp.media.thepaste.supports.paste&&(e=new wp.media.view.Button({text:a.copy_paste,className:"grabber-button",priority:-64,click:function(){t.thepaste.active=t.thepaste.paste,t.thepasteOpen(a.copy_paste)}}),this.thepaste.paste.grabber=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this.controller,grabber:wp.media.thepaste.view.Pasteboard,wpuploader:this.controller.uploader.uploader.uploader}),this.toolbar.set("pasteModeButton",e.render()))},thepasteUploaded:function(e){this.thepaste.active.grabber.dismiss(),this.thepaste.modal.close(),this.thepasteClose()},thepasteError:function(e){console.log("error",e)},thepasteOpen:function(e){var t=this;this.thepaste.modal=new wp.media.view.Modal({controller:this,title:e}),this.thepaste.modal.content(this.thepaste.active.grabber),this.thepaste.modal.open(),this.thepaste.modal.on("close",function(){t.thepasteClose.apply(t),t.thepaste.active.grabber.stopGrabbing()}),this.thepaste.active.grabber.startGrabbing(),this.listenTo(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage",this.thepasteUploaded),this.listenTo(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage",this.thepasteError)},thepasteClose:function(){this.controller.deactivateMode(this.thepaste.active.mode).activateMode("edit"),this.stopListening(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage"),this.stopListening(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage")}})}(jQuery,window),function(e,t,a){var i=wp.media.thepaste,n=(wp.media.view.Button,wp.media.view.Modal,i.l10n);wp.media.thepaste.view.DataSourceImageUploader=wp.media.View.extend({template:wp.template("thepaste-uploader"),className:"thepaste-uploader",controller:null,image:null,$discardBtn:null,$uploadBtn:null,uploader:null,events:{'click [data-action="upload"]':"uploadImage",'click [data-action="discard"]':"discardImage"},initialize:function(){wp.media.View.prototype.initialize.apply(this,arguments),_.defaults(this.options,{defaultFileName:n.image});new wp.media.View({tagName:"div",className:"instruments",controller:this.controller});this.uploader=this.options.uploder},setImageData:function(e){var t=this.$imageContainer.html("").get(0),n=this,r=e.match(/data:(image\/(\w+));/)[1];return i.options.mime_types.convert[r]||(r=this.options.defaultFileFormat),this.image&&this.image.destroy(),this.image=new a.Image,this.image.onload=function(){var e=n.getUploader().getOption("resize"),a=Math.max(e.width/this.width,e.height/this.height);!!e&&a<1&&this.downsize(this.width*a,this.height*a),this.embed(t)},this.image.load(e),this.$imageContainer&&this.$imageContainer.append(this.image),this.$('[data-setting="format"] input[value="'+r+'"]').prop("checked",!0),this.disabled(!1),this},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$imageContainer=this.$(".image-container"),this.$discardBtn=this.$('[data-action="discard"]'),this.$uploadBtn=this.$('[data-action="upload"]'),this.$('[data-setting="title"]').val(this.options.defaultFileName),this},discardImage:function(){this.trigger("action:discard:dataimage",this),this.unbindUploaderEvents()},uploadImage:function(){var e=this.$('[data-setting="format"] :checked').val(),t=i.options.mime_types.convert[e],a=this.$('input[data-setting="title"]').val()+"."+t,n=this.image.getAsBlob(e,i.options.jpeg_quality);this.bindUploaderEvents(),n.detach(n.getSource()),n.name=a,n.type=e,this.getUploader().addFile(n,a),this.disabled(!0),this.trigger("action:upload:dataimage",this)},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},disabled:function(e){this.$discardBtn.prop("disabled",e),this.$uploadBtn.prop("disabled",e)},_uploadSuccessHandler:function(){this.trigger("action:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},_uploadErrorHandler:function(){this.trigger("error:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},bindUploaderEvents:function(){this.getUploader().bind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().bind("Error",this._uploadErrorHandler,this)},unbindUploaderEvents:function(){this.getUploader().unbind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().unbind("Error",this._uploadErrorHandler,this)},getUploader:function(){return this.controller.uploader.uploader.uploader}}),wp.media.thepaste.view.Pasteboard=wp.media.View.extend({template:wp.template("thepaste-pasteboard"),className:"thepaste-pasteboard",controller:null,action:"paste",$pasteboard:null,render:function(){var e=this;return wp.media.View.prototype.render.apply(this,arguments),this.$pasteboard=this.$(".injector").pastableContenteditable(),this.$message=this.$(".message"),this.$pasteboard.on("click",function(){e.show_message("")}),this},start:function(){var t,a=this;return this.imagePasted=!1,this.$pasteboard.on("paste",function(e){t=wp.media.thepaste.clipboardHasImage(e.originalEvent.clipboardData)}).on("pasteText",function(i,r){t||a.imagePasted||(a.show_message(n.paste_error_no_image),e(this).html(""))}).on("pasteImage",function(e,t){a.imagePasted||(a.trigger("action:create:dataimage",this,t.dataURL),a.imagePasted=!0)}).on("pasteImageError",function(t,i){a.show_message(n.paste_error),e(this).html("")}),setTimeout(function(){a.$pasteboard.get(0).focus()},1),this},stop:function(){return this.$pasteboard.off("pasteImage").off("pasteImageError").off("pasteText"),this},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},show_message:function(e){this.$message.text(e)}}),wp.media.thepaste.view.DataSourceImageGrabber=wp.media.View.extend({template:wp.template("thepaste-grabber"),className:"thepaste-grabber",grabber:null,uploader:null,initialize:function(){var e=wp.media.View.prototype.initialize.apply(this,arguments);return _.defaults(this.options,{wpuploader:null,defaultFileName:n.pasted,defaultFileFormat:"image/png",title:n.copy_paste}),this.grabber=new this.options.grabber({controller:this.controller}),this.uploader=new wp.media.thepaste.view.DataSourceImageUploader({controller:this.controller,uploder:this.options.wpuploader,defaultFileName:this.options.defaultFileName,defaultFileFormat:this.options.defaultFileFormat}),this.render(),this.listenTo(this.grabber,"action:create:dataimage",this.imageCreated),this.listenTo(this.uploader,"action:discard:dataimage",this.startGrabbing),e},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$(".content").append(this.grabber.render().$el).append(this.uploader.render().$el),this},imageCreated:function(e,t){this.grabber.stop().hide(),this.uploader.show().setImageData(t)},startGrabbing:function(){return this.uploader.hide(),this.grabber.show().start(),this},stopGrabbing:function(){return this.grabber.stop(),this},getAction:function(){return this.grabber.action},dismiss:function(){return this.grabber.stop(),this}})}(jQuery,window,mOxie); 
    2 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS5qcyJdLCJuYW1lcyI6WyIkIiwiUGFzdGUiLCJjcmVhdGVIaWRkZW5FZGl0YWJsZSIsImRhdGFVUkx0b0Jsb2IiLCJpc0ZvY3VzYWJsZSIsIndpbmRvdyIsImpRdWVyeSIsInBhc3RlIiwicGFzdGVDb250YWluZXIiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJtb3VudE5vbklucHV0YWJsZSIsIl9jb250YWluZXIiLCJmbiIsInBhc3RhYmxlTm9uSW5wdXRhYmxlIiwiZWwiLCJqIiwibGVuIiwicmVmIiwidGhpcyIsImxlbmd0aCIsIl9wYXN0YWJsZSIsImlzIiwicGFzdGFibGVUZXh0YXJlYSIsIm1vdW50VGV4dGFyZWEiLCJwYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSIsIm1vdW50Q29udGVudGVkaXRhYmxlIiwiZGF0YVVSTCIsInNsaWNlU2l6ZSIsImI2NERhdGEiLCJieXRlQXJyYXkiLCJieXRlQXJyYXlzIiwiYnl0ZUNoYXJhY3RlcnMiLCJieXRlTnVtYmVycyIsImNvbnRlbnRUeXBlIiwiaSIsIm0iLCJvZmZzZXQiLCJzbGljZSIsIm1hdGNoIiwiYXRvYiIsIkFycmF5IiwiY2hhckNvZGVBdCIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwiQmxvYiIsInR5cGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwiY3NzIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbiIsImxlZnQiLCJvdmVyZmxvdyIsImVsZW1lbnQiLCJoYXNUYWJpbmRleCIsImZpZWxkc2V0IiwiZm9jdXNhYmxlSWZWaXNpYmxlIiwiaW1nIiwibWFwIiwibWFwTmFtZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwYXJlbnROb2RlIiwibmFtZSIsImhyZWYiLCJ0ZXN0IiwiZGlzYWJsZWQiLCJjbG9zZXN0IiwiX3RhcmdldCIsImFkZENsYXNzIiwib24iLCJfdGhpcyIsImV2IiwiY2xpcGJvYXJkRGF0YSIsImZpbGUiLCJpdGVtIiwiayIsImxlbjEiLCJyZWFkZXIiLCJyZWYxIiwicmVmMiIsInJlZjMiLCJ0ZXh0IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiX3Bhc3RlX2V2ZW50X2ZpcmVkIiwib3JpZ2luYWxFdmVudCIsIml0ZW1zIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2ZW50IiwiX2hhbmRsZUltYWdlIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImdldEFzRmlsZSIsImVycm9yIiwiZ2V0QXNTdHJpbmciLCJzdHJpbmciLCJ0cmlnZ2VyIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImNhbGwiLCJ0eXBlcyIsImdldERhdGEiLCJzZXRUaW1lb3V0IiwiX2NoZWNrSW1hZ2VzSW5Db250YWluZXIiLCJzcmMiLCJmaWxlcyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIm5vbklucHV0YWJsZSIsImFwcGVuZFRvIiwiZm9jdXMiLCJyZW1vdmVDbGFzcyIsInRleHRhcmVhIiwiY3RsRG93biIsIkRhdGFUcmFuc2ZlciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImluc2VydEJlZm9yZSIsImtleUNvZGUiLCJjdHJsS2V5IiwibWV0YUtleSIsIl90ZXh0YXJlYV9mb2N1c19zdG9sZW4iLCJkYXRhIiwiY29udGVudCIsImN1ckVuZCIsImN1clN0YXJ0IiwicHJvcCIsInZhbCIsInNldFNlbGVjdGlvblJhbmdlIiwiY29udGVudGVkaXRhYmxlIiwibG9hZGVyIiwibWVzc2FnZSIsIkltYWdlIiwiY3Jvc3NPcmlnaW4iLCJibG9iIiwiY2FudmFzIiwiY3R4IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJ1cmwiLCJjYiIsInRpbWVzcGFuIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZmluZCIsInJlbW92ZSIsImV4cG9ydHMiLCJjb3VudGVyIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidGhlcGFzdGUiLCJleHRlbmQiLCJzdXBwb3J0cyIsInZpZXciLCJ1cGxvYWRJbWFnZSIsImltYWdlIiwiZWRpdG9yIiwidXBsb2FkX3BsYWNlaG9sZGVyIiwiaWQiLCIkY29udGFpbmVyIiwid3JhcCIsInBhcmVudCIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJ4aHIiLCJ3b3JrZmxvdyIsInVwbG9hZCIsIm8iLCJzdWZmaXgiLCJvcHRpb25zIiwibWltZV90eXBlcyIsImNvbnZlcnQiLCJ0cmFjZSIsImwxMG4iLCJwYXN0ZWQiLCJhZGRGaWxlIiwidXBsb2FkZXIiLCJzdGF0ZSIsInJlc2V0Iiwid3AiLCJtZWRpYSIsIm9wZW4iLCJ3cEFjdGl2ZUVkaXRvciIsImZyYW1lIiwidGl0bGUiLCJjb3B5X3Bhc3RlIiwibXVsdGlwbGUiLCJjbG9zZSIsInJlYWR5IiwiYmluZCIsImUiLCJ0b3RhbCIsInBlcmNlbnQiLCJ1cCIsImFyZ3MiLCJpbWdIVE1MIiwiYXR0YWNobWVudCIsImNoYW5nZWQiLCJyZXBsYWNlV2l0aCIsImVhY2giLCJzdWJzdHIiLCJYTUxIdHRwUmVxdWVzdCIsInJlc3BvbnNlVHlwZSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZSIsInNlbmQiLCJjbGlwYm9hcmRIYXNJbWFnZSIsImhhc0ltYWdlIiwiZXh0IiwiVXBsb2FkZXIiLCJzdWNjZXNzIiwiZmlsZV9hdHRhY2htZW50IiwiXyIsIk1lZGlhRnJhbWUiLCJTZWxlY3QiLCJfcGFyZW50SW5pdGlhbGl6ZSIsImluaXRpYWxpemUiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmRQYXN0ZUhhbmRsZXJzIiwiX3BhcmVudEJyb3dzZVJvdXRlciIsImJyb3dzZVJvdXRlciIsInNldCIsInBhc3RlYm9hcmQiLCJwcmlvcml0eSIsInByZXZpb3VzQ29udGVudCIsImRpc21pc3MiLCJjb250ZW50Q3JlYXRlUGFzdGVib2FyZCIsImNvbnRlbnRSZW5kZXJHcmFiYmVyIiwiY3VycmVudFBhc3RlVmlldyIsIkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIiLCJjb250cm9sbGVyIiwiZ3JhYmJlciIsIlBhc3RlYm9hcmQiLCJsaXN0ZW5UbyIsInVwbG9hZGVkRGF0YUltYWdlIiwic3RhcnRHcmFiYmluZyIsInN0b3BMaXN0ZW5pbmciLCJvYmoiLCJicm93c2VDb250ZW50Iiwicm91dGVyIiwic2VsZWN0IiwiQXR0YWNobWVudHNCcm93c2VyIiwicGFzdGVCdG4iLCJzZWxmIiwibW9kYWwiLCJtb2RlIiwiY3VycmVudCIsIkJ1dHRvbiIsImNsYXNzTmFtZSIsImNsaWNrIiwiYWN0aXZlIiwidGhlcGFzdGVPcGVuIiwid3B1cGxvYWRlciIsInRvb2xiYXIiLCJyZW5kZXIiLCJ0aGVwYXN0ZVVwbG9hZGVkIiwidGhlcGFzdGVDbG9zZSIsInRoZXBhc3RlRXJyb3IiLCJNb2RhbCIsInN0b3BHcmFiYmluZyIsImRlYWN0aXZhdGVNb2RlIiwiYWN0aXZhdGVNb2RlIiwiRGF0YVNvdXJjZUltYWdlVXBsb2FkZXIiLCJWaWV3IiwidGVtcGxhdGUiLCIkZGlzY2FyZEJ0biIsIiR1cGxvYWRCdG4iLCJldmVudHMiLCJjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0iLCJjbGljayBbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdIiwiZGVmYXVsdHMiLCJkZWZhdWx0RmlsZU5hbWUiLCJ0YWdOYW1lIiwidXBsb2RlciIsInNldEltYWdlRGF0YSIsImNvbnRhaW5lciIsIiRpbWFnZUNvbnRhaW5lciIsImh0bWwiLCJmb3JtYXQiLCJkZWZhdWx0RmlsZUZvcm1hdCIsImRlc3Ryb3kiLCJvcHRzIiwiZ2V0VXBsb2FkZXIiLCJnZXRPcHRpb24iLCJzY2FsZSIsIm1heCIsImRvd25zaXplIiwiZW1iZWQiLCJsb2FkIiwiYXBwZW5kIiwiZGlzY2FyZEltYWdlIiwidW5iaW5kVXBsb2FkZXJFdmVudHMiLCJnZXRBc0Jsb2IiLCJqcGVnX3F1YWxpdHkiLCJiaW5kVXBsb2FkZXJFdmVudHMiLCJkZXRhY2giLCJnZXRTb3VyY2UiLCJzaG93IiwiJGVsIiwiaGlkZSIsIl91cGxvYWRTdWNjZXNzSGFuZGxlciIsIl91cGxvYWRFcnJvckhhbmRsZXIiLCJ1bmJpbmQiLCJhY3Rpb24iLCIkcGFzdGVib2FyZCIsIiRtZXNzYWdlIiwic2hvd19tZXNzYWdlIiwic3RhcnQiLCJpbWFnZVBhc3RlZCIsInBhc3RlX2Vycm9yX25vX2ltYWdlIiwicGFzdGVfZXJyb3IiLCJzdG9wIiwib2ZmIiwibXNnIiwicmV0IiwiaW1hZ2VDcmVhdGVkIiwiaW1hZ2VEYXRhIiwiZ2V0QWN0aW9uIiwibU94aWUiXSwibWFwcGluZ3MiOiJDQVFBLFdBQ0UsR0FBSUEsR0FBR0MsRUFBT0MsRUFBc0JDLEVBQWVDLENBRW5ESixHQUFJSyxPQUFPQyxPQUVYTixFQUFFTyxNQUFRLFNBQVNDLEdBQ2pCLEdBQUlDLEVBS0osT0FKdUIsbUJBQVpDLFVBQXVDLE9BQVpBLFNBQ3BDQSxRQUFRQyxJQUFJLDBGQUVkRixFQUFLUixFQUFNVyxrQkFBa0JKLEdBQ3RCQyxFQUFHSSxZQUdaYixFQUFFYyxHQUFHQyxxQkFBdUIsV0FDMUIsR0FBSUMsR0FBSUMsRUFBR0MsRUFBS0MsQ0FFaEIsS0FEQUEsRUFBTUMsS0FDREgsRUFBSSxFQUFHQyxFQUFNQyxFQUFJRSxPQUFRSixFQUFJQyxFQUFLRCxJQUNyQ0QsRUFBS0csRUFBSUYsR0FDTEQsRUFBR00sV0FBYXRCLEVBQUVnQixHQUFJTyxHQUFHLDZDQUc3QnRCLEVBQU1XLGtCQUFrQkksR0FDeEJBLEVBQUdNLFdBQVksRUFFakIsT0FBT0YsT0FHVHBCLEVBQUVjLEdBQUdVLGlCQUFtQixXQUN0QixHQUFJUixHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsZ0NBRzdCdEIsRUFBTXdCLGNBQWNULEdBQ3BCQSxFQUFHTSxXQUFZLEVBRWpCLE9BQU9GLE9BR1RwQixFQUFFYyxHQUFHWSx3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N0RwVCxLQUFLa08sU0FBVWxPLEtBQUt1SyxTQUFVLDJCQUE0QnZLLEtBQUtvTyxlQUV4RCtFLEdBRVI1RCxPQUFPLFdBU04sTUFOQTdFLElBQUdDLE1BQU1xRixLQUFLNUssVUFBVW1LLE9BQU90QyxNQUFPak4sS0FBTWtOLFdBRTVDbE4sS0FBS3BCLEVBQUUsWUFDTDhTLE9BQVExUixLQUFLZ08sUUFBUXVCLFNBQVM0QyxLQUM5QlQsT0FBUTFSLEtBQUt1SyxTQUFTZ0YsU0FBUzRDLEtBRTFCblMsTUFFUm9ULGFBQWUsU0FBVXBGLEVBQVVxRixHQUNsQ3JULEtBQUtnTyxRQUFRZ0YsT0FBT1osT0FDcEJwUyxLQUFLdUssU0FBUzJILE9BQU92QixhQUFjMEMsSUFFcENqRixjQUFjLFdBR2IsTUFGQXBPLE1BQUt1SyxTQUFTNkgsT0FDZHBTLEtBQUtnTyxRQUFRa0UsT0FBT1UsUUFDYjVTLE1BRVI0UCxhQUFhLFdBRVosTUFEQTVQLE1BQUtnTyxRQUFRZ0YsT0FDTmhULE1BRVJzVCxVQUFZLFdBQ1gsTUFBT3RULE1BQUtnTyxRQUFRd0UsUUFFckI5RSxRQUFRLFdBRVAsTUFEQTFOLE1BQUtnTyxRQUFRZ0YsT0FDTmhULFNBSVBkLE9BQU9ELE9BQU9zVSIsImZpbGUiOiJ0aGUtcGFzdGUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcblxuLypcbnBhc3RlLmpzIGlzIGFuIGludGVyZmFjZSB0byByZWFkIGRhdGEgKCB0ZXh0IC8gaW1hZ2UgKSBmcm9tIGNsaXBib2FyZCBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuIEl0IGFsc28gY29udGFpbnMgc2V2ZXJhbCBoYWNrcy5cblxuaHR0cHM6Ly9naXRodWIuY29tL2xheWVyc3Nzcy9wYXN0ZS5qc1xuICovXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyICQsIFBhc3RlLCBjcmVhdGVIaWRkZW5FZGl0YWJsZSwgZGF0YVVSTHRvQmxvYiwgaXNGb2N1c2FibGU7XG5cbiAgJCA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgJC5wYXN0ZSA9IGZ1bmN0aW9uKHBhc3RlQ29udGFpbmVyKSB7XG4gICAgdmFyIHBtO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFUFJFQ0FURUQ6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwbSA9IFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKHBhc3RlQ29udGFpbmVyKTtcbiAgICByZXR1cm4gcG0uX2NvbnRhaW5lcjtcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlTm9uSW5wdXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsLCBqLCBsZW4sIHJlZjtcbiAgICByZWYgPSB0aGlzO1xuICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgZWwgPSByZWZbal07XG4gICAgICBpZiAoZWwuX3Bhc3RhYmxlIHx8ICQoZWwpLmlzKCd0ZXh0YXJlYSwgaW5wdXQ6dGV4dCwgW2NvbnRlbnRlZGl0YWJsZV0nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVUZXh0YXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdCh0ZXh0YXJlYSwgaW5wdXQ6dGV4dCknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50VGV4dGFyZWEoZWwpO1xuICAgICAgZWwuX3Bhc3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdChbY29udGVudGVkaXRhYmxlXSknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGRhdGFVUkx0b0Jsb2IgPSBmdW5jdGlvbihkYXRhVVJMLCBzbGljZVNpemUpIHtcbiAgICB2YXIgYjY0RGF0YSwgYnl0ZUFycmF5LCBieXRlQXJyYXlzLCBieXRlQ2hhcmFjdGVycywgYnl0ZU51bWJlcnMsIGNvbnRlbnRUeXBlLCBpLCBtLCBvZmZzZXQsIHJlZiwgc2xpY2U7XG4gICAgaWYgKHNsaWNlU2l6ZSA9PSBudWxsKSB7XG4gICAgICBzbGljZVNpemUgPSA1MTI7XG4gICAgfVxuICAgIGlmICghKG0gPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NFxcLCguKykkLykpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVmID0gbSwgbSA9IHJlZlswXSwgY29udGVudFR5cGUgPSByZWZbMV0sIGI2NERhdGEgPSByZWZbMl07XG4gICAgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGJ5dGVBcnJheXMgPSBbXTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGgpIHtcbiAgICAgIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuICAgICAgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCBzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgIG9mZnNldCArPSBzbGljZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIGNyZWF0ZUhpZGRlbkVkaXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYXR0cigndGFiaW5kZXgnLCAtMSkuY3NzKHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgfSk7XG4gIH07XG5cbiAgaXNGb2N1c2FibGUgPSBmdW5jdGlvbihlbGVtZW50LCBoYXNUYWJpbmRleCkge1xuICAgIHZhciBmaWVsZHNldCwgZm9jdXNhYmxlSWZWaXNpYmxlLCBpbWcsIG1hcCwgbWFwTmFtZSwgbm9kZU5hbWU7XG4gICAgbWFwID0gdm9pZCAwO1xuICAgIG1hcE5hbWUgPSB2b2lkIDA7XG4gICAgaW1nID0gdm9pZCAwO1xuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IHZvaWQgMDtcbiAgICBmaWVsZHNldCA9IHZvaWQgMDtcbiAgICBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoJ2FyZWEnID09PSBub2RlTmFtZSkge1xuICAgICAgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgbWFwTmFtZSA9IG1hcC5uYW1lO1xuICAgICAgaWYgKCFlbGVtZW50LmhyZWYgfHwgIW1hcE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdtYXAnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGltZyA9ICQoJ2ltZ1t1c2VtYXA9XFwnIycgKyBtYXBOYW1lICsgJ1xcJ10nKTtcbiAgICAgIHJldHVybiBpbWcubGVuZ3RoID4gMCAmJiBpbWcuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuICAgIGlmICgvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgICBpZiAoZm9jdXNhYmxlSWZWaXNpYmxlKSB7XG4gICAgICAgIGZpZWxkc2V0ID0gJChlbGVtZW50KS5jbG9zZXN0KCdmaWVsZHNldCcpWzBdO1xuICAgICAgICBpZiAoZmllbGRzZXQpIHtcbiAgICAgICAgICBmb2N1c2FibGVJZlZpc2libGUgPSAhZmllbGRzZXQuZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCdhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGVsZW1lbnQuaHJlZiB8fCBoYXNUYWJpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gaGFzVGFiaW5kZXg7XG4gICAgfVxuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGZvY3VzYWJsZUlmVmlzaWJsZSB8fCAkKGVsZW1lbnQpLmlzKCdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIHJldHVybiBmb2N1c2FibGVJZlZpc2libGUgJiYgJChlbGVtZW50KS5pcygnOnZpc2libGUnKTtcbiAgfTtcblxuICBQYXN0ZSA9IChmdW5jdGlvbigpIHtcbiAgICBQYXN0ZS5wcm90b3R5cGUuX3RhcmdldCA9IG51bGw7XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NvbnRhaW5lciA9IG51bGw7XG5cbiAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKG5vbklucHV0YWJsZSkge1xuICAgICAgdmFyIHBhc3RlO1xuICAgICAgcGFzdGUgPSBuZXcgUGFzdGUoY3JlYXRlSGlkZGVuRWRpdGFibGUoKS5hcHBlbmRUbyhub25JbnB1dGFibGUpLCBub25JbnB1dGFibGUpO1xuICAgICAgJChub25JbnB1dGFibGUpLm9uKCdjbGljaycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICBpZiAoIWlzRm9jdXNhYmxlKGV2LnRhcmdldCwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHBhc3RlLl9jb250YWluZXIub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKG5vbklucHV0YWJsZSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50VGV4dGFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSkge1xuICAgICAgdmFyIGN0bERvd24sIHBhc3RlLCByZWYsIHJlZjE7XG4gICAgICBpZiAoKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgRGF0YVRyYW5zZmVyICE9PSBudWxsID8gRGF0YVRyYW5zZmVyLnByb3RvdHlwZSA6IHZvaWQgMCkgJiYgKChyZWYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY2FsbChPYmplY3QsIERhdGFUcmFuc2Zlci5wcm90b3R5cGUsICdpdGVtcycpKSAhPSBudWxsID8gcmVmMS5nZXQgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vdW50Q29udGVudGVkaXRhYmxlKHRleHRhcmVhKTtcbiAgICAgIH1cbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuaW5zZXJ0QmVmb3JlKHRleHRhcmVhKSwgdGV4dGFyZWEpO1xuICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2tleXVwJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2LmN0cmxLZXkgIT0gbnVsbCkgJiYgKGV2Lm1ldGFLZXkgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjdGxEb3duID0gZXYuY3RybEtleSB8fCBldi5tZXRhS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdGxEb3duICYmIGV2LmtleUNvZGUgPT09IDg2KSB7XG4gICAgICAgICAgcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IHRydWU7XG4gICAgICAgICAgcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIHBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghcGFzdGUuX3Bhc3RlX2V2ZW50X2ZpcmVkKSB7XG4gICAgICAgICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIXBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4pIHtcbiAgICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICAkKHRleHRhcmVhKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJChwYXN0ZS5fdGFyZ2V0KS5vbignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKHRleHRhcmVhKS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChwYXN0ZS5fdGFyZ2V0KS5vbigncGFzdGVUZXh0JywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldiwgZGF0YSkge1xuICAgICAgICAgIHZhciBjb250ZW50LCBjdXJFbmQsIGN1clN0YXJ0O1xuICAgICAgICAgIGN1clN0YXJ0ID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uU3RhcnQnKTtcbiAgICAgICAgICBjdXJFbmQgPSAkKHRleHRhcmVhKS5wcm9wKCdzZWxlY3Rpb25FbmQnKTtcbiAgICAgICAgICBjb250ZW50ID0gJCh0ZXh0YXJlYSkudmFsKCk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkudmFsKFwiXCIgKyBjb250ZW50LnNsaWNlKDAsIGN1clN0YXJ0KSArIGRhdGEudGV4dCArIGNvbnRlbnQuc2xpY2UoY3VyRW5kKSk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSlbMF0uc2V0U2VsZWN0aW9uUmFuZ2UoY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoLCBjdXJTdGFydCArIGRhdGEudGV4dC5sZW5ndGgpO1xuICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgUGFzdGUubW91bnRDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbihjb250ZW50ZWRpdGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNvbnRlbnRlZGl0YWJsZSwgY29udGVudGVkaXRhYmxlKTtcbiAgICAgICQoY29udGVudGVkaXRhYmxlKS5vbignZm9jdXMnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKGNvbnRlbnRlZGl0YWJsZSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBQYXN0ZShfY29udGFpbmVyLCBfdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBfY29udGFpbmVyO1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9ICQodGhpcy5fY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX3RhcmdldCA9ICQodGhpcy5fdGFyZ2V0KS5hZGRDbGFzcygncGFzdGFibGUnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5vbigncGFzdGUnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgdmFyIGNsaXBib2FyZERhdGEsIGZpbGUsIGl0ZW0sIGosIGssIGxlbiwgbGVuMSwgcmVhZGVyLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHRleHQ7XG4gICAgICAgICAgaWYgKGV2LmN1cnJlbnRUYXJnZXQgIT09IGV2LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzLl9wYXN0ZV9ldmVudF9maXJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKCgocmVmID0gZXYub3JpZ2luYWxFdmVudCkgIT0gbnVsbCA/IHJlZi5jbGlwYm9hcmREYXRhIDogdm9pZCAwKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhID0gZXYub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhO1xuICAgICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgcmVmMSA9IGNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gcmVmMVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLm1hdGNoKC9eaW1hZ2VcXC8vKSkge1xuICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2hhbmRsZUltYWdlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGl0ZW0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0L3BsYWluJykge1xuICAgICAgICAgICAgICAgICAgaXRlbS5nZXRBc1N0cmluZyhmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKC0xICE9PSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGNsaXBib2FyZERhdGEudHlwZXMsICd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShzcmMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgaWYgKChyZWYyID0gKHRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKSkpICE9IG51bGwgPyByZWYyLmxlbmd0aCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZjMgPSBjbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMy5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gcmVmM1trXTtcbiAgICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlSW1hZ2UoVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuICAgIFBhc3RlLnByb3RvdHlwZS5faGFuZGxlSW1hZ2UgPSBmdW5jdGlvbihzcmMpIHtcbiAgICAgIHZhciBsb2FkZXI7XG4gICAgICBpZiAoc3JjLm1hdGNoKC9ed2Via2l0XFwtZmFrZVxcLXVybFxcOlxcL1xcLy8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSB0cnlpbmcgdG8gcGFzdGUgYW4gaW1hZ2UgaW4gU2FmYXJpLCBob3dldmVyIHdlIGFyZSB1bmFibGUgdG8gcmV0aWV2ZSBpdHMgZGF0YS5cIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlU3RhcnQnKTtcbiAgICAgIGxvYWRlciA9IG5ldyBJbWFnZSgpO1xuICAgICAgbG9hZGVyLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICAgIGxvYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBibG9iLCBjYW52YXMsIGN0eCwgZGF0YVVSTDtcbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBsb2FkZXIud2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGxvYWRlci5oZWlnaHQ7XG4gICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShsb2FkZXIsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgZGF0YVVSTCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIGJsb2IgPSBkYXRhVVJMdG9CbG9iKGRhdGFVUkwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgIGlmIChkYXRhVVJMKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2UnLCB7XG4gICAgICAgICAgICAgIGJsb2I6IGJsb2IsXG4gICAgICAgICAgICAgIGRhdGFVUkw6IGRhdGFVUkwsXG4gICAgICAgICAgICAgIHdpZHRoOiBsb2FkZXIud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogbG9hZGVyLmhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFbmQnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgbG9hZGVyLm9uZXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gZ2V0IGltYWdlIGZyb206IFwiICsgc3JjLFxuICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJldHVybiBsb2FkZXIuc3JjID0gc3JjO1xuICAgIH07XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIgPSBmdW5jdGlvbihjYikge1xuICAgICAgdmFyIGltZywgaiwgbGVuLCByZWYsIHRpbWVzcGFuO1xuICAgICAgdGltZXNwYW4gPSBNYXRoLmZsb29yKDEwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgIHJlZiA9IHRoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBpbWcgPSByZWZbal07XG4gICAgICAgIGltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaywgbGVuMSwgcmVmMTtcbiAgICAgICAgICByZWYxID0gX3RoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMS5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgIGltZyA9IHJlZjFba107XG4gICAgICAgICAgICBpZiAoIWltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0pIHtcbiAgICAgICAgICAgICAgY2IoaW1nLnNyYyk7XG4gICAgICAgICAgICAgICQoaW1nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgMSk7XG4gICAgfTtcblxuICAgIHJldHVybiBQYXN0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oJCxleHBvcnRzKXtcblxuXHR2YXIgaXNfY2hyb21lXHQ9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSxcblx0XHRjb3VudGVyID0gMCxcblx0XHR3b3JrZmxvdztcblxuXHR0aGVwYXN0ZSA9IGV4cG9ydHMudGhlcGFzdGUgPSAkLmV4dGVuZCgge1xuXHRcdHN1cHBvcnRzIDoge1xuXHRcdFx0cGFzdGU6ICggKCdwYXN0ZScgaW4gZG9jdW1lbnQpIHx8ICgnb25wYXN0ZScgaW4gZG9jdW1lbnQpIHx8IHR5cGVvZih3aW5kb3cub25wYXN0ZSkgPT09ICdvYmplY3QnIHx8ICggJ29ucGFzdGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpICkgKSwgLy8gYnJvd3NlclxuXHRcdH0sXG5cdFx0dmlldzp7fSxcblxuXHRcdHVwbG9hZEltYWdlOiBmdW5jdGlvbiggaW1hZ2UsIGVkaXRvciwgdXBsb2FkX3BsYWNlaG9sZGVyICkge1xuXG5cdFx0XHR2YXIgaWQgPSAnX190aGVwYXN0ZV9ib3hfJysoY291bnRlcisrKSxcblx0XHRcdFx0JGNvbnRhaW5lciA9ICQoaW1hZ2UpXG5cdFx0XHRcdFx0LndyYXAoJzxkaXYgaWQ9XCInK2lkKydcIiBkYXRhLXByb2dyZXNzPVwiMFwiIGNsYXNzPVwidGhlcGFzdGUtaW1hZ2UtcGxhY2Vob2xkZXJcIiBjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiPjwvZGl2PicpXG5cdFx0XHRcdFx0LnBhcmVudCgpO1xuXG5cdFx0XHRcdC8vIHNldCAkY29udGFpbmVyIHNpemUgb25jZSBrbm93blxuXHRcdFx0XHRpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKCBlZGl0b3IuJCgnIycraWQpICkud2lkdGgoIHRoaXMubmF0dXJhbFdpZHRoICk7XG5cdFx0XHRcdFx0JCggZWRpdG9yLiQoJyMnK2lkKSApLmhlaWdodCggdGhpcy5uYXR1cmFsSGVpZ2h0ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0dmFyIHhocixcblx0XHRcdFx0d29ya2Zsb3csXG5cdFx0XHRcdHNyYyA9IGltYWdlLnNyYyxcblx0XHRcdFx0dXBsb2FkID0gZnVuY3Rpb24oIGRhdGFVUkwgKXtcblx0XHRcdFx0XHR2YXIgdHlwZSA9IGRhdGFVUkwubWF0Y2goL15kYXRhXFw6KFteXFw7XSspXFw7LylbMV1cblx0XHRcdFx0XHRcdGZpbGUgPSBuZXcgby5CbG9iKCBudWxsLCB7IGRhdGE6IGRhdGFVUkwgfSApXG5cdFx0XHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdO1xuXHRcdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBzdWZmaXggKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLnRyYWNlKCAnV29uXFwndCB1cGxvYWQsIGJhZCBtaW1lIHR5cGU6ICcgKyB0eXBlICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmlsZS5uYW1lID0gdGhlcGFzdGUubDEwbi5wYXN0ZWQgKyAnLicgKyBzdWZmaXg7XG5cdFx0XHRcdFx0ZmlsZS50eXBlID0gdHlwZTtcblxuXHRcdFx0XHRcdHZhciBhZGRGaWxlID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmFkZEZpbGUoIGZpbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAhIHdvcmtmbG93ICkge1xuXHRcdFx0XHRcdFx0d29ya2Zsb3cgPSB3cC5tZWRpYS5lZGl0b3Iub3Blbiggd2luZG93LndwQWN0aXZlRWRpdG9yLCB7XG5cdFx0XHRcdFx0XHRcdGZyYW1lOlx0XHQncG9zdCcsXG5cdFx0XHRcdFx0XHRcdHN0YXRlOlx0XHQnaW5zZXJ0Jyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6XHRcdHRoZXBhc3RlLmwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRcdFx0bXVsdGlwbGU6XHRmYWxzZVxuXHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5jbG9zZSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyICYmIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnJlYWR5ICkge1xuXHRcdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR3b3JrZmxvdy5vbiggJ3VwbG9hZGVyOnJlYWR5JywgYWRkRmlsZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5zdGF0ZSgpLnJlc2V0KCk7XG5cdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ1VwbG9hZFByb2dyZXNzJyxmdW5jdGlvbiggZSApe1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJyMnK2lkKS5hdHRyKCdkYXRhLXByb2dyZXNzJyxlLnRvdGFsLnBlcmNlbnQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ0ZpbGVVcGxvYWRlZCcsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cblx0XHRcdFx0XHRcdHZhciAkY29udGFpbmVyID0gZWRpdG9yLiQoJyMnK2lkKSxcblx0XHRcdFx0XHRcdFx0aW1nSFRNTCA9ICc8aW1nIGNsYXNzPVwiYWxpZ25ub25lIHdwLWltYWdlLScrYXJncy5hdHRhY2htZW50LmlkKycgc2l6ZS1mdWxsXCIgc3JjPVwiJythcmdzLmF0dGFjaG1lbnQuY2hhbmdlZC51cmwrJ1wiIC8+JztcblxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSBpbWFnZVxuXHRcdFx0XHRcdFx0JGNvbnRhaW5lci5yZXBsYWNlV2l0aCggaW1nSFRNTCApO1xuXG5cdFx0XHRcdFx0XHQvLyByZXBsYWNlIG90aGVyIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJ2ltZ1tzcmM9XCInK3NyYysnXCJdJykuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLnJlcGxhY2VXaXRoKCBpbWdIVE1MICk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdFcnJvcicsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh1cCxhcmdzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCBzcmMuc3Vic3RyKDAsNSkgPT09ICdibG9iOicgKSB7XG5cblx0XHRcdFx0eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHRcdHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG5cdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHZhciByZWFkZXI7XG5cdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PSA0ICkge1xuXHRcdFx0XHRcdFx0cmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dXBsb2FkKCByZWFkZXIucmVzdWx0ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCggbmV3IEJsb2IoIFsgeGhyLnJlc3BvbnNlIF0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHhoci5vcGVuKCAnR0VUJywgc3JjICk7XG5cdFx0XHRcdHhoci5zZW5kKCBudWxsICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHNyYy5zdWJzdHIoMCw1KSA9PT0gJ2RhdGE6JyApIHtcblx0XHRcdFx0dXBsb2FkKCBzcmMgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkY29udGFpbmVyO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKlx0QHJldHVybjogbnVsbHx0cnVlfGZhbHNlXG5cdFx0ICovXG5cdFx0Y2xpcGJvYXJkSGFzSW1hZ2U6ZnVuY3Rpb24oIGNsaXBib2FyZERhdGEgKSB7XG5cdFx0XHR2YXIgaGFzSW1hZ2UgPSBmYWxzZTtcblx0XHRcdGlmICggY2xpcGJvYXJkRGF0YS5pdGVtcyApIHtcblx0XHRcdFx0JC5lYWNoKCBjbGlwYm9hcmREYXRhLml0ZW1zLCBmdW5jdGlvbihpLGl0ZW0pe1xuXHRcdFx0XHRcdGlmICggaXRlbS50eXBlIGluIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5wYXN0ZSApIHtcblx0XHRcdFx0XHRcdGhhc0ltYWdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIGhhc0ltYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGNsaXBib2FyZERhdGEudHlwZXMgKSB7XG5cdFx0XHRcdCQuZWFjaCggdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLnBhc3RlLCBmdW5jdGlvbih0eXBlLGV4dCl7XG5cdFx0XHRcdFx0aWYgKCBjbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YodHlwZSkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGhhc0ltYWdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIGhhc0ltYWdlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cblx0fSwgdGhlcGFzdGUgKTtcblxufSkoIGpRdWVyeSwgd3AubWVkaWEgKTtcblxuKGZ1bmN0aW9uKCQsZXhwb3J0cyl7XG5cblx0dmFyIGNvdW50ZXIgICAgICA9IDAsXG5cdFx0bDEwbiA9IHdwLm1lZGlhLnRoZXBhc3RlLmwxMG47XG5cblx0JC5leHRlbmQoIHdwLlVwbG9hZGVyLnByb3RvdHlwZSwge1xuXHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbiggZmlsZV9hdHRhY2htZW50ICl7XG5cdFx0fVxuXHR9KTtcblxuXG5cdC8qKlxuXHQgKlx0SW50ZWdyYXRlIGludG8gbWVkaWEgbGlicmFyeSBtb2RhbFxuXHQgKi9cblx0Ly8gYWRkIHN0YXRlcyB0byBicm93c2Ugcm91dGVyXG5cdF8uZXh0ZW5kKCB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZSwge1xuXHRcdF9wYXJlbnRJbml0aWFsaXplOiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZS5pbml0aWFsaXplLFxuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fcGFyZW50SW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR0aGlzLmJpbmRQYXN0ZUhhbmRsZXJzKCk7XG5cdFx0fSxcblx0XHRfcGFyZW50QnJvd3NlUm91dGVyOiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZS5icm93c2VSb3V0ZXIsXG5cdFx0YnJvd3NlUm91dGVyIDogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0XHR0aGlzLl9wYXJlbnRCcm93c2VSb3V0ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXG5cdFx0XHRpZiAoIHdwLm1lZGlhLnRoZXBhc3RlLnN1cHBvcnRzLnBhc3RlICkge1xuXHRcdFx0XHR2aWV3LnNldCh7cGFzdGVib2FyZDp7XG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRwcmlvcml0eTogMzVcblx0XHRcdFx0fX0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiaW5kUGFzdGVIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcHJldmlvdXNDb250ZW50ID0gZmFsc2U7XG5cdFx0XG5cdFx0XHQvLyBkaXNtaXNzIGNvbnRlbnQgb24gY2xvc2Vcblx0XHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlciBjbG9zZScgLCBmdW5jdGlvbihjb250ZW50KXtcblx0XHRcdFx0aWYgKCBwcmV2aW91c0NvbnRlbnQgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHByZXZpb3VzQ29udGVudC5kaXNtaXNzICkge1xuXHRcdFx0XHRcdHByZXZpb3VzQ29udGVudC5kaXNtaXNzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGNvbnRlbnQgKVxuXHRcdFx0XHRcdHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7XG5cdFx0XHR9ICwgdGhpcyApO1xuXHRcdFxuXHRcdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOnBhc3RlYm9hcmQnLCB0aGlzLmNvbnRlbnRDcmVhdGVQYXN0ZWJvYXJkLCB0aGlzICk7XG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6cGFzdGVib2FyZCcsIHRoaXMuY29udGVudFJlbmRlckdyYWJiZXIsIHRoaXMgKTtcblxuXHRcdFx0ZnJhbWUgPSB0aGlzO1xuXHRcdH0sXG5cdFx0Ly8gYWRkIGhhbmRsZXJzXG5cdFx0Y29udGVudENyZWF0ZVBhc3RlYm9hcmQ6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuXG5cdFx0XHR0aGlzLmN1cnJlbnRQYXN0ZVZpZXcgPSBjb250ZW50LnZpZXcgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyKCB7IFxuXHRcdFx0XHRjb250cm9sbGVyXHQ6IHRoaXMsIFxuXHRcdFx0XHRncmFiYmVyXHRcdDogd3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuY3VycmVudFBhc3RlVmlldy51cGxvYWRlciwgJ2FjdGlvbjp1cGxvYWRlZDpkYXRhaW1hZ2UnLCB0aGlzLnVwbG9hZGVkRGF0YUltYWdlICk7XG5cdFx0fSxcblx0XHRjb250ZW50UmVuZGVyR3JhYmJlcjogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0XHRjb250ZW50LnN0YXJ0R3JhYmJpbmcoKTtcblx0XHR9LFxuXHRcdHVwbG9hZGVkRGF0YUltYWdlOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy5jdXJyZW50UGFzdGVWaWV3LnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHZhciBvYmogPSB7IHZpZXc6IG51bGwgfTtcblx0XHRcdHRoaXMuYnJvd3NlQ29udGVudChvYmopO1xuXHRcdFx0dGhpcy5jb250ZW50LnNldCggb2JqLnZpZXcgKTtcblx0XHRcdHRoaXMucm91dGVyLmdldCgpLnNlbGVjdCgnYnJvd3NlJylcblx0XHR9XG5cdH0pO1xuXHRcblxuXG5cdC8qKlxuXHQgKlx0QWRkIHBhc3RlIGJ1dHRvbiB0byB0b29sYmFyIG9uIHVwbG9hZC5waHBcblx0ICovXG5cdF8uZXh0ZW5kKCB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3Nlci5wcm90b3R5cGUsIHtcblx0XHRfcGFyZW50SW5pdGlhbGl6ZTpcdHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyLnByb3RvdHlwZS5pbml0aWFsaXplLFxuXHRcdGluaXRpYWxpemU6XHRmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdFx0cGFzdGVCdG47XG5cblx0XHRcdHRoaXMuX3BhcmVudEluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnRoZXBhc3RlID0ge1xuXHRcdFx0XHRwYXN0ZVx0OiB7XG4vL1x0XHRcdFx0XHRidXR0b25cdDogZmFsc2UsXG5cdFx0XHRcdFx0Z3JhYmJlclx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RhbFx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RlXHQ6ICdwYXN0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1cnJlbnRcdFx0OiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEgKCB0aGlzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0ICkgKSB7XG5cblx0XHRcdFx0aWYgKCB3cC5tZWRpYS50aGVwYXN0ZS5zdXBwb3J0cy5wYXN0ZSApIHtcblxuXHRcdFx0XHRcdHBhc3RlQnRuID0gbmV3IHdwLm1lZGlhLnZpZXcuQnV0dG9uKCB7XG5cdFx0XHRcdFx0XHR0ZXh0XHRcdDogbDEwbi5jb3B5X3Bhc3RlLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiAgJ2dyYWJiZXItYnV0dG9uJyxcblx0XHRcdFx0XHRcdHByaW9yaXR5XHQ6IC02NCxcblx0XHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi50aGVwYXN0ZS5hY3RpdmUgPSBzZWxmLnRoZXBhc3RlLnBhc3RlO1xuXHRcdFx0XHRcdFx0XHRzZWxmLnRoZXBhc3RlT3BlbiggbDEwbi5jb3B5X3Bhc3RlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHRoaXMudGhlcGFzdGUucGFzdGUuZ3JhYmJlciA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIoIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXJcdDogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0Z3JhYmJlclx0XHQ6IHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuUGFzdGVib2FyZCxcblx0XHRcdFx0XHRcdHdwdXBsb2FkZXJcdDogdGhpcy5jb250cm9sbGVyLnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyXG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0dGhpcy50b29sYmFyLnNldCggJ3Bhc3RlTW9kZUJ1dHRvbicsIHBhc3RlQnRuLnJlbmRlcigpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRoZXBhc3RlVXBsb2FkZWQ6IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci5kaXNtaXNzKCk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlQ2xvc2UoKTtcblx0XHR9LFxuXHRcdHRoZXBhc3RlRXJyb3I6IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0Y29uc29sZS5sb2coICdlcnJvcicsIGUgKTtcblx0XHR9LFxuXHRcdHRoZXBhc3RlT3BlbjogZnVuY3Rpb24oIHRpdGxlICkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsICA9ICBuZXcgd3AubWVkaWEudmlldy5Nb2RhbCgge1xuXHRcdFx0XHRjb250cm9sbGVyIDogdGhpcyxcblx0XHRcdFx0dGl0bGUgICAgICA6IHRpdGxlXG5cdFx0XHR9ICk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLmNvbnRlbnQoIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIgKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwub3BlbigpO1xuXG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLm9uKCAnY2xvc2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi50aGVwYXN0ZUNsb3NlLmFwcGx5KHNlbGYpO1xuXHRcdFx0XHRzZWxmLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnN0b3BHcmFiYmluZygpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIuc3RhcnRHcmFiYmluZygpO1xuXG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudGhlcGFzdGVVcGxvYWRlZCApO1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2Vycm9yOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudGhlcGFzdGVFcnJvciApO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVDbG9zZTogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHRoaXMuY29udHJvbGxlci5kZWFjdGl2YXRlTW9kZSggdGhpcy50aGVwYXN0ZS5hY3RpdmUubW9kZSApLmFjdGl2YXRlTW9kZSggJ2VkaXQnICk7XG5cblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2FjdGlvbjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0XHR0aGlzLnN0b3BMaXN0ZW5pbmcoIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIudXBsb2FkZXIsICdlcnJvcjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0fVxuXHR9KTtcblx0XG59KShqUXVlcnksd2luZG93KTtcblxuKGZ1bmN0aW9uKCQsd2luZG93LG8pe1xuXHR2YXIgdGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRCdXR0b24gPSB3cC5tZWRpYS52aWV3LkJ1dHRvbixcblx0XHRNb2RhbCAgPSB3cC5tZWRpYS52aWV3Lk1vZGFsLFxuXHRcdGwxMG4gICA9IHRoZXBhc3RlLmwxMG47XG5cblxuXHR3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtdXBsb2FkZXInKSxcblx0XHRjbGFzc05hbWU6ICd0aGVwYXN0ZS11cGxvYWRlcicsXG5cdFx0Y29udHJvbGxlcjpudWxsLFxuXHRcdGltYWdlIDogbnVsbCxcblx0XHQkZGlzY2FyZEJ0biA6IG51bGwsXG5cdFx0JHVwbG9hZEJ0biA6IG51bGwsXG5cblx0XHR1cGxvYWRlciA6IG51bGwsXG5cblx0XHRldmVudHMgOiB7XG5cdFx0XHQnY2xpY2sgW2RhdGEtYWN0aW9uPVwidXBsb2FkXCJdJ1x0OiAndXBsb2FkSW1hZ2UnLFxuXHRcdFx0J2NsaWNrIFtkYXRhLWFjdGlvbj1cImRpc2NhcmRcIl0nXHQ6ICdkaXNjYXJkSW1hZ2UnLFxuXHRcdH0sXG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR3cC5tZWRpYS5WaWV3LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdGRlZmF1bHRGaWxlTmFtZSA6IGwxMG4uaW1hZ2Vcblx0XHRcdH0pO1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRpbnN0ciA9IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0dGFnTmFtZSAgICA6ICdkaXYnLFxuXHRcdFx0XHRjbGFzc05hbWUgIDogJ2luc3RydW1lbnRzJyxcblx0XHRcdFx0Y29udHJvbGxlciA6IHRoaXMuY29udHJvbGxlclxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudXBsb2FkZXIgPSB0aGlzLm9wdGlvbnMudXBsb2Rlcjtcblx0XHR9LFxuXHRcdHNldEltYWdlRGF0YSA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuJGltYWdlQ29udGFpbmVyLmh0bWwoJycpLmdldCgwKSxcblx0XHRcdFx0c2VsZiA9IHRoaXMsXG5cdFx0XHRcdGZvcm1hdCA9IGRhdGEubWF0Y2goL2RhdGE6KGltYWdlXFwvKFxcdyspKTsvKVsxXTtcblxuXHRcdFx0aWYgKCAhIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5jb252ZXJ0W2Zvcm1hdF0gKSB7XG5cdFx0XHRcdGZvcm1hdCA9IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZUZvcm1hdDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLmltYWdlICkge1xuXHRcdFx0XHR0aGlzLmltYWdlLmRlc3Ryb3koKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbWFnZSA9IG5ldyBvLkltYWdlKCk7XG5cdFx0XHR0aGlzLmltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgb3B0cyA9IHNlbGYuZ2V0VXBsb2FkZXIoKS5nZXRPcHRpb24oJ3Jlc2l6ZScpLFxuXHRcdFx0XHRcdHNjYWxlID0gTWF0aC5tYXgoIG9wdHMud2lkdGggLyB0aGlzLndpZHRoLCBvcHRzLmhlaWdodCAvIHRoaXMuaGVpZ2h0ICk7XG5cblx0XHRcdFx0ISFvcHRzICYmIChzY2FsZSA8IDEpICYmIHRoaXMuZG93bnNpemUoIHRoaXMud2lkdGgqc2NhbGUsIHRoaXMuaGVpZ2h0KnNjYWxlICk7XG5cblx0XHRcdFx0dGhpcy5lbWJlZCggY29udGFpbmVyICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaW1hZ2UubG9hZCggZGF0YSApO1xuXHRcdFx0aWYgKCB0aGlzLiRpbWFnZUNvbnRhaW5lciApIHtcblx0XHRcdFx0dGhpcy4kaW1hZ2VDb250YWluZXIuYXBwZW5kKHRoaXMuaW1hZ2UpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwiZm9ybWF0XCJdIGlucHV0W3ZhbHVlPVwiJytmb3JtYXQrJ1wiXScpLnByb3AoICdjaGVja2VkJywgdHJ1ZSApO1xuXG5cblx0XHRcdHRoaXMuZGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRyZW5kZXIgOiBmdW5jdGlvbigpIHtcblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHR0aGlzLiRpbWFnZUNvbnRhaW5lciA9IHRoaXMuJCgnLmltYWdlLWNvbnRhaW5lcicpO1xuXHRcdFx0dGhpcy4kZGlzY2FyZEJ0biA9IHRoaXMuJCgnW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXScpO1xuXHRcdFx0dGhpcy4kdXBsb2FkQnRuID0gdGhpcy4kKCdbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0nKTtcblx0XHRcdHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cInRpdGxlXCJdJykudmFsKCB0aGlzLm9wdGlvbnMuZGVmYXVsdEZpbGVOYW1lICk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGRpc2NhcmRJbWFnZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246ZGlzY2FyZDpkYXRhaW1hZ2UnICwgdGhpcyApO1xuXHRcdFx0dGhpcy51bmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXHRcdH0sXG5cdFx0dXBsb2FkSW1hZ2UgOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCJmb3JtYXRcIl0gOmNoZWNrZWQnKS52YWwoKSxcblx0XHRcdFx0c3VmZml4ID0gdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLmNvbnZlcnRbIHR5cGUgXSxcblx0XHRcdFx0bmFtZSA9IHRoaXMuJCgnaW5wdXRbZGF0YS1zZXR0aW5nPVwidGl0bGVcIl0nKS52YWwoKSArICcuJyArIHN1ZmZpeCxcblx0XHRcdFx0YmxvYiA9IHRoaXMuaW1hZ2UuZ2V0QXNCbG9iKCB0eXBlLCB0aGVwYXN0ZS5vcHRpb25zLmpwZWdfcXVhbGl0eSApO1xuXG5cdFx0XHR0aGlzLmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXG5cdFx0XHRibG9iLmRldGFjaCggYmxvYi5nZXRTb3VyY2UoKSApO1xuXHRcdFx0YmxvYi5uYW1lID0gbmFtZTtcblx0XHRcdGJsb2IudHlwZSA9IHR5cGU7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkuYWRkRmlsZSggYmxvYiAsIG5hbWUgKTtcblxuXHRcdFx0dGhpcy5kaXNhYmxlZCggdHJ1ZSApO1xuXG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246dXBsb2FkOmRhdGFpbWFnZScgLCB0aGlzICk7XG5cdFx0fSxcblx0XHRzaG93OmZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLiRlbC5zaG93KCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGhpZGU6ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuJGVsLmhpZGUoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0ZGlzYWJsZWQgOiBmdW5jdGlvbiggZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLiRkaXNjYXJkQnRuLnByb3AoICdkaXNhYmxlZCcsIGRpc2FibGVkICk7XG5cdFx0XHR0aGlzLiR1cGxvYWRCdG4ucHJvcCggJ2Rpc2FibGVkJywgZGlzYWJsZWQgKTtcblx0XHR9LFxuXHRcdF91cGxvYWRTdWNjZXNzSGFuZGxlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHRoaXMuZGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0dGhpcy51bmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXHRcdH0sXG5cdFx0X3VwbG9hZEVycm9ySGFuZGxlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnZXJyb3I6dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHRiaW5kVXBsb2FkZXJFdmVudHMgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5iaW5kKCAnRmlsZVVwbG9hZGVkJyxcdHRoaXMuX3VwbG9hZFN1Y2Nlc3NIYW5kbGVyLFx0dGhpcyApO1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLmJpbmQoICdFcnJvcicsXHRcdFx0dGhpcy5fdXBsb2FkRXJyb3JIYW5kbGVyLFx0dGhpcyApO1xuXHRcdH0sXG5cdFx0dW5iaW5kVXBsb2FkZXJFdmVudHMgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS51bmJpbmQoICdGaWxlVXBsb2FkZWQnLFx0dGhpcy5fdXBsb2FkU3VjY2Vzc0hhbmRsZXIsXHR0aGlzICk7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkudW5iaW5kKCAnRXJyb3InLFx0XHRcdHRoaXMuX3VwbG9hZEVycm9ySGFuZGxlcixcdHRoaXMgKTtcblx0XHR9LFxuXHRcdGdldFVwbG9hZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXI7XG5cdFx0fVxuXHR9KTtcblxuXG5cdHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuUGFzdGVib2FyZCA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0XHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ3RoZXBhc3RlLXBhc3RlYm9hcmQnKSxcblx0XHRjbGFzc05hbWU6ICd0aGVwYXN0ZS1wYXN0ZWJvYXJkJyxcblx0XHRjb250cm9sbGVyOm51bGwsXG5cdFx0YWN0aW9uOidwYXN0ZScsXG5cdFx0JHBhc3RlYm9hcmQgOiBudWxsLFxuXG5cdFx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkID0gdGhpcy4kKCAnLmluamVjdG9yJyApLnBhc3RhYmxlQ29udGVudGVkaXRhYmxlKCk7XG5cdFx0XHR0aGlzLiRtZXNzYWdlID0gdGhpcy4kKCAnLm1lc3NhZ2UnICk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCcnKTtcblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RhcnQgOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2U7XG5cblx0XHRcdHRoaXMuaW1hZ2VQYXN0ZWQgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy4kcGFzdGVib2FyZFxuXHRcdFx0XHQub24oJ3Bhc3RlJyxmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRjbGlwYm9hcmRIYXNJbWFnZSA9IHdwLm1lZGlhLnRoZXBhc3RlLmNsaXBib2FyZEhhc0ltYWdlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdwYXN0ZVRleHQnICwgZnVuY3Rpb24oIGUsIGRhdGEgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGNsaXBib2FyZEhhc0ltYWdlIHx8IHNlbGYuaW1hZ2VQYXN0ZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCBsMTBuLnBhc3RlX2Vycm9yX25vX2ltYWdlICk7XG5cdFx0XHRcdFx0JCggdGhpcyApLmh0bWwoJycpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0Lm9uKCdwYXN0ZUltYWdlJyAsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggc2VsZi5pbWFnZVBhc3RlZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi50cmlnZ2VyKCAnYWN0aW9uOmNyZWF0ZTpkYXRhaW1hZ2UnLCB0aGlzICwgZGF0YS5kYXRhVVJMICk7XG5cdFx0XHRcdFx0c2VsZi5pbWFnZVBhc3RlZCA9IHRydWU7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oJ3Bhc3RlSW1hZ2VFcnJvcicgLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblx0XHRcdFx0XHRzZWxmLnNob3dfbWVzc2FnZSggbDEwbi5wYXN0ZV9lcnJvciApO1xuXHRcdFx0XHRcdCQoIHRoaXMgKS5odG1sKCcnKTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdDtcblxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRzZWxmLiRwYXN0ZWJvYXJkLmdldCgwKS5mb2N1cygpO1xuXHRcdFx0fSwxKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdG9wIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlSW1hZ2UnKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZUltYWdlRXJyb3InKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZVRleHQnKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvdzpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLmhpZGUoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvd19tZXNzYWdlOmZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0XHR0aGlzLiRtZXNzYWdlLnRleHQoIG1zZyApO1xuXHRcdH1cblx0fSk7XG5cblx0d3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuLy9cdFx0dGFnTmFtZTogICAnZGl2Jyxcblx0XHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ3RoZXBhc3RlLWdyYWJiZXInKSxcblx0XHRjbGFzc05hbWUgOiAndGhlcGFzdGUtZ3JhYmJlcicsXG5cblx0XHRncmFiYmVyIDogbnVsbCxcblx0XHR1cGxvYWRlciA6IG51bGwsXG5cblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcmV0ID0gd3AubWVkaWEuVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0XHR3cHVwbG9hZGVyXHRcdDogbnVsbCxcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lXHQ6IGwxMG4ucGFzdGVkLFxuXHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdCA6ICdpbWFnZS9wbmcnLFxuXHRcdFx0XHR0aXRsZVx0XHRcdDogbDEwbi5jb3B5X3Bhc3RlXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5ncmFiYmVyICA9IG5ldyB0aGlzLm9wdGlvbnMuZ3JhYmJlciggeyBjb250cm9sbGVyXHQ6IHRoaXMuY29udHJvbGxlciB9ICk7XG5cblx0XHRcdHRoaXMudXBsb2FkZXIgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VVcGxvYWRlcigge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlclx0XHRcdDogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXBsb2Rlclx0XHRcdFx0OiB0aGlzLm9wdGlvbnMud3B1cGxvYWRlcixcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRGaWxlTmFtZVx0XHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdFx0OiB0aGlzLm9wdGlvbnMuZGVmYXVsdEZpbGVGb3JtYXRcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuZ3JhYmJlciwgJ2FjdGlvbjpjcmVhdGU6ZGF0YWltYWdlJyxcdHRoaXMuaW1hZ2VDcmVhdGVkICk7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnVwbG9hZGVyLCAnYWN0aW9uOmRpc2NhcmQ6ZGF0YWltYWdlJyxcdHRoaXMuc3RhcnRHcmFiYmluZyApO1xuXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0sXG5cdFx0cmVuZGVyOmZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdHRoaXMuJCgnLmNvbnRlbnQnKVxuXHRcdFx0XHQuYXBwZW5kKCB0aGlzLmdyYWJiZXIucmVuZGVyKCkuJGVsIClcblx0XHRcdFx0LmFwcGVuZCggdGhpcy51cGxvYWRlci5yZW5kZXIoKS4kZWwgKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRpbWFnZUNyZWF0ZWQgOiBmdW5jdGlvbiggZ3JhYmJlciAsIGltYWdlRGF0YSApIHtcblx0XHRcdHRoaXMuZ3JhYmJlci5zdG9wKCkuaGlkZSgpO1xuXHRcdFx0dGhpcy51cGxvYWRlci5zaG93KCkuc2V0SW1hZ2VEYXRhKCBpbWFnZURhdGEgKTtcblx0XHR9LFxuXHRcdHN0YXJ0R3JhYmJpbmc6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLmhpZGUoKTtcblx0XHRcdHRoaXMuZ3JhYmJlci5zaG93KCkuc3RhcnQoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RvcEdyYWJiaW5nOmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5ncmFiYmVyLnN0b3AoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Z2V0QWN0aW9uIDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ncmFiYmVyLmFjdGlvbjtcblx0XHR9LFxuXHRcdGRpc21pc3M6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdyYWJiZXIuc3RvcCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9KTtcblxufSkoalF1ZXJ5LHdpbmRvdyxtT3hpZSk7XG4iXX0= 
     1(function(){var e,t,a,i,n;e=window.jQuery,e.paste=function(e){var a;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),a=t.mountNonInputable(e),a._container},e.fn.pastableNonInputable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is("textarea, input:text, [contenteditable]")||(t.mountNonInputable(a),a._pastable=!0);return this},e.fn.pastableTextarea=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not(textarea, input:text)")||(t.mountTextarea(a),a._pastable=!0);return this},e.fn.pastableContenteditable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not([contenteditable])")||(t.mountContenteditable(a),a._pastable=!0);return this},i=function(e,t){var a,i,n,r,o,s,l,p,d,u,h;if(null==t&&(t=512),!(p=e.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(u=p,p=u[0],s=u[1],a=u[2],r=atob(a),n=[],d=0;d<r.length;){for(h=r.slice(d,d+t),o=new Array(h.length),l=0;l<h.length;)o[l]=h.charCodeAt(l),l++;i=new Uint8Array(o),n.push(i),d+=t}return new Blob(n,{type:s})},a=function(){return e(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},n=function(t,a){var i,n,r,o,s,l;return o=void 0,s=void 0,r=void 0,n=void 0,i=void 0,"area"===(l=t.nodeName.toLowerCase())?(o=t.parentNode,s=o.name,!(!t.href||!s||"map"!==o.nodeName.toLowerCase())&&(r=e("img[usemap='#"+s+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(n=!t.disabled)&&(i=e(t).closest("fieldset")[0])&&(n=!i.disabled):n="a"===l?t.href||a:a,(n=n||e(t).is("[contenteditable]"))&&e(t).is(":visible"))},t=function(){function t(t,a){this._container=t,this._target=a,this._container=e(this._container),this._target=e(this._target).addClass("pastable"),this._container.on("paste",function(e){return function(t){var a,i,n,r,o,s,l,p,d,u,h,c,g;if(t.currentTarget!==t.target)return t.preventDefault();if(e._paste_event_fired=!0,null!=(null!=(d=t.originalEvent)?d.clipboardData:void 0))if(a=t.originalEvent.clipboardData,a.items)for(u=a.items,r=0,s=u.length;r<s;r++){if(n=u[r],n.type.match(/^image\//)){p=new FileReader,p.onload=function(t){return e._handleImage(t.target.result)};try{p.readAsDataURL(n.getAsFile())}catch(e){}t.preventDefault();break}"text/plain"===n.type&&n.getAsString(function(t){return e._target.trigger("pasteText",{text:t})})}else-1!==Array.prototype.indexOf.call(a.types,"text/plain")&&(g=a.getData("Text"),setTimeout(function(){return e._target.trigger("pasteText",{text:g})},1)),e._checkImagesInContainer(function(t){return e._handleImage(t)});if(a=window.clipboardData)if(null!=(h=g=a.getData("Text"))?h.length:void 0)setTimeout(function(){return e._target.trigger("pasteText",{text:g}),e._target.trigger("_pasteCheckContainerDone")},1);else{for(c=a.files,o=0,l=c.length;o<l;o++)i=c[o],e._handleImage(URL.createObjectURL(i));e._checkImagesInContainer(function(e){})}return null}}(this))}return t.prototype._target=null,t.prototype._container=null,t.mountNonInputable=function(i){var r;return r=new t(a().appendTo(i),i),e(i).on("click",function(e){return function(e){if(!n(e.target,!1))return r._container.focus()}}()),r._container.on("focus",function(t){return function(){return e(i).addClass("pastable-focus")}}()),r._container.on("blur",function(t){return function(){return e(i).removeClass("pastable-focus")}}())},t.mountTextarea=function(i){var n,r,o,s;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(o=Object.getOwnPropertyDescriptor)&&null!=(s=o.call(Object,DataTransfer.prototype,"items"))?s.get:void 0)?this.mountContenteditable(i):(r=new t(a().insertBefore(i),i),n=!1,e(i).on("keyup",function(e){var t;return 17!==(t=e.keyCode)&&224!==t||(n=!1),null}),e(i).on("keydown",function(t){var a;return 17!==(a=t.keyCode)&&224!==a||(n=!0),null!=t.ctrlKey&&null!=t.metaKey&&(n=t.ctrlKey||t.metaKey),n&&86===t.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(t){return function(){if(!r._paste_event_fired)return e(i).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),e(i).on("paste",function(e){return function(){}}()),e(i).on("focus",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).addClass("pastable-focus")}}()),e(i).on("blur",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).removeClass("pastable-focus")}}()),e(r._target).on("_pasteCheckContainerDone",function(t){return function(){return e(i).focus(),r._textarea_focus_stolen=!1}}()),e(r._target).on("pasteText",function(t){return function(t,a){var n,r,o;return o=e(i).prop("selectionStart"),r=e(i).prop("selectionEnd"),n=e(i).val(),e(i).val(""+n.slice(0,o)+a.text+n.slice(r)),e(i)[0].setSelectionRange(o+a.text.length,o+a.text.length),e(i).trigger("change")}}()))},t.mountContenteditable=function(a){return new t(a,a),e(a).on("focus",function(t){return function(){return e(a).addClass("pastable-focus")}}()),e(a).on("blur",function(t){return function(){return e(a).removeClass("pastable-focus")}}())},t.prototype._handleImage=function(e){var t;return e.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),t=new Image,t.crossOrigin="anonymous",t.onload=function(e){return function(){var a,n,r,o;n=document.createElement("canvas"),n.width=t.width,n.height=t.height,r=n.getContext("2d"),r.drawImage(t,0,0,n.width,n.height),o=null;try{o=n.toDataURL("image/png"),a=i(o)}catch(e){}return o&&e._target.trigger("pasteImage",{blob:a,dataURL:o,width:t.width,height:t.height}),e._target.trigger("pasteImageEnd")}}(this),t.onerror=function(t){return function(){return t._target.trigger("pasteImageError",{message:"Failed to get image from: "+e,url:e}),t._target.trigger("pasteImageEnd")}}(this),t.src=e)},t.prototype._checkImagesInContainer=function(t){var a,i,n,r,o;for(o=Math.floor(1e3*Math.random()),r=this._container.find("img"),i=0,n=r.length;i<n;i++)a=r[i],a["_paste_marked_"+o]=!0;return setTimeout(function(i){return function(){var n,r,s;for(s=i._container.find("img"),n=0,r=s.length;n<r;n++)a=s[n],a["_paste_marked_"+o]||(t(a.src),e(a).remove());return i._target.trigger("_pasteCheckContainerDone")}}(this),1)},t}()}).call(this),function(e,t,a){var i=(navigator.userAgent.indexOf("Chrome"),0);thepaste=t.thepaste=e.extend({supports:{paste:"paste"in document||"onpaste"in document||"object"==typeof window.onpaste||"onpaste"in document.createElement("DIV")},view:{},uploadImage:function(t,n,r){var o="__thepaste_box_"+i++,s=e(t).wrap('<div id="'+o+'" data-progress="0" class="thepaste-image-placeholder" contenteditable="false"></div>').parent();t.onload=function(){e(n.$("#"+o)).width(this.naturalWidth),e(n.$("#"+o)).height(this.naturalHeight)};var l,p,d=t.src,u=function(t){var i=t.match(/^data\:([^\;]+)\;/)[1],r=new a.Blob(null,{data:t}),s=thepaste.options.mime_types.convert[i],l=e('#post [name="post_title"]#title').val();void 0===s&&console.trace("Won't upload, bad mime type: "+i),void 0!==l?(l=l.replace(/([\^\!\?<>:"'\/\|\*§])/g,"").replace(/ +/g," "),r.name=thepaste.l10n.pasted_into+" "+l+"."+s):r.name=thepaste.l10n.pasted+"."+s,r.type=i;var u=function(){p.uploader.uploader.uploader.addFile(r)};p?(p.state().reset(),u()):(p=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:thepaste.l10n.copy_paste,multiple:!1}),p.close(),p.uploader.uploader&&p.uploader.uploader.ready?u():p.on("uploader:ready",u)),p.uploader.uploader.uploader.bind("UploadProgress",function(e){n.$("#"+o).attr("data-progress",e.total.percent)}),p.uploader.uploader.uploader.bind("FileUploaded",function(t,a){var i=n.$("#"+o),r='<img class="alignnone wp-image-'+a.attachment.id+' size-full" src="'+a.attachment.changed.url+'" />';i.replaceWith(r),n.$('img[src="'+d+'"]').each(function(){e(this).replaceWith(r)})}),p.uploader.uploader.uploader.bind("Error",function(e,t){console.log(e,t)})};return"blob:"===d.substr(0,5)?(l=new XMLHttpRequest,l.responseType="blob",l.onreadystatechange=function(){var e;4==l.readyState&&(e=new FileReader,e.onload=function(){u(e.result)},e.readAsDataURL(new Blob([l.response],{type:"image/png"})))},l.open("GET",d),l.send(null)):"data:"===d.substr(0,5)&&u(d),s},clipboardHasImage:function(t){var a=!1;return t.items?(e.each(t.items,function(e,t){if(t.type in thepaste.options.mime_types.paste)return a=!0,!1}),a):t.types?(e.each(thepaste.options.mime_types.paste,function(e,i){if(t.types.indexOf(e)>-1)return a=!0,!1}),a):null}},thepaste)}(jQuery,wp.media,mOxie),function(e,t){var a=wp.media.thepaste.l10n;e.extend(wp.Uploader.prototype,{success:function(e){}}),_.extend(wp.media.view.MediaFrame.Select.prototype,{_parentInitialize:wp.media.view.MediaFrame.Select.prototype.initialize,initialize:function(){this._parentInitialize.apply(this,arguments),this.bindPasteHandlers()},_parentBrowseRouter:wp.media.view.MediaFrame.Select.prototype.browseRouter,browseRouter:function(e){this._parentBrowseRouter.apply(this,arguments),wp.media.thepaste.supports.paste&&e.set({pasteboard:{text:a.copy_paste,priority:35}})},bindPasteHandlers:function(){var e=!1;this.on("content:render close",function(t){e&&"function"==typeof e.dismiss&&e.dismiss(),void 0!==t&&(e=t)},this),this.on("content:create:pasteboard",this.contentCreatePasteboard,this),this.on("content:render:pasteboard",this.contentRenderGrabber,this),frame=this},contentCreatePasteboard:function(e){this.state();this.currentPasteView=e.view=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this,grabber:wp.media.thepaste.view.Pasteboard}),this.listenTo(this.currentPasteView.uploader,"action:uploaded:dataimage",this.uploadedDataImage)},contentRenderGrabber:function(e){e.startGrabbing()},uploadedDataImage:function(e){this.stopListening(this.currentPasteView.uploader,"action:uploaded:dataimage");var t={view:null};this.browseContent(t),this.content.set(t.view),this.router.get().select("browse")}}),_.extend(wp.media.view.AttachmentsBrowser.prototype,{_parentInitialize:wp.media.view.AttachmentsBrowser.prototype.initialize,initialize:function(){var e,t=this;this._parentInitialize.apply(this,arguments),this.thepaste={paste:{grabber:!1,modal:!1,mode:"paste"},current:!1},this.controller instanceof wp.media.view.MediaFrame.Select||wp.media.thepaste.supports.paste&&(e=new wp.media.view.Button({text:a.copy_paste,className:"grabber-button",priority:-64,click:function(){t.thepaste.active=t.thepaste.paste,t.thepasteOpen(a.copy_paste)}}),this.thepaste.paste.grabber=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this.controller,grabber:wp.media.thepaste.view.Pasteboard,wpuploader:this.controller.uploader.uploader.uploader}),this.toolbar.set("pasteModeButton",e.render()))},thepasteUploaded:function(e){this.thepaste.active.grabber.dismiss(),this.thepaste.modal.close(),this.thepasteClose()},thepasteError:function(e){console.log("error",e)},thepasteOpen:function(e){var t=this;this.thepaste.modal=new wp.media.view.Modal({controller:this,title:e}),this.thepaste.modal.content(this.thepaste.active.grabber),this.thepaste.modal.open(),this.thepaste.modal.on("close",function(){t.thepasteClose.apply(t),t.thepaste.active.grabber.stopGrabbing()}),this.thepaste.active.grabber.startGrabbing(),this.listenTo(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage",this.thepasteUploaded),this.listenTo(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage",this.thepasteError)},thepasteClose:function(){this.controller.deactivateMode(this.thepaste.active.mode).activateMode("edit"),this.stopListening(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage"),this.stopListening(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage")}})}(jQuery,window),function(e,t,a){var i=wp.media.thepaste,n=(wp.media.view.Button,wp.media.view.Modal,i.l10n);wp.media.thepaste.view.DataSourceImageUploader=wp.media.View.extend({template:wp.template("thepaste-uploader"),className:"thepaste-uploader",controller:null,image:null,$discardBtn:null,$uploadBtn:null,uploader:null,events:{'click [data-action="upload"]':"uploadImage",'click [data-action="discard"]':"discardImage"},initialize:function(){wp.media.View.prototype.initialize.apply(this,arguments),_.defaults(this.options,{defaultFileName:n.image});new wp.media.View({tagName:"div",className:"instruments",controller:this.controller});this.uploader=this.options.uploder},setImageData:function(e){var t=this.$imageContainer.html("").get(0),n=this,r=e.match(/data:(image\/(\w+));/)[1];return i.options.mime_types.convert[r]||(r=this.options.defaultFileFormat),this.image&&this.image.destroy(),this.image=new a.Image,this.image.onload=function(){var e=n.getUploader().getOption("resize"),a=Math.max(e.width/this.width,e.height/this.height);!!e&&a<1&&this.downsize(this.width*a,this.height*a),this.embed(t)},this.image.load(e),this.$imageContainer&&this.$imageContainer.append(this.image),this.$('[data-setting="format"] input[value="'+r+'"]').prop("checked",!0),this.disabled(!1),this},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$imageContainer=this.$(".image-container"),this.$discardBtn=this.$('[data-action="discard"]'),this.$uploadBtn=this.$('[data-action="upload"]'),this.$('[data-setting="title"]').val(this.options.defaultFileName),this},discardImage:function(){this.trigger("action:discard:dataimage",this),this.unbindUploaderEvents()},uploadImage:function(){var e=this.$('[data-setting="format"] :checked').val(),t=i.options.mime_types.convert[e],a=this.$('input[data-setting="title"]').val()+"."+t,n=this.image.getAsBlob(e,i.options.jpeg_quality);this.bindUploaderEvents(),n.detach(n.getSource()),n.name=a,n.type=e,this.getUploader().addFile(n,a),this.disabled(!0),this.trigger("action:upload:dataimage",this)},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},disabled:function(e){this.$discardBtn.prop("disabled",e),this.$uploadBtn.prop("disabled",e)},_uploadSuccessHandler:function(){this.trigger("action:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},_uploadErrorHandler:function(){this.trigger("error:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},bindUploaderEvents:function(){this.getUploader().bind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().bind("Error",this._uploadErrorHandler,this)},unbindUploaderEvents:function(){this.getUploader().unbind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().unbind("Error",this._uploadErrorHandler,this)},getUploader:function(){return this.controller.uploader.uploader.uploader}}),wp.media.thepaste.view.Pasteboard=wp.media.View.extend({template:wp.template("thepaste-pasteboard"),className:"thepaste-pasteboard",controller:null,action:"paste",$pasteboard:null,render:function(){var e=this;return wp.media.View.prototype.render.apply(this,arguments),this.$pasteboard=this.$(".injector").pastableContenteditable(),this.$message=this.$(".message"),this.$pasteboard.on("click",function(){e.show_message("")}),this},start:function(){var t,a=this;return this.imagePasted=!1,this.$pasteboard.on("paste",function(e){t=wp.media.thepaste.clipboardHasImage(e.originalEvent.clipboardData)}).on("pasteText",function(i,r){t||a.imagePasted||(a.show_message(n.paste_error_no_image),e(this).html(""))}).on("pasteImage",function(e,t){a.imagePasted||(a.trigger("action:create:dataimage",this,t.dataURL),a.imagePasted=!0)}).on("pasteImageError",function(t,i){a.show_message(n.paste_error),e(this).html("")}),setTimeout(function(){a.$pasteboard.get(0).focus()},1),this},stop:function(){return this.$pasteboard.off("pasteImage").off("pasteImageError").off("pasteText"),this},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},show_message:function(e){this.$message.text(e)}}),wp.media.thepaste.view.DataSourceImageGrabber=wp.media.View.extend({template:wp.template("thepaste-grabber"),className:"thepaste-grabber",grabber:null,uploader:null,initialize:function(){var e=wp.media.View.prototype.initialize.apply(this,arguments);return _.defaults(this.options,{wpuploader:null,defaultFileName:n.pasted,defaultFileFormat:"image/png",title:n.copy_paste}),this.grabber=new this.options.grabber({controller:this.controller}),this.uploader=new wp.media.thepaste.view.DataSourceImageUploader({controller:this.controller,uploder:this.options.wpuploader,defaultFileName:this.options.defaultFileName,defaultFileFormat:this.options.defaultFileFormat}),this.render(),this.listenTo(this.grabber,"action:create:dataimage",this.imageCreated),this.listenTo(this.uploader,"action:discard:dataimage",this.startGrabbing),e},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$(".content").append(this.grabber.render().$el).append(this.uploader.render().$el),this},imageCreated:function(e,t){this.grabber.stop().hide(),this.uploader.show().setImageData(t)},startGrabbing:function(){return this.uploader.hide(),this.grabber.show().start(),this},stopGrabbing:function(){return this.grabber.stop(),this},getAction:function(){return this.grabber.action},dismiss:function(){return this.grabber.stop(),this}})}(jQuery,window,mOxie); 
     2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS5qcyJdLCJuYW1lcyI6WyIkIiwiUGFzdGUiLCJjcmVhdGVIaWRkZW5FZGl0YWJsZSIsImRhdGFVUkx0b0Jsb2IiLCJpc0ZvY3VzYWJsZSIsIndpbmRvdyIsImpRdWVyeSIsInBhc3RlIiwicGFzdGVDb250YWluZXIiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJtb3VudE5vbklucHV0YWJsZSIsIl9jb250YWluZXIiLCJmbiIsInBhc3RhYmxlTm9uSW5wdXRhYmxlIiwiZWwiLCJqIiwibGVuIiwicmVmIiwidGhpcyIsImxlbmd0aCIsIl9wYXN0YWJsZSIsImlzIiwicGFzdGFibGVUZXh0YXJlYSIsIm1vdW50VGV4dGFyZWEiLCJwYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSIsIm1vdW50Q29udGVudGVkaXRhYmxlIiwiZGF0YVVSTCIsInNsaWNlU2l6ZSIsImI2NERhdGEiLCJieXRlQXJyYXkiLCJieXRlQXJyYXlzIiwiYnl0ZUNoYXJhY3RlcnMiLCJieXRlTnVtYmVycyIsImNvbnRlbnRUeXBlIiwiaSIsIm0iLCJvZmZzZXQiLCJzbGljZSIsIm1hdGNoIiwiYXRvYiIsIkFycmF5IiwiY2hhckNvZGVBdCIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwiQmxvYiIsInR5cGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwiY3NzIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbiIsImxlZnQiLCJvdmVyZmxvdyIsImVsZW1lbnQiLCJoYXNUYWJpbmRleCIsImZpZWxkc2V0IiwiZm9jdXNhYmxlSWZWaXNpYmxlIiwiaW1nIiwibWFwIiwibWFwTmFtZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwYXJlbnROb2RlIiwibmFtZSIsImhyZWYiLCJ0ZXN0IiwiZGlzYWJsZWQiLCJjbG9zZXN0IiwiX3RhcmdldCIsImFkZENsYXNzIiwib24iLCJfdGhpcyIsImV2IiwiY2xpcGJvYXJkRGF0YSIsImZpbGUiLCJpdGVtIiwiayIsImxlbjEiLCJyZWFkZXIiLCJyZWYxIiwicmVmMiIsInJlZjMiLCJ0ZXh0IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiX3Bhc3RlX2V2ZW50X2ZpcmVkIiwib3JpZ2luYWxFdmVudCIsIml0ZW1zIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2ZW50IiwiX2hhbmRsZUltYWdlIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImdldEFzRmlsZSIsImVycm9yIiwiZ2V0QXNTdHJpbmciLCJzdHJpbmciLCJ0cmlnZ2VyIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImNhbGwiLCJ0eXBlcyIsImdldERhdGEiLCJzZXRUaW1lb3V0IiwiX2NoZWNrSW1hZ2VzSW5Db250YWluZXIiLCJzcmMiLCJmaWxlcyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIm5vbklucHV0YWJsZSIsImFwcGVuZFRvIiwiZm9jdXMiLCJyZW1vdmVDbGFzcyIsInRleHRhcmVhIiwiY3RsRG93biIsIkRhdGFUcmFuc2ZlciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImluc2VydEJlZm9yZSIsImtleUNvZGUiLCJjdHJsS2V5IiwibWV0YUtleSIsIl90ZXh0YXJlYV9mb2N1c19zdG9sZW4iLCJkYXRhIiwiY29udGVudCIsImN1ckVuZCIsImN1clN0YXJ0IiwicHJvcCIsInZhbCIsInNldFNlbGVjdGlvblJhbmdlIiwiY29udGVudGVkaXRhYmxlIiwibG9hZGVyIiwibWVzc2FnZSIsIkltYWdlIiwiY3Jvc3NPcmlnaW4iLCJibG9iIiwiY2FudmFzIiwiY3R4IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJ1cmwiLCJjYiIsInRpbWVzcGFuIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZmluZCIsInJlbW92ZSIsImV4cG9ydHMiLCJvIiwiY291bnRlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInRoZXBhc3RlIiwiZXh0ZW5kIiwic3VwcG9ydHMiLCJ2aWV3IiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsImVkaXRvciIsInVwbG9hZF9wbGFjZWhvbGRlciIsImlkIiwiJGNvbnRhaW5lciIsIndyYXAiLCJwYXJlbnQiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0IiwieGhyIiwid29ya2Zsb3ciLCJ1cGxvYWQiLCJzdWZmaXgiLCJvcHRpb25zIiwibWltZV90eXBlcyIsImNvbnZlcnQiLCJwb3N0bmFtZSIsInRyYWNlIiwicmVwbGFjZSIsImwxMG4iLCJwYXN0ZWRfaW50byIsInBhc3RlZCIsImFkZEZpbGUiLCJ1cGxvYWRlciIsInN0YXRlIiwicmVzZXQiLCJ3cCIsIm1lZGlhIiwib3BlbiIsIndwQWN0aXZlRWRpdG9yIiwiZnJhbWUiLCJ0aXRsZSIsImNvcHlfcGFzdGUiLCJtdWx0aXBsZSIsImNsb3NlIiwicmVhZHkiLCJiaW5kIiwiZSIsInRvdGFsIiwicGVyY2VudCIsInVwIiwiYXJncyIsImltZ0hUTUwiLCJhdHRhY2htZW50IiwiY2hhbmdlZCIsInJlcGxhY2VXaXRoIiwiZWFjaCIsInN1YnN0ciIsIlhNTEh0dHBSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlIiwic2VuZCIsImNsaXBib2FyZEhhc0ltYWdlIiwiaGFzSW1hZ2UiLCJleHQiLCJtT3hpZSIsIlVwbG9hZGVyIiwic3VjY2VzcyIsImZpbGVfYXR0YWNobWVudCIsIl8iLCJNZWRpYUZyYW1lIiwiU2VsZWN0IiwiX3BhcmVudEluaXRpYWxpemUiLCJpbml0aWFsaXplIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJiaW5kUGFzdGVIYW5kbGVycyIsIl9wYXJlbnRCcm93c2VSb3V0ZXIiLCJicm93c2VSb3V0ZXIiLCJzZXQiLCJwYXN0ZWJvYXJkIiwicHJpb3JpdHkiLCJwcmV2aW91c0NvbnRlbnQiLCJkaXNtaXNzIiwiY29udGVudENyZWF0ZVBhc3RlYm9hcmQiLCJjb250ZW50UmVuZGVyR3JhYmJlciIsImN1cnJlbnRQYXN0ZVZpZXciLCJEYXRhU291cmNlSW1hZ2VHcmFiYmVyIiwiY29udHJvbGxlciIsImdyYWJiZXIiLCJQYXN0ZWJvYXJkIiwibGlzdGVuVG8iLCJ1cGxvYWRlZERhdGFJbWFnZSIsInN0YXJ0R3JhYmJpbmciLCJzdG9wTGlzdGVuaW5nIiwib2JqIiwiYnJvd3NlQ29udGVudCIsInJvdXRlciIsInNlbGVjdCIsIkF0dGFjaG1lbnRzQnJvd3NlciIsInBhc3RlQnRuIiwic2VsZiIsIm1vZGFsIiwibW9kZSIsImN1cnJlbnQiLCJCdXR0b24iLCJjbGFzc05hbWUiLCJjbGljayIsImFjdGl2ZSIsInRoZXBhc3RlT3BlbiIsIndwdXBsb2FkZXIiLCJ0b29sYmFyIiwicmVuZGVyIiwidGhlcGFzdGVVcGxvYWRlZCIsInRoZXBhc3RlQ2xvc2UiLCJ0aGVwYXN0ZUVycm9yIiwiTW9kYWwiLCJzdG9wR3JhYmJpbmciLCJkZWFjdGl2YXRlTW9kZSIsImFjdGl2YXRlTW9kZSIsIkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyIiwiVmlldyIsInRlbXBsYXRlIiwiJGRpc2NhcmRCdG4iLCIkdXBsb2FkQnRuIiwiZXZlbnRzIiwiY2xpY2sgW2RhdGEtYWN0aW9uPVwidXBsb2FkXCJdIiwiY2xpY2sgW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXSIsImRlZmF1bHRzIiwiZGVmYXVsdEZpbGVOYW1lIiwidGFnTmFtZSIsInVwbG9kZXIiLCJzZXRJbWFnZURhdGEiLCJjb250YWluZXIiLCIkaW1hZ2VDb250YWluZXIiLCJodG1sIiwiZm9ybWF0IiwiZGVmYXVsdEZpbGVGb3JtYXQiLCJkZXN0cm95Iiwib3B0cyIsImdldFVwbG9hZGVyIiwiZ2V0T3B0aW9uIiwic2NhbGUiLCJtYXgiLCJkb3duc2l6ZSIsImVtYmVkIiwibG9hZCIsImFwcGVuZCIsImRpc2NhcmRJbWFnZSIsInVuYmluZFVwbG9hZGVyRXZlbnRzIiwiZ2V0QXNCbG9iIiwianBlZ19xdWFsaXR5IiwiYmluZFVwbG9hZGVyRXZlbnRzIiwiZGV0YWNoIiwiZ2V0U291cmNlIiwic2hvdyIsIiRlbCIsImhpZGUiLCJfdXBsb2FkU3VjY2Vzc0hhbmRsZXIiLCJfdXBsb2FkRXJyb3JIYW5kbGVyIiwidW5iaW5kIiwiYWN0aW9uIiwiJHBhc3RlYm9hcmQiLCIkbWVzc2FnZSIsInNob3dfbWVzc2FnZSIsInN0YXJ0IiwiaW1hZ2VQYXN0ZWQiLCJwYXN0ZV9lcnJvcl9ub19pbWFnZSIsInBhc3RlX2Vycm9yIiwic3RvcCIsIm9mZiIsIm1zZyIsInJldCIsImltYWdlQ3JlYXRlZCIsImltYWdlRGF0YSIsImdldEFjdGlvbiJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJBQW1CLFdBQ3RCLEdBQUlSLEdBQUlDLEVBQUdDLEVBQUtDLENBRWhCLEtBREFBLEVBQU1DLEtBQ0RILEVBQUksRUFBR0MsRUFBTUMsRUFBSUUsT0FBUUosRUFBSUMsRUFBS0QsSUFDckNELEVBQUtHLEVBQUlGLEdBQ0xELEVBQUdNLFdBQWF0QixFQUFFZ0IsR0FBSU8sR0FBRyxnQ0FHN0J0QixFQUFNd0IsY0FBY1QsR0FDcEJBLEVBQUdNLFdB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U0FBU0csS0FBS2tILHlCQUNyQ2hDLFdBQWVuTyxLQUFLbU8sV0FDcEIyQyxRQUFhOVEsS0FBS2dLLFFBQVF5RixXQUMxQm1CLGdCQUFtQjVRLEtBQUtnSyxRQUFRNEcsZ0JBQ2hDUSxrQkFBb0JwUixLQUFLZ0ssUUFBUW9ILG9CQUV2Q3BSLEtBQUsyUCxTQUVMM1AsS0FBS3NPLFNBQVV0TyxLQUFLb08sUUFBUywwQkFBMkJwTyxLQUFLd1QsY0FDN0R4VCxLQUFLc08sU0FBVXRPLEtBQUswSyxTQUFVLDJCQUE0QjFLLEtBQUt3TyxlQUV4RCtFLEdBRVI1RCxPQUFPLFdBU04sTUFOQTlFLElBQUdDLE1BQU1zRixLQUFLaEwsVUFBVXVLLE9BQU90QyxNQUFPck4sS0FBTXNOLFdBRTVDdE4sS0FBS3BCLEVBQUUsWUFDTGtULE9BQVE5UixLQUFLb08sUUFBUXVCLFNBQVM0QyxLQUM5QlQsT0FBUTlSLEtBQUswSyxTQUFTaUYsU0FBUzRDLEtBRTFCdlMsTUFFUndULGFBQWUsU0FBVXBGLEVBQVVxRixHQUNsQ3pULEtBQUtvTyxRQUFRZ0YsT0FBT1osT0FDcEJ4UyxLQUFLMEssU0FBUzRILE9BQU92QixhQUFjMEMsSUFFcENqRixjQUFjLFdBR2IsTUFGQXhPLE1BQUswSyxTQUFTOEgsT0FDZHhTLEtBQUtvTyxRQUFRa0UsT0FBT1UsUUFDYmhULE1BRVJnUSxhQUFhLFdBRVosTUFEQWhRLE1BQUtvTyxRQUFRZ0YsT0FDTnBULE1BRVIwVCxVQUFZLFdBQ1gsTUFBTzFULE1BQUtvTyxRQUFRd0UsUUFFckI5RSxRQUFRLFdBRVAsTUFEQTlOLE1BQUtvTyxRQUFRZ0YsT0FDTnBULFNBSVBkLE9BQU9ELE9BQU8yTiIsImZpbGUiOiJ0aGUtcGFzdGUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcblxuLypcbnBhc3RlLmpzIGlzIGFuIGludGVyZmFjZSB0byByZWFkIGRhdGEgKCB0ZXh0IC8gaW1hZ2UgKSBmcm9tIGNsaXBib2FyZCBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuIEl0IGFsc28gY29udGFpbnMgc2V2ZXJhbCBoYWNrcy5cblxuaHR0cHM6Ly9naXRodWIuY29tL2xheWVyc3Nzcy9wYXN0ZS5qc1xuICovXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyICQsIFBhc3RlLCBjcmVhdGVIaWRkZW5FZGl0YWJsZSwgZGF0YVVSTHRvQmxvYiwgaXNGb2N1c2FibGU7XG5cbiAgJCA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgJC5wYXN0ZSA9IGZ1bmN0aW9uKHBhc3RlQ29udGFpbmVyKSB7XG4gICAgdmFyIHBtO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFUFJFQ0FURUQ6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwbSA9IFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKHBhc3RlQ29udGFpbmVyKTtcbiAgICByZXR1cm4gcG0uX2NvbnRhaW5lcjtcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlTm9uSW5wdXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsLCBqLCBsZW4sIHJlZjtcbiAgICByZWYgPSB0aGlzO1xuICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgZWwgPSByZWZbal07XG4gICAgICBpZiAoZWwuX3Bhc3RhYmxlIHx8ICQoZWwpLmlzKCd0ZXh0YXJlYSwgaW5wdXQ6dGV4dCwgW2NvbnRlbnRlZGl0YWJsZV0nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVUZXh0YXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdCh0ZXh0YXJlYSwgaW5wdXQ6dGV4dCknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50VGV4dGFyZWEoZWwpO1xuICAgICAgZWwuX3Bhc3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdChbY29udGVudGVkaXRhYmxlXSknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGRhdGFVUkx0b0Jsb2IgPSBmdW5jdGlvbihkYXRhVVJMLCBzbGljZVNpemUpIHtcbiAgICB2YXIgYjY0RGF0YSwgYnl0ZUFycmF5LCBieXRlQXJyYXlzLCBieXRlQ2hhcmFjdGVycywgYnl0ZU51bWJlcnMsIGNvbnRlbnRUeXBlLCBpLCBtLCBvZmZzZXQsIHJlZiwgc2xpY2U7XG4gICAgaWYgKHNsaWNlU2l6ZSA9PSBudWxsKSB7XG4gICAgICBzbGljZVNpemUgPSA1MTI7XG4gICAgfVxuICAgIGlmICghKG0gPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NFxcLCguKykkLykpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVmID0gbSwgbSA9IHJlZlswXSwgY29udGVudFR5cGUgPSByZWZbMV0sIGI2NERhdGEgPSByZWZbMl07XG4gICAgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGJ5dGVBcnJheXMgPSBbXTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGgpIHtcbiAgICAgIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuICAgICAgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCBzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgIG9mZnNldCArPSBzbGljZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIGNyZWF0ZUhpZGRlbkVkaXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYXR0cigndGFiaW5kZXgnLCAtMSkuY3NzKHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgfSk7XG4gIH07XG5cbiAgaXNGb2N1c2FibGUgPSBmdW5jdGlvbihlbGVtZW50LCBoYXNUYWJpbmRleCkge1xuICAgIHZhciBmaWVsZHNldCwgZm9jdXNhYmxlSWZWaXNpYmxlLCBpbWcsIG1hcCwgbWFwTmFtZSwgbm9kZU5hbWU7XG4gICAgbWFwID0gdm9pZCAwO1xuICAgIG1hcE5hbWUgPSB2b2lkIDA7XG4gICAgaW1nID0gdm9pZCAwO1xuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IHZvaWQgMDtcbiAgICBmaWVsZHNldCA9IHZvaWQgMDtcbiAgICBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoJ2FyZWEnID09PSBub2RlTmFtZSkge1xuICAgICAgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgbWFwTmFtZSA9IG1hcC5uYW1lO1xuICAgICAgaWYgKCFlbGVtZW50LmhyZWYgfHwgIW1hcE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdtYXAnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGltZyA9ICQoJ2ltZ1t1c2VtYXA9XFwnIycgKyBtYXBOYW1lICsgJ1xcJ10nKTtcbiAgICAgIHJldHVybiBpbWcubGVuZ3RoID4gMCAmJiBpbWcuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuICAgIGlmICgvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgICBpZiAoZm9jdXNhYmxlSWZWaXNpYmxlKSB7XG4gICAgICAgIGZpZWxkc2V0ID0gJChlbGVtZW50KS5jbG9zZXN0KCdmaWVsZHNldCcpWzBdO1xuICAgICAgICBpZiAoZmllbGRzZXQpIHtcbiAgICAgICAgICBmb2N1c2FibGVJZlZpc2libGUgPSAhZmllbGRzZXQuZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCdhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGVsZW1lbnQuaHJlZiB8fCBoYXNUYWJpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gaGFzVGFiaW5kZXg7XG4gICAgfVxuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGZvY3VzYWJsZUlmVmlzaWJsZSB8fCAkKGVsZW1lbnQpLmlzKCdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIHJldHVybiBmb2N1c2FibGVJZlZpc2libGUgJiYgJChlbGVtZW50KS5pcygnOnZpc2libGUnKTtcbiAgfTtcblxuICBQYXN0ZSA9IChmdW5jdGlvbigpIHtcbiAgICBQYXN0ZS5wcm90b3R5cGUuX3RhcmdldCA9IG51bGw7XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NvbnRhaW5lciA9IG51bGw7XG5cbiAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKG5vbklucHV0YWJsZSkge1xuICAgICAgdmFyIHBhc3RlO1xuICAgICAgcGFzdGUgPSBuZXcgUGFzdGUoY3JlYXRlSGlkZGVuRWRpdGFibGUoKS5hcHBlbmRUbyhub25JbnB1dGFibGUpLCBub25JbnB1dGFibGUpO1xuICAgICAgJChub25JbnB1dGFibGUpLm9uKCdjbGljaycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICBpZiAoIWlzRm9jdXNhYmxlKGV2LnRhcmdldCwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHBhc3RlLl9jb250YWluZXIub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKG5vbklucHV0YWJsZSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50VGV4dGFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSkge1xuICAgICAgdmFyIGN0bERvd24sIHBhc3RlLCByZWYsIHJlZjE7XG4gICAgICBpZiAoKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgRGF0YVRyYW5zZmVyICE9PSBudWxsID8gRGF0YVRyYW5zZmVyLnByb3RvdHlwZSA6IHZvaWQgMCkgJiYgKChyZWYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY2FsbChPYmplY3QsIERhdGFUcmFuc2Zlci5wcm90b3R5cGUsICdpdGVtcycpKSAhPSBudWxsID8gcmVmMS5nZXQgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vdW50Q29udGVudGVkaXRhYmxlKHRleHRhcmVhKTtcbiAgICAgIH1cbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuaW5zZXJ0QmVmb3JlKHRleHRhcmVhKSwgdGV4dGFyZWEpO1xuICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2tleXVwJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2LmN0cmxLZXkgIT0gbnVsbCkgJiYgKGV2Lm1ldGFLZXkgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjdGxEb3duID0gZXYuY3RybEtleSB8fCBldi5tZXRhS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdGxEb3duICYmIGV2LmtleUNvZGUgPT09IDg2KSB7XG4gICAgICAgICAgcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IHRydWU7XG4gICAgICAgICAgcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIHBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghcGFzdGUuX3Bhc3RlX2V2ZW50X2ZpcmVkKSB7XG4gICAgICAgICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIXBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4pIHtcbiAgICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICAkKHRleHRhcmVhKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJChwYXN0ZS5fdGFyZ2V0KS5vbignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKHRleHRhcmVhKS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChwYXN0ZS5fdGFyZ2V0KS5vbigncGFzdGVUZXh0JywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldiwgZGF0YSkge1xuICAgICAgICAgIHZhciBjb250ZW50LCBjdXJFbmQsIGN1clN0YXJ0O1xuICAgICAgICAgIGN1clN0YXJ0ID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uU3RhcnQnKTtcbiAgICAgICAgICBjdXJFbmQgPSAkKHRleHRhcmVhKS5wcm9wKCdzZWxlY3Rpb25FbmQnKTtcbiAgICAgICAgICBjb250ZW50ID0gJCh0ZXh0YXJlYSkudmFsKCk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkudmFsKFwiXCIgKyBjb250ZW50LnNsaWNlKDAsIGN1clN0YXJ0KSArIGRhdGEudGV4dCArIGNvbnRlbnQuc2xpY2UoY3VyRW5kKSk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSlbMF0uc2V0U2VsZWN0aW9uUmFuZ2UoY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoLCBjdXJTdGFydCArIGRhdGEudGV4dC5sZW5ndGgpO1xuICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgUGFzdGUubW91bnRDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbihjb250ZW50ZWRpdGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNvbnRlbnRlZGl0YWJsZSwgY29udGVudGVkaXRhYmxlKTtcbiAgICAgICQoY29udGVudGVkaXRhYmxlKS5vbignZm9jdXMnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKGNvbnRlbnRlZGl0YWJsZSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBQYXN0ZShfY29udGFpbmVyLCBfdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBfY29udGFpbmVyO1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9ICQodGhpcy5fY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX3RhcmdldCA9ICQodGhpcy5fdGFyZ2V0KS5hZGRDbGFzcygncGFzdGFibGUnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5vbigncGFzdGUnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgdmFyIGNsaXBib2FyZERhdGEsIGZpbGUsIGl0ZW0sIGosIGssIGxlbiwgbGVuMSwgcmVhZGVyLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHRleHQ7XG4gICAgICAgICAgaWYgKGV2LmN1cnJlbnRUYXJnZXQgIT09IGV2LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzLl9wYXN0ZV9ldmVudF9maXJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKCgocmVmID0gZXYub3JpZ2luYWxFdmVudCkgIT0gbnVsbCA/IHJlZi5jbGlwYm9hcmREYXRhIDogdm9pZCAwKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhID0gZXYub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhO1xuICAgICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgcmVmMSA9IGNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gcmVmMVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLm1hdGNoKC9eaW1hZ2VcXC8vKSkge1xuICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2hhbmRsZUltYWdlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGl0ZW0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0L3BsYWluJykge1xuICAgICAgICAgICAgICAgICAgaXRlbS5nZXRBc1N0cmluZyhmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKC0xICE9PSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGNsaXBib2FyZERhdGEudHlwZXMsICd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShzcmMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgaWYgKChyZWYyID0gKHRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKSkpICE9IG51bGwgPyByZWYyLmxlbmd0aCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZjMgPSBjbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMy5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gcmVmM1trXTtcbiAgICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlSW1hZ2UoVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuICAgIFBhc3RlLnByb3RvdHlwZS5faGFuZGxlSW1hZ2UgPSBmdW5jdGlvbihzcmMpIHtcbiAgICAgIHZhciBsb2FkZXI7XG4gICAgICBpZiAoc3JjLm1hdGNoKC9ed2Via2l0XFwtZmFrZVxcLXVybFxcOlxcL1xcLy8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSB0cnlpbmcgdG8gcGFzdGUgYW4gaW1hZ2UgaW4gU2FmYXJpLCBob3dldmVyIHdlIGFyZSB1bmFibGUgdG8gcmV0aWV2ZSBpdHMgZGF0YS5cIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlU3RhcnQnKTtcbiAgICAgIGxvYWRlciA9IG5ldyBJbWFnZSgpO1xuICAgICAgbG9hZGVyLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICAgIGxvYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBibG9iLCBjYW52YXMsIGN0eCwgZGF0YVVSTDtcbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBsb2FkZXIud2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGxvYWRlci5oZWlnaHQ7XG4gICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShsb2FkZXIsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgZGF0YVVSTCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIGJsb2IgPSBkYXRhVVJMdG9CbG9iKGRhdGFVUkwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgIGlmIChkYXRhVVJMKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2UnLCB7XG4gICAgICAgICAgICAgIGJsb2I6IGJsb2IsXG4gICAgICAgICAgICAgIGRhdGFVUkw6IGRhdGFVUkwsXG4gICAgICAgICAgICAgIHdpZHRoOiBsb2FkZXIud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogbG9hZGVyLmhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFbmQnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgbG9hZGVyLm9uZXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gZ2V0IGltYWdlIGZyb206IFwiICsgc3JjLFxuICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJldHVybiBsb2FkZXIuc3JjID0gc3JjO1xuICAgIH07XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIgPSBmdW5jdGlvbihjYikge1xuICAgICAgdmFyIGltZywgaiwgbGVuLCByZWYsIHRpbWVzcGFuO1xuICAgICAgdGltZXNwYW4gPSBNYXRoLmZsb29yKDEwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgIHJlZiA9IHRoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBpbWcgPSByZWZbal07XG4gICAgICAgIGltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaywgbGVuMSwgcmVmMTtcbiAgICAgICAgICByZWYxID0gX3RoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMS5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgIGltZyA9IHJlZjFba107XG4gICAgICAgICAgICBpZiAoIWltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0pIHtcbiAgICAgICAgICAgICAgY2IoaW1nLnNyYyk7XG4gICAgICAgICAgICAgICQoaW1nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgMSk7XG4gICAgfTtcblxuICAgIHJldHVybiBQYXN0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oICQsIGV4cG9ydHMsIG8gKSB7XG5cblx0dmFyIGlzX2Nocm9tZVx0PSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEsXG5cdFx0Y291bnRlciA9IDAsXG5cdFx0d29ya2Zsb3c7XG5cblx0dGhlcGFzdGUgPSBleHBvcnRzLnRoZXBhc3RlID0gJC5leHRlbmQoIHtcblx0XHRzdXBwb3J0cyA6IHtcblx0XHRcdHBhc3RlOiAoICgncGFzdGUnIGluIGRvY3VtZW50KSB8fCAoJ29ucGFzdGUnIGluIGRvY3VtZW50KSB8fCB0eXBlb2Yod2luZG93Lm9ucGFzdGUpID09PSAnb2JqZWN0JyB8fCAoICdvbnBhc3RlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKSApICksIC8vIGJyb3dzZXJcblx0XHR9LFxuXHRcdHZpZXc6e30sXG5cblx0XHR1cGxvYWRJbWFnZTogZnVuY3Rpb24oIGltYWdlLCBlZGl0b3IsIHVwbG9hZF9wbGFjZWhvbGRlciApIHtcblxuXHRcdFx0dmFyIGlkID0gJ19fdGhlcGFzdGVfYm94XycrKGNvdW50ZXIrKyksXG5cdFx0XHRcdCRjb250YWluZXIgPSAkKGltYWdlKVxuXHRcdFx0XHRcdC53cmFwKCc8ZGl2IGlkPVwiJytpZCsnXCIgZGF0YS1wcm9ncmVzcz1cIjBcIiBjbGFzcz1cInRoZXBhc3RlLWltYWdlLXBsYWNlaG9sZGVyXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj48L2Rpdj4nKVxuXHRcdFx0XHRcdC5wYXJlbnQoKTtcblxuXHRcdFx0XHQvLyBzZXQgJGNvbnRhaW5lciBzaXplIG9uY2Uga25vd25cblx0XHRcdFx0aW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCggZWRpdG9yLiQoJyMnK2lkKSApLndpZHRoKCB0aGlzLm5hdHVyYWxXaWR0aCApO1xuXHRcdFx0XHRcdCQoIGVkaXRvci4kKCcjJytpZCkgKS5oZWlnaHQoIHRoaXMubmF0dXJhbEhlaWdodCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdHZhciB4aHIsXG5cdFx0XHRcdHdvcmtmbG93LFxuXHRcdFx0XHRzcmMgPSBpbWFnZS5zcmMsXG5cdFx0XHRcdHVwbG9hZCA9IGZ1bmN0aW9uKCBkYXRhVVJMICl7XG5cdFx0XHRcdFx0dmFyIHR5cGUgPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcOy8pWzFdLFxuXHRcdFx0XHRcdFx0ZmlsZSA9IG5ldyBvLkJsb2IoIG51bGwsIHsgZGF0YTogZGF0YVVSTCB9ICksXG5cdFx0XHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdLFxuXHRcdFx0XHRcdFx0cG9zdG5hbWUgPSAkKCcjcG9zdCBbbmFtZT1cInBvc3RfdGl0bGVcIl0jdGl0bGUnKS52YWwoKTtcblx0XHRcdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2Ygc3VmZml4ICkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS50cmFjZSggJ1dvblxcJ3QgdXBsb2FkLCBiYWQgbWltZSB0eXBlOiAnICsgdHlwZSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBwb3N0bmFtZSApIHtcblx0XHRcdFx0XHRcdHBvc3RuYW1lID0gcG9zdG5hbWUucmVwbGFjZSgvKFtcXF5cXCFcXD88PjpcIidcXC9cXHxcXCrCp10pL2csJycpLnJlcGxhY2UoLyArL2csJyAnKTtcblx0XHRcdFx0XHRcdGZpbGUubmFtZSA9IHRoZXBhc3RlLmwxMG4ucGFzdGVkX2ludG8gKyAnICcgKyBwb3N0bmFtZSArICcuJyArIHN1ZmZpeDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZmlsZS5uYW1lID0gdGhlcGFzdGUubDEwbi5wYXN0ZWQgKyAnLicgKyBzdWZmaXg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZpbGUudHlwZSA9IHR5cGU7XG5cblx0XHRcdFx0XHR2YXIgYWRkRmlsZSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5hZGRGaWxlKCBmaWxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggISB3b3JrZmxvdyApIHtcblx0XHRcdFx0XHRcdHdvcmtmbG93ID0gd3AubWVkaWEuZWRpdG9yLm9wZW4oIHdpbmRvdy53cEFjdGl2ZUVkaXRvciwge1xuXHRcdFx0XHRcdFx0XHRmcmFtZTpcdFx0J3Bvc3QnLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZTpcdFx0J2luc2VydCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOlx0XHR0aGVwYXN0ZS5sMTBuLmNvcHlfcGFzdGUsXG5cdFx0XHRcdFx0XHRcdG11bHRpcGxlOlx0ZmFsc2Vcblx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0d29ya2Zsb3cuY2xvc2UoKTtcblxuXHRcdFx0XHRcdFx0aWYgKCB3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlciAmJiB3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci5yZWFkeSApIHtcblx0XHRcdFx0XHRcdFx0YWRkRmlsZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0d29ya2Zsb3cub24oICd1cGxvYWRlcjpyZWFkeScsIGFkZEZpbGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0d29ya2Zsb3cuc3RhdGUoKS5yZXNldCgpO1xuXHRcdFx0XHRcdFx0YWRkRmlsZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdVcGxvYWRQcm9ncmVzcycsZnVuY3Rpb24oIGUgKXtcblx0XHRcdFx0XHRcdGVkaXRvci4kKCcjJytpZCkuYXR0cignZGF0YS1wcm9ncmVzcycsZS50b3RhbC5wZXJjZW50KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdGaWxlVXBsb2FkZWQnLGZ1bmN0aW9uKCB1cCwgYXJncyApe1xuXG5cdFx0XHRcdFx0XHR2YXIgJGNvbnRhaW5lciA9IGVkaXRvci4kKCcjJytpZCksXG5cdFx0XHRcdFx0XHRcdGltZ0hUTUwgPSAnPGltZyBjbGFzcz1cImFsaWdubm9uZSB3cC1pbWFnZS0nK2FyZ3MuYXR0YWNobWVudC5pZCsnIHNpemUtZnVsbFwiIHNyYz1cIicrYXJncy5hdHRhY2htZW50LmNoYW5nZWQudXJsKydcIiAvPic7XG5cblx0XHRcdFx0XHRcdC8vIHJlcGxhY2UgaW1hZ2Vcblx0XHRcdFx0XHRcdCRjb250YWluZXIucmVwbGFjZVdpdGgoIGltZ0hUTUwgKTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSBvdGhlciBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdGVkaXRvci4kKCdpbWdbc3JjPVwiJytzcmMrJ1wiXScpLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5yZXBsYWNlV2l0aCggaW1nSFRNTCApO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0d29ya2Zsb3cudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXIuYmluZCgnRXJyb3InLGZ1bmN0aW9uKCB1cCwgYXJncyApe1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2codXAsYXJncyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICggc3JjLnN1YnN0cigwLDUpID09PSAnYmxvYjonICkge1xuXG5cdFx0XHRcdHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHRcdFx0XHR4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuXHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR2YXIgcmVhZGVyO1xuXHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT0gNCApIHtcblx0XHRcdFx0XHRcdHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHVwbG9hZCggcmVhZGVyLnJlc3VsdCApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoIG5ldyBCbG9iKCBbIHhoci5yZXNwb25zZSBdLCB7IHR5cGU6ICdpbWFnZS9wbmcnIH0gKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR4aHIub3BlbiggJ0dFVCcsIHNyYyApO1xuXHRcdFx0XHR4aHIuc2VuZCggbnVsbCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzcmMuc3Vic3RyKDAsNSkgPT09ICdkYXRhOicgKSB7XG5cdFx0XHRcdHVwbG9hZCggc3JjICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJGNvbnRhaW5lcjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICpcdEByZXR1cm46IG51bGx8dHJ1ZXxmYWxzZVxuXHRcdCAqL1xuXHRcdGNsaXBib2FyZEhhc0ltYWdlOmZ1bmN0aW9uKCBjbGlwYm9hcmREYXRhICkge1xuXHRcdFx0dmFyIGhhc0ltYWdlID0gZmFsc2U7XG5cdFx0XHRpZiAoIGNsaXBib2FyZERhdGEuaXRlbXMgKSB7XG5cdFx0XHRcdCQuZWFjaCggY2xpcGJvYXJkRGF0YS5pdGVtcywgZnVuY3Rpb24oaSxpdGVtKXtcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSBpbiB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMucGFzdGUgKSB7XG5cdFx0XHRcdFx0XHRoYXNJbWFnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiBoYXNJbWFnZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBjbGlwYm9hcmREYXRhLnR5cGVzICkge1xuXHRcdFx0XHQkLmVhY2goIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5wYXN0ZSwgZnVuY3Rpb24odHlwZSxleHQpe1xuXHRcdFx0XHRcdGlmICggY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mKHR5cGUpID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRoYXNJbWFnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiBoYXNJbWFnZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXG5cdH0sIHRoZXBhc3RlICk7XG5cbn0pKCBqUXVlcnksIHdwLm1lZGlhLCBtT3hpZSApO1xuXG4oZnVuY3Rpb24oJCxleHBvcnRzKXtcblxuXHR2YXIgY291bnRlciAgICAgID0gMCxcblx0XHRsMTBuID0gd3AubWVkaWEudGhlcGFzdGUubDEwbjtcblxuXHQkLmV4dGVuZCggd3AuVXBsb2FkZXIucHJvdG90eXBlLCB7XG5cdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKCBmaWxlX2F0dGFjaG1lbnQgKXtcblx0XHR9XG5cdH0pO1xuXG5cblx0LyoqXG5cdCAqXHRJbnRlZ3JhdGUgaW50byBtZWRpYSBsaWJyYXJ5IG1vZGFsXG5cdCAqL1xuXHQvLyBhZGQgc3RhdGVzIHRvIGJyb3dzZSByb3V0ZXJcblx0Xy5leHRlbmQoIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLCB7XG5cdFx0X3BhcmVudEluaXRpYWxpemU6IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUsXG5cdFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9wYXJlbnRJbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdHRoaXMuYmluZFBhc3RlSGFuZGxlcnMoKTtcblx0XHR9LFxuXHRcdF9wYXJlbnRCcm93c2VSb3V0ZXI6IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLmJyb3dzZVJvdXRlcixcblx0XHRicm93c2VSb3V0ZXIgOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHRcdHRoaXMuX3BhcmVudEJyb3dzZVJvdXRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cblx0XHRcdGlmICggd3AubWVkaWEudGhlcGFzdGUuc3VwcG9ydHMucGFzdGUgKSB7XG5cdFx0XHRcdHZpZXcuc2V0KHtwYXN0ZWJvYXJkOntcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jb3B5X3Bhc3RlLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAzNVxuXHRcdFx0XHR9fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJpbmRQYXN0ZUhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwcmV2aW91c0NvbnRlbnQgPSBmYWxzZTtcblx0XHRcblx0XHRcdC8vIGRpc21pc3MgY29udGVudCBvbiBjbG9zZVxuXHRcdFx0dGhpcy5vbiggJ2NvbnRlbnQ6cmVuZGVyIGNsb3NlJyAsIGZ1bmN0aW9uKGNvbnRlbnQpe1xuXHRcdFx0XHRpZiAoIHByZXZpb3VzQ29udGVudCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgcHJldmlvdXNDb250ZW50LmRpc21pc3MgKSB7XG5cdFx0XHRcdFx0cHJldmlvdXNDb250ZW50LmRpc21pc3MoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgY29udGVudCApXG5cdFx0XHRcdFx0cHJldmlvdXNDb250ZW50ID0gY29udGVudDtcblx0XHRcdH0gLCB0aGlzICk7XG5cdFx0XG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6cGFzdGVib2FyZCcsIHRoaXMuY29udGVudENyZWF0ZVBhc3RlYm9hcmQsIHRoaXMgKTtcblx0XHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlcjpwYXN0ZWJvYXJkJywgdGhpcy5jb250ZW50UmVuZGVyR3JhYmJlciwgdGhpcyApO1xuXG5cdFx0XHRmcmFtZSA9IHRoaXM7XG5cdFx0fSxcblx0XHQvLyBhZGQgaGFuZGxlcnNcblx0XHRjb250ZW50Q3JlYXRlUGFzdGVib2FyZDogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlKCk7XG5cblx0XHRcdHRoaXMuY3VycmVudFBhc3RlVmlldyA9IGNvbnRlbnQudmlldyA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIoIHsgXG5cdFx0XHRcdGNvbnRyb2xsZXJcdDogdGhpcywgXG5cdFx0XHRcdGdyYWJiZXJcdFx0OiB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LlBhc3RlYm9hcmRcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jdXJyZW50UGFzdGVWaWV3LnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudXBsb2FkZWREYXRhSW1hZ2UgKTtcblx0XHR9LFxuXHRcdGNvbnRlbnRSZW5kZXJHcmFiYmVyOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdGNvbnRlbnQuc3RhcnRHcmFiYmluZygpO1xuXHRcdH0sXG5cdFx0dXBsb2FkZWREYXRhSW1hZ2U6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLmN1cnJlbnRQYXN0ZVZpZXcudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dmFyIG9iaiA9IHsgdmlldzogbnVsbCB9O1xuXHRcdFx0dGhpcy5icm93c2VDb250ZW50KG9iaik7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0KCBvYmoudmlldyApO1xuXHRcdFx0dGhpcy5yb3V0ZXIuZ2V0KCkuc2VsZWN0KCdicm93c2UnKVxuXHRcdH1cblx0fSk7XG5cdFxuXG5cblx0LyoqXG5cdCAqXHRBZGQgcGFzdGUgYnV0dG9uIHRvIHRvb2xiYXIgb24gdXBsb2FkLnBocFxuXHQgKi9cblx0Xy5leHRlbmQoIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyLnByb3RvdHlwZSwge1xuXHRcdF9wYXJlbnRJbml0aWFsaXplOlx0d3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXIucHJvdG90eXBlLmluaXRpYWxpemUsXG5cdFx0aW5pdGlhbGl6ZTpcdGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRwYXN0ZUJ0bjtcblxuXHRcdFx0dGhpcy5fcGFyZW50SW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHRcblx0XHRcdHRoaXMudGhlcGFzdGUgPSB7XG5cdFx0XHRcdHBhc3RlXHQ6IHtcbi8vXHRcdFx0XHRcdGJ1dHRvblx0OiBmYWxzZSxcblx0XHRcdFx0XHRncmFiYmVyXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdG1vZGFsXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdG1vZGVcdDogJ3Bhc3RlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudFx0XHQ6IGZhbHNlXG5cdFx0XHR9XG5cblx0XHRcdGlmICggISAoIHRoaXMuY29udHJvbGxlciBpbnN0YW5jZW9mIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QgKSApIHtcblxuXHRcdFx0XHRpZiAoIHdwLm1lZGlhLnRoZXBhc3RlLnN1cHBvcnRzLnBhc3RlICkge1xuXG5cdFx0XHRcdFx0cGFzdGVCdG4gPSBuZXcgd3AubWVkaWEudmlldy5CdXR0b24oIHtcblx0XHRcdFx0XHRcdHRleHRcdFx0OiBsMTBuLmNvcHlfcGFzdGUsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU6ICAnZ3JhYmJlci1idXR0b24nLFxuXHRcdFx0XHRcdFx0cHJpb3JpdHlcdDogLTY0LFxuXHRcdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRzZWxmLnRoZXBhc3RlLmFjdGl2ZSA9IHNlbGYudGhlcGFzdGUucGFzdGU7XG5cdFx0XHRcdFx0XHRcdHNlbGYudGhlcGFzdGVPcGVuKCBsMTBuLmNvcHlfcGFzdGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0dGhpcy50aGVwYXN0ZS5wYXN0ZS5ncmFiYmVyID0gbmV3IHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlR3JhYmJlcigge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlclx0OiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRncmFiYmVyXHRcdDogd3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkLFxuXHRcdFx0XHRcdFx0d3B1cGxvYWRlclx0OiB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXJcblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAncGFzdGVNb2RlQnV0dG9uJywgcGFzdGVCdG4ucmVuZGVyKCkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dGhlcGFzdGVVcGxvYWRlZDogZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLmRpc21pc3MoKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwuY2xvc2UoKTtcblx0XHRcdHRoaXMudGhlcGFzdGVDbG9zZSgpO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVFcnJvcjogZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHRjb25zb2xlLmxvZyggJ2Vycm9yJywgZSApO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVPcGVuOiBmdW5jdGlvbiggdGl0bGUgKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwgID0gIG5ldyB3cC5tZWRpYS52aWV3Lk1vZGFsKCB7XG5cdFx0XHRcdGNvbnRyb2xsZXIgOiB0aGlzLFxuXHRcdFx0XHR0aXRsZSAgICAgIDogdGl0bGVcblx0XHRcdH0gKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwuY29udGVudCggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlciApO1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbC5vcGVuKCk7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwub24oICdjbG9zZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLnRoZXBhc3RlQ2xvc2UuYXBwbHkoc2VsZik7XG5cdFx0XHRcdHNlbGYudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIuc3RvcEdyYWJiaW5nKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci5zdGFydEdyYWJiaW5nKCk7XG5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJywgdGhpcy50aGVwYXN0ZVVwbG9hZGVkICk7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnZXJyb3I6dXBsb2FkZWQ6ZGF0YWltYWdlJywgdGhpcy50aGVwYXN0ZUVycm9yICk7XG5cdFx0fSxcblx0XHR0aGVwYXN0ZUNsb3NlOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dGhpcy5jb250cm9sbGVyLmRlYWN0aXZhdGVNb2RlKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5tb2RlICkuYWN0aXZhdGVNb2RlKCAnZWRpdCcgKTtcblxuXHRcdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2Vycm9yOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHR9XG5cdH0pO1xuXHRcbn0pKGpRdWVyeSx3aW5kb3cpO1xuXG4oZnVuY3Rpb24oJCx3aW5kb3csbyl7XG5cdHZhciB0aGVwYXN0ZSA9IHdwLm1lZGlhLnRoZXBhc3RlLFxuXHRcdEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHRcdE1vZGFsICA9IHdwLm1lZGlhLnZpZXcuTW9kYWwsXG5cdFx0bDEwbiAgID0gdGhlcGFzdGUubDEwbjtcblxuXG5cdHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlVXBsb2FkZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdFx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCd0aGVwYXN0ZS11cGxvYWRlcicpLFxuXHRcdGNsYXNzTmFtZTogJ3RoZXBhc3RlLXVwbG9hZGVyJyxcblx0XHRjb250cm9sbGVyOm51bGwsXG5cdFx0aW1hZ2UgOiBudWxsLFxuXHRcdCRkaXNjYXJkQnRuIDogbnVsbCxcblx0XHQkdXBsb2FkQnRuIDogbnVsbCxcblxuXHRcdHVwbG9hZGVyIDogbnVsbCxcblxuXHRcdGV2ZW50cyA6IHtcblx0XHRcdCdjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0nXHQ6ICd1cGxvYWRJbWFnZScsXG5cdFx0XHQnY2xpY2sgW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXSdcdDogJ2Rpc2NhcmRJbWFnZScsXG5cdFx0fSxcblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lIDogbDEwbi5pbWFnZVxuXHRcdFx0fSk7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRcdGluc3RyID0gbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHR0YWdOYW1lICAgIDogJ2RpdicsXG5cdFx0XHRcdGNsYXNzTmFtZSAgOiAnaW5zdHJ1bWVudHMnLFxuXHRcdFx0XHRjb250cm9sbGVyIDogdGhpcy5jb250cm9sbGVyXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51cGxvYWRlciA9IHRoaXMub3B0aW9ucy51cGxvZGVyO1xuXHRcdH0sXG5cdFx0c2V0SW1hZ2VEYXRhIDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy4kaW1hZ2VDb250YWluZXIuaHRtbCgnJykuZ2V0KDApLFxuXHRcdFx0XHRzZWxmID0gdGhpcyxcblx0XHRcdFx0Zm9ybWF0ID0gZGF0YS5tYXRjaCgvZGF0YTooaW1hZ2VcXC8oXFx3KykpOy8pWzFdO1xuXG5cdFx0XHRpZiAoICEgdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLmNvbnZlcnRbZm9ybWF0XSApIHtcblx0XHRcdFx0Zm9ybWF0ID0gdGhpcy5vcHRpb25zLmRlZmF1bHRGaWxlRm9ybWF0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuaW1hZ2UgKSB7XG5cdFx0XHRcdHRoaXMuaW1hZ2UuZGVzdHJveSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmltYWdlID0gbmV3IG8uSW1hZ2UoKTtcblx0XHRcdHRoaXMuaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBvcHRzID0gc2VsZi5nZXRVcGxvYWRlcigpLmdldE9wdGlvbigncmVzaXplJyksXG5cdFx0XHRcdFx0c2NhbGUgPSBNYXRoLm1heCggb3B0cy53aWR0aCAvIHRoaXMud2lkdGgsIG9wdHMuaGVpZ2h0IC8gdGhpcy5oZWlnaHQgKTtcblxuXHRcdFx0XHQhIW9wdHMgJiYgKHNjYWxlIDwgMSkgJiYgdGhpcy5kb3duc2l6ZSggdGhpcy53aWR0aCpzY2FsZSwgdGhpcy5oZWlnaHQqc2NhbGUgKTtcblxuXHRcdFx0XHR0aGlzLmVtYmVkKCBjb250YWluZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbWFnZS5sb2FkKCBkYXRhICk7XG5cdFx0XHRpZiAoIHRoaXMuJGltYWdlQ29udGFpbmVyICkge1xuXHRcdFx0XHR0aGlzLiRpbWFnZUNvbnRhaW5lci5hcHBlbmQodGhpcy5pbWFnZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCJmb3JtYXRcIl0gaW5wdXRbdmFsdWU9XCInK2Zvcm1hdCsnXCJdJykucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XG5cblxuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHJlbmRlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuJGltYWdlQ29udGFpbmVyID0gdGhpcy4kKCcuaW1hZ2UtY29udGFpbmVyJyk7XG5cdFx0XHR0aGlzLiRkaXNjYXJkQnRuID0gdGhpcy4kKCdbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdJyk7XG5cdFx0XHR0aGlzLiR1cGxvYWRCdG4gPSB0aGlzLiQoJ1tkYXRhLWFjdGlvbj1cInVwbG9hZFwiXScpO1xuXHRcdFx0dGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwidGl0bGVcIl0nKS52YWwoIHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZU5hbWUgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0ZGlzY2FyZEltYWdlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjpkaXNjYXJkOmRhdGFpbWFnZScgLCB0aGlzICk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHR1cGxvYWRJbWFnZSA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cImZvcm1hdFwiXSA6Y2hlY2tlZCcpLnZhbCgpLFxuXHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdLFxuXHRcdFx0XHRuYW1lID0gdGhpcy4kKCdpbnB1dFtkYXRhLXNldHRpbmc9XCJ0aXRsZVwiXScpLnZhbCgpICsgJy4nICsgc3VmZml4LFxuXHRcdFx0XHRibG9iID0gdGhpcy5pbWFnZS5nZXRBc0Jsb2IoIHR5cGUsIHRoZXBhc3RlLm9wdGlvbnMuanBlZ19xdWFsaXR5ICk7XG5cblx0XHRcdHRoaXMuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cblx0XHRcdGJsb2IuZGV0YWNoKCBibG9iLmdldFNvdXJjZSgpICk7XG5cdFx0XHRibG9iLm5hbWUgPSBuYW1lO1xuXHRcdFx0YmxvYi50eXBlID0gdHlwZTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5hZGRGaWxlKCBibG9iICwgbmFtZSApO1xuXG5cdFx0XHR0aGlzLmRpc2FibGVkKCB0cnVlICk7XG5cblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjp1cGxvYWQ6ZGF0YWltYWdlJyAsIHRoaXMgKTtcblx0XHR9LFxuXHRcdHNob3c6ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy4kZWwuaGlkZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRkaXNhYmxlZCA6IGZ1bmN0aW9uKCBkaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuJGRpc2NhcmRCdG4ucHJvcCggJ2Rpc2FibGVkJywgZGlzYWJsZWQgKTtcblx0XHRcdHRoaXMuJHVwbG9hZEJ0bi5wcm9wKCAnZGlzYWJsZWQnLCBkaXNhYmxlZCApO1xuXHRcdH0sXG5cdFx0X3VwbG9hZFN1Y2Nlc3NIYW5kbGVyIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHRfdXBsb2FkRXJyb3JIYW5kbGVyIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdlcnJvcjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0XHR0aGlzLmRpc2FibGVkKGZhbHNlKTtcblx0XHRcdHRoaXMudW5iaW5kVXBsb2FkZXJFdmVudHMoKTtcblx0XHR9LFxuXHRcdGJpbmRVcGxvYWRlckV2ZW50cyA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLmJpbmQoICdGaWxlVXBsb2FkZWQnLFx0dGhpcy5fdXBsb2FkU3VjY2Vzc0hhbmRsZXIsXHR0aGlzICk7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkuYmluZCggJ0Vycm9yJyxcdFx0XHR0aGlzLl91cGxvYWRFcnJvckhhbmRsZXIsXHR0aGlzICk7XG5cdFx0fSxcblx0XHR1bmJpbmRVcGxvYWRlckV2ZW50cyA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLnVuYmluZCggJ0ZpbGVVcGxvYWRlZCcsXHR0aGlzLl91cGxvYWRTdWNjZXNzSGFuZGxlcixcdHRoaXMgKTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS51bmJpbmQoICdFcnJvcicsXHRcdFx0dGhpcy5fdXBsb2FkRXJyb3JIYW5kbGVyLFx0dGhpcyApO1xuXHRcdH0sXG5cdFx0Z2V0VXBsb2FkZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udHJvbGxlci51cGxvYWRlci51cGxvYWRlci51cGxvYWRlcjtcblx0XHR9XG5cdH0pO1xuXG5cblx0d3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtcGFzdGVib2FyZCcpLFxuXHRcdGNsYXNzTmFtZTogJ3RoZXBhc3RlLXBhc3RlYm9hcmQnLFxuXHRcdGNvbnRyb2xsZXI6bnVsbCxcblx0XHRhY3Rpb246J3Bhc3RlJyxcblx0XHQkcGFzdGVib2FyZCA6IG51bGwsXG5cblx0XHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmQgPSB0aGlzLiQoICcuaW5qZWN0b3InICkucGFzdGFibGVDb250ZW50ZWRpdGFibGUoKTtcblx0XHRcdHRoaXMuJG1lc3NhZ2UgPSB0aGlzLiQoICcubWVzc2FnZScgKTtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmQub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcblx0XHRcdFx0c2VsZi5zaG93X21lc3NhZ2UoJycpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdGFydCA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRjbGlwYm9hcmRIYXNJbWFnZTtcblxuXHRcdFx0dGhpcy5pbWFnZVBhc3RlZCA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkXG5cdFx0XHRcdC5vbigncGFzdGUnLGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdGNsaXBib2FyZEhhc0ltYWdlID0gd3AubWVkaWEudGhlcGFzdGUuY2xpcGJvYXJkSGFzSW1hZ2UoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ3Bhc3RlVGV4dCcgLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblxuXHRcdFx0XHRcdGlmICggY2xpcGJvYXJkSGFzSW1hZ2UgfHwgc2VsZi5pbWFnZVBhc3RlZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi5zaG93X21lc3NhZ2UoIGwxMG4ucGFzdGVfZXJyb3Jfbm9faW1hZ2UgKTtcblx0XHRcdFx0XHQkKCB0aGlzICkuaHRtbCgnJyk7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oJ3Bhc3RlSW1hZ2UnICwgZnVuY3Rpb24oIGUsIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmltYWdlUGFzdGVkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzZWxmLnRyaWdnZXIoICdhY3Rpb246Y3JlYXRlOmRhdGFpbWFnZScsIHRoaXMgLCBkYXRhLmRhdGFVUkwgKTtcblx0XHRcdFx0XHRzZWxmLmltYWdlUGFzdGVkID0gdHJ1ZTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5vbigncGFzdGVJbWFnZUVycm9yJyAsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCBsMTBuLnBhc3RlX2Vycm9yICk7XG5cdFx0XHRcdFx0JCggdGhpcyApLmh0bWwoJycpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0O1xuXG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHNlbGYuJHBhc3RlYm9hcmQuZ2V0KDApLmZvY3VzKCk7XG5cdFx0XHR9LDEpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHN0b3AgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmRcblx0XHRcdFx0Lm9mZigncGFzdGVJbWFnZScpXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlSW1hZ2VFcnJvcicpXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlVGV4dCcpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzaG93OmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kZWwuc2hvdygpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRoaWRlOmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kZWwuaGlkZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzaG93X21lc3NhZ2U6ZnVuY3Rpb24oIG1zZyApIHtcblx0XHRcdHRoaXMuJG1lc3NhZ2UudGV4dCggbXNnICk7XG5cdFx0fVxuXHR9KTtcblxuXHR3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG4vL1x0XHR0YWdOYW1lOiAgICdkaXYnLFxuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtZ3JhYmJlcicpLFxuXHRcdGNsYXNzTmFtZSA6ICd0aGVwYXN0ZS1ncmFiYmVyJyxcblxuXHRcdGdyYWJiZXIgOiBudWxsLFxuXHRcdHVwbG9hZGVyIDogbnVsbCxcblxuXHRcdGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciByZXQgPSB3cC5tZWRpYS5WaWV3LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdHdwdXBsb2FkZXJcdFx0OiBudWxsLFxuXHRcdFx0XHRkZWZhdWx0RmlsZU5hbWVcdDogbDEwbi5wYXN0ZWQsXG5cdFx0XHRcdGRlZmF1bHRGaWxlRm9ybWF0IDogJ2ltYWdlL3BuZycsXG5cdFx0XHRcdHRpdGxlXHRcdFx0OiBsMTBuLmNvcHlfcGFzdGVcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmdyYWJiZXIgID0gbmV3IHRoaXMub3B0aW9ucy5ncmFiYmVyKCB7IGNvbnRyb2xsZXJcdDogdGhpcy5jb250cm9sbGVyIH0gKTtcblxuXHRcdFx0dGhpcy51cGxvYWRlciA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sbGVyXHRcdFx0OiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHR1cGxvZGVyXHRcdFx0XHQ6IHRoaXMub3B0aW9ucy53cHVwbG9hZGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lXHRcdDogdGhpcy5vcHRpb25zLmRlZmF1bHRGaWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRGaWxlRm9ybWF0XHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZUZvcm1hdFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblxuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5ncmFiYmVyLCAnYWN0aW9uOmNyZWF0ZTpkYXRhaW1hZ2UnLFx0dGhpcy5pbWFnZUNyZWF0ZWQgKTtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMudXBsb2FkZXIsICdhY3Rpb246ZGlzY2FyZDpkYXRhaW1hZ2UnLFx0dGhpcy5zdGFydEdyYWJiaW5nICk7XG5cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSxcblx0XHRyZW5kZXI6ZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0dGhpcy4kKCcuY29udGVudCcpXG5cdFx0XHRcdC5hcHBlbmQoIHRoaXMuZ3JhYmJlci5yZW5kZXIoKS4kZWwgKVxuXHRcdFx0XHQuYXBwZW5kKCB0aGlzLnVwbG9hZGVyLnJlbmRlcigpLiRlbCApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGltYWdlQ3JlYXRlZCA6IGZ1bmN0aW9uKCBncmFiYmVyICwgaW1hZ2VEYXRhICkge1xuXHRcdFx0dGhpcy5ncmFiYmVyLnN0b3AoKS5oaWRlKCk7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLnNob3coKS5zZXRJbWFnZURhdGEoIGltYWdlRGF0YSApO1xuXHRcdH0sXG5cdFx0c3RhcnRHcmFiYmluZzpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMudXBsb2FkZXIuaGlkZSgpO1xuXHRcdFx0dGhpcy5ncmFiYmVyLnNob3coKS5zdGFydCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdG9wR3JhYmJpbmc6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdyYWJiZXIuc3RvcCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRnZXRBY3Rpb24gOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdyYWJiZXIuYWN0aW9uO1xuXHRcdH0sXG5cdFx0ZGlzbWlzczpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ3JhYmJlci5zdG9wKCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnksd2luZG93LG1PeGllKTtcbiJdfQ== 
  • the-paste/tags/1.0.4/languages/the-paste-de_DE.po

    r1730916 r1762953  
    33"Project-Id-Version: The Paste v0.3.0\n" 
    44"Report-Msgid-Bugs-To: \n" 
    5 "POT-Creation-Date: 2017-09-16 14:51+0100\n" 
    6 "PO-Revision-Date: 2017-09-16 14:53+0100\n" 
     5"POT-Creation-Date: 2017-11-10 11:49+0100\n" 
     6"PO-Revision-Date: 2017-11-10 11:49+0100\n" 
    77"Last-Translator: Jörn Lund <joern@podpirate.org>\n" 
    88"Language-Team: \n" 
     
    1212"Content-Transfer-Encoding: 8bit\n" 
    1313"Plural-Forms: nplurals=2; plural=n != 1;\n" 
    14 "X-Generator: Poedit 1.8.1\n" 
     14"X-Generator: Poedit 2.0.4\n" 
    1515"X-Poedit-SourceCharset: UTF-8\n" 
    1616"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" 
    1717"_n_noop:1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;esc_attr__;" 
    1818"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n" 
    19 "X-Poedit-Basepath: ../\n" 
     19"X-Poedit-Basepath: ..\n" 
    2020"X-Textdomain-Support: yes\n" 
    2121"X-Poedit-SearchPath-0: .\n" 
     
    4040msgstr "Eingefügt" 
    4141 
     42#: include/ThePaste/Admin/Admin.php:51 
     43msgid "Pasted into" 
     44msgstr "Eingefügt in" 
     45 
    4246# @ default 
    43 #: include/ThePaste/Admin/Admin.php:51 
     47#: include/ThePaste/Admin/Admin.php:52 
    4448msgid "Image" 
    4549msgstr "Bild" 
    4650 
    4751# @ cheese 
    48 #: include/ThePaste/Admin/Admin.php:52 
     52#: include/ThePaste/Admin/Admin.php:53 
    4953msgid "No image data pasted." 
    5054msgstr "Kein Bild in der Zwischenablage." 
    5155 
    52 #: include/ThePaste/Admin/Admin.php:53 
     56#: include/ThePaste/Admin/Admin.php:54 
    5357msgid "Error pasting image data." 
    54 msgstr "Fehler beim Einfügen" 
     58msgstr "Fehler beim Einfügen." 
    5559 
    56 #: include/ThePaste/Admin/Admin.php:54 
     60#: include/ThePaste/Admin/Admin.php:55 
    5761msgid "Upload pasted images" 
    5862msgstr "Eingefügte Bilder sofort hochladen" 
    5963 
    60 #: include/ThePaste/Admin/Admin.php:55 
     64#: include/ThePaste/Admin/Admin.php:56 
    6165msgid "Upload image" 
    6266msgstr "Bild hochladen" 
    63  
    64 #: include/ThePaste/Settings/SettingsMedia.php:31 
    65 msgid "Pasted Images" 
    66 msgstr "Eingefügte Bilder" 
    67  
    68 #: include/ThePaste/Settings/SettingsMedia.php:45 
    69 msgid "Pasteboard" 
    70 msgstr "Pasteboard" 
    71  
    72 #: include/ThePaste/Settings/SettingsMedia.php:51 
    73 msgid "Enable Copy-Paste image uploads." 
    74 msgstr "Copy-Paste Bilduploads aktivieren" 
    7567 
    7668# @ cheese 
    7769#: include/template/pasteboard.php:9 
    7870msgid "Paste some image Data from your clipboard" 
    79 msgstr "Füge Bilder aus der Zwischenablage ein." 
     71msgstr "Füge Bilder aus der Zwischenablage ein" 
    8072 
    8173#: include/template/pasteboard.php:11 
     
    9789msgid "Upload" 
    9890msgstr "Upload" 
     91 
     92#~ msgid "Pasted Images" 
     93#~ msgstr "Eingefügte Bilder" 
     94 
     95#~ msgid "Pasteboard" 
     96#~ msgstr "Pasteboard" 
     97 
     98#~ msgid "Enable Copy-Paste image uploads." 
     99#~ msgstr "Copy-Paste Bilduploads aktivieren" 
    99100 
    100101# @ cheese 
  • the-paste/tags/1.0.4/readme.txt

    r1762085 r1762953  
    44Tags: paste, clipboard, image, editor, media 
    55Requires at least: 4.5.0 
    6 Tested up to: 4.8.1 
     6Tested up to: 5.0-alpha-42142 
    77Requires PHP: 5.3.0 
    8 Stable tag: 1.0.3 
     8Stable tag: 1.0.4 
    99License: GPLv2 or later 
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    4343== Changelog == 
    4444 
     45= 1.0.4 = 
     46* Support Text Widget 
     47* Better Media Titles 
     48 
    4549= 1.0.3 = 
    4650* Fix JS Error in TextWidget 
  • the-paste/trunk/include/ThePaste/Admin/Admin.php

    r1730916 r1762953  
    3838        } 
    3939 
    40         wp_register_script( 'the-paste-base',  
     40        wp_register_script( 'the-paste-base', 
    4141            $this->core->get_asset_url( $script_source ), 
    42             array( 'jquery', 'swfobject', 'media-editor' ),  
     42            array( 'jquery', 'swfobject', 'media-editor' ), 
    4343            $version 
    4444        ); 
    4545        wp_localize_script( 'the-paste-base' , 'thepaste' , array( 
    4646            'l10n' => array( 
    47                 'snapshot'                      => __('Snapshot','the-paste'), 
    48                 'take_snapshot'                 => __('Take Snapshot','the-paste'), 
    49                 'copy_paste'                    => __('Copy & Paste' , 'the-paste'), 
    50                 'pasted'                        => __('Pasted' , 'the-paste'), 
    51                 'image'                         => __('Image'), 
    52                 'paste_error_no_image'          => __('No image data pasted.','the-paste'), 
    53                 'paste_error'                   => __('Error pasting image data.','the-paste'), 
    54                 'upload_pasted_images'          => __('Upload pasted images', 'the-paste'), 
    55                 'upload_image'                  => __('Upload image', 'the-paste'), 
     47                'snapshot'                      => __( 'Snapshot','the-paste' ), 
     48                'take_snapshot'                 => __( 'Take Snapshot','the-paste' ), 
     49                'copy_paste'                    => __( 'Copy & Paste', 'the-paste' ), 
     50                'pasted'                        => __( 'Pasted', 'the-paste' ), 
     51                'pasted_into'                   => __( 'Pasted into', 'the-paste' ), 
     52                'image'                         => __( 'Image', 'the-paste' ), 
     53                'paste_error_no_image'          => __( 'No image data pasted.', 'the-paste' ), 
     54                'paste_error'                   => __( 'Error pasting image data.', 'the-paste' ), 
     55                'upload_pasted_images'          => __( 'Upload pasted images', 'the-paste' ), 
     56                'upload_image'                  => __( 'Upload image', 'the-paste' ), 
     57 
    5658            ), 
    5759            'options'   => array( 
     
    9799    function print_media_templates() { 
    98100        $rp = THE_PASTE_DIRECTORY . 'include' . DIRECTORY_SEPARATOR . '/template/{,*/,*/*/,*/*/*/}*.php'; 
    99         foreach ( glob( $rp, GLOB_BRACE ) as $template_file ) {  
     101        foreach ( glob( $rp, GLOB_BRACE ) as $template_file ) { 
    100102            include $template_file; 
    101103        } 
    102104    } 
    103105} 
    104  
  • the-paste/trunk/include/ThePaste/Admin/TinyMce/TinyMce.php

    r1729167 r1762953  
    3838     */ 
    3939    protected $plugin_params = false; 
    40      
     40 
    4141    /** 
    4242     *  TinyMCE Settings 
     
    4949     */ 
    5050    protected $toolbar_css = false; 
    51      
     51 
    5252    /** 
    5353     *  Load custom css for toolbar. 
     
    9494            throw( new Exception( '`$module_name` must be defined in a derived classes.' ) ); 
    9595        } 
    96          
    97         $this->prefix = str_replace('-','_',$this->module_name); 
     96 
     97        $this->prefix = str_replace( '-', '_', $this->module_name ); 
    9898 
    9999        $parts = array_slice( explode( '\\', get_class( $this ) ), 0, -1 ); 
     
    109109            'mce_buttons_2' => false, 
    110110        ) ); 
    111          
     111 
    112112        foreach ( $this->editor_buttons as $hook => $buttons ) { 
    113113            if ( $buttons !== false ) { 
     
    115115            } 
    116116        } 
    117          
     117 
    118118 
    119119        // add tinymce plugin parameters 
     
    131131            add_action( "admin_print_scripts", array( $this, 'enqueue_toolbar_css') ); 
    132132        } 
    133         if ( $this->text_widget !== false ) { 
    134             add_action( 'print_default_editor_scripts', array( $this, 'print_editor_scripts' ) ); 
    135         } 
    136  
    137         // add tinymce plugin 
     133 
    138134        if ( $this->text_widget !== false ) { 
    139135            // looks like it will only works with widget? 
    140136            add_action( 'print_default_editor_scripts', array( $this, 'print_editor_scripts' ) ); 
     137            if ( $this->toolbar_css ) { 
     138                add_action( 'load-widgets.php', array( $this,'enqueue_toolbar_css' ) ); 
     139            } 
    141140        } 
    142141        // will only work with default editor 
     
    151150     */ 
    152151    public function print_editor_scripts() { 
     152 
    153153        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
     154 
     155        $js_settings = array() + $this->mce_settings; 
     156 
     157        // add editor css 
     158        if ( $this->editor_css ) { 
     159            $js_settings = wp_parse_args( $js_settings, array( 
     160                'content_css'   => $this->get_mce_css_url(), 
     161            ) ); 
     162        } 
     163 
     164        // add buttons 
     165        foreach ( $this->editor_buttons as $row => $btns ) { 
     166 
     167            $toolbar_idx = preg_replace('/([^0-9]+)/imsU','', $row ); 
     168 
     169            if ( ! $btns ) { 
     170                continue; 
     171            } 
     172 
     173            $js_settings[ 'toolbar' . $toolbar_idx ] = implode( ',', array_keys($btns) ); 
     174        } 
     175 
     176        // add plugin 
     177        $js_settings['external_plugins'] = $this->add_plugin( array() ); 
     178 
    154179        ?> 
    155         <script type="text/javascript"> 
    156         /* TinyMCE plugin <?php echo $this->module_name ?> */ 
    157         jQuery( document ).on( 'tinymce-editor-setup', function( event, editor ) { 
    158 <?php echo file_get_contents( $this->core->get_asset_path( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ) ); ?>; 
    159 <?php echo $this->prefix ?>PluginCallback( editor ); 
     180<script type="text/javascript"> 
     181/* TinyMCE plugin <?php echo $this->module_name ?> */ 
     182// extend wp editor settings 
     183(function($){ 
     184    var orig = window.wp.editor.getDefaultSettings; 
     185    window.wp.editor.getDefaultSettings = function() { 
     186        var settings = orig.apply( this, arguments ), 
     187            mergeSettings = <?php echo json_encode( $js_settings ); ?>; 
     188        $.each( mergeSettings, function(i,el) { 
     189            var type, 
     190                override = ['entity_encoding', 'language', 'resize', 'skin', 'theme','wp_lang_attr']; 
     191            if ( ! ( i in settings.tinymce ) || (i in override) || 'booelan' === typeof settings.tinymce[i] ) { 
     192                settings.tinymce[i] = el; 
     193            } else { 
     194                type = typeof settings.tinymce[i]; 
     195                if ( 'string' === type ) { 
     196                    settings.tinymce[i] += ',' + el; 
     197                } else if ( 'object' === type ) { 
     198                    settings.tinymce[i] = $.extend( true, settings.tinymce[i], el ); 
     199                } 
     200            } 
    160201        }); 
    161         /* END: TinyMCE plugin <?php echo $this->module_name ?> */ 
    162         </script> 
     202        return settings; 
     203    } 
     204})(jQuery); 
     205/* END: TinyMCE plugin <?php echo $this->module_name ?> */ 
     206 
     207</script> 
    163208        <?php 
    164209    } 
     
    171216    public function add_plugin( $plugins_array ) { 
    172217        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
    173         $plugins_array[ $this->module_name ] = $this->core->get_asset_url( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ); 
     218        $plugins_array[ $this->prefix ] = $this->core->get_asset_url( $this->script_dir . '/admin/mce/'.$this->module_name.'-plugin'.$suffix.'.js' ); 
    174219        return $plugins_array; 
    175220    } 
     
    201246     */ 
    202247    public function enqueue_toolbar_css() { 
     248        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; 
    203249        $asset_id = sprintf( 'tinymce-%s-toolbar-css', $this->module_name ); 
    204         $asset_url = $this->core->get_asset_url( $this->styles_dir . '/admin/mce/the-paste-toolbar.css' ); 
    205         wp_enqueue_style( $asset_id, $asset_url ); 
    206     } 
     250        wp_enqueue_style( $asset_id, $this->get_toolbar_css_url() ); 
     251    } 
     252 
     253    /** 
     254     *  @return string URL to editor css 
     255     */ 
     256     protected function get_toolbar_css_url() { 
     257        return $this->core->get_asset_url( $this->styles_dir . '/admin/mce/'. $this->module_name.'-toolbar.css' ); 
     258    } 
    207259 
    208260    /** 
     
    212264     */ 
    213265    public function mce_css( $styles ) { 
    214         $mce_css = $this->core->get_asset_url( $this->styles_dir . '/admin/mce/the-paste-editor.css' ); 
    215         $styles .= ','. $mce_css; 
     266        $styles .= ','. $this->get_mce_css_url(); 
    216267        return $styles; 
    217268    } 
    218269 
     270    /** 
     271     *  @return string URL to editor css 
     272     */ 
     273    protected function get_mce_css_url() { 
     274        return $this->core->get_asset_url( $this->styles_dir . '/admin/mce/'. $this->module_name.'-editor.css' ); 
     275    } 
    219276    /** 
    220277     *  print plugin settings 
  • the-paste/trunk/include/ThePaste/Admin/TinyMce/TinyMceThePaste.php

    r1760781 r1762953  
    55class TinyMceThePaste extends TinyMce { 
    66 
     7    /** 
     8     *  @inheritdoc 
     9     */ 
    710    protected $module_name = 'the-paste'; 
    811 
     12    /** 
     13     *  @inheritdoc 
     14     */ 
    915    protected $editor_buttons = array( 
    1016        'mce_buttons_2' => array( 
     
    1319    ); 
    1420 
     21    /** 
     22     *  @inheritdoc 
     23     */ 
    1524    protected $toolbar_css = true; 
     25 
     26    /** 
     27     *  @inheritdoc 
     28     */ 
    1629    protected $editor_css = true; 
     30 
     31    /** 
     32     *  @inheritdoc 
     33     */ 
    1734    protected $text_widget = true; 
    1835 
    1936    /** 
    20      * Private constructor 
     37     *  @inheritdoc 
    2138     */ 
    2239    protected function __construct() { 
    2340        $this->plugin_params = array(); 
    2441        $this->mce_settings =  array( 
    25             'extended_valid_elements'   => 'canvas', 
    26             'custom_elements'           => 'canvas', 
    2742            'paste_data_images'         => true, 
    2843        ); 
  • the-paste/trunk/include/template/pasteboard.php

    r1729167 r1762953  
    11<?php 
    22 
    3 if ( ! defined('ABSPATH') )  
     3if ( ! defined('ABSPATH') ) 
    44    die(); 
    55 
  • the-paste/trunk/index.php

    r1762085 r1762953  
    66Description: Paste Images in WordPress from many applications and upload them to the media library. 
    77Author: Jörn Lund 
    8 Version: 1.0.3 
     8Version: 1.0.4 
    99Author URI: https://github.com/mcguffin/ 
    1010License: GPL2 
     
    1717 
    1818define( 'THE_PASTE_FILE', __FILE__ ); 
    19 define( 'THE_PASTE_VERSION', '1.0.3' ); 
     19define( 'THE_PASTE_VERSION', '1.0.4' ); 
    2020define( 'THE_PASTE_DIRECTORY', plugin_dir_path(__FILE__) ); 
    2121 
  • the-paste/trunk/js/admin/mce/the-paste-plugin.js

    r1762085 r1762953  
    469469            if ( event.element.nodeName === 'IMG' && ! editor.wp.isPlaceholder( event.element ) ) { 
    470470                event.toolbar = toolbar; 
     471 
    471472                uploadBtn = toolbar.$el.find('.thepaste-upload').closest('.mce-btn'); 
    472473 
     
    513514    }; 
    514515 
    515     tinymce.PluginManager.add( 'thepaste', the_pastePluginCallback ); 
     516    tinymce.PluginManager.add( 'the_paste', the_pastePluginCallback ); 
    516517 
    517518} )(jQuery); 
  • the-paste/trunk/js/admin/mce/the-paste-plugin.min.js

    r1762085 r1762953  
    1 (function(){var t,e,n,a,o;t=window.jQuery,t.paste=function(t){var n;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),n=e.mountNonInputable(t),n._container},t.fn.pastableNonInputable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is("textarea, input:text, [contenteditable]")||(e.mountNonInputable(n),n._pastable=!0);return this},t.fn.pastableTextarea=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not(textarea, input:text)")||(e.mountTextarea(n),n._pastable=!0);return this},t.fn.pastableContenteditable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not([contenteditable])")||(e.mountContenteditable(n),n._pastable=!0);return this},a=function(t,e){var n,a,o,r,i,u,s,l,c,p,d;if(null==e&&(e=512),!(l=t.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(p=l,l=p[0],u=p[1],n=p[2],r=atob(n),o=[],c=0;c<r.length;){for(d=r.slice(c,c+e),i=new Array(d.length),s=0;s<d.length;)i[s]=d.charCodeAt(s),s++;a=new Uint8Array(i),o.push(a),c+=e}return new Blob(o,{type:u})},n=function(){return t(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},o=function(e,n){var a,o,r,i,u,s;return i=void 0,u=void 0,r=void 0,o=void 0,a=void 0,"area"===(s=e.nodeName.toLowerCase())?(i=e.parentNode,u=i.name,!(!e.href||!u||"map"!==i.nodeName.toLowerCase())&&(r=t("img[usemap='#"+u+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(s)?(o=!e.disabled)&&(a=t(e).closest("fieldset")[0])&&(o=!a.disabled):o="a"===s?e.href||n:n,(o=o||t(e).is("[contenteditable]"))&&t(e).is(":visible"))},e=function(){function e(e,n){this._container=e,this._target=n,this._container=t(this._container),this._target=t(this._target).addClass("pastable"),this._container.on("paste",function(t){return function(e){var n,a,o,r,i,u,s,l,c,p,d,g,f;if(e.currentTarget!==e.target)return e.preventDefault();if(t._paste_event_fired=!0,null!=(null!=(c=e.originalEvent)?c.clipboardData:void 0))if(n=e.originalEvent.clipboardData,n.items)for(p=n.items,r=0,u=p.length;r<u;r++){if(o=p[r],o.type.match(/^image\//)){l=new FileReader,l.onload=function(e){return t._handleImage(e.target.result)};try{l.readAsDataURL(o.getAsFile())}catch(t){}e.preventDefault();break}"text/plain"===o.type&&o.getAsString(function(e){return t._target.trigger("pasteText",{text:e})})}else-1!==Array.prototype.indexOf.call(n.types,"text/plain")&&(f=n.getData("Text"),setTimeout(function(){return t._target.trigger("pasteText",{text:f})},1)),t._checkImagesInContainer(function(e){return t._handleImage(e)});if(n=window.clipboardData)if(null!=(d=f=n.getData("Text"))?d.length:void 0)setTimeout(function(){return t._target.trigger("pasteText",{text:f}),t._target.trigger("_pasteCheckContainerDone")},1);else{for(g=n.files,i=0,s=g.length;i<s;i++)a=g[i],t._handleImage(URL.createObjectURL(a));t._checkImagesInContainer(function(t){})}return null}}(this))}return e.prototype._target=null,e.prototype._container=null,e.mountNonInputable=function(a){var r;return r=new e(n().appendTo(a),a),t(a).on("click",function(t){return function(t){if(!o(t.target,!1))return r._container.focus()}}()),r._container.on("focus",function(e){return function(){return t(a).addClass("pastable-focus")}}()),r._container.on("blur",function(e){return function(){return t(a).removeClass("pastable-focus")}}())},e.mountTextarea=function(a){var o,r,i,u;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(i=Object.getOwnPropertyDescriptor)&&null!=(u=i.call(Object,DataTransfer.prototype,"items"))?u.get:void 0)?this.mountContenteditable(a):(r=new e(n().insertBefore(a),a),o=!1,t(a).on("keyup",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(o=!1),null}),t(a).on("keydown",function(e){var n;return 17!==(n=e.keyCode)&&224!==n||(o=!0),null!=e.ctrlKey&&null!=e.metaKey&&(o=e.ctrlKey||e.metaKey),o&&86===e.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(e){return function(){if(!r._paste_event_fired)return t(a).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),t(a).on("paste",function(t){return function(){}}()),t(a).on("focus",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).addClass("pastable-focus")}}()),t(a).on("blur",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).removeClass("pastable-focus")}}()),t(r._target).on("_pasteCheckContainerDone",function(e){return function(){return t(a).focus(),r._textarea_focus_stolen=!1}}()),t(r._target).on("pasteText",function(e){return function(e,n){var o,r,i;return i=t(a).prop("selectionStart"),r=t(a).prop("selectionEnd"),o=t(a).val(),t(a).val(""+o.slice(0,i)+n.text+o.slice(r)),t(a)[0].setSelectionRange(i+n.text.length,i+n.text.length),t(a).trigger("change")}}()))},e.mountContenteditable=function(n){return new e(n,n),t(n).on("focus",function(e){return function(){return t(n).addClass("pastable-focus")}}()),t(n).on("blur",function(e){return function(){return t(n).removeClass("pastable-focus")}}())},e.prototype._handleImage=function(t){var e;return t.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),e=new Image,e.crossOrigin="anonymous",e.onload=function(t){return function(){var n,o,r,i;o=document.createElement("canvas"),o.width=e.width,o.height=e.height,r=o.getContext("2d"),r.drawImage(e,0,0,o.width,o.height),i=null;try{i=o.toDataURL("image/png"),n=a(i)}catch(t){}return i&&t._target.trigger("pasteImage",{blob:n,dataURL:i,width:e.width,height:e.height}),t._target.trigger("pasteImageEnd")}}(this),e.onerror=function(e){return function(){return e._target.trigger("pasteImageError",{message:"Failed to get image from: "+t,url:t}),e._target.trigger("pasteImageEnd")}}(this),e.src=t)},e.prototype._checkImagesInContainer=function(e){var n,a,o,r,i;for(i=Math.floor(1e3*Math.random()),r=this._container.find("img"),a=0,o=r.length;a<o;a++)n=r[a],n["_paste_marked_"+i]=!0;return setTimeout(function(a){return function(){var o,r,u;for(u=a._container.find("img"),o=0,r=u.length;o<r;o++)n=u[o],n["_paste_marked_"+i]||(e(n.src),t(n).remove());return a._target.trigger("_pasteCheckContainerDone")}}(this),1)},e}()}).call(this);var the_pastePluginCallback;!function(t){the_pastePluginCallback=function(e){function n(t){var e=t.src.substring(0,5);return"blob:"===e||"data:"===e}var a,o,r=wp.media.thepaste;r.options.editor.auto_upload="false"!==localStorage.getItem("thepaste.auto_upload"),e.addCommand("cmd_thepaste",function(){r.options.editor.auto_upload=!r.options.editor.auto_upload,localStorage.setItem("thepaste.auto_upload",r.options.editor.auto_upload.toString()),a.active(r.options.editor.auto_upload)}),e.addButton("thepaste",{icon:"thepaste",tooltip:r.l10n.upload_pasted_images,cmd:"cmd_thepaste",onPostRender:function(){a=this},active:r.options.editor.auto_upload}),e.addButton("wp_img_thepaste_upload",{icon:"dashicon dashicons dashicons-upload thepaste-upload",tooltip:r.l10n.upload_image,onclick:function(){var t;t=e.selection.getNode(),r.uploadImage(t,e)}}),e.once("preinit",function(){e.wp&&e.wp._createToolbar&&(o=e.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_thepaste_upload","wp_img_edit","wp_img_remove"]))}),e.on("wptoolbar",function(t){var a;"IMG"!==t.element.nodeName||e.wp.isPlaceholder(t.element)||(t.toolbar=o,a=o.$el.find(".thepaste-upload").closest(".mce-btn"),n(t.element)?a.show():a.hide())}),e.on("BeforePastePreProcess",function(t){return t.content.match(/&lt;svg[\s\S.]*&lt;\/svg&gt;/i)&&(t.preventDefault(),t.content=""),t}).on("PastePostProcess",function(a){var o,i;r.options.editor.auto_upload&&(o=t(a.node).children().first(),o.is("img")&&n(o.get(0))&&(i=r.uploadImage(o.get(0),e),o.remove(),t(a.node).append(i)))})},tinymce.PluginManager.add("thepaste",the_pastePluginCallback)}(jQuery); 
    2 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS1wbHVnaW4uanMiXSwibmFtZXMiOlsiJCIsIlBhc3RlIiwiY3JlYXRlSGlkZGVuRWRpdGFibGUiLCJkYXRhVVJMdG9CbG9iIiwiaXNGb2N1c2FibGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJwYXN0ZSIsInBhc3RlQ29udGFpbmVyIiwicG0iLCJjb25zb2xlIiwibG9nIiwibW91bnROb25JbnB1dGFibGUiLCJfY29udGFpbmVyIiwiZm4iLCJwYXN0YWJsZU5vbklucHV0YWJsZSIsImVsIiwiaiIsImxlbiIsInJlZiIsInRoaXMiLCJsZW5ndGgiLCJfcGFzdGFibGUiLCJpcyIsInBhc3RhYmxlVGV4dGFyZWEiLCJtb3VudFRleHRhcmVhIiwicGFzdGFibGVDb250ZW50ZWRpdGFibGUiLCJtb3VudENvbnRlbnRlZGl0YWJsZSIsImRhdGFVUkwiLCJzbGljZVNpemUiLCJiNjREYXRhIiwiYnl0ZUFycmF5IiwiYnl0ZUFycmF5cyIsImJ5dGVDaGFyYWN0ZXJzIiwiYnl0ZU51bWJlcnMiLCJjb250ZW50VHlwZSIsImkiLCJtIiwib2Zmc2V0Iiwic2xpY2UiLCJtYXRjaCIsImF0b2IiLCJBcnJheSIsImNoYXJDb2RlQXQiLCJVaW50OEFycmF5IiwicHVzaCIsIkJsb2IiLCJ0eXBlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0ciIsImNzcyIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJlbGVtZW50IiwiaGFzVGFiaW5kZXgiLCJmaWVsZHNldCIsImZvY3VzYWJsZUlmVmlzaWJsZSIsImltZyIsIm1hcCIsIm1hcE5hbWUiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwicGFyZW50Tm9kZSIsIm5hbWUiLCJocmVmIiwidGVzdCIsImRpc2FibGVkIiwiY2xvc2VzdCIsIl90YXJnZXQiLCJhZGRDbGFzcyIsIm9uIiwiX3RoaXMiLCJldiIsImNsaXBib2FyZERhdGEiLCJmaWxlIiwiaXRlbSIsImsiLCJsZW4xIiwicmVhZGVyIiwicmVmMSIsInJlZjIiLCJyZWYzIiwidGV4dCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJwcmV2ZW50RGVmYXVsdCIsIl9wYXN0ZV9ldmVudF9maXJlZCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJldmVudCIsIl9oYW5kbGVJbWFnZSIsInJlc3VsdCIsInJlYWRBc0RhdGFVUkwiLCJnZXRBc0ZpbGUiLCJlcnJvciIsImdldEFzU3RyaW5nIiwic3RyaW5nIiwidHJpZ2dlciIsInByb3RvdHlwZSIsImluZGV4T2YiLCJjYWxsIiwidHlwZXMiLCJnZXREYXRhIiwic2V0VGltZW91dCIsIl9jaGVja0ltYWdlc0luQ29udGFpbmVyIiwic3JjIiwiZmlsZXMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJub25JbnB1dGFibGUiLCJhcHBlbmRUbyIsImZvY3VzIiwicmVtb3ZlQ2xhc3MiLCJ0ZXh0YXJlYSIsImN0bERvd24iLCJEYXRhVHJhbnNmZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXQiLCJpbnNlcnRCZWZvcmUiLCJrZXlDb2RlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJfdGV4dGFyZWFfZm9jdXNfc3RvbGVuIiwiZGF0YSIsImNvbnRlbnQiLCJjdXJFbmQiLCJjdXJTdGFydCIsInByb3AiLCJ2YWwiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRlbnRlZGl0YWJsZSIsImxvYWRlciIsIm1lc3NhZ2UiLCJJbWFnZSIsImNyb3NzT3JpZ2luIiwiYmxvYiIsImNhbnZhcyIsImN0eCIsImdldENvbnRleHQiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJvbmVycm9yIiwidXJsIiwiY2IiLCJ0aW1lc3BhbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImZpbmQiLCJyZW1vdmUiLCJ0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayIsImVkaXRvciIsImNhblVwbG9hZCIsInN1YiIsInN1YnN0cmluZyIsInBhc3RlQnRuIiwidG9vbGJhciIsInRoZXBhc3RlIiwid3AiLCJtZWRpYSIsIm9wdGlvbnMiLCJhdXRvX3VwbG9hZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhZGRDb21tYW5kIiwic2V0SXRlbSIsInRvU3RyaW5nIiwiYWN0aXZlIiwiYWRkQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJsMTBuIiwidXBsb2FkX3Bhc3RlZF9pbWFnZXMiLCJjbWQiLCJvblBvc3RSZW5kZXIiLCJ1cGxvYWRfaW1hZ2UiLCJvbmNsaWNrIiwiaW1hZ2UiLCJzZWxlY3Rpb24iLCJnZXROb2RlIiwidXBsb2FkSW1hZ2UiLCJvbmNlIiwiX2NyZWF0ZVRvb2xiYXIiLCJ1cGxvYWRCdG4iLCJpc1BsYWNlaG9sZGVyIiwiJGVsIiwic2hvdyIsImhpZGUiLCJlIiwiJGZpcnN0Q2hpbGQiLCIkdXBsb2FkQm94Iiwibm9kZSIsImNoaWxkcmVuIiwiZmlyc3QiLCJhcHBlbmQiLCJ0aW55bWNlIiwiUGx1Z2luTWFuYWdlciIsImFkZCJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJB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V0FDbEI5QixFQUFPTyxJQUFNUCxFQUFPTyxHQUFHd0IsaUJBQzNCMUIsRUFBVUwsRUFBT08sR0FBR3dCLGdCQUNuQixtQkFDQSxxQkFDQSxvQkFDQSxtQkFDQSx5QkFDQSxjQUNBLHFCQU1IL0IsRUFBT3BGLEdBQUksWUFBYSxTQUFVcUIsR0FDakMsR0FBSStGLEVBQzRCLFNBQTNCL0YsRUFBTXRDLFFBQVFPLFVBQXdCOEYsRUFBT08sR0FBRzBCLGNBQWVoRyxFQUFNdEMsV0FDekVzQyxFQUFNb0UsUUFBVUEsRUFDaEIyQixFQUFZM0IsRUFBUTZCLElBQUlyQyxLQUFLLG9CQUFvQnBGLFFBQVEsWUFFcER3RixFQUFXaEUsRUFBTXRDLFNBQ3JCcUksRUFBVUcsT0FFVkgsRUFBVUksVUFZYnBDLEVBQ0VwRixHQUFJLHdCQUF5QixTQUFTeUgsR0FNdEMsTUFKTUEsR0FBRWhFLFFBQVEzRixNQUFPLG1DQUN0QjJKLEVBQUUxRyxpQkFDRjBHLEVBQUVoRSxRQUFVLElBRU5nRSxJQUdQekgsR0FBSSxtQkFBb0IsU0FBU3lILEdBRWpDLEdBQUlDLEdBQWFDLENBRVpqQyxHQUFTRyxRQUFRVCxPQUFPVSxjQUM1QjRCLEVBQWNwTSxFQUFFbU0sRUFBRUcsTUFBTUMsV0FBV0MsUUFDOUJKLEVBQVk3SyxHQUFHLFFBQVV3SSxFQUFXcUMsRUFBWXhFLElBQUksTUFDeER5RSxFQUFhakMsRUFBU3VCLFlBQWFTLEVBQVl4RSxJQUFJLEdBQUlrQyxHQUN2RHNDLEVBQVl4QyxTQUNaNUosRUFBRW1NLEVBQUVHLE1BQU1HLE9BQVFKLFFBUXZCSyxRQUFRQyxjQUFjQyxJQUFLLFdBQVkvQywwQkFFcEN2SiIsImZpbGUiOiJ0aGUtcGFzdGUtcGx1Z2luLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG5cbi8qXG5wYXN0ZS5qcyBpcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBkYXRhICggdGV4dCAvIGltYWdlICkgZnJvbSBjbGlwYm9hcmQgaW4gZGlmZmVyZW50IGJyb3dzZXJzLiBJdCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgaGFja3MuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9sYXllcnNzc3MvcGFzdGUuanNcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gIHZhciAkLCBQYXN0ZSwgY3JlYXRlSGlkZGVuRWRpdGFibGUsIGRhdGFVUkx0b0Jsb2IsIGlzRm9jdXNhYmxlO1xuXG4gICQgPSB3aW5kb3cualF1ZXJ5O1xuXG4gICQucGFzdGUgPSBmdW5jdGlvbihwYXN0ZUNvbnRhaW5lcikge1xuICAgIHZhciBwbTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICQuZm4ucGFzdGFibGVOb25JbnB1dGFibGUoKSBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgcG0gPSBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShwYXN0ZUNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHBtLl9jb250YWluZXI7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygndGV4dGFyZWEsIGlucHV0OnRleHQsIFtjb250ZW50ZWRpdGFibGVdJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlVGV4dGFyZWEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QodGV4dGFyZWEsIGlucHV0OnRleHQpJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudFRleHRhcmVhKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QoW2NvbnRlbnRlZGl0YWJsZV0pJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudENvbnRlbnRlZGl0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBkYXRhVVJMdG9CbG9iID0gZnVuY3Rpb24oZGF0YVVSTCwgc2xpY2VTaXplKSB7XG4gICAgdmFyIGI2NERhdGEsIGJ5dGVBcnJheSwgYnl0ZUFycmF5cywgYnl0ZUNoYXJhY3RlcnMsIGJ5dGVOdW1iZXJzLCBjb250ZW50VHlwZSwgaSwgbSwgb2Zmc2V0LCByZWYsIHNsaWNlO1xuICAgIGlmIChzbGljZVNpemUgPT0gbnVsbCkge1xuICAgICAgc2xpY2VTaXplID0gNTEyO1xuICAgIH1cbiAgICBpZiAoIShtID0gZGF0YVVSTC5tYXRjaCgvXmRhdGFcXDooW15cXDtdKylcXDtiYXNlNjRcXCwoLispJC8pKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJlZiA9IG0sIG0gPSByZWZbMF0sIGNvbnRlbnRUeXBlID0gcmVmWzFdLCBiNjREYXRhID0gcmVmWzJdO1xuICAgIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICBieXRlQXJyYXlzID0gW107XG4gICAgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKSB7XG4gICAgICBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcbiAgICAgIGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgc2xpY2UubGVuZ3RoKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgICBvZmZzZXQgKz0gc2xpY2VTaXplO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge1xuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9KTtcbiAgfTtcblxuICBjcmVhdGVIaWRkZW5FZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpLmF0dHIoJ3RhYmluZGV4JywgLTEpLmNzcyh7XG4gICAgICB3aWR0aDogMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgIH0pO1xuICB9O1xuXG4gIGlzRm9jdXNhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgaGFzVGFiaW5kZXgpIHtcbiAgICB2YXIgZmllbGRzZXQsIGZvY3VzYWJsZUlmVmlzaWJsZSwgaW1nLCBtYXAsIG1hcE5hbWUsIG5vZGVOYW1lO1xuICAgIG1hcCA9IHZvaWQgMDtcbiAgICBtYXBOYW1lID0gdm9pZCAwO1xuICAgIGltZyA9IHZvaWQgMDtcbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSB2b2lkIDA7XG4gICAgZmllbGRzZXQgPSB2b2lkIDA7XG4gICAgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCdhcmVhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIG1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIG1hcE5hbWUgPSBtYXAubmFtZTtcbiAgICAgIGlmICghZWxlbWVudC5ocmVmIHx8ICFtYXBOYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnbWFwJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbWcgPSAkKCdpbWdbdXNlbWFwPVxcJyMnICsgbWFwTmFtZSArICdcXCddJyk7XG4gICAgICByZXR1cm4gaW1nLmxlbmd0aCA+IDAgJiYgaW1nLmlzKCc6dmlzaWJsZScpO1xuICAgIH1cbiAgICBpZiAoL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChub2RlTmFtZSkpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuICAgICAgaWYgKGZvY3VzYWJsZUlmVmlzaWJsZSkge1xuICAgICAgICBmaWVsZHNldCA9ICQoZWxlbWVudCkuY2xvc2VzdCgnZmllbGRzZXQnKVswXTtcbiAgICAgICAgaWYgKGZpZWxkc2V0KSB7XG4gICAgICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWZpZWxkc2V0LmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnYScgPT09IG5vZGVOYW1lKSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSBlbGVtZW50LmhyZWYgfHwgaGFzVGFiaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGhhc1RhYmluZGV4O1xuICAgIH1cbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSBmb2N1c2FibGVJZlZpc2libGUgfHwgJChlbGVtZW50KS5pcygnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICByZXR1cm4gZm9jdXNhYmxlSWZWaXNpYmxlICYmICQoZWxlbWVudCkuaXMoJzp2aXNpYmxlJyk7XG4gIH07XG5cbiAgUGFzdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgUGFzdGUucHJvdG90eXBlLl90YXJnZXQgPSBudWxsO1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jb250YWluZXIgPSBudWxsO1xuXG4gICAgUGFzdGUubW91bnROb25JbnB1dGFibGUgPSBmdW5jdGlvbihub25JbnB1dGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuYXBwZW5kVG8obm9uSW5wdXRhYmxlKSwgbm9uSW5wdXRhYmxlKTtcbiAgICAgICQobm9uSW5wdXRhYmxlKS5vbignY2xpY2snLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZShldi50YXJnZXQsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICBwYXN0ZS5fY29udGFpbmVyLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQobm9uSW5wdXRhYmxlKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHJldHVybiBwYXN0ZS5fY29udGFpbmVyLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBQYXN0ZS5tb3VudFRleHRhcmVhID0gZnVuY3Rpb24odGV4dGFyZWEpIHtcbiAgICAgIHZhciBjdGxEb3duLCBwYXN0ZSwgcmVmLCByZWYxO1xuICAgICAgaWYgKCh0eXBlb2YgRGF0YVRyYW5zZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIERhdGFUcmFuc2ZlciAhPT0gbnVsbCA/IERhdGFUcmFuc2Zlci5wcm90b3R5cGUgOiB2b2lkIDApICYmICgocmVmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNhbGwoT2JqZWN0LCBEYXRhVHJhbnNmZXIucHJvdG90eXBlLCAnaXRlbXMnKSkgIT0gbnVsbCA/IHJlZjEuZ2V0IDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VudENvbnRlbnRlZGl0YWJsZSh0ZXh0YXJlYSk7XG4gICAgICB9XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmluc2VydEJlZm9yZSh0ZXh0YXJlYSksIHRleHRhcmVhKTtcbiAgICAgIGN0bERvd24gPSBmYWxzZTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAkKHRleHRhcmVhKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChldi5jdHJsS2V5ICE9IG51bGwpICYmIChldi5tZXRhS2V5ICE9IG51bGwpKSB7XG4gICAgICAgICAgY3RsRG93biA9IGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RsRG93biAmJiBldi5rZXlDb2RlID09PSA4Nikge1xuICAgICAgICAgIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSB0cnVlO1xuICAgICAgICAgIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICBwYXN0ZS5fcGFzdGVfZXZlbnRfZmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoIXBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCkge1xuICAgICAgICAgICAgICAgICQodGV4dGFyZWEpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdwYXN0ZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbikge1xuICAgICAgICAgICAgcmV0dXJuICQodGV4dGFyZWEpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQocGFzdGUuX3RhcmdldCkub24oJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQocGFzdGUuX3RhcmdldCkub24oJ3Bhc3RlVGV4dCcsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCwgY3VyRW5kLCBjdXJTdGFydDtcbiAgICAgICAgICBjdXJTdGFydCA9ICQodGV4dGFyZWEpLnByb3AoJ3NlbGVjdGlvblN0YXJ0Jyk7XG4gICAgICAgICAgY3VyRW5kID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uRW5kJyk7XG4gICAgICAgICAgY29udGVudCA9ICQodGV4dGFyZWEpLnZhbCgpO1xuICAgICAgICAgICQodGV4dGFyZWEpLnZhbChcIlwiICsgY29udGVudC5zbGljZSgwLCBjdXJTdGFydCkgKyBkYXRhLnRleHQgKyBjb250ZW50LnNsaWNlKGN1ckVuZCkpO1xuICAgICAgICAgICQodGV4dGFyZWEpWzBdLnNldFNlbGVjdGlvblJhbmdlKGN1clN0YXJ0ICsgZGF0YS50ZXh0Lmxlbmd0aCwgY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlID0gZnVuY3Rpb24oY29udGVudGVkaXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjb250ZW50ZWRpdGFibGUsIGNvbnRlbnRlZGl0YWJsZSk7XG4gICAgICAkKGNvbnRlbnRlZGl0YWJsZSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5yZW1vdmVDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUGFzdGUoX2NvbnRhaW5lciwgX3RhcmdldCkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gX2NvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSAkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl90YXJnZXQgPSAkKHRoaXMuX3RhcmdldCkuYWRkQ2xhc3MoJ3Bhc3RhYmxlJyk7XG4gICAgICB0aGlzLl9jb250YWluZXIub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIHZhciBjbGlwYm9hcmREYXRhLCBmaWxlLCBpdGVtLCBqLCBrLCBsZW4sIGxlbjEsIHJlYWRlciwgcmVmLCByZWYxLCByZWYyLCByZWYzLCB0ZXh0O1xuICAgICAgICAgIGlmIChldi5jdXJyZW50VGFyZ2V0ICE9PSBldi50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5fcGFzdGVfZXZlbnRfZmlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICgoKHJlZiA9IGV2Lm9yaWdpbmFsRXZlbnQpICE9IG51bGwgPyByZWYuY2xpcGJvYXJkRGF0YSA6IHZvaWQgMCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IGV2Lm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgIHJlZjEgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHJlZjFbal07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpdGVtLmdldEFzRmlsZSgpKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgtMSAhPT0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjbGlwYm9hcmREYXRhLnR5cGVzLCAndGV4dC9wbGFpbicpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlSW1hZ2Uoc3JjKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgIGlmICgocmVmMiA9ICh0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0JykpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdfcGFzdGVDaGVja0NvbnRhaW5lckRvbmUnKTtcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWYzID0gY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHJlZjNba107XG4gICAgICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUltYWdlKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2hhbmRsZUltYWdlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgICB2YXIgbG9hZGVyO1xuICAgICAgaWYgKHNyYy5tYXRjaCgvXndlYmtpdFxcLWZha2VcXC11cmxcXDpcXC9cXC8vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBhcmUgdHJ5aW5nIHRvIHBhc3RlIGFuIGltYWdlIGluIFNhZmFyaSwgaG93ZXZlciB3ZSBhcmUgdW5hYmxlIHRvIHJldGlldmUgaXRzIGRhdGEuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZVN0YXJ0Jyk7XG4gICAgICBsb2FkZXIgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGxvYWRlci5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICBsb2FkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYmxvYiwgY2FudmFzLCBjdHgsIGRhdGFVUkw7XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gbG9hZGVyLndpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBsb2FkZXIuaGVpZ2h0O1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobG9hZGVyLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgIGRhdGFVUkwgPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgICBibG9iID0gZGF0YVVSTHRvQmxvYihkYXRhVVJMKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICBpZiAoZGF0YVVSTCkge1xuICAgICAgICAgICAgX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlJywge1xuICAgICAgICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICAgICAgICBkYXRhVVJMOiBkYXRhVVJMLFxuICAgICAgICAgICAgICB3aWR0aDogbG9hZGVyLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGxvYWRlci5oZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGxvYWRlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGdldCBpbWFnZSBmcm9tOiBcIiArIHNyYyxcbiAgICAgICAgICAgIHVybDogc3JjXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVuZCcpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gbG9hZGVyLnNyYyA9IHNyYztcbiAgICB9O1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jaGVja0ltYWdlc0luQ29udGFpbmVyID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBpbWcsIGosIGxlbiwgcmVmLCB0aW1lc3BhbjtcbiAgICAgIHRpbWVzcGFuID0gTWF0aC5mbG9vcigxMDAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICByZWYgPSB0aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgaW1nID0gcmVmW2pdO1xuICAgICAgICBpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGssIGxlbjEsIHJlZjE7XG4gICAgICAgICAgcmVmMSA9IF90aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICBpbWcgPSByZWYxW2tdO1xuICAgICAgICAgICAgaWYgKCFpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dKSB7XG4gICAgICAgICAgICAgIGNiKGltZy5zcmMpO1xuICAgICAgICAgICAgICAkKGltZykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFzdGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxudmFyIHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrO1xuXG4oZnVuY3Rpb24oJCl7XG5cdHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrID0gZnVuY3Rpb24oIGVkaXRvciApIHtcblx0XHR2YXIgcGFzdGVCdG4sXG5cdFx0XHRvcmlnRG9tQWRkLFxuXHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2UgPSBmYWxzZSxcblx0XHRcdGN1cnJlbnRDbGlwYm9hcmRFdmVudCA9IG51bGwsXG5cdFx0XHRwcmV2ZW50SW1hZ2VQYXN0ZSA9IGZhbHNlLFxuXHRcdFx0dGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRcdHRvb2xiYXIsXG5cdFx0XHRwYXN0ZWRfaW1hZ2VfdG1wX3ByZWZpeCA9ICdfX3Bhc3RlZF9pbWFnZV90bXBfJyxcblx0XHRcdHBhc3RlZF9pbWFnZV90bXBfY2xhc3MgPSAnJztcblxuXHRcdC8vIGRlZmF1bHQgb25cblx0XHR0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCAndGhlcGFzdGUuYXV0b191cGxvYWQnICkgIT09ICdmYWxzZSc7XG5cblx0XHQvLyBlbmFibGUgLyBkaXNhYmxlIGF1dG91cGxvYWRcblx0XHRlZGl0b3IuYWRkQ29tbWFuZCggJ2NtZF90aGVwYXN0ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgPSAhIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd0aGVwYXN0ZS5hdXRvX3VwbG9hZCcsIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkLnRvU3RyaW5nKCkgKTtcblx0XHRcdHBhc3RlQnRuLmFjdGl2ZSggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKTtcblxuXHRcdH0pO1xuXG5cdFx0Ly8gZW5hYmxlIC8gZGlzYWJsZSBhdXRvdXBsb2FkIGJ1dHRvblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3RoZXBhc3RlJywge1xuXHRcdFx0aWNvbjogJ3RoZXBhc3RlJyxcblx0XHRcdHRvb2x0aXA6IHRoZXBhc3RlLmwxMG4udXBsb2FkX3Bhc3RlZF9pbWFnZXMsXG5cdFx0XHRjbWQgOiAnY21kX3RoZXBhc3RlJyxcblx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHBhc3RlQnRuID0gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRhY3RpdmU6dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWRcblx0XHR9KTtcblxuXHRcdC8vIHVwbG9hZCBidXR0b24gaW4gbWVkaWEgdG9vbGJhciBmbHlvdXRcblx0XHRlZGl0b3IuYWRkQnV0dG9uKCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJywge1xuXHRcdFx0aWNvbjogJ2Rhc2hpY29uIGRhc2hpY29ucyBkYXNoaWNvbnMtdXBsb2FkIHRoZXBhc3RlLXVwbG9hZCcsXG5cdFx0XHR0b29sdGlwOiB0aGVwYXN0ZS5sMTBuLnVwbG9hZF9pbWFnZSxcblx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyB3cmFwIGltZywgdXBsb2FkXG5cdFx0XHRcdHZhciBpbWFnZTtcblx0XHRcdFx0aW1hZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcblxuXHRcdFx0XHR0aGVwYXN0ZS51cGxvYWRJbWFnZSggaW1hZ2UsIGVkaXRvciApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gaW5pdCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvci5vbmNlKCAncHJlaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBlZGl0b3Iud3AgJiYgZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyICkge1xuXHRcdFx0XHR0b29sYmFyID0gZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyKCBbXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbmxlZnQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25jZW50ZXInLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25yaWdodCcsXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbm5vbmUnLFxuXHRcdFx0XHRcdCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJyxcblx0XHRcdFx0XHQnd3BfaW1nX2VkaXQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfcmVtb3ZlJyxcblx0XHRcdFx0XSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0IG9uIG5vZGUgY2hhbmdlXG5cdFx0ZWRpdG9yLm9uKCAnd3B0b29sYmFyJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHVwbG9hZEJ0bjtcblx0XHRcdGlmICggZXZlbnQuZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0lNRycgJiYgISBlZGl0b3Iud3AuaXNQbGFjZWhvbGRlciggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRldmVudC50b29sYmFyID0gdG9vbGJhcjtcblx0XHRcdFx0dXBsb2FkQnRuID0gdG9vbGJhci4kZWwuZmluZCgnLnRoZXBhc3RlLXVwbG9hZCcpLmNsb3Nlc3QoJy5tY2UtYnRuJyk7XG5cblx0XHRcdFx0aWYgKCBjYW5VcGxvYWQoIGV2ZW50LmVsZW1lbnQgKSApIHtcblx0XHRcdFx0XHR1cGxvYWRCdG4uc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVwbG9hZEJ0bi5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyB0cnUgaWYgZGF0YSBzb3VyY2Ugb3IgYmxvYiBpbWFnZVxuXHRcdGZ1bmN0aW9uIGNhblVwbG9hZCggaW1nICkge1xuXHRcdFx0dmFyIHN1YiA9IGltZy5zcmMuc3Vic3RyaW5nKDAsNSk7XG5cdFx0XHRyZXR1cm4gc3ViID09PSAnYmxvYjonIHx8IHN1YiA9PT0gJ2RhdGE6Jztcblx0XHR9XG5cblx0XHQvLyBzZXR1cCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvclxuXHRcdFx0Lm9uKCAnQmVmb3JlUGFzdGVQcmVQcm9jZXNzJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdC8vIHJlbW92ZSBzdmcgZGF0YVxuXHRcdFx0XHRpZiAoICBlLmNvbnRlbnQubWF0Y2goIC8mbHQ7c3ZnW1xcc1xcUy5dKiZsdDtcXC9zdmcmZ3Q7L2kgKSApIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0ZS5jb250ZW50ID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGU7XG5cblx0XHRcdH0gKVxuXHRcdFx0Lm9uKCAnUGFzdGVQb3N0UHJvY2VzcycsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHQvLyB1cGxvYWQgaW1hZ2Vcblx0XHRcdFx0dmFyICRmaXJzdENoaWxkLCAkdXBsb2FkQm94O1xuXG5cdFx0XHRcdGlmICggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKSB7XG5cdFx0XHRcdFx0JGZpcnN0Q2hpbGQgPSAkKGUubm9kZSkuY2hpbGRyZW4oKS5maXJzdCgpO1xuXHRcdFx0XHRcdGlmICggJGZpcnN0Q2hpbGQuaXMoJ2ltZycpICYmIGNhblVwbG9hZCggJGZpcnN0Q2hpbGQuZ2V0KDApICkgKSB7XG5cdFx0XHRcdFx0XHQkdXBsb2FkQm94ID0gdGhlcGFzdGUudXBsb2FkSW1hZ2UoICRmaXJzdENoaWxkLmdldCgwKSwgZWRpdG9yICk7XG5cdFx0XHRcdFx0XHQkZmlyc3RDaGlsZC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdCQoZS5ub2RlKS5hcHBlbmQoICR1cGxvYWRCb3ggKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQ7XG5cblx0fTtcblxuXHR0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCAndGhlcGFzdGUnLCB0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayApO1xuXG59ICkoalF1ZXJ5KTtcbiJdfQ== 
     1(function(){var t,e,n,a,o;t=window.jQuery,t.paste=function(t){var n;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),n=e.mountNonInputable(t),n._container},t.fn.pastableNonInputable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is("textarea, input:text, [contenteditable]")||(e.mountNonInputable(n),n._pastable=!0);return this},t.fn.pastableTextarea=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not(textarea, input:text)")||(e.mountTextarea(n),n._pastable=!0);return this},t.fn.pastableContenteditable=function(){var n,a,o,r;for(r=this,a=0,o=r.length;a<o;a++)n=r[a],n._pastable||t(n).is(":not([contenteditable])")||(e.mountContenteditable(n),n._pastable=!0);return this},a=function(t,e){var n,a,o,r,i,u,s,l,c,p,d;if(null==e&&(e=512),!(l=t.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(p=l,l=p[0],u=p[1],n=p[2],r=atob(n),o=[],c=0;c<r.length;){for(d=r.slice(c,c+e),i=new Array(d.length),s=0;s<d.length;)i[s]=d.charCodeAt(s),s++;a=new Uint8Array(i),o.push(a),c+=e}return new Blob(o,{type:u})},n=function(){return t(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},o=function(e,n){var a,o,r,i,u,s;return i=void 0,u=void 0,r=void 0,o=void 0,a=void 0,"area"===(s=e.nodeName.toLowerCase())?(i=e.parentNode,u=i.name,!(!e.href||!u||"map"!==i.nodeName.toLowerCase())&&(r=t("img[usemap='#"+u+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(s)?(o=!e.disabled)&&(a=t(e).closest("fieldset")[0])&&(o=!a.disabled):o="a"===s?e.href||n:n,(o=o||t(e).is("[contenteditable]"))&&t(e).is(":visible"))},e=function(){function e(e,n){this._container=e,this._target=n,this._container=t(this._container),this._target=t(this._target).addClass("pastable"),this._container.on("paste",function(t){return function(e){var n,a,o,r,i,u,s,l,c,p,d,g,f;if(e.currentTarget!==e.target)return e.preventDefault();if(t._paste_event_fired=!0,null!=(null!=(c=e.originalEvent)?c.clipboardData:void 0))if(n=e.originalEvent.clipboardData,n.items)for(p=n.items,r=0,u=p.length;r<u;r++){if(o=p[r],o.type.match(/^image\//)){l=new FileReader,l.onload=function(e){return t._handleImage(e.target.result)};try{l.readAsDataURL(o.getAsFile())}catch(t){}e.preventDefault();break}"text/plain"===o.type&&o.getAsString(function(e){return t._target.trigger("pasteText",{text:e})})}else-1!==Array.prototype.indexOf.call(n.types,"text/plain")&&(f=n.getData("Text"),setTimeout(function(){return t._target.trigger("pasteText",{text:f})},1)),t._checkImagesInContainer(function(e){return t._handleImage(e)});if(n=window.clipboardData)if(null!=(d=f=n.getData("Text"))?d.length:void 0)setTimeout(function(){return t._target.trigger("pasteText",{text:f}),t._target.trigger("_pasteCheckContainerDone")},1);else{for(g=n.files,i=0,s=g.length;i<s;i++)a=g[i],t._handleImage(URL.createObjectURL(a));t._checkImagesInContainer(function(t){})}return null}}(this))}return e.prototype._target=null,e.prototype._container=null,e.mountNonInputable=function(a){var r;return r=new e(n().appendTo(a),a),t(a).on("click",function(t){return function(t){if(!o(t.target,!1))return r._container.focus()}}()),r._container.on("focus",function(e){return function(){return t(a).addClass("pastable-focus")}}()),r._container.on("blur",function(e){return function(){return t(a).removeClass("pastable-focus")}}())},e.mountTextarea=function(a){var o,r,i,u;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(i=Object.getOwnPropertyDescriptor)&&null!=(u=i.call(Object,DataTransfer.prototype,"items"))?u.get:void 0)?this.mountContenteditable(a):(r=new e(n().insertBefore(a),a),o=!1,t(a).on("keyup",function(t){var e;return 17!==(e=t.keyCode)&&224!==e||(o=!1),null}),t(a).on("keydown",function(e){var n;return 17!==(n=e.keyCode)&&224!==n||(o=!0),null!=e.ctrlKey&&null!=e.metaKey&&(o=e.ctrlKey||e.metaKey),o&&86===e.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(e){return function(){if(!r._paste_event_fired)return t(a).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),t(a).on("paste",function(t){return function(){}}()),t(a).on("focus",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).addClass("pastable-focus")}}()),t(a).on("blur",function(e){return function(){if(!r._textarea_focus_stolen)return t(a).removeClass("pastable-focus")}}()),t(r._target).on("_pasteCheckContainerDone",function(e){return function(){return t(a).focus(),r._textarea_focus_stolen=!1}}()),t(r._target).on("pasteText",function(e){return function(e,n){var o,r,i;return i=t(a).prop("selectionStart"),r=t(a).prop("selectionEnd"),o=t(a).val(),t(a).val(""+o.slice(0,i)+n.text+o.slice(r)),t(a)[0].setSelectionRange(i+n.text.length,i+n.text.length),t(a).trigger("change")}}()))},e.mountContenteditable=function(n){return new e(n,n),t(n).on("focus",function(e){return function(){return t(n).addClass("pastable-focus")}}()),t(n).on("blur",function(e){return function(){return t(n).removeClass("pastable-focus")}}())},e.prototype._handleImage=function(t){var e;return t.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),e=new Image,e.crossOrigin="anonymous",e.onload=function(t){return function(){var n,o,r,i;o=document.createElement("canvas"),o.width=e.width,o.height=e.height,r=o.getContext("2d"),r.drawImage(e,0,0,o.width,o.height),i=null;try{i=o.toDataURL("image/png"),n=a(i)}catch(t){}return i&&t._target.trigger("pasteImage",{blob:n,dataURL:i,width:e.width,height:e.height}),t._target.trigger("pasteImageEnd")}}(this),e.onerror=function(e){return function(){return e._target.trigger("pasteImageError",{message:"Failed to get image from: "+t,url:t}),e._target.trigger("pasteImageEnd")}}(this),e.src=t)},e.prototype._checkImagesInContainer=function(e){var n,a,o,r,i;for(i=Math.floor(1e3*Math.random()),r=this._container.find("img"),a=0,o=r.length;a<o;a++)n=r[a],n["_paste_marked_"+i]=!0;return setTimeout(function(a){return function(){var o,r,u;for(u=a._container.find("img"),o=0,r=u.length;o<r;o++)n=u[o],n["_paste_marked_"+i]||(e(n.src),t(n).remove());return a._target.trigger("_pasteCheckContainerDone")}}(this),1)},e}()}).call(this);var the_pastePluginCallback;!function(t){the_pastePluginCallback=function(e){function n(t){var e=t.src.substring(0,5);return"blob:"===e||"data:"===e}var a,o,r=wp.media.thepaste;r.options.editor.auto_upload="false"!==localStorage.getItem("thepaste.auto_upload"),e.addCommand("cmd_thepaste",function(){r.options.editor.auto_upload=!r.options.editor.auto_upload,localStorage.setItem("thepaste.auto_upload",r.options.editor.auto_upload.toString()),a.active(r.options.editor.auto_upload)}),e.addButton("thepaste",{icon:"thepaste",tooltip:r.l10n.upload_pasted_images,cmd:"cmd_thepaste",onPostRender:function(){a=this},active:r.options.editor.auto_upload}),e.addButton("wp_img_thepaste_upload",{icon:"dashicon dashicons dashicons-upload thepaste-upload",tooltip:r.l10n.upload_image,onclick:function(){var t;t=e.selection.getNode(),r.uploadImage(t,e)}}),e.once("preinit",function(){e.wp&&e.wp._createToolbar&&(o=e.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_thepaste_upload","wp_img_edit","wp_img_remove"]))}),e.on("wptoolbar",function(t){var a;"IMG"!==t.element.nodeName||e.wp.isPlaceholder(t.element)||(t.toolbar=o,a=o.$el.find(".thepaste-upload").closest(".mce-btn"),n(t.element)?a.show():a.hide())}),e.on("BeforePastePreProcess",function(t){return t.content.match(/&lt;svg[\s\S.]*&lt;\/svg&gt;/i)&&(t.preventDefault(),t.content=""),t}).on("PastePostProcess",function(a){var o,i;r.options.editor.auto_upload&&(o=t(a.node).children().first(),o.is("img")&&n(o.get(0))&&(i=r.uploadImage(o.get(0),e),o.remove(),t(a.node).append(i)))})},tinymce.PluginManager.add("the_paste",the_pastePluginCallback)}(jQuery); 
     2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS1wbHVnaW4uanMiXSwibmFtZXMiOlsiJCIsIlBhc3RlIiwiY3JlYXRlSGlkZGVuRWRpdGFibGUiLCJkYXRhVVJMdG9CbG9iIiwiaXNGb2N1c2FibGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJwYXN0ZSIsInBhc3RlQ29udGFpbmVyIiwicG0iLCJjb25zb2xlIiwibG9nIiwibW91bnROb25JbnB1dGFibGUiLCJfY29udGFpbmVyIiwiZm4iLCJwYXN0YWJsZU5vbklucHV0YWJsZSIsImVsIiwiaiIsImxlbiIsInJlZiIsInRoaXMiLCJsZW5ndGgiLCJfcGFzdGFibGUiLCJpcyIsInBhc3RhYmxlVGV4dGFyZWEiLCJtb3VudFRleHRhcmVhIiwicGFzdGFibGVDb250ZW50ZWRpdGFibGUiLCJtb3VudENvbnRlbnRlZGl0YWJsZSIsImRhdGFVUkwiLCJzbGljZVNpemUiLCJiNjREYXRhIiwiYnl0ZUFycmF5IiwiYnl0ZUFycmF5cyIsImJ5dGVDaGFyYWN0ZXJzIiwiYnl0ZU51bWJlcnMiLCJjb250ZW50VHlwZSIsImkiLCJtIiwib2Zmc2V0Iiwic2xpY2UiLCJtYXRjaCIsImF0b2IiLCJBcnJheSIsImNoYXJDb2RlQXQiLCJVaW50OEFycmF5IiwicHVzaCIsIkJsb2IiLCJ0eXBlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0ciIsImNzcyIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJsZWZ0Iiwib3ZlcmZsb3ciLCJlbGVtZW50IiwiaGFzVGFiaW5kZXgiLCJmaWVsZHNldCIsImZvY3VzYWJsZUlmVmlzaWJsZSIsImltZyIsIm1hcCIsIm1hcE5hbWUiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwicGFyZW50Tm9kZSIsIm5hbWUiLCJocmVmIiwidGVzdCIsImRpc2FibGVkIiwiY2xvc2VzdCIsIl90YXJnZXQiLCJhZGRDbGFzcyIsIm9uIiwiX3RoaXMiLCJldiIsImNsaXBib2FyZERhdGEiLCJmaWxlIiwiaXRlbSIsImsiLCJsZW4xIiwicmVhZGVyIiwicmVmMSIsInJlZjIiLCJyZWYzIiwidGV4dCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJwcmV2ZW50RGVmYXVsdCIsIl9wYXN0ZV9ldmVudF9maXJlZCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJldmVudCIsIl9oYW5kbGVJbWFnZSIsInJlc3VsdCIsInJlYWRBc0RhdGFVUkwiLCJnZXRBc0ZpbGUiLCJlcnJvciIsImdldEFzU3RyaW5nIiwic3RyaW5nIiwidHJpZ2dlciIsInByb3RvdHlwZSIsImluZGV4T2YiLCJjYWxsIiwidHlwZXMiLCJnZXREYXRhIiwic2V0VGltZW91dCIsIl9jaGVja0ltYWdlc0luQ29udGFpbmVyIiwic3JjIiwiZmlsZXMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJub25JbnB1dGFibGUiLCJhcHBlbmRUbyIsImZvY3VzIiwicmVtb3ZlQ2xhc3MiLCJ0ZXh0YXJlYSIsImN0bERvd24iLCJEYXRhVHJhbnNmZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXQiLCJpbnNlcnRCZWZvcmUiLCJrZXlDb2RlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJfdGV4dGFyZWFfZm9jdXNfc3RvbGVuIiwiZGF0YSIsImNvbnRlbnQiLCJjdXJFbmQiLCJjdXJTdGFydCIsInByb3AiLCJ2YWwiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImNvbnRlbnRlZGl0YWJsZSIsImxvYWRlciIsIm1lc3NhZ2UiLCJJbWFnZSIsImNyb3NzT3JpZ2luIiwiYmxvYiIsImNhbnZhcyIsImN0eCIsImdldENvbnRleHQiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJvbmVycm9yIiwidXJsIiwiY2IiLCJ0aW1lc3BhbiIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImZpbmQiLCJyZW1vdmUiLCJ0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayIsImVkaXRvciIsImNhblVwbG9hZCIsInN1YiIsInN1YnN0cmluZyIsInBhc3RlQnRuIiwidG9vbGJhciIsInRoZXBhc3RlIiwid3AiLCJtZWRpYSIsIm9wdGlvbnMiLCJhdXRvX3VwbG9hZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhZGRDb21tYW5kIiwic2V0SXRlbSIsInRvU3RyaW5nIiwiYWN0aXZlIiwiYWRkQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJsMTBuIiwidXBsb2FkX3Bhc3RlZF9pbWFnZXMiLCJjbWQiLCJvblBvc3RSZW5kZXIiLCJ1cGxvYWRfaW1hZ2UiLCJvbmNsaWNrIiwiaW1hZ2UiLCJzZWxlY3Rpb24iLCJnZXROb2RlIiwidXBsb2FkSW1hZ2UiLCJvbmNlIiwiX2NyZWF0ZVRvb2xiYXIiLCJ1cGxvYWRCdG4iLCJpc1BsYWNlaG9sZGVyIiwiJGVsIiwic2hvdyIsImhpZGUiLCJlIiwiJGZpcnN0Q2hpbGQiLCIkdXBsb2FkQm94Iiwibm9kZSIsImNoaWxkcmVuIiwiZmlyc3QiLCJhcHBlbmQiLCJ0aW55bWNlIiwiUGx1Z2luTWFuYWdlciIsImFkZCJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJB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V0FDbEI5QixFQUFPTyxJQUFNUCxFQUFPTyxHQUFHd0IsaUJBQzNCMUIsRUFBVUwsRUFBT08sR0FBR3dCLGdCQUNuQixtQkFDQSxxQkFDQSxvQkFDQSxtQkFDQSx5QkFDQSxjQUNBLHFCQU1IL0IsRUFBT3BGLEdBQUksWUFBYSxTQUFVcUIsR0FDakMsR0FBSStGLEVBQzRCLFNBQTNCL0YsRUFBTXRDLFFBQVFPLFVBQXdCOEYsRUFBT08sR0FBRzBCLGNBQWVoRyxFQUFNdEMsV0FDekVzQyxFQUFNb0UsUUFBVUEsRUFFaEIyQixFQUFZM0IsRUFBUTZCLElBQUlyQyxLQUFLLG9CQUFvQnBGLFFBQVEsWUFFcER3RixFQUFXaEUsRUFBTXRDLFNBQ3JCcUksRUFBVUcsT0FFVkgsRUFBVUksVUFZYnBDLEVBQ0VwRixHQUFJLHdCQUF5QixTQUFTeUgsR0FNdEMsTUFKTUEsR0FBRWhFLFFBQVEzRixNQUFPLG1DQUN0QjJKLEVBQUUxRyxpQkFDRjBHLEVBQUVoRSxRQUFVLElBRU5nRSxJQUdQekgsR0FBSSxtQkFBb0IsU0FBU3lILEdBRWpDLEdBQUlDLEdBQWFDLENBRVpqQyxHQUFTRyxRQUFRVCxPQUFPVSxjQUM1QjRCLEVBQWNwTSxFQUFFbU0sRUFBRUcsTUFBTUMsV0FBV0MsUUFDOUJKLEVBQVk3SyxHQUFHLFFBQVV3SSxFQUFXcUMsRUFBWXhFLElBQUksTUFDeER5RSxFQUFhakMsRUFBU3VCLFlBQWFTLEVBQVl4RSxJQUFJLEdBQUlrQyxHQUN2RHNDLEVBQVl4QyxTQUNaNUosRUFBRW1NLEVBQUVHLE1BQU1HLE9BQVFKLFFBUXZCSyxRQUFRQyxjQUFjQyxJQUFLLFlBQWEvQywwQkFFckN2SiIsImZpbGUiOiJ0aGUtcGFzdGUtcGx1Z2luLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG5cbi8qXG5wYXN0ZS5qcyBpcyBhbiBpbnRlcmZhY2UgdG8gcmVhZCBkYXRhICggdGV4dCAvIGltYWdlICkgZnJvbSBjbGlwYm9hcmQgaW4gZGlmZmVyZW50IGJyb3dzZXJzLiBJdCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgaGFja3MuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9sYXllcnNzc3MvcGFzdGUuanNcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gIHZhciAkLCBQYXN0ZSwgY3JlYXRlSGlkZGVuRWRpdGFibGUsIGRhdGFVUkx0b0Jsb2IsIGlzRm9jdXNhYmxlO1xuXG4gICQgPSB3aW5kb3cualF1ZXJ5O1xuXG4gICQucGFzdGUgPSBmdW5jdGlvbihwYXN0ZUNvbnRhaW5lcikge1xuICAgIHZhciBwbTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZSAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICQuZm4ucGFzdGFibGVOb25JbnB1dGFibGUoKSBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgcG0gPSBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShwYXN0ZUNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHBtLl9jb250YWluZXI7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygndGV4dGFyZWEsIGlucHV0OnRleHQsIFtjb250ZW50ZWRpdGFibGVdJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlVGV4dGFyZWEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QodGV4dGFyZWEsIGlucHV0OnRleHQpJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudFRleHRhcmVhKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWwsIGosIGxlbiwgcmVmO1xuICAgIHJlZiA9IHRoaXM7XG4gICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBlbCA9IHJlZltqXTtcbiAgICAgIGlmIChlbC5fcGFzdGFibGUgfHwgJChlbCkuaXMoJzpub3QoW2NvbnRlbnRlZGl0YWJsZV0pJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBQYXN0ZS5tb3VudENvbnRlbnRlZGl0YWJsZShlbCk7XG4gICAgICBlbC5fcGFzdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBkYXRhVVJMdG9CbG9iID0gZnVuY3Rpb24oZGF0YVVSTCwgc2xpY2VTaXplKSB7XG4gICAgdmFyIGI2NERhdGEsIGJ5dGVBcnJheSwgYnl0ZUFycmF5cywgYnl0ZUNoYXJhY3RlcnMsIGJ5dGVOdW1iZXJzLCBjb250ZW50VHlwZSwgaSwgbSwgb2Zmc2V0LCByZWYsIHNsaWNlO1xuICAgIGlmIChzbGljZVNpemUgPT0gbnVsbCkge1xuICAgICAgc2xpY2VTaXplID0gNTEyO1xuICAgIH1cbiAgICBpZiAoIShtID0gZGF0YVVSTC5tYXRjaCgvXmRhdGFcXDooW15cXDtdKylcXDtiYXNlNjRcXCwoLispJC8pKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJlZiA9IG0sIG0gPSByZWZbMF0sIGNvbnRlbnRUeXBlID0gcmVmWzFdLCBiNjREYXRhID0gcmVmWzJdO1xuICAgIGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICBieXRlQXJyYXlzID0gW107XG4gICAgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKSB7XG4gICAgICBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcbiAgICAgIGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBpID0gMDtcbiAgICAgIHdoaWxlIChpIDwgc2xpY2UubGVuZ3RoKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgICBvZmZzZXQgKz0gc2xpY2VTaXplO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge1xuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9KTtcbiAgfTtcblxuICBjcmVhdGVIaWRkZW5FZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpLmF0dHIoJ3RhYmluZGV4JywgLTEpLmNzcyh7XG4gICAgICB3aWR0aDogMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgIH0pO1xuICB9O1xuXG4gIGlzRm9jdXNhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgaGFzVGFiaW5kZXgpIHtcbiAgICB2YXIgZmllbGRzZXQsIGZvY3VzYWJsZUlmVmlzaWJsZSwgaW1nLCBtYXAsIG1hcE5hbWUsIG5vZGVOYW1lO1xuICAgIG1hcCA9IHZvaWQgMDtcbiAgICBtYXBOYW1lID0gdm9pZCAwO1xuICAgIGltZyA9IHZvaWQgMDtcbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSB2b2lkIDA7XG4gICAgZmllbGRzZXQgPSB2b2lkIDA7XG4gICAgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCdhcmVhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIG1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIG1hcE5hbWUgPSBtYXAubmFtZTtcbiAgICAgIGlmICghZWxlbWVudC5ocmVmIHx8ICFtYXBOYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnbWFwJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbWcgPSAkKCdpbWdbdXNlbWFwPVxcJyMnICsgbWFwTmFtZSArICdcXCddJyk7XG4gICAgICByZXR1cm4gaW1nLmxlbmd0aCA+IDAgJiYgaW1nLmlzKCc6dmlzaWJsZScpO1xuICAgIH1cbiAgICBpZiAoL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChub2RlTmFtZSkpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuICAgICAgaWYgKGZvY3VzYWJsZUlmVmlzaWJsZSkge1xuICAgICAgICBmaWVsZHNldCA9ICQoZWxlbWVudCkuY2xvc2VzdCgnZmllbGRzZXQnKVswXTtcbiAgICAgICAgaWYgKGZpZWxkc2V0KSB7XG4gICAgICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWZpZWxkc2V0LmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgnYScgPT09IG5vZGVOYW1lKSB7XG4gICAgICBmb2N1c2FibGVJZlZpc2libGUgPSBlbGVtZW50LmhyZWYgfHwgaGFzVGFiaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGhhc1RhYmluZGV4O1xuICAgIH1cbiAgICBmb2N1c2FibGVJZlZpc2libGUgPSBmb2N1c2FibGVJZlZpc2libGUgfHwgJChlbGVtZW50KS5pcygnW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICByZXR1cm4gZm9jdXNhYmxlSWZWaXNpYmxlICYmICQoZWxlbWVudCkuaXMoJzp2aXNpYmxlJyk7XG4gIH07XG5cbiAgUGFzdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgUGFzdGUucHJvdG90eXBlLl90YXJnZXQgPSBudWxsO1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jb250YWluZXIgPSBudWxsO1xuXG4gICAgUGFzdGUubW91bnROb25JbnB1dGFibGUgPSBmdW5jdGlvbihub25JbnB1dGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuYXBwZW5kVG8obm9uSW5wdXRhYmxlKSwgbm9uSW5wdXRhYmxlKTtcbiAgICAgICQobm9uSW5wdXRhYmxlKS5vbignY2xpY2snLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZShldi50YXJnZXQsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICBwYXN0ZS5fY29udGFpbmVyLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQobm9uSW5wdXRhYmxlKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHJldHVybiBwYXN0ZS5fY29udGFpbmVyLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBQYXN0ZS5tb3VudFRleHRhcmVhID0gZnVuY3Rpb24odGV4dGFyZWEpIHtcbiAgICAgIHZhciBjdGxEb3duLCBwYXN0ZSwgcmVmLCByZWYxO1xuICAgICAgaWYgKCh0eXBlb2YgRGF0YVRyYW5zZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIERhdGFUcmFuc2ZlciAhPT0gbnVsbCA/IERhdGFUcmFuc2Zlci5wcm90b3R5cGUgOiB2b2lkIDApICYmICgocmVmID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNhbGwoT2JqZWN0LCBEYXRhVHJhbnNmZXIucHJvdG90eXBlLCAnaXRlbXMnKSkgIT0gbnVsbCA/IHJlZjEuZ2V0IDogdm9pZCAwIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VudENvbnRlbnRlZGl0YWJsZSh0ZXh0YXJlYSk7XG4gICAgICB9XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjcmVhdGVIaWRkZW5FZGl0YWJsZSgpLmluc2VydEJlZm9yZSh0ZXh0YXJlYSksIHRleHRhcmVhKTtcbiAgICAgIGN0bERvd24gPSBmYWxzZTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAkKHRleHRhcmVhKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIHZhciByZWYyO1xuICAgICAgICBpZiAoKHJlZjIgPSBldi5rZXlDb2RlKSA9PT0gMTcgfHwgcmVmMiA9PT0gMjI0KSB7XG4gICAgICAgICAgY3RsRG93biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChldi5jdHJsS2V5ICE9IG51bGwpICYmIChldi5tZXRhS2V5ICE9IG51bGwpKSB7XG4gICAgICAgICAgY3RsRG93biA9IGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RsRG93biAmJiBldi5rZXlDb2RlID09PSA4Nikge1xuICAgICAgICAgIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSB0cnVlO1xuICAgICAgICAgIHBhc3RlLl9jb250YWluZXIuZm9jdXMoKTtcbiAgICAgICAgICBwYXN0ZS5fcGFzdGVfZXZlbnRfZmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoIXBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCkge1xuICAgICAgICAgICAgICAgICQodGV4dGFyZWEpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdwYXN0ZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdmb2N1cycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbikge1xuICAgICAgICAgICAgcmV0dXJuICQodGV4dGFyZWEpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgICQocGFzdGUuX3RhcmdldCkub24oJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQocGFzdGUuX3RhcmdldCkub24oJ3Bhc3RlVGV4dCcsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCwgY3VyRW5kLCBjdXJTdGFydDtcbiAgICAgICAgICBjdXJTdGFydCA9ICQodGV4dGFyZWEpLnByb3AoJ3NlbGVjdGlvblN0YXJ0Jyk7XG4gICAgICAgICAgY3VyRW5kID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uRW5kJyk7XG4gICAgICAgICAgY29udGVudCA9ICQodGV4dGFyZWEpLnZhbCgpO1xuICAgICAgICAgICQodGV4dGFyZWEpLnZhbChcIlwiICsgY29udGVudC5zbGljZSgwLCBjdXJTdGFydCkgKyBkYXRhLnRleHQgKyBjb250ZW50LnNsaWNlKGN1ckVuZCkpO1xuICAgICAgICAgICQodGV4dGFyZWEpWzBdLnNldFNlbGVjdGlvblJhbmdlKGN1clN0YXJ0ICsgZGF0YS50ZXh0Lmxlbmd0aCwgY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlID0gZnVuY3Rpb24oY29udGVudGVkaXRhYmxlKSB7XG4gICAgICB2YXIgcGFzdGU7XG4gICAgICBwYXN0ZSA9IG5ldyBQYXN0ZShjb250ZW50ZWRpdGFibGUsIGNvbnRlbnRlZGl0YWJsZSk7XG4gICAgICAkKGNvbnRlbnRlZGl0YWJsZSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoY29udGVudGVkaXRhYmxlKS5yZW1vdmVDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUGFzdGUoX2NvbnRhaW5lciwgX3RhcmdldCkge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gX2NvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3RhcmdldCA9IF90YXJnZXQ7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSAkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl90YXJnZXQgPSAkKHRoaXMuX3RhcmdldCkuYWRkQ2xhc3MoJ3Bhc3RhYmxlJyk7XG4gICAgICB0aGlzLl9jb250YWluZXIub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldikge1xuICAgICAgICAgIHZhciBjbGlwYm9hcmREYXRhLCBmaWxlLCBpdGVtLCBqLCBrLCBsZW4sIGxlbjEsIHJlYWRlciwgcmVmLCByZWYxLCByZWYyLCByZWYzLCB0ZXh0O1xuICAgICAgICAgIGlmIChldi5jdXJyZW50VGFyZ2V0ICE9PSBldi50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5fcGFzdGVfZXZlbnRfZmlyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICgoKHJlZiA9IGV2Lm9yaWdpbmFsRXZlbnQpICE9IG51bGwgPyByZWYuY2xpcGJvYXJkRGF0YSA6IHZvaWQgMCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IGV2Lm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgIHJlZjEgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHJlZjFbal07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5tYXRjaCgvXmltYWdlXFwvLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpdGVtLmdldEFzRmlsZSgpKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAndGV4dC9wbGFpbicpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0QXNTdHJpbmcoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgtMSAhPT0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjbGlwYm9hcmREYXRhLnR5cGVzLCAndGV4dC9wbGFpbicpKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZVRleHQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlSW1hZ2Uoc3JjKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhID0gd2luZG93LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgIGlmICgocmVmMiA9ICh0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0JykpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdfcGFzdGVDaGVja0NvbnRhaW5lckRvbmUnKTtcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWYzID0gY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHJlZjNba107XG4gICAgICAgICAgICAgICAgX3RoaXMuX2hhbmRsZUltYWdlKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF90aGlzLl9jaGVja0ltYWdlc0luQ29udGFpbmVyKGZ1bmN0aW9uKHNyYykge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2hhbmRsZUltYWdlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgICB2YXIgbG9hZGVyO1xuICAgICAgaWYgKHNyYy5tYXRjaCgvXndlYmtpdFxcLWZha2VcXC11cmxcXDpcXC9cXC8vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBhcmUgdHJ5aW5nIHRvIHBhc3RlIGFuIGltYWdlIGluIFNhZmFyaSwgaG93ZXZlciB3ZSBhcmUgdW5hYmxlIHRvIHJldGlldmUgaXRzIGRhdGEuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZVN0YXJ0Jyk7XG4gICAgICBsb2FkZXIgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGxvYWRlci5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XG4gICAgICBsb2FkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYmxvYiwgY2FudmFzLCBjdHgsIGRhdGFVUkw7XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gbG9hZGVyLndpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBsb2FkZXIuaGVpZ2h0O1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobG9hZGVyLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgIGRhdGFVUkwgPSBudWxsO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgICBibG9iID0gZGF0YVVSTHRvQmxvYihkYXRhVVJMKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICBpZiAoZGF0YVVSTCkge1xuICAgICAgICAgICAgX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlJywge1xuICAgICAgICAgICAgICBibG9iOiBibG9iLFxuICAgICAgICAgICAgICBkYXRhVVJMOiBkYXRhVVJMLFxuICAgICAgICAgICAgICB3aWR0aDogbG9hZGVyLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGxvYWRlci5oZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGxvYWRlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGdldCBpbWFnZSBmcm9tOiBcIiArIHNyYyxcbiAgICAgICAgICAgIHVybDogc3JjXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVuZCcpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gbG9hZGVyLnNyYyA9IHNyYztcbiAgICB9O1xuXG4gICAgUGFzdGUucHJvdG90eXBlLl9jaGVja0ltYWdlc0luQ29udGFpbmVyID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBpbWcsIGosIGxlbiwgcmVmLCB0aW1lc3BhbjtcbiAgICAgIHRpbWVzcGFuID0gTWF0aC5mbG9vcigxMDAwICogTWF0aC5yYW5kb20oKSk7XG4gICAgICByZWYgPSB0aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgaW1nID0gcmVmW2pdO1xuICAgICAgICBpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGssIGxlbjEsIHJlZjE7XG4gICAgICAgICAgcmVmMSA9IF90aGlzLl9jb250YWluZXIuZmluZCgnaW1nJyk7XG4gICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICBpbWcgPSByZWYxW2tdO1xuICAgICAgICAgICAgaWYgKCFpbWdbXCJfcGFzdGVfbWFya2VkX1wiICsgdGltZXNwYW5dKSB7XG4gICAgICAgICAgICAgIGNiKGltZy5zcmMpO1xuICAgICAgICAgICAgICAkKGltZykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFzdGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxudmFyIHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrO1xuXG4oZnVuY3Rpb24oJCl7XG5cdHRoZV9wYXN0ZVBsdWdpbkNhbGxiYWNrID0gZnVuY3Rpb24oIGVkaXRvciApIHtcblx0XHR2YXIgcGFzdGVCdG4sXG5cdFx0XHRvcmlnRG9tQWRkLFxuXHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2UgPSBmYWxzZSxcblx0XHRcdGN1cnJlbnRDbGlwYm9hcmRFdmVudCA9IG51bGwsXG5cdFx0XHRwcmV2ZW50SW1hZ2VQYXN0ZSA9IGZhbHNlLFxuXHRcdFx0dGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRcdHRvb2xiYXIsXG5cdFx0XHRwYXN0ZWRfaW1hZ2VfdG1wX3ByZWZpeCA9ICdfX3Bhc3RlZF9pbWFnZV90bXBfJyxcblx0XHRcdHBhc3RlZF9pbWFnZV90bXBfY2xhc3MgPSAnJztcblxuXHRcdC8vIGRlZmF1bHQgb25cblx0XHR0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCAndGhlcGFzdGUuYXV0b191cGxvYWQnICkgIT09ICdmYWxzZSc7XG5cblx0XHQvLyBlbmFibGUgLyBkaXNhYmxlIGF1dG91cGxvYWRcblx0XHRlZGl0b3IuYWRkQ29tbWFuZCggJ2NtZF90aGVwYXN0ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgPSAhIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkO1xuXHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oICd0aGVwYXN0ZS5hdXRvX3VwbG9hZCcsIHRoZXBhc3RlLm9wdGlvbnMuZWRpdG9yLmF1dG9fdXBsb2FkLnRvU3RyaW5nKCkgKTtcblx0XHRcdHBhc3RlQnRuLmFjdGl2ZSggdGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWQgKTtcblxuXHRcdH0pO1xuXG5cdFx0Ly8gZW5hYmxlIC8gZGlzYWJsZSBhdXRvdXBsb2FkIGJ1dHRvblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3RoZXBhc3RlJywge1xuXHRcdFx0aWNvbjogJ3RoZXBhc3RlJyxcblx0XHRcdHRvb2x0aXA6IHRoZXBhc3RlLmwxMG4udXBsb2FkX3Bhc3RlZF9pbWFnZXMsXG5cdFx0XHRjbWQgOiAnY21kX3RoZXBhc3RlJyxcblx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHBhc3RlQnRuID0gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRhY3RpdmU6dGhlcGFzdGUub3B0aW9ucy5lZGl0b3IuYXV0b191cGxvYWRcblx0XHR9KTtcblxuXHRcdC8vIHVwbG9hZCBidXR0b24gaW4gbWVkaWEgdG9vbGJhciBmbHlvdXRcblx0XHRlZGl0b3IuYWRkQnV0dG9uKCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJywge1xuXHRcdFx0aWNvbjogJ2Rhc2hpY29uIGRhc2hpY29ucyBkYXNoaWNvbnMtdXBsb2FkIHRoZXBhc3RlLXVwbG9hZCcsXG5cdFx0XHR0b29sdGlwOiB0aGVwYXN0ZS5sMTBuLnVwbG9hZF9pbWFnZSxcblx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyB3cmFwIGltZywgdXBsb2FkXG5cdFx0XHRcdHZhciBpbWFnZTtcblx0XHRcdFx0aW1hZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKTtcblxuXHRcdFx0XHR0aGVwYXN0ZS51cGxvYWRJbWFnZSggaW1hZ2UsIGVkaXRvciApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gaW5pdCBtZWRpYSB0b29sYmFyIGZseW91dFxuXHRcdGVkaXRvci5vbmNlKCAncHJlaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBlZGl0b3Iud3AgJiYgZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyICkge1xuXHRcdFx0XHR0b29sYmFyID0gZWRpdG9yLndwLl9jcmVhdGVUb29sYmFyKCBbXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbmxlZnQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25jZW50ZXInLFxuXHRcdFx0XHRcdCd3cF9pbWdfYWxpZ25yaWdodCcsXG5cdFx0XHRcdFx0J3dwX2ltZ19hbGlnbm5vbmUnLFxuXHRcdFx0XHRcdCd3cF9pbWdfdGhlcGFzdGVfdXBsb2FkJyxcblx0XHRcdFx0XHQnd3BfaW1nX2VkaXQnLFxuXHRcdFx0XHRcdCd3cF9pbWdfcmVtb3ZlJyxcblx0XHRcdFx0XSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0IG9uIG5vZGUgY2hhbmdlXG5cdFx0ZWRpdG9yLm9uKCAnd3B0b29sYmFyJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHVwbG9hZEJ0bjtcblx0XHRcdGlmICggZXZlbnQuZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0lNRycgJiYgISBlZGl0b3Iud3AuaXNQbGFjZWhvbGRlciggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRldmVudC50b29sYmFyID0gdG9vbGJhcjtcblxuXHRcdFx0XHR1cGxvYWRCdG4gPSB0b29sYmFyLiRlbC5maW5kKCcudGhlcGFzdGUtdXBsb2FkJykuY2xvc2VzdCgnLm1jZS1idG4nKTtcblxuXHRcdFx0XHRpZiAoIGNhblVwbG9hZCggZXZlbnQuZWxlbWVudCApICkge1xuXHRcdFx0XHRcdHVwbG9hZEJ0bi5zaG93KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXBsb2FkQnRuLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIHRydSBpZiBkYXRhIHNvdXJjZSBvciBibG9iIGltYWdlXG5cdFx0ZnVuY3Rpb24gY2FuVXBsb2FkKCBpbWcgKSB7XG5cdFx0XHR2YXIgc3ViID0gaW1nLnNyYy5zdWJzdHJpbmcoMCw1KTtcblx0XHRcdHJldHVybiBzdWIgPT09ICdibG9iOicgfHwgc3ViID09PSAnZGF0YTonO1xuXHRcdH1cblxuXHRcdC8vIHNldHVwIG1lZGlhIHRvb2xiYXIgZmx5b3V0XG5cdFx0ZWRpdG9yXG5cdFx0XHQub24oICdCZWZvcmVQYXN0ZVByZVByb2Nlc3MnLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0Ly8gcmVtb3ZlIHN2ZyBkYXRhXG5cdFx0XHRcdGlmICggIGUuY29udGVudC5tYXRjaCggLyZsdDtzdmdbXFxzXFxTLl0qJmx0O1xcL3N2ZyZndDsvaSApICkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRlLmNvbnRlbnQgPSAnJztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZTtcblxuXHRcdFx0fSApXG5cdFx0XHQub24oICdQYXN0ZVBvc3RQcm9jZXNzJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdC8vIHVwbG9hZCBpbWFnZVxuXHRcdFx0XHR2YXIgJGZpcnN0Q2hpbGQsICR1cGxvYWRCb3g7XG5cblx0XHRcdFx0aWYgKCB0aGVwYXN0ZS5vcHRpb25zLmVkaXRvci5hdXRvX3VwbG9hZCApIHtcblx0XHRcdFx0XHQkZmlyc3RDaGlsZCA9ICQoZS5ub2RlKS5jaGlsZHJlbigpLmZpcnN0KCk7XG5cdFx0XHRcdFx0aWYgKCAkZmlyc3RDaGlsZC5pcygnaW1nJykgJiYgY2FuVXBsb2FkKCAkZmlyc3RDaGlsZC5nZXQoMCkgKSApIHtcblx0XHRcdFx0XHRcdCR1cGxvYWRCb3ggPSB0aGVwYXN0ZS51cGxvYWRJbWFnZSggJGZpcnN0Q2hpbGQuZ2V0KDApLCBlZGl0b3IgKTtcblx0XHRcdFx0XHRcdCRmaXJzdENoaWxkLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0JChlLm5vZGUpLmFwcGVuZCggJHVwbG9hZEJveCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdDtcblxuXHR9O1xuXG5cdHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoICd0aGVfcGFzdGUnLCB0aGVfcGFzdGVQbHVnaW5DYWxsYmFjayApO1xuXG59ICkoalF1ZXJ5KTtcbiJdfQ== 
  • the-paste/trunk/js/admin/the-paste.js

    r1760790 r1762953  
    400400}).call(this); 
    401401 
    402 (function($,exports){ 
     402(function( $, exports, o ) { 
    403403 
    404404    var is_chrome   = navigator.userAgent.indexOf('Chrome') > -1, 
     
    429429                src = image.src, 
    430430                upload = function( dataURL ){ 
    431                     var type = dataURL.match(/^data\:([^\;]+)\;/)[1] 
    432                         file = new o.Blob( null, { data: dataURL } ) 
    433                         suffix = thepaste.options.mime_types.convert[ type ]; 
     431                    var type = dataURL.match(/^data\:([^\;]+)\;/)[1], 
     432                        file = new o.Blob( null, { data: dataURL } ), 
     433                        suffix = thepaste.options.mime_types.convert[ type ], 
     434                        postname = $('#post [name="post_title"]#title').val(); 
    434435                    if ( 'undefined' === typeof suffix ) { 
    435436                        console.trace( 'Won\'t upload, bad mime type: ' + type ); 
    436437                    } 
    437438 
    438                     file.name = thepaste.l10n.pasted + '.' + suffix; 
     439                    if ( 'undefined' !== typeof postname ) { 
     440                        postname = postname.replace(/([\^\!\?<>:"'\/\|\*§])/g,'').replace(/ +/g,' '); 
     441                        file.name = thepaste.l10n.pasted_into + ' ' + postname + '.' + suffix; 
     442                    } else { 
     443                        file.name = thepaste.l10n.pasted + '.' + suffix; 
     444                    } 
    439445                    file.type = type; 
    440446 
     
    535541    }, thepaste ); 
    536542 
    537 })( jQuery, wp.media ); 
     543})( jQuery, wp.media, mOxie ); 
    538544 
    539545(function($,exports){ 
  • the-paste/trunk/js/admin/the-paste.min.js

    r1760790 r1762953  
    1 (function(){var e,t,a,i,n;e=window.jQuery,e.paste=function(e){var a;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),a=t.mountNonInputable(e),a._container},e.fn.pastableNonInputable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is("textarea, input:text, [contenteditable]")||(t.mountNonInputable(a),a._pastable=!0);return this},e.fn.pastableTextarea=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not(textarea, input:text)")||(t.mountTextarea(a),a._pastable=!0);return this},e.fn.pastableContenteditable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not([contenteditable])")||(t.mountContenteditable(a),a._pastable=!0);return this},i=function(e,t){var a,i,n,r,o,s,l,p,d,u,h;if(null==t&&(t=512),!(p=e.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(u=p,p=u[0],s=u[1],a=u[2],r=atob(a),n=[],d=0;d<r.length;){for(h=r.slice(d,d+t),o=new Array(h.length),l=0;l<h.length;)o[l]=h.charCodeAt(l),l++;i=new Uint8Array(o),n.push(i),d+=t}return new Blob(n,{type:s})},a=function(){return e(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},n=function(t,a){var i,n,r,o,s,l;return o=void 0,s=void 0,r=void 0,n=void 0,i=void 0,"area"===(l=t.nodeName.toLowerCase())?(o=t.parentNode,s=o.name,!(!t.href||!s||"map"!==o.nodeName.toLowerCase())&&(r=e("img[usemap='#"+s+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(n=!t.disabled)&&(i=e(t).closest("fieldset")[0])&&(n=!i.disabled):n="a"===l?t.href||a:a,(n=n||e(t).is("[contenteditable]"))&&e(t).is(":visible"))},t=function(){function t(t,a){this._container=t,this._target=a,this._container=e(this._container),this._target=e(this._target).addClass("pastable"),this._container.on("paste",function(e){return function(t){var a,i,n,r,o,s,l,p,d,u,h,c,g;if(t.currentTarget!==t.target)return t.preventDefault();if(e._paste_event_fired=!0,null!=(null!=(d=t.originalEvent)?d.clipboardData:void 0))if(a=t.originalEvent.clipboardData,a.items)for(u=a.items,r=0,s=u.length;r<s;r++){if(n=u[r],n.type.match(/^image\//)){p=new FileReader,p.onload=function(t){return e._handleImage(t.target.result)};try{p.readAsDataURL(n.getAsFile())}catch(e){}t.preventDefault();break}"text/plain"===n.type&&n.getAsString(function(t){return e._target.trigger("pasteText",{text:t})})}else-1!==Array.prototype.indexOf.call(a.types,"text/plain")&&(g=a.getData("Text"),setTimeout(function(){return e._target.trigger("pasteText",{text:g})},1)),e._checkImagesInContainer(function(t){return e._handleImage(t)});if(a=window.clipboardData)if(null!=(h=g=a.getData("Text"))?h.length:void 0)setTimeout(function(){return e._target.trigger("pasteText",{text:g}),e._target.trigger("_pasteCheckContainerDone")},1);else{for(c=a.files,o=0,l=c.length;o<l;o++)i=c[o],e._handleImage(URL.createObjectURL(i));e._checkImagesInContainer(function(e){})}return null}}(this))}return t.prototype._target=null,t.prototype._container=null,t.mountNonInputable=function(i){var r;return r=new t(a().appendTo(i),i),e(i).on("click",function(e){return function(e){if(!n(e.target,!1))return r._container.focus()}}()),r._container.on("focus",function(t){return function(){return e(i).addClass("pastable-focus")}}()),r._container.on("blur",function(t){return function(){return e(i).removeClass("pastable-focus")}}())},t.mountTextarea=function(i){var n,r,o,s;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(o=Object.getOwnPropertyDescriptor)&&null!=(s=o.call(Object,DataTransfer.prototype,"items"))?s.get:void 0)?this.mountContenteditable(i):(r=new t(a().insertBefore(i),i),n=!1,e(i).on("keyup",function(e){var t;return 17!==(t=e.keyCode)&&224!==t||(n=!1),null}),e(i).on("keydown",function(t){var a;return 17!==(a=t.keyCode)&&224!==a||(n=!0),null!=t.ctrlKey&&null!=t.metaKey&&(n=t.ctrlKey||t.metaKey),n&&86===t.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(t){return function(){if(!r._paste_event_fired)return e(i).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),e(i).on("paste",function(e){return function(){}}()),e(i).on("focus",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).addClass("pastable-focus")}}()),e(i).on("blur",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).removeClass("pastable-focus")}}()),e(r._target).on("_pasteCheckContainerDone",function(t){return function(){return e(i).focus(),r._textarea_focus_stolen=!1}}()),e(r._target).on("pasteText",function(t){return function(t,a){var n,r,o;return o=e(i).prop("selectionStart"),r=e(i).prop("selectionEnd"),n=e(i).val(),e(i).val(""+n.slice(0,o)+a.text+n.slice(r)),e(i)[0].setSelectionRange(o+a.text.length,o+a.text.length),e(i).trigger("change")}}()))},t.mountContenteditable=function(a){return new t(a,a),e(a).on("focus",function(t){return function(){return e(a).addClass("pastable-focus")}}()),e(a).on("blur",function(t){return function(){return e(a).removeClass("pastable-focus")}}())},t.prototype._handleImage=function(e){var t;return e.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),t=new Image,t.crossOrigin="anonymous",t.onload=function(e){return function(){var a,n,r,o;n=document.createElement("canvas"),n.width=t.width,n.height=t.height,r=n.getContext("2d"),r.drawImage(t,0,0,n.width,n.height),o=null;try{o=n.toDataURL("image/png"),a=i(o)}catch(e){}return o&&e._target.trigger("pasteImage",{blob:a,dataURL:o,width:t.width,height:t.height}),e._target.trigger("pasteImageEnd")}}(this),t.onerror=function(t){return function(){return t._target.trigger("pasteImageError",{message:"Failed to get image from: "+e,url:e}),t._target.trigger("pasteImageEnd")}}(this),t.src=e)},t.prototype._checkImagesInContainer=function(t){var a,i,n,r,o;for(o=Math.floor(1e3*Math.random()),r=this._container.find("img"),i=0,n=r.length;i<n;i++)a=r[i],a["_paste_marked_"+o]=!0;return setTimeout(function(i){return function(){var n,r,s;for(s=i._container.find("img"),n=0,r=s.length;n<r;n++)a=s[n],a["_paste_marked_"+o]||(t(a.src),e(a).remove());return i._target.trigger("_pasteCheckContainerDone")}}(this),1)},t}()}).call(this),function(e,t){var a=(navigator.userAgent.indexOf("Chrome"),0);thepaste=t.thepaste=e.extend({supports:{paste:"paste"in document||"onpaste"in document||"object"==typeof window.onpaste||"onpaste"in document.createElement("DIV")},view:{},uploadImage:function(t,i,n){var r="__thepaste_box_"+a++,s=e(t).wrap('<div id="'+r+'" data-progress="0" class="thepaste-image-placeholder" contenteditable="false"></div>').parent();t.onload=function(){e(i.$("#"+r)).width(this.naturalWidth),e(i.$("#"+r)).height(this.naturalHeight)};var l,p,d=t.src,u=function(t){var a=t.match(/^data\:([^\;]+)\;/)[1];file=new o.Blob(null,{data:t}),suffix=thepaste.options.mime_types.convert[a],"undefined"==typeof suffix&&console.trace("Won't upload, bad mime type: "+a),file.name=thepaste.l10n.pasted+"."+suffix,file.type=a;var n=function(){p.uploader.uploader.uploader.addFile(file)};p?(p.state().reset(),n()):(p=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:thepaste.l10n.copy_paste,multiple:!1}),p.close(),p.uploader.uploader&&p.uploader.uploader.ready?n():p.on("uploader:ready",n)),p.uploader.uploader.uploader.bind("UploadProgress",function(e){i.$("#"+r).attr("data-progress",e.total.percent)}),p.uploader.uploader.uploader.bind("FileUploaded",function(t,a){var n=i.$("#"+r),o='<img class="alignnone wp-image-'+a.attachment.id+' size-full" src="'+a.attachment.changed.url+'" />';n.replaceWith(o),i.$('img[src="'+d+'"]').each(function(){e(this).replaceWith(o)})}),p.uploader.uploader.uploader.bind("Error",function(e,t){console.log(e,t)})};return"blob:"===d.substr(0,5)?(l=new XMLHttpRequest,l.responseType="blob",l.onreadystatechange=function(){var e;4==l.readyState&&(e=new FileReader,e.onload=function(){u(e.result)},e.readAsDataURL(new Blob([l.response],{type:"image/png"})))},l.open("GET",d),l.send(null)):"data:"===d.substr(0,5)&&u(d),s},clipboardHasImage:function(t){var a=!1;return t.items?(e.each(t.items,function(e,t){if(t.type in thepaste.options.mime_types.paste)return a=!0,!1}),a):t.types?(e.each(thepaste.options.mime_types.paste,function(e,i){if(t.types.indexOf(e)>-1)return a=!0,!1}),a):null}},thepaste)}(jQuery,wp.media),function(e,t){var a=wp.media.thepaste.l10n;e.extend(wp.Uploader.prototype,{success:function(e){}}),_.extend(wp.media.view.MediaFrame.Select.prototype,{_parentInitialize:wp.media.view.MediaFrame.Select.prototype.initialize,initialize:function(){this._parentInitialize.apply(this,arguments),this.bindPasteHandlers()},_parentBrowseRouter:wp.media.view.MediaFrame.Select.prototype.browseRouter,browseRouter:function(e){this._parentBrowseRouter.apply(this,arguments),wp.media.thepaste.supports.paste&&e.set({pasteboard:{text:a.copy_paste,priority:35}})},bindPasteHandlers:function(){var e=!1;this.on("content:render close",function(t){e&&"function"==typeof e.dismiss&&e.dismiss(),void 0!==t&&(e=t)},this),this.on("content:create:pasteboard",this.contentCreatePasteboard,this),this.on("content:render:pasteboard",this.contentRenderGrabber,this),frame=this},contentCreatePasteboard:function(e){this.state();this.currentPasteView=e.view=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this,grabber:wp.media.thepaste.view.Pasteboard}),this.listenTo(this.currentPasteView.uploader,"action:uploaded:dataimage",this.uploadedDataImage)},contentRenderGrabber:function(e){e.startGrabbing()},uploadedDataImage:function(e){this.stopListening(this.currentPasteView.uploader,"action:uploaded:dataimage");var t={view:null};this.browseContent(t),this.content.set(t.view),this.router.get().select("browse")}}),_.extend(wp.media.view.AttachmentsBrowser.prototype,{_parentInitialize:wp.media.view.AttachmentsBrowser.prototype.initialize,initialize:function(){var e,t=this;this._parentInitialize.apply(this,arguments),this.thepaste={paste:{grabber:!1,modal:!1,mode:"paste"},current:!1},this.controller instanceof wp.media.view.MediaFrame.Select||wp.media.thepaste.supports.paste&&(e=new wp.media.view.Button({text:a.copy_paste,className:"grabber-button",priority:-64,click:function(){t.thepaste.active=t.thepaste.paste,t.thepasteOpen(a.copy_paste)}}),this.thepaste.paste.grabber=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this.controller,grabber:wp.media.thepaste.view.Pasteboard,wpuploader:this.controller.uploader.uploader.uploader}),this.toolbar.set("pasteModeButton",e.render()))},thepasteUploaded:function(e){this.thepaste.active.grabber.dismiss(),this.thepaste.modal.close(),this.thepasteClose()},thepasteError:function(e){console.log("error",e)},thepasteOpen:function(e){var t=this;this.thepaste.modal=new wp.media.view.Modal({controller:this,title:e}),this.thepaste.modal.content(this.thepaste.active.grabber),this.thepaste.modal.open(),this.thepaste.modal.on("close",function(){t.thepasteClose.apply(t),t.thepaste.active.grabber.stopGrabbing()}),this.thepaste.active.grabber.startGrabbing(),this.listenTo(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage",this.thepasteUploaded),this.listenTo(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage",this.thepasteError)},thepasteClose:function(){this.controller.deactivateMode(this.thepaste.active.mode).activateMode("edit"),this.stopListening(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage"),this.stopListening(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage")}})}(jQuery,window),function(e,t,a){var i=wp.media.thepaste,n=(wp.media.view.Button,wp.media.view.Modal,i.l10n);wp.media.thepaste.view.DataSourceImageUploader=wp.media.View.extend({template:wp.template("thepaste-uploader"),className:"thepaste-uploader",controller:null,image:null,$discardBtn:null,$uploadBtn:null,uploader:null,events:{'click [data-action="upload"]':"uploadImage",'click [data-action="discard"]':"discardImage"},initialize:function(){wp.media.View.prototype.initialize.apply(this,arguments),_.defaults(this.options,{defaultFileName:n.image});new wp.media.View({tagName:"div",className:"instruments",controller:this.controller});this.uploader=this.options.uploder},setImageData:function(e){var t=this.$imageContainer.html("").get(0),n=this,r=e.match(/data:(image\/(\w+));/)[1];return i.options.mime_types.convert[r]||(r=this.options.defaultFileFormat),this.image&&this.image.destroy(),this.image=new a.Image,this.image.onload=function(){var e=n.getUploader().getOption("resize"),a=Math.max(e.width/this.width,e.height/this.height);!!e&&a<1&&this.downsize(this.width*a,this.height*a),this.embed(t)},this.image.load(e),this.$imageContainer&&this.$imageContainer.append(this.image),this.$('[data-setting="format"] input[value="'+r+'"]').prop("checked",!0),this.disabled(!1),this},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$imageContainer=this.$(".image-container"),this.$discardBtn=this.$('[data-action="discard"]'),this.$uploadBtn=this.$('[data-action="upload"]'),this.$('[data-setting="title"]').val(this.options.defaultFileName),this},discardImage:function(){this.trigger("action:discard:dataimage",this),this.unbindUploaderEvents()},uploadImage:function(){var e=this.$('[data-setting="format"] :checked').val(),t=i.options.mime_types.convert[e],a=this.$('input[data-setting="title"]').val()+"."+t,n=this.image.getAsBlob(e,i.options.jpeg_quality);this.bindUploaderEvents(),n.detach(n.getSource()),n.name=a,n.type=e,this.getUploader().addFile(n,a),this.disabled(!0),this.trigger("action:upload:dataimage",this)},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},disabled:function(e){this.$discardBtn.prop("disabled",e),this.$uploadBtn.prop("disabled",e)},_uploadSuccessHandler:function(){this.trigger("action:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},_uploadErrorHandler:function(){this.trigger("error:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},bindUploaderEvents:function(){this.getUploader().bind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().bind("Error",this._uploadErrorHandler,this)},unbindUploaderEvents:function(){this.getUploader().unbind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().unbind("Error",this._uploadErrorHandler,this)},getUploader:function(){return this.controller.uploader.uploader.uploader}}),wp.media.thepaste.view.Pasteboard=wp.media.View.extend({template:wp.template("thepaste-pasteboard"),className:"thepaste-pasteboard",controller:null,action:"paste",$pasteboard:null,render:function(){var e=this;return wp.media.View.prototype.render.apply(this,arguments),this.$pasteboard=this.$(".injector").pastableContenteditable(),this.$message=this.$(".message"),this.$pasteboard.on("click",function(){e.show_message("")}),this},start:function(){var t,a=this;return this.imagePasted=!1,this.$pasteboard.on("paste",function(e){t=wp.media.thepaste.clipboardHasImage(e.originalEvent.clipboardData)}).on("pasteText",function(i,r){t||a.imagePasted||(a.show_message(n.paste_error_no_image),e(this).html(""))}).on("pasteImage",function(e,t){a.imagePasted||(a.trigger("action:create:dataimage",this,t.dataURL),a.imagePasted=!0)}).on("pasteImageError",function(t,i){a.show_message(n.paste_error),e(this).html("")}),setTimeout(function(){a.$pasteboard.get(0).focus()},1),this},stop:function(){return this.$pasteboard.off("pasteImage").off("pasteImageError").off("pasteText"),this},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},show_message:function(e){this.$message.text(e)}}),wp.media.thepaste.view.DataSourceImageGrabber=wp.media.View.extend({template:wp.template("thepaste-grabber"),className:"thepaste-grabber",grabber:null,uploader:null,initialize:function(){var e=wp.media.View.prototype.initialize.apply(this,arguments);return _.defaults(this.options,{wpuploader:null,defaultFileName:n.pasted,defaultFileFormat:"image/png",title:n.copy_paste}),this.grabber=new this.options.grabber({controller:this.controller}),this.uploader=new wp.media.thepaste.view.DataSourceImageUploader({controller:this.controller,uploder:this.options.wpuploader,defaultFileName:this.options.defaultFileName,defaultFileFormat:this.options.defaultFileFormat}),this.render(),this.listenTo(this.grabber,"action:create:dataimage",this.imageCreated),this.listenTo(this.uploader,"action:discard:dataimage",this.startGrabbing),e},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$(".content").append(this.grabber.render().$el).append(this.uploader.render().$el),this},imageCreated:function(e,t){this.grabber.stop().hide(),this.uploader.show().setImageData(t)},startGrabbing:function(){return this.uploader.hide(),this.grabber.show().start(),this},stopGrabbing:function(){return this.grabber.stop(),this},getAction:function(){return this.grabber.action},dismiss:function(){return this.grabber.stop(),this}})}(jQuery,window,mOxie); 
    2 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS5qcyJdLCJuYW1lcyI6WyIkIiwiUGFzdGUiLCJjcmVhdGVIaWRkZW5FZGl0YWJsZSIsImRhdGFVUkx0b0Jsb2IiLCJpc0ZvY3VzYWJsZSIsIndpbmRvdyIsImpRdWVyeSIsInBhc3RlIiwicGFzdGVDb250YWluZXIiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJtb3VudE5vbklucHV0YWJsZSIsIl9jb250YWluZXIiLCJmbiIsInBhc3RhYmxlTm9uSW5wdXRhYmxlIiwiZWwiLCJqIiwibGVuIiwicmVmIiwidGhpcyIsImxlbmd0aCIsIl9wYXN0YWJsZSIsImlzIiwicGFzdGFibGVUZXh0YXJlYSIsIm1vdW50VGV4dGFyZWEiLCJwYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSIsIm1vdW50Q29udGVudGVkaXRhYmxlIiwiZGF0YVVSTCIsInNsaWNlU2l6ZSIsImI2NERhdGEiLCJieXRlQXJyYXkiLCJieXRlQXJyYXlzIiwiYnl0ZUNoYXJhY3RlcnMiLCJieXRlTnVtYmVycyIsImNvbnRlbnRUeXBlIiwiaSIsIm0iLCJvZmZzZXQiLCJzbGljZSIsIm1hdGNoIiwiYXRvYiIsIkFycmF5IiwiY2hhckNvZGVBdCIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwiQmxvYiIsInR5cGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwiY3NzIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbiIsImxlZnQiLCJvdmVyZmxvdyIsImVsZW1lbnQiLCJoYXNUYWJpbmRleCIsImZpZWxkc2V0IiwiZm9jdXNhYmxlSWZWaXNpYmxlIiwiaW1nIiwibWFwIiwibWFwTmFtZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwYXJlbnROb2RlIiwibmFtZSIsImhyZWYiLCJ0ZXN0IiwiZGlzYWJsZWQiLCJjbG9zZXN0IiwiX3RhcmdldCIsImFkZENsYXNzIiwib24iLCJfdGhpcyIsImV2IiwiY2xpcGJvYXJkRGF0YSIsImZpbGUiLCJpdGVtIiwiayIsImxlbjEiLCJyZWFkZXIiLCJyZWYxIiwicmVmMiIsInJlZjMiLCJ0ZXh0IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiX3Bhc3RlX2V2ZW50X2ZpcmVkIiwib3JpZ2luYWxFdmVudCIsIml0ZW1zIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2ZW50IiwiX2hhbmRsZUltYWdlIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImdldEFzRmlsZSIsImVycm9yIiwiZ2V0QXNTdHJpbmciLCJzdHJpbmciLCJ0cmlnZ2VyIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImNhbGwiLCJ0eXBlcyIsImdldERhdGEiLCJzZXRUaW1lb3V0IiwiX2NoZWNrSW1hZ2VzSW5Db250YWluZXIiLCJzcmMiLCJmaWxlcyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIm5vbklucHV0YWJsZSIsImFwcGVuZFRvIiwiZm9jdXMiLCJyZW1vdmVDbGFzcyIsInRleHRhcmVhIiwiY3RsRG93biIsIkRhdGFUcmFuc2ZlciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImluc2VydEJlZm9yZSIsImtleUNvZGUiLCJjdHJsS2V5IiwibWV0YUtleSIsIl90ZXh0YXJlYV9mb2N1c19zdG9sZW4iLCJkYXRhIiwiY29udGVudCIsImN1ckVuZCIsImN1clN0YXJ0IiwicHJvcCIsInZhbCIsInNldFNlbGVjdGlvblJhbmdlIiwiY29udGVudGVkaXRhYmxlIiwibG9hZGVyIiwibWVzc2FnZSIsIkltYWdlIiwiY3Jvc3NPcmlnaW4iLCJibG9iIiwiY2FudmFzIiwiY3R4IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJ1cmwiLCJjYiIsInRpbWVzcGFuIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZmluZCIsInJlbW92ZSIsImV4cG9ydHMiLCJjb3VudGVyIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidGhlcGFzdGUiLCJleHRlbmQiLCJzdXBwb3J0cyIsInZpZXciLCJ1cGxvYWRJbWFnZSIsImltYWdlIiwiZWRpdG9yIiwidXBsb2FkX3BsYWNlaG9sZGVyIiwiaWQiLCIkY29udGFpbmVyIiwid3JhcCIsInBhcmVudCIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJ4aHIiLCJ3b3JrZmxvdyIsInVwbG9hZCIsIm8iLCJzdWZmaXgiLCJvcHRpb25zIiwibWltZV90eXBlcyIsImNvbnZlcnQiLCJ0cmFjZSIsImwxMG4iLCJwYXN0ZWQiLCJhZGRGaWxlIiwidXBsb2FkZXIiLCJzdGF0ZSIsInJlc2V0Iiwid3AiLCJtZWRpYSIsIm9wZW4iLCJ3cEFjdGl2ZUVkaXRvciIsImZyYW1lIiwidGl0bGUiLCJjb3B5X3Bhc3RlIiwibXVsdGlwbGUiLCJjbG9zZSIsInJlYWR5IiwiYmluZCIsImUiLCJ0b3RhbCIsInBlcmNlbnQiLCJ1cCIsImFyZ3MiLCJpbWdIVE1MIiwiYXR0YWNobWVudCIsImNoYW5nZWQiLCJyZXBsYWNlV2l0aCIsImVhY2giLCJzdWJzdHIiLCJYTUxIdHRwUmVxdWVzdCIsInJlc3BvbnNlVHlwZSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZSIsInNlbmQiLCJjbGlwYm9hcmRIYXNJbWFnZSIsImhhc0ltYWdlIiwiZXh0IiwiVXBsb2FkZXIiLCJzdWNjZXNzIiwiZmlsZV9hdHRhY2htZW50IiwiXyIsIk1lZGlhRnJhbWUiLCJTZWxlY3QiLCJfcGFyZW50SW5pdGlhbGl6ZSIsImluaXRpYWxpemUiLCJhcHBseSIsImFyZ3VtZW50cyIsImJpbmRQYXN0ZUhhbmRsZXJzIiwiX3BhcmVudEJyb3dzZVJvdXRlciIsImJyb3dzZVJvdXRlciIsInNldCIsInBhc3RlYm9hcmQiLCJwcmlvcml0eSIsInByZXZpb3VzQ29udGVudCIsImRpc21pc3MiLCJjb250ZW50Q3JlYXRlUGFzdGVib2FyZCIsImNvbnRlbnRSZW5kZXJHcmFiYmVyIiwiY3VycmVudFBhc3RlVmlldyIsIkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIiLCJjb250cm9sbGVyIiwiZ3JhYmJlciIsIlBhc3RlYm9hcmQiLCJsaXN0ZW5UbyIsInVwbG9hZGVkRGF0YUltYWdlIiwic3RhcnRHcmFiYmluZyIsInN0b3BMaXN0ZW5pbmciLCJvYmoiLCJicm93c2VDb250ZW50Iiwicm91dGVyIiwic2VsZWN0IiwiQXR0YWNobWVudHNCcm93c2VyIiwicGFzdGVCdG4iLCJzZWxmIiwibW9kYWwiLCJtb2RlIiwiY3VycmVudCIsIkJ1dHRvbiIsImNsYXNzTmFtZSIsImNsaWNrIiwiYWN0aXZlIiwidGhlcGFzdGVPcGVuIiwid3B1cGxvYWRlciIsInRvb2xiYXIiLCJyZW5kZXIiLCJ0aGVwYXN0ZVVwbG9hZGVkIiwidGhlcGFzdGVDbG9zZSIsInRoZXBhc3RlRXJyb3IiLCJNb2RhbCIsInN0b3BHcmFiYmluZyIsImRlYWN0aXZhdGVNb2RlIiwiYWN0aXZhdGVNb2RlIiwiRGF0YVNvdXJjZUltYWdlVXBsb2FkZXIiLCJWaWV3IiwidGVtcGxhdGUiLCIkZGlzY2FyZEJ0biIsIiR1cGxvYWRCdG4iLCJldmVudHMiLCJjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0iLCJjbGljayBbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdIiwiZGVmYXVsdHMiLCJkZWZhdWx0RmlsZU5hbWUiLCJ0YWdOYW1lIiwidXBsb2RlciIsInNldEltYWdlRGF0YSIsImNvbnRhaW5lciIsIiRpbWFnZUNvbnRhaW5lciIsImh0bWwiLCJmb3JtYXQiLCJkZWZhdWx0RmlsZUZvcm1hdCIsImRlc3Ryb3kiLCJvcHRzIiwiZ2V0VXBsb2FkZXIiLCJnZXRPcHRpb24iLCJzY2FsZSIsIm1heCIsImRvd25zaXplIiwiZW1iZWQiLCJsb2FkIiwiYXBwZW5kIiwiZGlzY2FyZEltYWdlIiwidW5iaW5kVXBsb2FkZXJFdmVudHMiLCJnZXRBc0Jsb2IiLCJqcGVnX3F1YWxpdHkiLCJiaW5kVXBsb2FkZXJFdmVudHMiLCJkZXRhY2giLCJnZXRTb3VyY2UiLCJzaG93IiwiJGVsIiwiaGlkZSIsIl91cGxvYWRTdWNjZXNzSGFuZGxlciIsIl91cGxvYWRFcnJvckhhbmRsZXIiLCJ1bmJpbmQiLCJhY3Rpb24iLCIkcGFzdGVib2FyZCIsIiRtZXNzYWdlIiwic2hvd19tZXNzYWdlIiwic3RhcnQiLCJpbWFnZVBhc3RlZCIsInBhc3RlX2Vycm9yX25vX2ltYWdlIiwicGFzdGVfZXJyb3IiLCJzdG9wIiwib2ZmIiwibXNnIiwicmV0IiwiaW1hZ2VDcmVhdGVkIiwiaW1hZ2VEYXRhIiwiZ2V0QWN0aW9uIiwibU94aWUiXSwibWFwcGluZ3MiOiJDQVFBLFdBQ0UsR0FBSUEsR0FBR0MsRUFBT0MsRUFBc0JDLEVBQWVDLENBRW5ESixHQUFJSyxPQUFPQyxPQUVYTixFQUFFTyxNQUFRLFNBQVNDLEdBQ2pCLEdBQUlDLEVBS0osT0FKdUIsbUJBQVpDLFVBQXVDLE9BQVpBLFNBQ3BDQSxRQUFRQyxJQUFJLDBGQUVkRixFQUFLUixFQUFNVyxrQkFBa0JKLEdBQ3RCQyxFQUFHSSxZQUdaYixFQUFFYyxHQUFHQyxxQkFBdUIsV0FDMUIsR0FBSUMsR0FBSUMsRUFBR0MsRUFBS0MsQ0FFaEIsS0FEQUEsRUFBTUMsS0FDREgsRUFBSSxFQUFHQyxFQUFNQyxFQUFJRSxPQUFRSixFQUFJQyxFQUFLRCxJQUNyQ0QsRUFBS0csRUFBSUYsR0FDTEQsRUFBR00sV0FBYXRCLEVBQUVnQixHQUFJTyxHQUFHLDZDQUc3QnRCLEVBQU1XLGtCQUFrQkksR0FDeEJBLEVBQUdNLFdBQVksRUFFakIsT0FBT0YsT0FHVHBCLEVBQUVjLEdBQUdVLGlCQUFtQixXQUN0QixHQUFJUixHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsZ0NBRzdCdEIsRUFBTXdCLGNBQWNULEdBQ3BCQSxFQUFHTSxXQUFZLEVBRWpCLE9BQU9GLE9BR1RwQixFQUFFYyxHQUFHWSx3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N0RwVCxLQUFLa08sU0FBVWxPLEtBQUt1SyxTQUFVLDJCQUE0QnZLLEtBQUtvTyxlQUV4RCtFLEdBRVI1RCxPQUFPLFdBU04sTUFOQTdFLElBQUdDLE1BQU1xRixLQUFLNUssVUFBVW1LLE9BQU90QyxNQUFPak4sS0FBTWtOLFdBRTVDbE4sS0FBS3BCLEVBQUUsWUFDTDhTLE9BQVExUixLQUFLZ08sUUFBUXVCLFNBQVM0QyxLQUM5QlQsT0FBUTFSLEtBQUt1SyxTQUFTZ0YsU0FBUzRDLEtBRTFCblMsTUFFUm9ULGFBQWUsU0FBVXBGLEVBQVVxRixHQUNsQ3JULEtBQUtnTyxRQUFRZ0YsT0FBT1osT0FDcEJwUyxLQUFLdUssU0FBUzJILE9BQU92QixhQUFjMEMsSUFFcENqRixjQUFjLFdBR2IsTUFGQXBPLE1BQUt1SyxTQUFTNkgsT0FDZHBTLEtBQUtnTyxRQUFRa0UsT0FBT1UsUUFDYjVTLE1BRVI0UCxhQUFhLFdBRVosTUFEQTVQLE1BQUtnTyxRQUFRZ0YsT0FDTmhULE1BRVJzVCxVQUFZLFdBQ1gsTUFBT3RULE1BQUtnTyxRQUFRd0UsUUFFckI5RSxRQUFRLFdBRVAsTUFEQTFOLE1BQUtnTyxRQUFRZ0YsT0FDTmhULFNBSVBkLE9BQU9ELE9BQU9zVSIsImZpbGUiOiJ0aGUtcGFzdGUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcblxuLypcbnBhc3RlLmpzIGlzIGFuIGludGVyZmFjZSB0byByZWFkIGRhdGEgKCB0ZXh0IC8gaW1hZ2UgKSBmcm9tIGNsaXBib2FyZCBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuIEl0IGFsc28gY29udGFpbnMgc2V2ZXJhbCBoYWNrcy5cblxuaHR0cHM6Ly9naXRodWIuY29tL2xheWVyc3Nzcy9wYXN0ZS5qc1xuICovXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyICQsIFBhc3RlLCBjcmVhdGVIaWRkZW5FZGl0YWJsZSwgZGF0YVVSTHRvQmxvYiwgaXNGb2N1c2FibGU7XG5cbiAgJCA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgJC5wYXN0ZSA9IGZ1bmN0aW9uKHBhc3RlQ29udGFpbmVyKSB7XG4gICAgdmFyIHBtO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFUFJFQ0FURUQ6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwbSA9IFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKHBhc3RlQ29udGFpbmVyKTtcbiAgICByZXR1cm4gcG0uX2NvbnRhaW5lcjtcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlTm9uSW5wdXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsLCBqLCBsZW4sIHJlZjtcbiAgICByZWYgPSB0aGlzO1xuICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgZWwgPSByZWZbal07XG4gICAgICBpZiAoZWwuX3Bhc3RhYmxlIHx8ICQoZWwpLmlzKCd0ZXh0YXJlYSwgaW5wdXQ6dGV4dCwgW2NvbnRlbnRlZGl0YWJsZV0nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVUZXh0YXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdCh0ZXh0YXJlYSwgaW5wdXQ6dGV4dCknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50VGV4dGFyZWEoZWwpO1xuICAgICAgZWwuX3Bhc3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdChbY29udGVudGVkaXRhYmxlXSknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGRhdGFVUkx0b0Jsb2IgPSBmdW5jdGlvbihkYXRhVVJMLCBzbGljZVNpemUpIHtcbiAgICB2YXIgYjY0RGF0YSwgYnl0ZUFycmF5LCBieXRlQXJyYXlzLCBieXRlQ2hhcmFjdGVycywgYnl0ZU51bWJlcnMsIGNvbnRlbnRUeXBlLCBpLCBtLCBvZmZzZXQsIHJlZiwgc2xpY2U7XG4gICAgaWYgKHNsaWNlU2l6ZSA9PSBudWxsKSB7XG4gICAgICBzbGljZVNpemUgPSA1MTI7XG4gICAgfVxuICAgIGlmICghKG0gPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NFxcLCguKykkLykpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVmID0gbSwgbSA9IHJlZlswXSwgY29udGVudFR5cGUgPSByZWZbMV0sIGI2NERhdGEgPSByZWZbMl07XG4gICAgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGJ5dGVBcnJheXMgPSBbXTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGgpIHtcbiAgICAgIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuICAgICAgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCBzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgIG9mZnNldCArPSBzbGljZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIGNyZWF0ZUhpZGRlbkVkaXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYXR0cigndGFiaW5kZXgnLCAtMSkuY3NzKHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgfSk7XG4gIH07XG5cbiAgaXNGb2N1c2FibGUgPSBmdW5jdGlvbihlbGVtZW50LCBoYXNUYWJpbmRleCkge1xuICAgIHZhciBmaWVsZHNldCwgZm9jdXNhYmxlSWZWaXNpYmxlLCBpbWcsIG1hcCwgbWFwTmFtZSwgbm9kZU5hbWU7XG4gICAgbWFwID0gdm9pZCAwO1xuICAgIG1hcE5hbWUgPSB2b2lkIDA7XG4gICAgaW1nID0gdm9pZCAwO1xuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IHZvaWQgMDtcbiAgICBmaWVsZHNldCA9IHZvaWQgMDtcbiAgICBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoJ2FyZWEnID09PSBub2RlTmFtZSkge1xuICAgICAgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgbWFwTmFtZSA9IG1hcC5uYW1lO1xuICAgICAgaWYgKCFlbGVtZW50LmhyZWYgfHwgIW1hcE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdtYXAnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGltZyA9ICQoJ2ltZ1t1c2VtYXA9XFwnIycgKyBtYXBOYW1lICsgJ1xcJ10nKTtcbiAgICAgIHJldHVybiBpbWcubGVuZ3RoID4gMCAmJiBpbWcuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuICAgIGlmICgvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgICBpZiAoZm9jdXNhYmxlSWZWaXNpYmxlKSB7XG4gICAgICAgIGZpZWxkc2V0ID0gJChlbGVtZW50KS5jbG9zZXN0KCdmaWVsZHNldCcpWzBdO1xuICAgICAgICBpZiAoZmllbGRzZXQpIHtcbiAgICAgICAgICBmb2N1c2FibGVJZlZpc2libGUgPSAhZmllbGRzZXQuZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCdhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGVsZW1lbnQuaHJlZiB8fCBoYXNUYWJpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gaGFzVGFiaW5kZXg7XG4gICAgfVxuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGZvY3VzYWJsZUlmVmlzaWJsZSB8fCAkKGVsZW1lbnQpLmlzKCdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIHJldHVybiBmb2N1c2FibGVJZlZpc2libGUgJiYgJChlbGVtZW50KS5pcygnOnZpc2libGUnKTtcbiAgfTtcblxuICBQYXN0ZSA9IChmdW5jdGlvbigpIHtcbiAgICBQYXN0ZS5wcm90b3R5cGUuX3RhcmdldCA9IG51bGw7XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NvbnRhaW5lciA9IG51bGw7XG5cbiAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKG5vbklucHV0YWJsZSkge1xuICAgICAgdmFyIHBhc3RlO1xuICAgICAgcGFzdGUgPSBuZXcgUGFzdGUoY3JlYXRlSGlkZGVuRWRpdGFibGUoKS5hcHBlbmRUbyhub25JbnB1dGFibGUpLCBub25JbnB1dGFibGUpO1xuICAgICAgJChub25JbnB1dGFibGUpLm9uKCdjbGljaycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICBpZiAoIWlzRm9jdXNhYmxlKGV2LnRhcmdldCwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHBhc3RlLl9jb250YWluZXIub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKG5vbklucHV0YWJsZSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50VGV4dGFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSkge1xuICAgICAgdmFyIGN0bERvd24sIHBhc3RlLCByZWYsIHJlZjE7XG4gICAgICBpZiAoKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgRGF0YVRyYW5zZmVyICE9PSBudWxsID8gRGF0YVRyYW5zZmVyLnByb3RvdHlwZSA6IHZvaWQgMCkgJiYgKChyZWYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY2FsbChPYmplY3QsIERhdGFUcmFuc2Zlci5wcm90b3R5cGUsICdpdGVtcycpKSAhPSBudWxsID8gcmVmMS5nZXQgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vdW50Q29udGVudGVkaXRhYmxlKHRleHRhcmVhKTtcbiAgICAgIH1cbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuaW5zZXJ0QmVmb3JlKHRleHRhcmVhKSwgdGV4dGFyZWEpO1xuICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2tleXVwJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2LmN0cmxLZXkgIT0gbnVsbCkgJiYgKGV2Lm1ldGFLZXkgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjdGxEb3duID0gZXYuY3RybEtleSB8fCBldi5tZXRhS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdGxEb3duICYmIGV2LmtleUNvZGUgPT09IDg2KSB7XG4gICAgICAgICAgcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IHRydWU7XG4gICAgICAgICAgcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIHBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghcGFzdGUuX3Bhc3RlX2V2ZW50X2ZpcmVkKSB7XG4gICAgICAgICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIXBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4pIHtcbiAgICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICAkKHRleHRhcmVhKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJChwYXN0ZS5fdGFyZ2V0KS5vbignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKHRleHRhcmVhKS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChwYXN0ZS5fdGFyZ2V0KS5vbigncGFzdGVUZXh0JywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldiwgZGF0YSkge1xuICAgICAgICAgIHZhciBjb250ZW50LCBjdXJFbmQsIGN1clN0YXJ0O1xuICAgICAgICAgIGN1clN0YXJ0ID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uU3RhcnQnKTtcbiAgICAgICAgICBjdXJFbmQgPSAkKHRleHRhcmVhKS5wcm9wKCdzZWxlY3Rpb25FbmQnKTtcbiAgICAgICAgICBjb250ZW50ID0gJCh0ZXh0YXJlYSkudmFsKCk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkudmFsKFwiXCIgKyBjb250ZW50LnNsaWNlKDAsIGN1clN0YXJ0KSArIGRhdGEudGV4dCArIGNvbnRlbnQuc2xpY2UoY3VyRW5kKSk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSlbMF0uc2V0U2VsZWN0aW9uUmFuZ2UoY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoLCBjdXJTdGFydCArIGRhdGEudGV4dC5sZW5ndGgpO1xuICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgUGFzdGUubW91bnRDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbihjb250ZW50ZWRpdGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNvbnRlbnRlZGl0YWJsZSwgY29udGVudGVkaXRhYmxlKTtcbiAgICAgICQoY29udGVudGVkaXRhYmxlKS5vbignZm9jdXMnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKGNvbnRlbnRlZGl0YWJsZSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBQYXN0ZShfY29udGFpbmVyLCBfdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBfY29udGFpbmVyO1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9ICQodGhpcy5fY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX3RhcmdldCA9ICQodGhpcy5fdGFyZ2V0KS5hZGRDbGFzcygncGFzdGFibGUnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5vbigncGFzdGUnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgdmFyIGNsaXBib2FyZERhdGEsIGZpbGUsIGl0ZW0sIGosIGssIGxlbiwgbGVuMSwgcmVhZGVyLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHRleHQ7XG4gICAgICAgICAgaWYgKGV2LmN1cnJlbnRUYXJnZXQgIT09IGV2LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzLl9wYXN0ZV9ldmVudF9maXJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKCgocmVmID0gZXYub3JpZ2luYWxFdmVudCkgIT0gbnVsbCA/IHJlZi5jbGlwYm9hcmREYXRhIDogdm9pZCAwKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhID0gZXYub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhO1xuICAgICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgcmVmMSA9IGNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gcmVmMVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLm1hdGNoKC9eaW1hZ2VcXC8vKSkge1xuICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2hhbmRsZUltYWdlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGl0ZW0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0L3BsYWluJykge1xuICAgICAgICAgICAgICAgICAgaXRlbS5nZXRBc1N0cmluZyhmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKC0xICE9PSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGNsaXBib2FyZERhdGEudHlwZXMsICd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShzcmMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgaWYgKChyZWYyID0gKHRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKSkpICE9IG51bGwgPyByZWYyLmxlbmd0aCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZjMgPSBjbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMy5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gcmVmM1trXTtcbiAgICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlSW1hZ2UoVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuICAgIFBhc3RlLnByb3RvdHlwZS5faGFuZGxlSW1hZ2UgPSBmdW5jdGlvbihzcmMpIHtcbiAgICAgIHZhciBsb2FkZXI7XG4gICAgICBpZiAoc3JjLm1hdGNoKC9ed2Via2l0XFwtZmFrZVxcLXVybFxcOlxcL1xcLy8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSB0cnlpbmcgdG8gcGFzdGUgYW4gaW1hZ2UgaW4gU2FmYXJpLCBob3dldmVyIHdlIGFyZSB1bmFibGUgdG8gcmV0aWV2ZSBpdHMgZGF0YS5cIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlU3RhcnQnKTtcbiAgICAgIGxvYWRlciA9IG5ldyBJbWFnZSgpO1xuICAgICAgbG9hZGVyLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICAgIGxvYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBibG9iLCBjYW52YXMsIGN0eCwgZGF0YVVSTDtcbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBsb2FkZXIud2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGxvYWRlci5oZWlnaHQ7XG4gICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShsb2FkZXIsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgZGF0YVVSTCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIGJsb2IgPSBkYXRhVVJMdG9CbG9iKGRhdGFVUkwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgIGlmIChkYXRhVVJMKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2UnLCB7XG4gICAgICAgICAgICAgIGJsb2I6IGJsb2IsXG4gICAgICAgICAgICAgIGRhdGFVUkw6IGRhdGFVUkwsXG4gICAgICAgICAgICAgIHdpZHRoOiBsb2FkZXIud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogbG9hZGVyLmhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFbmQnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgbG9hZGVyLm9uZXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gZ2V0IGltYWdlIGZyb206IFwiICsgc3JjLFxuICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJldHVybiBsb2FkZXIuc3JjID0gc3JjO1xuICAgIH07XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIgPSBmdW5jdGlvbihjYikge1xuICAgICAgdmFyIGltZywgaiwgbGVuLCByZWYsIHRpbWVzcGFuO1xuICAgICAgdGltZXNwYW4gPSBNYXRoLmZsb29yKDEwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgIHJlZiA9IHRoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBpbWcgPSByZWZbal07XG4gICAgICAgIGltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaywgbGVuMSwgcmVmMTtcbiAgICAgICAgICByZWYxID0gX3RoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMS5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgIGltZyA9IHJlZjFba107XG4gICAgICAgICAgICBpZiAoIWltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0pIHtcbiAgICAgICAgICAgICAgY2IoaW1nLnNyYyk7XG4gICAgICAgICAgICAgICQoaW1nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgMSk7XG4gICAgfTtcblxuICAgIHJldHVybiBQYXN0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oJCxleHBvcnRzKXtcblxuXHR2YXIgaXNfY2hyb21lXHQ9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSxcblx0XHRjb3VudGVyID0gMCxcblx0XHR3b3JrZmxvdztcblxuXHR0aGVwYXN0ZSA9IGV4cG9ydHMudGhlcGFzdGUgPSAkLmV4dGVuZCgge1xuXHRcdHN1cHBvcnRzIDoge1xuXHRcdFx0cGFzdGU6ICggKCdwYXN0ZScgaW4gZG9jdW1lbnQpIHx8ICgnb25wYXN0ZScgaW4gZG9jdW1lbnQpIHx8IHR5cGVvZih3aW5kb3cub25wYXN0ZSkgPT09ICdvYmplY3QnIHx8ICggJ29ucGFzdGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpICkgKSwgLy8gYnJvd3NlclxuXHRcdH0sXG5cdFx0dmlldzp7fSxcblxuXHRcdHVwbG9hZEltYWdlOiBmdW5jdGlvbiggaW1hZ2UsIGVkaXRvciwgdXBsb2FkX3BsYWNlaG9sZGVyICkge1xuXG5cdFx0XHR2YXIgaWQgPSAnX190aGVwYXN0ZV9ib3hfJysoY291bnRlcisrKSxcblx0XHRcdFx0JGNvbnRhaW5lciA9ICQoaW1hZ2UpXG5cdFx0XHRcdFx0LndyYXAoJzxkaXYgaWQ9XCInK2lkKydcIiBkYXRhLXByb2dyZXNzPVwiMFwiIGNsYXNzPVwidGhlcGFzdGUtaW1hZ2UtcGxhY2Vob2xkZXJcIiBjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiPjwvZGl2PicpXG5cdFx0XHRcdFx0LnBhcmVudCgpO1xuXG5cdFx0XHRcdC8vIHNldCAkY29udGFpbmVyIHNpemUgb25jZSBrbm93blxuXHRcdFx0XHRpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKCBlZGl0b3IuJCgnIycraWQpICkud2lkdGgoIHRoaXMubmF0dXJhbFdpZHRoICk7XG5cdFx0XHRcdFx0JCggZWRpdG9yLiQoJyMnK2lkKSApLmhlaWdodCggdGhpcy5uYXR1cmFsSGVpZ2h0ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0dmFyIHhocixcblx0XHRcdFx0d29ya2Zsb3csXG5cdFx0XHRcdHNyYyA9IGltYWdlLnNyYyxcblx0XHRcdFx0dXBsb2FkID0gZnVuY3Rpb24oIGRhdGFVUkwgKXtcblx0XHRcdFx0XHR2YXIgdHlwZSA9IGRhdGFVUkwubWF0Y2goL15kYXRhXFw6KFteXFw7XSspXFw7LylbMV1cblx0XHRcdFx0XHRcdGZpbGUgPSBuZXcgby5CbG9iKCBudWxsLCB7IGRhdGE6IGRhdGFVUkwgfSApXG5cdFx0XHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdO1xuXHRcdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBzdWZmaXggKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLnRyYWNlKCAnV29uXFwndCB1cGxvYWQsIGJhZCBtaW1lIHR5cGU6ICcgKyB0eXBlICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmlsZS5uYW1lID0gdGhlcGFzdGUubDEwbi5wYXN0ZWQgKyAnLicgKyBzdWZmaXg7XG5cdFx0XHRcdFx0ZmlsZS50eXBlID0gdHlwZTtcblxuXHRcdFx0XHRcdHZhciBhZGRGaWxlID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmFkZEZpbGUoIGZpbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAhIHdvcmtmbG93ICkge1xuXHRcdFx0XHRcdFx0d29ya2Zsb3cgPSB3cC5tZWRpYS5lZGl0b3Iub3Blbiggd2luZG93LndwQWN0aXZlRWRpdG9yLCB7XG5cdFx0XHRcdFx0XHRcdGZyYW1lOlx0XHQncG9zdCcsXG5cdFx0XHRcdFx0XHRcdHN0YXRlOlx0XHQnaW5zZXJ0Jyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6XHRcdHRoZXBhc3RlLmwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRcdFx0bXVsdGlwbGU6XHRmYWxzZVxuXHRcdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5jbG9zZSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyICYmIHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnJlYWR5ICkge1xuXHRcdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR3b3JrZmxvdy5vbiggJ3VwbG9hZGVyOnJlYWR5JywgYWRkRmlsZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR3b3JrZmxvdy5zdGF0ZSgpLnJlc2V0KCk7XG5cdFx0XHRcdFx0XHRhZGRGaWxlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ1VwbG9hZFByb2dyZXNzJyxmdW5jdGlvbiggZSApe1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJyMnK2lkKS5hdHRyKCdkYXRhLXByb2dyZXNzJyxlLnRvdGFsLnBlcmNlbnQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHdvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmJpbmQoJ0ZpbGVVcGxvYWRlZCcsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cblx0XHRcdFx0XHRcdHZhciAkY29udGFpbmVyID0gZWRpdG9yLiQoJyMnK2lkKSxcblx0XHRcdFx0XHRcdFx0aW1nSFRNTCA9ICc8aW1nIGNsYXNzPVwiYWxpZ25ub25lIHdwLWltYWdlLScrYXJncy5hdHRhY2htZW50LmlkKycgc2l6ZS1mdWxsXCIgc3JjPVwiJythcmdzLmF0dGFjaG1lbnQuY2hhbmdlZC51cmwrJ1wiIC8+JztcblxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSBpbWFnZVxuXHRcdFx0XHRcdFx0JGNvbnRhaW5lci5yZXBsYWNlV2l0aCggaW1nSFRNTCApO1xuXG5cdFx0XHRcdFx0XHQvLyByZXBsYWNlIG90aGVyIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0ZWRpdG9yLiQoJ2ltZ1tzcmM9XCInK3NyYysnXCJdJykuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLnJlcGxhY2VXaXRoKCBpbWdIVE1MICk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdFcnJvcicsZnVuY3Rpb24oIHVwLCBhcmdzICl7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyh1cCxhcmdzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCBzcmMuc3Vic3RyKDAsNSkgPT09ICdibG9iOicgKSB7XG5cblx0XHRcdFx0eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHRcdHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG5cdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHZhciByZWFkZXI7XG5cdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PSA0ICkge1xuXHRcdFx0XHRcdFx0cmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dXBsb2FkKCByZWFkZXIucmVzdWx0ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCggbmV3IEJsb2IoIFsgeGhyLnJlc3BvbnNlIF0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHhoci5vcGVuKCAnR0VUJywgc3JjICk7XG5cdFx0XHRcdHhoci5zZW5kKCBudWxsICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHNyYy5zdWJzdHIoMCw1KSA9PT0gJ2RhdGE6JyApIHtcblx0XHRcdFx0dXBsb2FkKCBzcmMgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkY29udGFpbmVyO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKlx0QHJldHVybjogbnVsbHx0cnVlfGZhbHNlXG5cdFx0ICovXG5cdFx0Y2xpcGJvYXJkSGFzSW1hZ2U6ZnVuY3Rpb24oIGNsaXBib2FyZERhdGEgKSB7XG5cdFx0XHR2YXIgaGFzSW1hZ2UgPSBmYWxzZTtcblx0XHRcdGlmICggY2xpcGJvYXJkRGF0YS5pdGVtcyApIHtcblx0XHRcdFx0JC5lYWNoKCBjbGlwYm9hcmREYXRhLml0ZW1zLCBmdW5jdGlvbihpLGl0ZW0pe1xuXHRcdFx0XHRcdGlmICggaXRlbS50eXBlIGluIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5wYXN0ZSApIHtcblx0XHRcdFx0XHRcdGhhc0ltYWdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIGhhc0ltYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGNsaXBib2FyZERhdGEudHlwZXMgKSB7XG5cdFx0XHRcdCQuZWFjaCggdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLnBhc3RlLCBmdW5jdGlvbih0eXBlLGV4dCl7XG5cdFx0XHRcdFx0aWYgKCBjbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YodHlwZSkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGhhc0ltYWdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIGhhc0ltYWdlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cblx0fSwgdGhlcGFzdGUgKTtcblxufSkoIGpRdWVyeSwgd3AubWVkaWEgKTtcblxuKGZ1bmN0aW9uKCQsZXhwb3J0cyl7XG5cblx0dmFyIGNvdW50ZXIgICAgICA9IDAsXG5cdFx0bDEwbiA9IHdwLm1lZGlhLnRoZXBhc3RlLmwxMG47XG5cblx0JC5leHRlbmQoIHdwLlVwbG9hZGVyLnByb3RvdHlwZSwge1xuXHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbiggZmlsZV9hdHRhY2htZW50ICl7XG5cdFx0fVxuXHR9KTtcblxuXG5cdC8qKlxuXHQgKlx0SW50ZWdyYXRlIGludG8gbWVkaWEgbGlicmFyeSBtb2RhbFxuXHQgKi9cblx0Ly8gYWRkIHN0YXRlcyB0byBicm93c2Ugcm91dGVyXG5cdF8uZXh0ZW5kKCB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZSwge1xuXHRcdF9wYXJlbnRJbml0aWFsaXplOiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZS5pbml0aWFsaXplLFxuXHRcdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fcGFyZW50SW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR0aGlzLmJpbmRQYXN0ZUhhbmRsZXJzKCk7XG5cdFx0fSxcblx0XHRfcGFyZW50QnJvd3NlUm91dGVyOiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LnByb3RvdHlwZS5icm93c2VSb3V0ZXIsXG5cdFx0YnJvd3NlUm91dGVyIDogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0XHR0aGlzLl9wYXJlbnRCcm93c2VSb3V0ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXG5cdFx0XHRpZiAoIHdwLm1lZGlhLnRoZXBhc3RlLnN1cHBvcnRzLnBhc3RlICkge1xuXHRcdFx0XHR2aWV3LnNldCh7cGFzdGVib2FyZDp7XG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uY29weV9wYXN0ZSxcblx0XHRcdFx0XHRwcmlvcml0eTogMzVcblx0XHRcdFx0fX0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiaW5kUGFzdGVIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcHJldmlvdXNDb250ZW50ID0gZmFsc2U7XG5cdFx0XG5cdFx0XHQvLyBkaXNtaXNzIGNvbnRlbnQgb24gY2xvc2Vcblx0XHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlciBjbG9zZScgLCBmdW5jdGlvbihjb250ZW50KXtcblx0XHRcdFx0aWYgKCBwcmV2aW91c0NvbnRlbnQgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHByZXZpb3VzQ29udGVudC5kaXNtaXNzICkge1xuXHRcdFx0XHRcdHByZXZpb3VzQ29udGVudC5kaXNtaXNzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGNvbnRlbnQgKVxuXHRcdFx0XHRcdHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7XG5cdFx0XHR9ICwgdGhpcyApO1xuXHRcdFxuXHRcdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOnBhc3RlYm9hcmQnLCB0aGlzLmNvbnRlbnRDcmVhdGVQYXN0ZWJvYXJkLCB0aGlzICk7XG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6cGFzdGVib2FyZCcsIHRoaXMuY29udGVudFJlbmRlckdyYWJiZXIsIHRoaXMgKTtcblxuXHRcdFx0ZnJhbWUgPSB0aGlzO1xuXHRcdH0sXG5cdFx0Ly8gYWRkIGhhbmRsZXJzXG5cdFx0Y29udGVudENyZWF0ZVBhc3RlYm9hcmQ6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuXG5cdFx0XHR0aGlzLmN1cnJlbnRQYXN0ZVZpZXcgPSBjb250ZW50LnZpZXcgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyKCB7IFxuXHRcdFx0XHRjb250cm9sbGVyXHQ6IHRoaXMsIFxuXHRcdFx0XHRncmFiYmVyXHRcdDogd3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuY3VycmVudFBhc3RlVmlldy51cGxvYWRlciwgJ2FjdGlvbjp1cGxvYWRlZDpkYXRhaW1hZ2UnLCB0aGlzLnVwbG9hZGVkRGF0YUltYWdlICk7XG5cdFx0fSxcblx0XHRjb250ZW50UmVuZGVyR3JhYmJlcjogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0XHRjb250ZW50LnN0YXJ0R3JhYmJpbmcoKTtcblx0XHR9LFxuXHRcdHVwbG9hZGVkRGF0YUltYWdlOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy5jdXJyZW50UGFzdGVWaWV3LnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHZhciBvYmogPSB7IHZpZXc6IG51bGwgfTtcblx0XHRcdHRoaXMuYnJvd3NlQ29udGVudChvYmopO1xuXHRcdFx0dGhpcy5jb250ZW50LnNldCggb2JqLnZpZXcgKTtcblx0XHRcdHRoaXMucm91dGVyLmdldCgpLnNlbGVjdCgnYnJvd3NlJylcblx0XHR9XG5cdH0pO1xuXHRcblxuXG5cdC8qKlxuXHQgKlx0QWRkIHBhc3RlIGJ1dHRvbiB0byB0b29sYmFyIG9uIHVwbG9hZC5waHBcblx0ICovXG5cdF8uZXh0ZW5kKCB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3Nlci5wcm90b3R5cGUsIHtcblx0XHRfcGFyZW50SW5pdGlhbGl6ZTpcdHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyLnByb3RvdHlwZS5pbml0aWFsaXplLFxuXHRcdGluaXRpYWxpemU6XHRmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdFx0cGFzdGVCdG47XG5cblx0XHRcdHRoaXMuX3BhcmVudEluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnRoZXBhc3RlID0ge1xuXHRcdFx0XHRwYXN0ZVx0OiB7XG4vL1x0XHRcdFx0XHRidXR0b25cdDogZmFsc2UsXG5cdFx0XHRcdFx0Z3JhYmJlclx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RhbFx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RlXHQ6ICdwYXN0ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1cnJlbnRcdFx0OiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEgKCB0aGlzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0ICkgKSB7XG5cblx0XHRcdFx0aWYgKCB3cC5tZWRpYS50aGVwYXN0ZS5zdXBwb3J0cy5wYXN0ZSApIHtcblxuXHRcdFx0XHRcdHBhc3RlQnRuID0gbmV3IHdwLm1lZGlhLnZpZXcuQnV0dG9uKCB7XG5cdFx0XHRcdFx0XHR0ZXh0XHRcdDogbDEwbi5jb3B5X3Bhc3RlLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiAgJ2dyYWJiZXItYnV0dG9uJyxcblx0XHRcdFx0XHRcdHByaW9yaXR5XHQ6IC02NCxcblx0XHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi50aGVwYXN0ZS5hY3RpdmUgPSBzZWxmLnRoZXBhc3RlLnBhc3RlO1xuXHRcdFx0XHRcdFx0XHRzZWxmLnRoZXBhc3RlT3BlbiggbDEwbi5jb3B5X3Bhc3RlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHRoaXMudGhlcGFzdGUucGFzdGUuZ3JhYmJlciA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIoIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXJcdDogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0Z3JhYmJlclx0XHQ6IHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuUGFzdGVib2FyZCxcblx0XHRcdFx0XHRcdHdwdXBsb2FkZXJcdDogdGhpcy5jb250cm9sbGVyLnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyXG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0dGhpcy50b29sYmFyLnNldCggJ3Bhc3RlTW9kZUJ1dHRvbicsIHBhc3RlQnRuLnJlbmRlcigpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRoZXBhc3RlVXBsb2FkZWQ6IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci5kaXNtaXNzKCk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlQ2xvc2UoKTtcblx0XHR9LFxuXHRcdHRoZXBhc3RlRXJyb3I6IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0Y29uc29sZS5sb2coICdlcnJvcicsIGUgKTtcblx0XHR9LFxuXHRcdHRoZXBhc3RlT3BlbjogZnVuY3Rpb24oIHRpdGxlICkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsICA9ICBuZXcgd3AubWVkaWEudmlldy5Nb2RhbCgge1xuXHRcdFx0XHRjb250cm9sbGVyIDogdGhpcyxcblx0XHRcdFx0dGl0bGUgICAgICA6IHRpdGxlXG5cdFx0XHR9ICk7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLmNvbnRlbnQoIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIgKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwub3BlbigpO1xuXG5cdFx0XHR0aGlzLnRoZXBhc3RlLm1vZGFsLm9uKCAnY2xvc2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi50aGVwYXN0ZUNsb3NlLmFwcGx5KHNlbGYpO1xuXHRcdFx0XHRzZWxmLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnN0b3BHcmFiYmluZygpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIuc3RhcnRHcmFiYmluZygpO1xuXG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudGhlcGFzdGVVcGxvYWRlZCApO1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2Vycm9yOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudGhlcGFzdGVFcnJvciApO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVDbG9zZTogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHRoaXMuY29udHJvbGxlci5kZWFjdGl2YXRlTW9kZSggdGhpcy50aGVwYXN0ZS5hY3RpdmUubW9kZSApLmFjdGl2YXRlTW9kZSggJ2VkaXQnICk7XG5cblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2FjdGlvbjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0XHR0aGlzLnN0b3BMaXN0ZW5pbmcoIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIudXBsb2FkZXIsICdlcnJvcjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0fVxuXHR9KTtcblx0XG59KShqUXVlcnksd2luZG93KTtcblxuKGZ1bmN0aW9uKCQsd2luZG93LG8pe1xuXHR2YXIgdGhlcGFzdGUgPSB3cC5tZWRpYS50aGVwYXN0ZSxcblx0XHRCdXR0b24gPSB3cC5tZWRpYS52aWV3LkJ1dHRvbixcblx0XHRNb2RhbCAgPSB3cC5tZWRpYS52aWV3Lk1vZGFsLFxuXHRcdGwxMG4gICA9IHRoZXBhc3RlLmwxMG47XG5cblxuXHR3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtdXBsb2FkZXInKSxcblx0XHRjbGFzc05hbWU6ICd0aGVwYXN0ZS11cGxvYWRlcicsXG5cdFx0Y29udHJvbGxlcjpudWxsLFxuXHRcdGltYWdlIDogbnVsbCxcblx0XHQkZGlzY2FyZEJ0biA6IG51bGwsXG5cdFx0JHVwbG9hZEJ0biA6IG51bGwsXG5cblx0XHR1cGxvYWRlciA6IG51bGwsXG5cblx0XHRldmVudHMgOiB7XG5cdFx0XHQnY2xpY2sgW2RhdGEtYWN0aW9uPVwidXBsb2FkXCJdJ1x0OiAndXBsb2FkSW1hZ2UnLFxuXHRcdFx0J2NsaWNrIFtkYXRhLWFjdGlvbj1cImRpc2NhcmRcIl0nXHQ6ICdkaXNjYXJkSW1hZ2UnLFxuXHRcdH0sXG5cdFx0aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR3cC5tZWRpYS5WaWV3LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdGRlZmF1bHRGaWxlTmFtZSA6IGwxMG4uaW1hZ2Vcblx0XHRcdH0pO1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRpbnN0ciA9IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0dGFnTmFtZSAgICA6ICdkaXYnLFxuXHRcdFx0XHRjbGFzc05hbWUgIDogJ2luc3RydW1lbnRzJyxcblx0XHRcdFx0Y29udHJvbGxlciA6IHRoaXMuY29udHJvbGxlclxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudXBsb2FkZXIgPSB0aGlzLm9wdGlvbnMudXBsb2Rlcjtcblx0XHR9LFxuXHRcdHNldEltYWdlRGF0YSA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuJGltYWdlQ29udGFpbmVyLmh0bWwoJycpLmdldCgwKSxcblx0XHRcdFx0c2VsZiA9IHRoaXMsXG5cdFx0XHRcdGZvcm1hdCA9IGRhdGEubWF0Y2goL2RhdGE6KGltYWdlXFwvKFxcdyspKTsvKVsxXTtcblxuXHRcdFx0aWYgKCAhIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5jb252ZXJ0W2Zvcm1hdF0gKSB7XG5cdFx0XHRcdGZvcm1hdCA9IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZUZvcm1hdDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLmltYWdlICkge1xuXHRcdFx0XHR0aGlzLmltYWdlLmRlc3Ryb3koKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbWFnZSA9IG5ldyBvLkltYWdlKCk7XG5cdFx0XHR0aGlzLmltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgb3B0cyA9IHNlbGYuZ2V0VXBsb2FkZXIoKS5nZXRPcHRpb24oJ3Jlc2l6ZScpLFxuXHRcdFx0XHRcdHNjYWxlID0gTWF0aC5tYXgoIG9wdHMud2lkdGggLyB0aGlzLndpZHRoLCBvcHRzLmhlaWdodCAvIHRoaXMuaGVpZ2h0ICk7XG5cblx0XHRcdFx0ISFvcHRzICYmIChzY2FsZSA8IDEpICYmIHRoaXMuZG93bnNpemUoIHRoaXMud2lkdGgqc2NhbGUsIHRoaXMuaGVpZ2h0KnNjYWxlICk7XG5cblx0XHRcdFx0dGhpcy5lbWJlZCggY29udGFpbmVyICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaW1hZ2UubG9hZCggZGF0YSApO1xuXHRcdFx0aWYgKCB0aGlzLiRpbWFnZUNvbnRhaW5lciApIHtcblx0XHRcdFx0dGhpcy4kaW1hZ2VDb250YWluZXIuYXBwZW5kKHRoaXMuaW1hZ2UpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwiZm9ybWF0XCJdIGlucHV0W3ZhbHVlPVwiJytmb3JtYXQrJ1wiXScpLnByb3AoICdjaGVja2VkJywgdHJ1ZSApO1xuXG5cblx0XHRcdHRoaXMuZGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRyZW5kZXIgOiBmdW5jdGlvbigpIHtcblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHR0aGlzLiRpbWFnZUNvbnRhaW5lciA9IHRoaXMuJCgnLmltYWdlLWNvbnRhaW5lcicpO1xuXHRcdFx0dGhpcy4kZGlzY2FyZEJ0biA9IHRoaXMuJCgnW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXScpO1xuXHRcdFx0dGhpcy4kdXBsb2FkQnRuID0gdGhpcy4kKCdbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0nKTtcblx0XHRcdHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cInRpdGxlXCJdJykudmFsKCB0aGlzLm9wdGlvbnMuZGVmYXVsdEZpbGVOYW1lICk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGRpc2NhcmRJbWFnZSA6IGZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246ZGlzY2FyZDpkYXRhaW1hZ2UnICwgdGhpcyApO1xuXHRcdFx0dGhpcy51bmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXHRcdH0sXG5cdFx0dXBsb2FkSW1hZ2UgOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCJmb3JtYXRcIl0gOmNoZWNrZWQnKS52YWwoKSxcblx0XHRcdFx0c3VmZml4ID0gdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLmNvbnZlcnRbIHR5cGUgXSxcblx0XHRcdFx0bmFtZSA9IHRoaXMuJCgnaW5wdXRbZGF0YS1zZXR0aW5nPVwidGl0bGVcIl0nKS52YWwoKSArICcuJyArIHN1ZmZpeCxcblx0XHRcdFx0YmxvYiA9IHRoaXMuaW1hZ2UuZ2V0QXNCbG9iKCB0eXBlLCB0aGVwYXN0ZS5vcHRpb25zLmpwZWdfcXVhbGl0eSApO1xuXG5cdFx0XHR0aGlzLmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXG5cdFx0XHRibG9iLmRldGFjaCggYmxvYi5nZXRTb3VyY2UoKSApO1xuXHRcdFx0YmxvYi5uYW1lID0gbmFtZTtcblx0XHRcdGJsb2IudHlwZSA9IHR5cGU7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkuYWRkRmlsZSggYmxvYiAsIG5hbWUgKTtcblxuXHRcdFx0dGhpcy5kaXNhYmxlZCggdHJ1ZSApO1xuXG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246dXBsb2FkOmRhdGFpbWFnZScgLCB0aGlzICk7XG5cdFx0fSxcblx0XHRzaG93OmZ1bmN0aW9uKCl7XG5cdFx0XHR0aGlzLiRlbC5zaG93KCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGhpZGU6ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuJGVsLmhpZGUoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0ZGlzYWJsZWQgOiBmdW5jdGlvbiggZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLiRkaXNjYXJkQnRuLnByb3AoICdkaXNhYmxlZCcsIGRpc2FibGVkICk7XG5cdFx0XHR0aGlzLiR1cGxvYWRCdG4ucHJvcCggJ2Rpc2FibGVkJywgZGlzYWJsZWQgKTtcblx0XHR9LFxuXHRcdF91cGxvYWRTdWNjZXNzSGFuZGxlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHRoaXMuZGlzYWJsZWQoZmFsc2UpO1xuXHRcdFx0dGhpcy51bmJpbmRVcGxvYWRlckV2ZW50cygpO1xuXHRcdH0sXG5cdFx0X3VwbG9hZEVycm9ySGFuZGxlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnZXJyb3I6dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHRiaW5kVXBsb2FkZXJFdmVudHMgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5iaW5kKCAnRmlsZVVwbG9hZGVkJyxcdHRoaXMuX3VwbG9hZFN1Y2Nlc3NIYW5kbGVyLFx0dGhpcyApO1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLmJpbmQoICdFcnJvcicsXHRcdFx0dGhpcy5fdXBsb2FkRXJyb3JIYW5kbGVyLFx0dGhpcyApO1xuXHRcdH0sXG5cdFx0dW5iaW5kVXBsb2FkZXJFdmVudHMgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS51bmJpbmQoICdGaWxlVXBsb2FkZWQnLFx0dGhpcy5fdXBsb2FkU3VjY2Vzc0hhbmRsZXIsXHR0aGlzICk7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkudW5iaW5kKCAnRXJyb3InLFx0XHRcdHRoaXMuX3VwbG9hZEVycm9ySGFuZGxlcixcdHRoaXMgKTtcblx0XHR9LFxuXHRcdGdldFVwbG9hZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXI7XG5cdFx0fVxuXHR9KTtcblxuXG5cdHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuUGFzdGVib2FyZCA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0XHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ3RoZXBhc3RlLXBhc3RlYm9hcmQnKSxcblx0XHRjbGFzc05hbWU6ICd0aGVwYXN0ZS1wYXN0ZWJvYXJkJyxcblx0XHRjb250cm9sbGVyOm51bGwsXG5cdFx0YWN0aW9uOidwYXN0ZScsXG5cdFx0JHBhc3RlYm9hcmQgOiBudWxsLFxuXG5cdFx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkID0gdGhpcy4kKCAnLmluamVjdG9yJyApLnBhc3RhYmxlQ29udGVudGVkaXRhYmxlKCk7XG5cdFx0XHR0aGlzLiRtZXNzYWdlID0gdGhpcy4kKCAnLm1lc3NhZ2UnICk7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCcnKTtcblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RhcnQgOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcblx0XHRcdFx0Y2xpcGJvYXJkSGFzSW1hZ2U7XG5cblx0XHRcdHRoaXMuaW1hZ2VQYXN0ZWQgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy4kcGFzdGVib2FyZFxuXHRcdFx0XHQub24oJ3Bhc3RlJyxmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRjbGlwYm9hcmRIYXNJbWFnZSA9IHdwLm1lZGlhLnRoZXBhc3RlLmNsaXBib2FyZEhhc0ltYWdlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdwYXN0ZVRleHQnICwgZnVuY3Rpb24oIGUsIGRhdGEgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGNsaXBib2FyZEhhc0ltYWdlIHx8IHNlbGYuaW1hZ2VQYXN0ZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCBsMTBuLnBhc3RlX2Vycm9yX25vX2ltYWdlICk7XG5cdFx0XHRcdFx0JCggdGhpcyApLmh0bWwoJycpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0Lm9uKCdwYXN0ZUltYWdlJyAsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggc2VsZi5pbWFnZVBhc3RlZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi50cmlnZ2VyKCAnYWN0aW9uOmNyZWF0ZTpkYXRhaW1hZ2UnLCB0aGlzICwgZGF0YS5kYXRhVVJMICk7XG5cdFx0XHRcdFx0c2VsZi5pbWFnZVBhc3RlZCA9IHRydWU7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oJ3Bhc3RlSW1hZ2VFcnJvcicgLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblx0XHRcdFx0XHRzZWxmLnNob3dfbWVzc2FnZSggbDEwbi5wYXN0ZV9lcnJvciApO1xuXHRcdFx0XHRcdCQoIHRoaXMgKS5odG1sKCcnKTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdDtcblxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRzZWxmLiRwYXN0ZWJvYXJkLmdldCgwKS5mb2N1cygpO1xuXHRcdFx0fSwxKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdG9wIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlSW1hZ2UnKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZUltYWdlRXJyb3InKVxuXHRcdFx0XHQub2ZmKCdwYXN0ZVRleHQnKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvdzpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLmhpZGUoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c2hvd19tZXNzYWdlOmZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0XHR0aGlzLiRtZXNzYWdlLnRleHQoIG1zZyApO1xuXHRcdH1cblx0fSk7XG5cblx0d3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VHcmFiYmVyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuLy9cdFx0dGFnTmFtZTogICAnZGl2Jyxcblx0XHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ3RoZXBhc3RlLWdyYWJiZXInKSxcblx0XHRjbGFzc05hbWUgOiAndGhlcGFzdGUtZ3JhYmJlcicsXG5cblx0XHRncmFiYmVyIDogbnVsbCxcblx0XHR1cGxvYWRlciA6IG51bGwsXG5cblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcmV0ID0gd3AubWVkaWEuVmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0XHR3cHVwbG9hZGVyXHRcdDogbnVsbCxcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lXHQ6IGwxMG4ucGFzdGVkLFxuXHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdCA6ICdpbWFnZS9wbmcnLFxuXHRcdFx0XHR0aXRsZVx0XHRcdDogbDEwbi5jb3B5X3Bhc3RlXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5ncmFiYmVyICA9IG5ldyB0aGlzLm9wdGlvbnMuZ3JhYmJlciggeyBjb250cm9sbGVyXHQ6IHRoaXMuY29udHJvbGxlciB9ICk7XG5cblx0XHRcdHRoaXMudXBsb2FkZXIgPSBuZXcgd3AubWVkaWEudGhlcGFzdGUudmlldy5EYXRhU291cmNlSW1hZ2VVcGxvYWRlcigge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlclx0XHRcdDogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0dXBsb2Rlclx0XHRcdFx0OiB0aGlzLm9wdGlvbnMud3B1cGxvYWRlcixcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRGaWxlTmFtZVx0XHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0RmlsZUZvcm1hdFx0OiB0aGlzLm9wdGlvbnMuZGVmYXVsdEZpbGVGb3JtYXRcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuZ3JhYmJlciwgJ2FjdGlvbjpjcmVhdGU6ZGF0YWltYWdlJyxcdHRoaXMuaW1hZ2VDcmVhdGVkICk7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnVwbG9hZGVyLCAnYWN0aW9uOmRpc2NhcmQ6ZGF0YWltYWdlJyxcdHRoaXMuc3RhcnRHcmFiYmluZyApO1xuXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0sXG5cdFx0cmVuZGVyOmZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRcdHRoaXMuJCgnLmNvbnRlbnQnKVxuXHRcdFx0XHQuYXBwZW5kKCB0aGlzLmdyYWJiZXIucmVuZGVyKCkuJGVsIClcblx0XHRcdFx0LmFwcGVuZCggdGhpcy51cGxvYWRlci5yZW5kZXIoKS4kZWwgKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRpbWFnZUNyZWF0ZWQgOiBmdW5jdGlvbiggZ3JhYmJlciAsIGltYWdlRGF0YSApIHtcblx0XHRcdHRoaXMuZ3JhYmJlci5zdG9wKCkuaGlkZSgpO1xuXHRcdFx0dGhpcy51cGxvYWRlci5zaG93KCkuc2V0SW1hZ2VEYXRhKCBpbWFnZURhdGEgKTtcblx0XHR9LFxuXHRcdHN0YXJ0R3JhYmJpbmc6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLmhpZGUoKTtcblx0XHRcdHRoaXMuZ3JhYmJlci5zaG93KCkuc3RhcnQoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0c3RvcEdyYWJiaW5nOmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5ncmFiYmVyLnN0b3AoKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Z2V0QWN0aW9uIDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ncmFiYmVyLmFjdGlvbjtcblx0XHR9LFxuXHRcdGRpc21pc3M6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdyYWJiZXIuc3RvcCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9KTtcblxufSkoalF1ZXJ5LHdpbmRvdyxtT3hpZSk7XG4iXX0= 
     1(function(){var e,t,a,i,n;e=window.jQuery,e.paste=function(e){var a;return"undefined"!=typeof console&&null!==console&&console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead."),a=t.mountNonInputable(e),a._container},e.fn.pastableNonInputable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is("textarea, input:text, [contenteditable]")||(t.mountNonInputable(a),a._pastable=!0);return this},e.fn.pastableTextarea=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not(textarea, input:text)")||(t.mountTextarea(a),a._pastable=!0);return this},e.fn.pastableContenteditable=function(){var a,i,n,r;for(r=this,i=0,n=r.length;i<n;i++)a=r[i],a._pastable||e(a).is(":not([contenteditable])")||(t.mountContenteditable(a),a._pastable=!0);return this},i=function(e,t){var a,i,n,r,o,s,l,p,d,u,h;if(null==t&&(t=512),!(p=e.match(/^data\:([^\;]+)\;base64\,(.+)$/)))return null;for(u=p,p=u[0],s=u[1],a=u[2],r=atob(a),n=[],d=0;d<r.length;){for(h=r.slice(d,d+t),o=new Array(h.length),l=0;l<h.length;)o[l]=h.charCodeAt(l),l++;i=new Uint8Array(o),n.push(i),d+=t}return new Blob(n,{type:s})},a=function(){return e(document.createElement("div")).attr("contenteditable",!0).attr("aria-hidden",!0).attr("tabindex",-1).css({width:1,height:1,position:"fixed",left:-100,overflow:"hidden"})},n=function(t,a){var i,n,r,o,s,l;return o=void 0,s=void 0,r=void 0,n=void 0,i=void 0,"area"===(l=t.nodeName.toLowerCase())?(o=t.parentNode,s=o.name,!(!t.href||!s||"map"!==o.nodeName.toLowerCase())&&(r=e("img[usemap='#"+s+"']"),r.length>0&&r.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(n=!t.disabled)&&(i=e(t).closest("fieldset")[0])&&(n=!i.disabled):n="a"===l?t.href||a:a,(n=n||e(t).is("[contenteditable]"))&&e(t).is(":visible"))},t=function(){function t(t,a){this._container=t,this._target=a,this._container=e(this._container),this._target=e(this._target).addClass("pastable"),this._container.on("paste",function(e){return function(t){var a,i,n,r,o,s,l,p,d,u,h,c,g;if(t.currentTarget!==t.target)return t.preventDefault();if(e._paste_event_fired=!0,null!=(null!=(d=t.originalEvent)?d.clipboardData:void 0))if(a=t.originalEvent.clipboardData,a.items)for(u=a.items,r=0,s=u.length;r<s;r++){if(n=u[r],n.type.match(/^image\//)){p=new FileReader,p.onload=function(t){return e._handleImage(t.target.result)};try{p.readAsDataURL(n.getAsFile())}catch(e){}t.preventDefault();break}"text/plain"===n.type&&n.getAsString(function(t){return e._target.trigger("pasteText",{text:t})})}else-1!==Array.prototype.indexOf.call(a.types,"text/plain")&&(g=a.getData("Text"),setTimeout(function(){return e._target.trigger("pasteText",{text:g})},1)),e._checkImagesInContainer(function(t){return e._handleImage(t)});if(a=window.clipboardData)if(null!=(h=g=a.getData("Text"))?h.length:void 0)setTimeout(function(){return e._target.trigger("pasteText",{text:g}),e._target.trigger("_pasteCheckContainerDone")},1);else{for(c=a.files,o=0,l=c.length;o<l;o++)i=c[o],e._handleImage(URL.createObjectURL(i));e._checkImagesInContainer(function(e){})}return null}}(this))}return t.prototype._target=null,t.prototype._container=null,t.mountNonInputable=function(i){var r;return r=new t(a().appendTo(i),i),e(i).on("click",function(e){return function(e){if(!n(e.target,!1))return r._container.focus()}}()),r._container.on("focus",function(t){return function(){return e(i).addClass("pastable-focus")}}()),r._container.on("blur",function(t){return function(){return e(i).removeClass("pastable-focus")}}())},t.mountTextarea=function(i){var n,r,o,s;return("undefined"!=typeof DataTransfer&&null!==DataTransfer?DataTransfer.prototype:void 0)&&(null!=(o=Object.getOwnPropertyDescriptor)&&null!=(s=o.call(Object,DataTransfer.prototype,"items"))?s.get:void 0)?this.mountContenteditable(i):(r=new t(a().insertBefore(i),i),n=!1,e(i).on("keyup",function(e){var t;return 17!==(t=e.keyCode)&&224!==t||(n=!1),null}),e(i).on("keydown",function(t){var a;return 17!==(a=t.keyCode)&&224!==a||(n=!0),null!=t.ctrlKey&&null!=t.metaKey&&(n=t.ctrlKey||t.metaKey),n&&86===t.keyCode&&(r._textarea_focus_stolen=!0,r._container.focus(),r._paste_event_fired=!1,setTimeout(function(t){return function(){if(!r._paste_event_fired)return e(i).focus(),r._textarea_focus_stolen=!1}}(),1)),null}),e(i).on("paste",function(e){return function(){}}()),e(i).on("focus",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).addClass("pastable-focus")}}()),e(i).on("blur",function(t){return function(){if(!r._textarea_focus_stolen)return e(i).removeClass("pastable-focus")}}()),e(r._target).on("_pasteCheckContainerDone",function(t){return function(){return e(i).focus(),r._textarea_focus_stolen=!1}}()),e(r._target).on("pasteText",function(t){return function(t,a){var n,r,o;return o=e(i).prop("selectionStart"),r=e(i).prop("selectionEnd"),n=e(i).val(),e(i).val(""+n.slice(0,o)+a.text+n.slice(r)),e(i)[0].setSelectionRange(o+a.text.length,o+a.text.length),e(i).trigger("change")}}()))},t.mountContenteditable=function(a){return new t(a,a),e(a).on("focus",function(t){return function(){return e(a).addClass("pastable-focus")}}()),e(a).on("blur",function(t){return function(){return e(a).removeClass("pastable-focus")}}())},t.prototype._handleImage=function(e){var t;return e.match(/^webkit\-fake\-url\:\/\//)?this._target.trigger("pasteImageError",{message:"You are trying to paste an image in Safari, however we are unable to retieve its data."}):(this._target.trigger("pasteImageStart"),t=new Image,t.crossOrigin="anonymous",t.onload=function(e){return function(){var a,n,r,o;n=document.createElement("canvas"),n.width=t.width,n.height=t.height,r=n.getContext("2d"),r.drawImage(t,0,0,n.width,n.height),o=null;try{o=n.toDataURL("image/png"),a=i(o)}catch(e){}return o&&e._target.trigger("pasteImage",{blob:a,dataURL:o,width:t.width,height:t.height}),e._target.trigger("pasteImageEnd")}}(this),t.onerror=function(t){return function(){return t._target.trigger("pasteImageError",{message:"Failed to get image from: "+e,url:e}),t._target.trigger("pasteImageEnd")}}(this),t.src=e)},t.prototype._checkImagesInContainer=function(t){var a,i,n,r,o;for(o=Math.floor(1e3*Math.random()),r=this._container.find("img"),i=0,n=r.length;i<n;i++)a=r[i],a["_paste_marked_"+o]=!0;return setTimeout(function(i){return function(){var n,r,s;for(s=i._container.find("img"),n=0,r=s.length;n<r;n++)a=s[n],a["_paste_marked_"+o]||(t(a.src),e(a).remove());return i._target.trigger("_pasteCheckContainerDone")}}(this),1)},t}()}).call(this),function(e,t,a){var i=(navigator.userAgent.indexOf("Chrome"),0);thepaste=t.thepaste=e.extend({supports:{paste:"paste"in document||"onpaste"in document||"object"==typeof window.onpaste||"onpaste"in document.createElement("DIV")},view:{},uploadImage:function(t,n,r){var o="__thepaste_box_"+i++,s=e(t).wrap('<div id="'+o+'" data-progress="0" class="thepaste-image-placeholder" contenteditable="false"></div>').parent();t.onload=function(){e(n.$("#"+o)).width(this.naturalWidth),e(n.$("#"+o)).height(this.naturalHeight)};var l,p,d=t.src,u=function(t){var i=t.match(/^data\:([^\;]+)\;/)[1],r=new a.Blob(null,{data:t}),s=thepaste.options.mime_types.convert[i],l=e('#post [name="post_title"]#title').val();void 0===s&&console.trace("Won't upload, bad mime type: "+i),void 0!==l?(l=l.replace(/([\^\!\?<>:"'\/\|\*§])/g,"").replace(/ +/g," "),r.name=thepaste.l10n.pasted_into+" "+l+"."+s):r.name=thepaste.l10n.pasted+"."+s,r.type=i;var u=function(){p.uploader.uploader.uploader.addFile(r)};p?(p.state().reset(),u()):(p=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:thepaste.l10n.copy_paste,multiple:!1}),p.close(),p.uploader.uploader&&p.uploader.uploader.ready?u():p.on("uploader:ready",u)),p.uploader.uploader.uploader.bind("UploadProgress",function(e){n.$("#"+o).attr("data-progress",e.total.percent)}),p.uploader.uploader.uploader.bind("FileUploaded",function(t,a){var i=n.$("#"+o),r='<img class="alignnone wp-image-'+a.attachment.id+' size-full" src="'+a.attachment.changed.url+'" />';i.replaceWith(r),n.$('img[src="'+d+'"]').each(function(){e(this).replaceWith(r)})}),p.uploader.uploader.uploader.bind("Error",function(e,t){console.log(e,t)})};return"blob:"===d.substr(0,5)?(l=new XMLHttpRequest,l.responseType="blob",l.onreadystatechange=function(){var e;4==l.readyState&&(e=new FileReader,e.onload=function(){u(e.result)},e.readAsDataURL(new Blob([l.response],{type:"image/png"})))},l.open("GET",d),l.send(null)):"data:"===d.substr(0,5)&&u(d),s},clipboardHasImage:function(t){var a=!1;return t.items?(e.each(t.items,function(e,t){if(t.type in thepaste.options.mime_types.paste)return a=!0,!1}),a):t.types?(e.each(thepaste.options.mime_types.paste,function(e,i){if(t.types.indexOf(e)>-1)return a=!0,!1}),a):null}},thepaste)}(jQuery,wp.media,mOxie),function(e,t){var a=wp.media.thepaste.l10n;e.extend(wp.Uploader.prototype,{success:function(e){}}),_.extend(wp.media.view.MediaFrame.Select.prototype,{_parentInitialize:wp.media.view.MediaFrame.Select.prototype.initialize,initialize:function(){this._parentInitialize.apply(this,arguments),this.bindPasteHandlers()},_parentBrowseRouter:wp.media.view.MediaFrame.Select.prototype.browseRouter,browseRouter:function(e){this._parentBrowseRouter.apply(this,arguments),wp.media.thepaste.supports.paste&&e.set({pasteboard:{text:a.copy_paste,priority:35}})},bindPasteHandlers:function(){var e=!1;this.on("content:render close",function(t){e&&"function"==typeof e.dismiss&&e.dismiss(),void 0!==t&&(e=t)},this),this.on("content:create:pasteboard",this.contentCreatePasteboard,this),this.on("content:render:pasteboard",this.contentRenderGrabber,this),frame=this},contentCreatePasteboard:function(e){this.state();this.currentPasteView=e.view=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this,grabber:wp.media.thepaste.view.Pasteboard}),this.listenTo(this.currentPasteView.uploader,"action:uploaded:dataimage",this.uploadedDataImage)},contentRenderGrabber:function(e){e.startGrabbing()},uploadedDataImage:function(e){this.stopListening(this.currentPasteView.uploader,"action:uploaded:dataimage");var t={view:null};this.browseContent(t),this.content.set(t.view),this.router.get().select("browse")}}),_.extend(wp.media.view.AttachmentsBrowser.prototype,{_parentInitialize:wp.media.view.AttachmentsBrowser.prototype.initialize,initialize:function(){var e,t=this;this._parentInitialize.apply(this,arguments),this.thepaste={paste:{grabber:!1,modal:!1,mode:"paste"},current:!1},this.controller instanceof wp.media.view.MediaFrame.Select||wp.media.thepaste.supports.paste&&(e=new wp.media.view.Button({text:a.copy_paste,className:"grabber-button",priority:-64,click:function(){t.thepaste.active=t.thepaste.paste,t.thepasteOpen(a.copy_paste)}}),this.thepaste.paste.grabber=new wp.media.thepaste.view.DataSourceImageGrabber({controller:this.controller,grabber:wp.media.thepaste.view.Pasteboard,wpuploader:this.controller.uploader.uploader.uploader}),this.toolbar.set("pasteModeButton",e.render()))},thepasteUploaded:function(e){this.thepaste.active.grabber.dismiss(),this.thepaste.modal.close(),this.thepasteClose()},thepasteError:function(e){console.log("error",e)},thepasteOpen:function(e){var t=this;this.thepaste.modal=new wp.media.view.Modal({controller:this,title:e}),this.thepaste.modal.content(this.thepaste.active.grabber),this.thepaste.modal.open(),this.thepaste.modal.on("close",function(){t.thepasteClose.apply(t),t.thepaste.active.grabber.stopGrabbing()}),this.thepaste.active.grabber.startGrabbing(),this.listenTo(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage",this.thepasteUploaded),this.listenTo(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage",this.thepasteError)},thepasteClose:function(){this.controller.deactivateMode(this.thepaste.active.mode).activateMode("edit"),this.stopListening(this.thepaste.active.grabber.uploader,"action:uploaded:dataimage"),this.stopListening(this.thepaste.active.grabber.uploader,"error:uploaded:dataimage")}})}(jQuery,window),function(e,t,a){var i=wp.media.thepaste,n=(wp.media.view.Button,wp.media.view.Modal,i.l10n);wp.media.thepaste.view.DataSourceImageUploader=wp.media.View.extend({template:wp.template("thepaste-uploader"),className:"thepaste-uploader",controller:null,image:null,$discardBtn:null,$uploadBtn:null,uploader:null,events:{'click [data-action="upload"]':"uploadImage",'click [data-action="discard"]':"discardImage"},initialize:function(){wp.media.View.prototype.initialize.apply(this,arguments),_.defaults(this.options,{defaultFileName:n.image});new wp.media.View({tagName:"div",className:"instruments",controller:this.controller});this.uploader=this.options.uploder},setImageData:function(e){var t=this.$imageContainer.html("").get(0),n=this,r=e.match(/data:(image\/(\w+));/)[1];return i.options.mime_types.convert[r]||(r=this.options.defaultFileFormat),this.image&&this.image.destroy(),this.image=new a.Image,this.image.onload=function(){var e=n.getUploader().getOption("resize"),a=Math.max(e.width/this.width,e.height/this.height);!!e&&a<1&&this.downsize(this.width*a,this.height*a),this.embed(t)},this.image.load(e),this.$imageContainer&&this.$imageContainer.append(this.image),this.$('[data-setting="format"] input[value="'+r+'"]').prop("checked",!0),this.disabled(!1),this},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$imageContainer=this.$(".image-container"),this.$discardBtn=this.$('[data-action="discard"]'),this.$uploadBtn=this.$('[data-action="upload"]'),this.$('[data-setting="title"]').val(this.options.defaultFileName),this},discardImage:function(){this.trigger("action:discard:dataimage",this),this.unbindUploaderEvents()},uploadImage:function(){var e=this.$('[data-setting="format"] :checked').val(),t=i.options.mime_types.convert[e],a=this.$('input[data-setting="title"]').val()+"."+t,n=this.image.getAsBlob(e,i.options.jpeg_quality);this.bindUploaderEvents(),n.detach(n.getSource()),n.name=a,n.type=e,this.getUploader().addFile(n,a),this.disabled(!0),this.trigger("action:upload:dataimage",this)},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},disabled:function(e){this.$discardBtn.prop("disabled",e),this.$uploadBtn.prop("disabled",e)},_uploadSuccessHandler:function(){this.trigger("action:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},_uploadErrorHandler:function(){this.trigger("error:uploaded:dataimage"),this.disabled(!1),this.unbindUploaderEvents()},bindUploaderEvents:function(){this.getUploader().bind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().bind("Error",this._uploadErrorHandler,this)},unbindUploaderEvents:function(){this.getUploader().unbind("FileUploaded",this._uploadSuccessHandler,this),this.getUploader().unbind("Error",this._uploadErrorHandler,this)},getUploader:function(){return this.controller.uploader.uploader.uploader}}),wp.media.thepaste.view.Pasteboard=wp.media.View.extend({template:wp.template("thepaste-pasteboard"),className:"thepaste-pasteboard",controller:null,action:"paste",$pasteboard:null,render:function(){var e=this;return wp.media.View.prototype.render.apply(this,arguments),this.$pasteboard=this.$(".injector").pastableContenteditable(),this.$message=this.$(".message"),this.$pasteboard.on("click",function(){e.show_message("")}),this},start:function(){var t,a=this;return this.imagePasted=!1,this.$pasteboard.on("paste",function(e){t=wp.media.thepaste.clipboardHasImage(e.originalEvent.clipboardData)}).on("pasteText",function(i,r){t||a.imagePasted||(a.show_message(n.paste_error_no_image),e(this).html(""))}).on("pasteImage",function(e,t){a.imagePasted||(a.trigger("action:create:dataimage",this,t.dataURL),a.imagePasted=!0)}).on("pasteImageError",function(t,i){a.show_message(n.paste_error),e(this).html("")}),setTimeout(function(){a.$pasteboard.get(0).focus()},1),this},stop:function(){return this.$pasteboard.off("pasteImage").off("pasteImageError").off("pasteText"),this},show:function(){return this.$el.show(),this},hide:function(){return this.$el.hide(),this},show_message:function(e){this.$message.text(e)}}),wp.media.thepaste.view.DataSourceImageGrabber=wp.media.View.extend({template:wp.template("thepaste-grabber"),className:"thepaste-grabber",grabber:null,uploader:null,initialize:function(){var e=wp.media.View.prototype.initialize.apply(this,arguments);return _.defaults(this.options,{wpuploader:null,defaultFileName:n.pasted,defaultFileFormat:"image/png",title:n.copy_paste}),this.grabber=new this.options.grabber({controller:this.controller}),this.uploader=new wp.media.thepaste.view.DataSourceImageUploader({controller:this.controller,uploder:this.options.wpuploader,defaultFileName:this.options.defaultFileName,defaultFileFormat:this.options.defaultFileFormat}),this.render(),this.listenTo(this.grabber,"action:create:dataimage",this.imageCreated),this.listenTo(this.uploader,"action:discard:dataimage",this.startGrabbing),e},render:function(){return wp.media.View.prototype.render.apply(this,arguments),this.$(".content").append(this.grabber.render().$el).append(this.uploader.render().$el),this},imageCreated:function(e,t){this.grabber.stop().hide(),this.uploader.show().setImageData(t)},startGrabbing:function(){return this.uploader.hide(),this.grabber.show().start(),this},stopGrabbing:function(){return this.grabber.stop(),this},getAction:function(){return this.grabber.action},dismiss:function(){return this.grabber.stop(),this}})}(jQuery,window,mOxie); 
     2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZS1wYXN0ZS5qcyJdLCJuYW1lcyI6WyIkIiwiUGFzdGUiLCJjcmVhdGVIaWRkZW5FZGl0YWJsZSIsImRhdGFVUkx0b0Jsb2IiLCJpc0ZvY3VzYWJsZSIsIndpbmRvdyIsImpRdWVyeSIsInBhc3RlIiwicGFzdGVDb250YWluZXIiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJtb3VudE5vbklucHV0YWJsZSIsIl9jb250YWluZXIiLCJmbiIsInBhc3RhYmxlTm9uSW5wdXRhYmxlIiwiZWwiLCJqIiwibGVuIiwicmVmIiwidGhpcyIsImxlbmd0aCIsIl9wYXN0YWJsZSIsImlzIiwicGFzdGFibGVUZXh0YXJlYSIsIm1vdW50VGV4dGFyZWEiLCJwYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSIsIm1vdW50Q29udGVudGVkaXRhYmxlIiwiZGF0YVVSTCIsInNsaWNlU2l6ZSIsImI2NERhdGEiLCJieXRlQXJyYXkiLCJieXRlQXJyYXlzIiwiYnl0ZUNoYXJhY3RlcnMiLCJieXRlTnVtYmVycyIsImNvbnRlbnRUeXBlIiwiaSIsIm0iLCJvZmZzZXQiLCJzbGljZSIsIm1hdGNoIiwiYXRvYiIsIkFycmF5IiwiY2hhckNvZGVBdCIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwiQmxvYiIsInR5cGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwiY3NzIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbiIsImxlZnQiLCJvdmVyZmxvdyIsImVsZW1lbnQiLCJoYXNUYWJpbmRleCIsImZpZWxkc2V0IiwiZm9jdXNhYmxlSWZWaXNpYmxlIiwiaW1nIiwibWFwIiwibWFwTmFtZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwYXJlbnROb2RlIiwibmFtZSIsImhyZWYiLCJ0ZXN0IiwiZGlzYWJsZWQiLCJjbG9zZXN0IiwiX3RhcmdldCIsImFkZENsYXNzIiwib24iLCJfdGhpcyIsImV2IiwiY2xpcGJvYXJkRGF0YSIsImZpbGUiLCJpdGVtIiwiayIsImxlbjEiLCJyZWFkZXIiLCJyZWYxIiwicmVmMiIsInJlZjMiLCJ0ZXh0IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsInByZXZlbnREZWZhdWx0IiwiX3Bhc3RlX2V2ZW50X2ZpcmVkIiwib3JpZ2luYWxFdmVudCIsIml0ZW1zIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImV2ZW50IiwiX2hhbmRsZUltYWdlIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImdldEFzRmlsZSIsImVycm9yIiwiZ2V0QXNTdHJpbmciLCJzdHJpbmciLCJ0cmlnZ2VyIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImNhbGwiLCJ0eXBlcyIsImdldERhdGEiLCJzZXRUaW1lb3V0IiwiX2NoZWNrSW1hZ2VzSW5Db250YWluZXIiLCJzcmMiLCJmaWxlcyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIm5vbklucHV0YWJsZSIsImFwcGVuZFRvIiwiZm9jdXMiLCJyZW1vdmVDbGFzcyIsInRleHRhcmVhIiwiY3RsRG93biIsIkRhdGFUcmFuc2ZlciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImluc2VydEJlZm9yZSIsImtleUNvZGUiLCJjdHJsS2V5IiwibWV0YUtleSIsIl90ZXh0YXJlYV9mb2N1c19zdG9sZW4iLCJkYXRhIiwiY29udGVudCIsImN1ckVuZCIsImN1clN0YXJ0IiwicHJvcCIsInZhbCIsInNldFNlbGVjdGlvblJhbmdlIiwiY29udGVudGVkaXRhYmxlIiwibG9hZGVyIiwibWVzc2FnZSIsIkltYWdlIiwiY3Jvc3NPcmlnaW4iLCJibG9iIiwiY2FudmFzIiwiY3R4IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJ1cmwiLCJjYiIsInRpbWVzcGFuIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZmluZCIsInJlbW92ZSIsImV4cG9ydHMiLCJvIiwiY291bnRlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInRoZXBhc3RlIiwiZXh0ZW5kIiwic3VwcG9ydHMiLCJ2aWV3IiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsImVkaXRvciIsInVwbG9hZF9wbGFjZWhvbGRlciIsImlkIiwiJGNvbnRhaW5lciIsIndyYXAiLCJwYXJlbnQiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0IiwieGhyIiwid29ya2Zsb3ciLCJ1cGxvYWQiLCJzdWZmaXgiLCJvcHRpb25zIiwibWltZV90eXBlcyIsImNvbnZlcnQiLCJwb3N0bmFtZSIsInRyYWNlIiwicmVwbGFjZSIsImwxMG4iLCJwYXN0ZWRfaW50byIsInBhc3RlZCIsImFkZEZpbGUiLCJ1cGxvYWRlciIsInN0YXRlIiwicmVzZXQiLCJ3cCIsIm1lZGlhIiwib3BlbiIsIndwQWN0aXZlRWRpdG9yIiwiZnJhbWUiLCJ0aXRsZSIsImNvcHlfcGFzdGUiLCJtdWx0aXBsZSIsImNsb3NlIiwicmVhZHkiLCJiaW5kIiwiZSIsInRvdGFsIiwicGVyY2VudCIsInVwIiwiYXJncyIsImltZ0hUTUwiLCJhdHRhY2htZW50IiwiY2hhbmdlZCIsInJlcGxhY2VXaXRoIiwiZWFjaCIsInN1YnN0ciIsIlhNTEh0dHBSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlIiwic2VuZCIsImNsaXBib2FyZEhhc0ltYWdlIiwiaGFzSW1hZ2UiLCJleHQiLCJtT3hpZSIsIlVwbG9hZGVyIiwic3VjY2VzcyIsImZpbGVfYXR0YWNobWVudCIsIl8iLCJNZWRpYUZyYW1lIiwiU2VsZWN0IiwiX3BhcmVudEluaXRpYWxpemUiLCJpbml0aWFsaXplIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJiaW5kUGFzdGVIYW5kbGVycyIsIl9wYXJlbnRCcm93c2VSb3V0ZXIiLCJicm93c2VSb3V0ZXIiLCJzZXQiLCJwYXN0ZWJvYXJkIiwicHJpb3JpdHkiLCJwcmV2aW91c0NvbnRlbnQiLCJkaXNtaXNzIiwiY29udGVudENyZWF0ZVBhc3RlYm9hcmQiLCJjb250ZW50UmVuZGVyR3JhYmJlciIsImN1cnJlbnRQYXN0ZVZpZXciLCJEYXRhU291cmNlSW1hZ2VHcmFiYmVyIiwiY29udHJvbGxlciIsImdyYWJiZXIiLCJQYXN0ZWJvYXJkIiwibGlzdGVuVG8iLCJ1cGxvYWRlZERhdGFJbWFnZSIsInN0YXJ0R3JhYmJpbmciLCJzdG9wTGlzdGVuaW5nIiwib2JqIiwiYnJvd3NlQ29udGVudCIsInJvdXRlciIsInNlbGVjdCIsIkF0dGFjaG1lbnRzQnJvd3NlciIsInBhc3RlQnRuIiwic2VsZiIsIm1vZGFsIiwibW9kZSIsImN1cnJlbnQiLCJCdXR0b24iLCJjbGFzc05hbWUiLCJjbGljayIsImFjdGl2ZSIsInRoZXBhc3RlT3BlbiIsIndwdXBsb2FkZXIiLCJ0b29sYmFyIiwicmVuZGVyIiwidGhlcGFzdGVVcGxvYWRlZCIsInRoZXBhc3RlQ2xvc2UiLCJ0aGVwYXN0ZUVycm9yIiwiTW9kYWwiLCJzdG9wR3JhYmJpbmciLCJkZWFjdGl2YXRlTW9kZSIsImFjdGl2YXRlTW9kZSIsIkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyIiwiVmlldyIsInRlbXBsYXRlIiwiJGRpc2NhcmRCdG4iLCIkdXBsb2FkQnRuIiwiZXZlbnRzIiwiY2xpY2sgW2RhdGEtYWN0aW9uPVwidXBsb2FkXCJdIiwiY2xpY2sgW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXSIsImRlZmF1bHRzIiwiZGVmYXVsdEZpbGVOYW1lIiwidGFnTmFtZSIsInVwbG9kZXIiLCJzZXRJbWFnZURhdGEiLCJjb250YWluZXIiLCIkaW1hZ2VDb250YWluZXIiLCJodG1sIiwiZm9ybWF0IiwiZGVmYXVsdEZpbGVGb3JtYXQiLCJkZXN0cm95Iiwib3B0cyIsImdldFVwbG9hZGVyIiwiZ2V0T3B0aW9uIiwic2NhbGUiLCJtYXgiLCJkb3duc2l6ZSIsImVtYmVkIiwibG9hZCIsImFwcGVuZCIsImRpc2NhcmRJbWFnZSIsInVuYmluZFVwbG9hZGVyRXZlbnRzIiwiZ2V0QXNCbG9iIiwianBlZ19xdWFsaXR5IiwiYmluZFVwbG9hZGVyRXZlbnRzIiwiZGV0YWNoIiwiZ2V0U291cmNlIiwic2hvdyIsIiRlbCIsImhpZGUiLCJfdXBsb2FkU3VjY2Vzc0hhbmRsZXIiLCJfdXBsb2FkRXJyb3JIYW5kbGVyIiwidW5iaW5kIiwiYWN0aW9uIiwiJHBhc3RlYm9hcmQiLCIkbWVzc2FnZSIsInNob3dfbWVzc2FnZSIsInN0YXJ0IiwiaW1hZ2VQYXN0ZWQiLCJwYXN0ZV9lcnJvcl9ub19pbWFnZSIsInBhc3RlX2Vycm9yIiwic3RvcCIsIm9mZiIsIm1zZyIsInJldCIsImltYWdlQ3JlYXRlZCIsImltYWdlRGF0YSIsImdldEFjdGlvbiJdLCJtYXBwaW5ncyI6IkNBUUEsV0FDRSxHQUFJQSxHQUFHQyxFQUFPQyxFQUFzQkMsRUFBZUMsQ0FFbkRKLEdBQUlLLE9BQU9DLE9BRVhOLEVBQUVPLE1BQVEsU0FBU0MsR0FDakIsR0FBSUMsRUFLSixPQUp1QixtQkFBWkMsVUFBdUMsT0FBWkEsU0FDcENBLFFBQVFDLElBQUksMEZBRWRGLEVBQUtSLEVBQU1XLGtCQUFrQkosR0FDdEJDLEVBQUdJLFlBR1piLEVBQUVjLEdBQUdDLHFCQUF1QixXQUMxQixHQUFJQyxHQUFJQyxFQUFHQyxFQUFLQyxDQUVoQixLQURBQSxFQUFNQyxLQUNESCxFQUFJLEVBQUdDLEVBQU1DLEVBQUlFLE9BQVFKLEVBQUlDLEVBQUtELElBQ3JDRCxFQUFLRyxFQUFJRixHQUNMRCxFQUFHTSxXQUFhdEIsRUFBRWdCLEdBQUlPLEdBQUcsNkNBRzdCdEIsRUFBTVcsa0JBQWtCSSxHQUN4QkEsRUFBR00sV0FBWSxFQUVqQixPQUFPRixPQUdUcEIsRUFBRWMsR0FBR1UsaUJBQW1CLFdBQ3RCLEdBQUlSLEdBQUlDLEVBQUdDLEVBQUtDLENBRWhCLEtBREFBLEVBQU1DLEtBQ0RILEVBQUksRUFBR0MsRUFBTUMsRUFBSUUsT0FBUUosRUFBSUMsRUFBS0QsSUFDckNELEVBQUtHLEVBQUlGLEdBQ0xELEVBQUdNLFdBQWF0QixFQUFFZ0IsR0FBSU8sR0FBRyxnQ0FHN0J0QixFQUFNd0IsY0FBY1QsR0FDcEJBLEVBQUdNLFdB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U0FBU0csS0FBS2tILHlCQUNyQ2hDLFdBQWVuTyxLQUFLbU8sV0FDcEIyQyxRQUFhOVEsS0FBS2dLLFFBQVF5RixXQUMxQm1CLGdCQUFtQjVRLEtBQUtnSyxRQUFRNEcsZ0JBQ2hDUSxrQkFBb0JwUixLQUFLZ0ssUUFBUW9ILG9CQUV2Q3BSLEtBQUsyUCxTQUVMM1AsS0FBS3NPLFNBQVV0TyxLQUFLb08sUUFBUywwQkFBMkJwTyxLQUFLd1QsY0FDN0R4VCxLQUFLc08sU0FBVXRPLEtBQUswSyxTQUFVLDJCQUE0QjFLLEtBQUt3TyxlQUV4RCtFLEdBRVI1RCxPQUFPLFdBU04sTUFOQTlFLElBQUdDLE1BQU1zRixLQUFLaEwsVUFBVXVLLE9BQU90QyxNQUFPck4sS0FBTXNOLFdBRTVDdE4sS0FBS3BCLEVBQUUsWUFDTGtULE9BQVE5UixLQUFLb08sUUFBUXVCLFNBQVM0QyxLQUM5QlQsT0FBUTlSLEtBQUswSyxTQUFTaUYsU0FBUzRDLEtBRTFCdlMsTUFFUndULGFBQWUsU0FBVXBGLEVBQVVxRixHQUNsQ3pULEtBQUtvTyxRQUFRZ0YsT0FBT1osT0FDcEJ4UyxLQUFLMEssU0FBUzRILE9BQU92QixhQUFjMEMsSUFFcENqRixjQUFjLFdBR2IsTUFGQXhPLE1BQUswSyxTQUFTOEgsT0FDZHhTLEtBQUtvTyxRQUFRa0UsT0FBT1UsUUFDYmhULE1BRVJnUSxhQUFhLFdBRVosTUFEQWhRLE1BQUtvTyxRQUFRZ0YsT0FDTnBULE1BRVIwVCxVQUFZLFdBQ1gsTUFBTzFULE1BQUtvTyxRQUFRd0UsUUFFckI5RSxRQUFRLFdBRVAsTUFEQTlOLE1BQUtvTyxRQUFRZ0YsT0FDTnBULFNBSVBkLE9BQU9ELE9BQU8yTiIsImZpbGUiOiJ0aGUtcGFzdGUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcblxuLypcbnBhc3RlLmpzIGlzIGFuIGludGVyZmFjZSB0byByZWFkIGRhdGEgKCB0ZXh0IC8gaW1hZ2UgKSBmcm9tIGNsaXBib2FyZCBpbiBkaWZmZXJlbnQgYnJvd3NlcnMuIEl0IGFsc28gY29udGFpbnMgc2V2ZXJhbCBoYWNrcy5cblxuaHR0cHM6Ly9naXRodWIuY29tL2xheWVyc3Nzcy9wYXN0ZS5qc1xuICovXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyICQsIFBhc3RlLCBjcmVhdGVIaWRkZW5FZGl0YWJsZSwgZGF0YVVSTHRvQmxvYiwgaXNGb2N1c2FibGU7XG5cbiAgJCA9IHdpbmRvdy5qUXVlcnk7XG5cbiAgJC5wYXN0ZSA9IGZ1bmN0aW9uKHBhc3RlQ29udGFpbmVyKSB7XG4gICAgdmFyIHBtO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkRFUFJFQ0FURUQ6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJC5mbi5wYXN0YWJsZU5vbklucHV0YWJsZSgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwbSA9IFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKHBhc3RlQ29udGFpbmVyKTtcbiAgICByZXR1cm4gcG0uX2NvbnRhaW5lcjtcbiAgfTtcblxuICAkLmZuLnBhc3RhYmxlTm9uSW5wdXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsLCBqLCBsZW4sIHJlZjtcbiAgICByZWYgPSB0aGlzO1xuICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgZWwgPSByZWZbal07XG4gICAgICBpZiAoZWwuX3Bhc3RhYmxlIHx8ICQoZWwpLmlzKCd0ZXh0YXJlYSwgaW5wdXQ6dGV4dCwgW2NvbnRlbnRlZGl0YWJsZV0nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Tm9uSW5wdXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gICQuZm4ucGFzdGFibGVUZXh0YXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdCh0ZXh0YXJlYSwgaW5wdXQ6dGV4dCknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50VGV4dGFyZWEoZWwpO1xuICAgICAgZWwuX3Bhc3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgJC5mbi5wYXN0YWJsZUNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbCwgaiwgbGVuLCByZWY7XG4gICAgcmVmID0gdGhpcztcbiAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGVsID0gcmVmW2pdO1xuICAgICAgaWYgKGVsLl9wYXN0YWJsZSB8fCAkKGVsKS5pcygnOm5vdChbY29udGVudGVkaXRhYmxlXSknKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFBhc3RlLm1vdW50Q29udGVudGVkaXRhYmxlKGVsKTtcbiAgICAgIGVsLl9wYXN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGRhdGFVUkx0b0Jsb2IgPSBmdW5jdGlvbihkYXRhVVJMLCBzbGljZVNpemUpIHtcbiAgICB2YXIgYjY0RGF0YSwgYnl0ZUFycmF5LCBieXRlQXJyYXlzLCBieXRlQ2hhcmFjdGVycywgYnl0ZU51bWJlcnMsIGNvbnRlbnRUeXBlLCBpLCBtLCBvZmZzZXQsIHJlZiwgc2xpY2U7XG4gICAgaWYgKHNsaWNlU2l6ZSA9PSBudWxsKSB7XG4gICAgICBzbGljZVNpemUgPSA1MTI7XG4gICAgfVxuICAgIGlmICghKG0gPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NFxcLCguKykkLykpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVmID0gbSwgbSA9IHJlZlswXSwgY29udGVudFR5cGUgPSByZWZbMV0sIGI2NERhdGEgPSByZWZbMl07XG4gICAgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGJ5dGVBcnJheXMgPSBbXTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGgpIHtcbiAgICAgIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuICAgICAgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKGkgPCBzbGljZS5sZW5ndGgpIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgICAgIG9mZnNldCArPSBzbGljZVNpemU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pO1xuICB9O1xuXG4gIGNyZWF0ZUhpZGRlbkVkaXRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSkuYXR0cigndGFiaW5kZXgnLCAtMSkuY3NzKHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgaGVpZ2h0OiAxLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgfSk7XG4gIH07XG5cbiAgaXNGb2N1c2FibGUgPSBmdW5jdGlvbihlbGVtZW50LCBoYXNUYWJpbmRleCkge1xuICAgIHZhciBmaWVsZHNldCwgZm9jdXNhYmxlSWZWaXNpYmxlLCBpbWcsIG1hcCwgbWFwTmFtZSwgbm9kZU5hbWU7XG4gICAgbWFwID0gdm9pZCAwO1xuICAgIG1hcE5hbWUgPSB2b2lkIDA7XG4gICAgaW1nID0gdm9pZCAwO1xuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IHZvaWQgMDtcbiAgICBmaWVsZHNldCA9IHZvaWQgMDtcbiAgICBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoJ2FyZWEnID09PSBub2RlTmFtZSkge1xuICAgICAgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgbWFwTmFtZSA9IG1hcC5uYW1lO1xuICAgICAgaWYgKCFlbGVtZW50LmhyZWYgfHwgIW1hcE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdtYXAnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGltZyA9ICQoJ2ltZ1t1c2VtYXA9XFwnIycgKyBtYXBOYW1lICsgJ1xcJ10nKTtcbiAgICAgIHJldHVybiBpbWcubGVuZ3RoID4gMCAmJiBpbWcuaXMoJzp2aXNpYmxlJyk7XG4gICAgfVxuICAgIGlmICgvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgICBpZiAoZm9jdXNhYmxlSWZWaXNpYmxlKSB7XG4gICAgICAgIGZpZWxkc2V0ID0gJChlbGVtZW50KS5jbG9zZXN0KCdmaWVsZHNldCcpWzBdO1xuICAgICAgICBpZiAoZmllbGRzZXQpIHtcbiAgICAgICAgICBmb2N1c2FibGVJZlZpc2libGUgPSAhZmllbGRzZXQuZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCdhJyA9PT0gbm9kZU5hbWUpIHtcbiAgICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGVsZW1lbnQuaHJlZiB8fCBoYXNUYWJpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNhYmxlSWZWaXNpYmxlID0gaGFzVGFiaW5kZXg7XG4gICAgfVxuICAgIGZvY3VzYWJsZUlmVmlzaWJsZSA9IGZvY3VzYWJsZUlmVmlzaWJsZSB8fCAkKGVsZW1lbnQpLmlzKCdbY29udGVudGVkaXRhYmxlXScpO1xuICAgIHJldHVybiBmb2N1c2FibGVJZlZpc2libGUgJiYgJChlbGVtZW50KS5pcygnOnZpc2libGUnKTtcbiAgfTtcblxuICBQYXN0ZSA9IChmdW5jdGlvbigpIHtcbiAgICBQYXN0ZS5wcm90b3R5cGUuX3RhcmdldCA9IG51bGw7XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NvbnRhaW5lciA9IG51bGw7XG5cbiAgICBQYXN0ZS5tb3VudE5vbklucHV0YWJsZSA9IGZ1bmN0aW9uKG5vbklucHV0YWJsZSkge1xuICAgICAgdmFyIHBhc3RlO1xuICAgICAgcGFzdGUgPSBuZXcgUGFzdGUoY3JlYXRlSGlkZGVuRWRpdGFibGUoKS5hcHBlbmRUbyhub25JbnB1dGFibGUpLCBub25JbnB1dGFibGUpO1xuICAgICAgJChub25JbnB1dGFibGUpLm9uKCdjbGljaycsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICBpZiAoIWlzRm9jdXNhYmxlKGV2LnRhcmdldCwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHBhc3RlLl9jb250YWluZXIub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChub25JbnB1dGFibGUpLmFkZENsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgcmV0dXJuIHBhc3RlLl9jb250YWluZXIub24oJ2JsdXInLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKG5vbklucHV0YWJsZSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIFBhc3RlLm1vdW50VGV4dGFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSkge1xuICAgICAgdmFyIGN0bERvd24sIHBhc3RlLCByZWYsIHJlZjE7XG4gICAgICBpZiAoKHR5cGVvZiBEYXRhVHJhbnNmZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgRGF0YVRyYW5zZmVyICE9PSBudWxsID8gRGF0YVRyYW5zZmVyLnByb3RvdHlwZSA6IHZvaWQgMCkgJiYgKChyZWYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSAhPSBudWxsID8gKHJlZjEgPSByZWYuY2FsbChPYmplY3QsIERhdGFUcmFuc2Zlci5wcm90b3R5cGUsICdpdGVtcycpKSAhPSBudWxsID8gcmVmMS5nZXQgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vdW50Q29udGVudGVkaXRhYmxlKHRleHRhcmVhKTtcbiAgICAgIH1cbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNyZWF0ZUhpZGRlbkVkaXRhYmxlKCkuaW5zZXJ0QmVmb3JlKHRleHRhcmVhKSwgdGV4dGFyZWEpO1xuICAgICAgY3RsRG93biA9IGZhbHNlO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2tleXVwJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgICQodGV4dGFyZWEpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgdmFyIHJlZjI7XG4gICAgICAgIGlmICgocmVmMiA9IGV2LmtleUNvZGUpID09PSAxNyB8fCByZWYyID09PSAyMjQpIHtcbiAgICAgICAgICBjdGxEb3duID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2LmN0cmxLZXkgIT0gbnVsbCkgJiYgKGV2Lm1ldGFLZXkgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjdGxEb3duID0gZXYuY3RybEtleSB8fCBldi5tZXRhS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdGxEb3duICYmIGV2LmtleUNvZGUgPT09IDg2KSB7XG4gICAgICAgICAgcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IHRydWU7XG4gICAgICAgICAgcGFzdGUuX2NvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIHBhc3RlLl9wYXN0ZV9ldmVudF9maXJlZCA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmICghcGFzdGUuX3Bhc3RlX2V2ZW50X2ZpcmVkKSB7XG4gICAgICAgICAgICAgICAgJCh0ZXh0YXJlYSkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFzdGUuX3RleHRhcmVhX2ZvY3VzX3N0b2xlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ3Bhc3RlJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJCh0ZXh0YXJlYSkub24oJ2ZvY3VzJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIXBhc3RlLl90ZXh0YXJlYV9mb2N1c19zdG9sZW4pIHtcbiAgICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS5hZGRDbGFzcygncGFzdGFibGUtZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICAkKHRleHRhcmVhKS5vbignYmx1cicsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gJCh0ZXh0YXJlYSkucmVtb3ZlQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgJChwYXN0ZS5fdGFyZ2V0KS5vbignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKHRleHRhcmVhKS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBwYXN0ZS5fdGV4dGFyZWFfZm9jdXNfc3RvbGVuID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChwYXN0ZS5fdGFyZ2V0KS5vbigncGFzdGVUZXh0JywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihldiwgZGF0YSkge1xuICAgICAgICAgIHZhciBjb250ZW50LCBjdXJFbmQsIGN1clN0YXJ0O1xuICAgICAgICAgIGN1clN0YXJ0ID0gJCh0ZXh0YXJlYSkucHJvcCgnc2VsZWN0aW9uU3RhcnQnKTtcbiAgICAgICAgICBjdXJFbmQgPSAkKHRleHRhcmVhKS5wcm9wKCdzZWxlY3Rpb25FbmQnKTtcbiAgICAgICAgICBjb250ZW50ID0gJCh0ZXh0YXJlYSkudmFsKCk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSkudmFsKFwiXCIgKyBjb250ZW50LnNsaWNlKDAsIGN1clN0YXJ0KSArIGRhdGEudGV4dCArIGNvbnRlbnQuc2xpY2UoY3VyRW5kKSk7XG4gICAgICAgICAgJCh0ZXh0YXJlYSlbMF0uc2V0U2VsZWN0aW9uUmFuZ2UoY3VyU3RhcnQgKyBkYXRhLnRleHQubGVuZ3RoLCBjdXJTdGFydCArIGRhdGEudGV4dC5sZW5ndGgpO1xuICAgICAgICAgIHJldHVybiAkKHRleHRhcmVhKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgUGFzdGUubW91bnRDb250ZW50ZWRpdGFibGUgPSBmdW5jdGlvbihjb250ZW50ZWRpdGFibGUpIHtcbiAgICAgIHZhciBwYXN0ZTtcbiAgICAgIHBhc3RlID0gbmV3IFBhc3RlKGNvbnRlbnRlZGl0YWJsZSwgY29udGVudGVkaXRhYmxlKTtcbiAgICAgICQoY29udGVudGVkaXRhYmxlKS5vbignZm9jdXMnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKGNvbnRlbnRlZGl0YWJsZSkuYWRkQ2xhc3MoJ3Bhc3RhYmxlLWZvY3VzJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLm9uKCdibHVyJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJChjb250ZW50ZWRpdGFibGUpLnJlbW92ZUNsYXNzKCdwYXN0YWJsZS1mb2N1cycpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBQYXN0ZShfY29udGFpbmVyLCBfdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9jb250YWluZXIgPSBfY29udGFpbmVyO1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gX3RhcmdldDtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9ICQodGhpcy5fY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX3RhcmdldCA9ICQodGhpcy5fdGFyZ2V0KS5hZGRDbGFzcygncGFzdGFibGUnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5vbigncGFzdGUnLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgdmFyIGNsaXBib2FyZERhdGEsIGZpbGUsIGl0ZW0sIGosIGssIGxlbiwgbGVuMSwgcmVhZGVyLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHRleHQ7XG4gICAgICAgICAgaWYgKGV2LmN1cnJlbnRUYXJnZXQgIT09IGV2LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzLl9wYXN0ZV9ldmVudF9maXJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKCgocmVmID0gZXYub3JpZ2luYWxFdmVudCkgIT0gbnVsbCA/IHJlZi5jbGlwYm9hcmREYXRhIDogdm9pZCAwKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhID0gZXYub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhO1xuICAgICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgcmVmMSA9IGNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gcmVmMVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLm1hdGNoKC9eaW1hZ2VcXC8vKSkge1xuICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2hhbmRsZUltYWdlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGl0ZW0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0L3BsYWluJykge1xuICAgICAgICAgICAgICAgICAgaXRlbS5nZXRBc1N0cmluZyhmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKC0xICE9PSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGNsaXBib2FyZERhdGEudHlwZXMsICd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlVGV4dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9oYW5kbGVJbWFnZShzcmMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgaWYgKChyZWYyID0gKHRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKSkpICE9IG51bGwgPyByZWYyLmxlbmd0aCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVUZXh0Jywge1xuICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ19wYXN0ZUNoZWNrQ29udGFpbmVyRG9uZScpO1xuICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZjMgPSBjbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMy5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gcmVmM1trXTtcbiAgICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlSW1hZ2UoVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIoZnVuY3Rpb24oc3JjKSB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuICAgIFBhc3RlLnByb3RvdHlwZS5faGFuZGxlSW1hZ2UgPSBmdW5jdGlvbihzcmMpIHtcbiAgICAgIHZhciBsb2FkZXI7XG4gICAgICBpZiAoc3JjLm1hdGNoKC9ed2Via2l0XFwtZmFrZVxcLXVybFxcOlxcL1xcLy8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgIG1lc3NhZ2U6IFwiWW91IGFyZSB0cnlpbmcgdG8gcGFzdGUgYW4gaW1hZ2UgaW4gU2FmYXJpLCBob3dldmVyIHdlIGFyZSB1bmFibGUgdG8gcmV0aWV2ZSBpdHMgZGF0YS5cIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlU3RhcnQnKTtcbiAgICAgIGxvYWRlciA9IG5ldyBJbWFnZSgpO1xuICAgICAgbG9hZGVyLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICAgIGxvYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBibG9iLCBjYW52YXMsIGN0eCwgZGF0YVVSTDtcbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBsb2FkZXIud2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IGxvYWRlci5oZWlnaHQ7XG4gICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShsb2FkZXIsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgZGF0YVVSTCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgICAgICAgIGJsb2IgPSBkYXRhVVJMdG9CbG9iKGRhdGFVUkwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgIGlmIChkYXRhVVJMKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2UnLCB7XG4gICAgICAgICAgICAgIGJsb2I6IGJsb2IsXG4gICAgICAgICAgICAgIGRhdGFVUkw6IGRhdGFVUkwsXG4gICAgICAgICAgICAgIHdpZHRoOiBsb2FkZXIud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogbG9hZGVyLmhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdGFyZ2V0LnRyaWdnZXIoJ3Bhc3RlSW1hZ2VFbmQnKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgbG9hZGVyLm9uZXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLl90YXJnZXQudHJpZ2dlcigncGFzdGVJbWFnZUVycm9yJywge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJGYWlsZWQgdG8gZ2V0IGltYWdlIGZyb206IFwiICsgc3JjLFxuICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3RhcmdldC50cmlnZ2VyKCdwYXN0ZUltYWdlRW5kJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJldHVybiBsb2FkZXIuc3JjID0gc3JjO1xuICAgIH07XG5cbiAgICBQYXN0ZS5wcm90b3R5cGUuX2NoZWNrSW1hZ2VzSW5Db250YWluZXIgPSBmdW5jdGlvbihjYikge1xuICAgICAgdmFyIGltZywgaiwgbGVuLCByZWYsIHRpbWVzcGFuO1xuICAgICAgdGltZXNwYW4gPSBNYXRoLmZsb29yKDEwMDAgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgIHJlZiA9IHRoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBpbWcgPSByZWZbal07XG4gICAgICAgIGltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaywgbGVuMSwgcmVmMTtcbiAgICAgICAgICByZWYxID0gX3RoaXMuX2NvbnRhaW5lci5maW5kKCdpbWcnKTtcbiAgICAgICAgICBmb3IgKGsgPSAwLCBsZW4xID0gcmVmMS5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgIGltZyA9IHJlZjFba107XG4gICAgICAgICAgICBpZiAoIWltZ1tcIl9wYXN0ZV9tYXJrZWRfXCIgKyB0aW1lc3Bhbl0pIHtcbiAgICAgICAgICAgICAgY2IoaW1nLnNyYyk7XG4gICAgICAgICAgICAgICQoaW1nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXQudHJpZ2dlcignX3Bhc3RlQ2hlY2tDb250YWluZXJEb25lJyk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgMSk7XG4gICAgfTtcblxuICAgIHJldHVybiBQYXN0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG4oZnVuY3Rpb24oICQsIGV4cG9ydHMsIG8gKSB7XG5cblx0dmFyIGlzX2Nocm9tZVx0PSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEsXG5cdFx0Y291bnRlciA9IDAsXG5cdFx0d29ya2Zsb3c7XG5cblx0dGhlcGFzdGUgPSBleHBvcnRzLnRoZXBhc3RlID0gJC5leHRlbmQoIHtcblx0XHRzdXBwb3J0cyA6IHtcblx0XHRcdHBhc3RlOiAoICgncGFzdGUnIGluIGRvY3VtZW50KSB8fCAoJ29ucGFzdGUnIGluIGRvY3VtZW50KSB8fCB0eXBlb2Yod2luZG93Lm9ucGFzdGUpID09PSAnb2JqZWN0JyB8fCAoICdvbnBhc3RlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKSApICksIC8vIGJyb3dzZXJcblx0XHR9LFxuXHRcdHZpZXc6e30sXG5cblx0XHR1cGxvYWRJbWFnZTogZnVuY3Rpb24oIGltYWdlLCBlZGl0b3IsIHVwbG9hZF9wbGFjZWhvbGRlciApIHtcblxuXHRcdFx0dmFyIGlkID0gJ19fdGhlcGFzdGVfYm94XycrKGNvdW50ZXIrKyksXG5cdFx0XHRcdCRjb250YWluZXIgPSAkKGltYWdlKVxuXHRcdFx0XHRcdC53cmFwKCc8ZGl2IGlkPVwiJytpZCsnXCIgZGF0YS1wcm9ncmVzcz1cIjBcIiBjbGFzcz1cInRoZXBhc3RlLWltYWdlLXBsYWNlaG9sZGVyXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj48L2Rpdj4nKVxuXHRcdFx0XHRcdC5wYXJlbnQoKTtcblxuXHRcdFx0XHQvLyBzZXQgJGNvbnRhaW5lciBzaXplIG9uY2Uga25vd25cblx0XHRcdFx0aW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCggZWRpdG9yLiQoJyMnK2lkKSApLndpZHRoKCB0aGlzLm5hdHVyYWxXaWR0aCApO1xuXHRcdFx0XHRcdCQoIGVkaXRvci4kKCcjJytpZCkgKS5oZWlnaHQoIHRoaXMubmF0dXJhbEhlaWdodCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdHZhciB4aHIsXG5cdFx0XHRcdHdvcmtmbG93LFxuXHRcdFx0XHRzcmMgPSBpbWFnZS5zcmMsXG5cdFx0XHRcdHVwbG9hZCA9IGZ1bmN0aW9uKCBkYXRhVVJMICl7XG5cdFx0XHRcdFx0dmFyIHR5cGUgPSBkYXRhVVJMLm1hdGNoKC9eZGF0YVxcOihbXlxcO10rKVxcOy8pWzFdLFxuXHRcdFx0XHRcdFx0ZmlsZSA9IG5ldyBvLkJsb2IoIG51bGwsIHsgZGF0YTogZGF0YVVSTCB9ICksXG5cdFx0XHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdLFxuXHRcdFx0XHRcdFx0cG9zdG5hbWUgPSAkKCcjcG9zdCBbbmFtZT1cInBvc3RfdGl0bGVcIl0jdGl0bGUnKS52YWwoKTtcblx0XHRcdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2Ygc3VmZml4ICkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS50cmFjZSggJ1dvblxcJ3QgdXBsb2FkLCBiYWQgbWltZSB0eXBlOiAnICsgdHlwZSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBwb3N0bmFtZSApIHtcblx0XHRcdFx0XHRcdHBvc3RuYW1lID0gcG9zdG5hbWUucmVwbGFjZSgvKFtcXF5cXCFcXD88PjpcIidcXC9cXHxcXCrCp10pL2csJycpLnJlcGxhY2UoLyArL2csJyAnKTtcblx0XHRcdFx0XHRcdGZpbGUubmFtZSA9IHRoZXBhc3RlLmwxMG4ucGFzdGVkX2ludG8gKyAnICcgKyBwb3N0bmFtZSArICcuJyArIHN1ZmZpeDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZmlsZS5uYW1lID0gdGhlcGFzdGUubDEwbi5wYXN0ZWQgKyAnLicgKyBzdWZmaXg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZpbGUudHlwZSA9IHR5cGU7XG5cblx0XHRcdFx0XHR2YXIgYWRkRmlsZSA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5hZGRGaWxlKCBmaWxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggISB3b3JrZmxvdyApIHtcblx0XHRcdFx0XHRcdHdvcmtmbG93ID0gd3AubWVkaWEuZWRpdG9yLm9wZW4oIHdpbmRvdy53cEFjdGl2ZUVkaXRvciwge1xuXHRcdFx0XHRcdFx0XHRmcmFtZTpcdFx0J3Bvc3QnLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZTpcdFx0J2luc2VydCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOlx0XHR0aGVwYXN0ZS5sMTBuLmNvcHlfcGFzdGUsXG5cdFx0XHRcdFx0XHRcdG11bHRpcGxlOlx0ZmFsc2Vcblx0XHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdFx0d29ya2Zsb3cuY2xvc2UoKTtcblxuXHRcdFx0XHRcdFx0aWYgKCB3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlciAmJiB3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci5yZWFkeSApIHtcblx0XHRcdFx0XHRcdFx0YWRkRmlsZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0d29ya2Zsb3cub24oICd1cGxvYWRlcjpyZWFkeScsIGFkZEZpbGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0d29ya2Zsb3cuc3RhdGUoKS5yZXNldCgpO1xuXHRcdFx0XHRcdFx0YWRkRmlsZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdVcGxvYWRQcm9ncmVzcycsZnVuY3Rpb24oIGUgKXtcblx0XHRcdFx0XHRcdGVkaXRvci4kKCcjJytpZCkuYXR0cignZGF0YS1wcm9ncmVzcycsZS50b3RhbC5wZXJjZW50KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR3b3JrZmxvdy51cGxvYWRlci51cGxvYWRlci51cGxvYWRlci5iaW5kKCdGaWxlVXBsb2FkZWQnLGZ1bmN0aW9uKCB1cCwgYXJncyApe1xuXG5cdFx0XHRcdFx0XHR2YXIgJGNvbnRhaW5lciA9IGVkaXRvci4kKCcjJytpZCksXG5cdFx0XHRcdFx0XHRcdGltZ0hUTUwgPSAnPGltZyBjbGFzcz1cImFsaWdubm9uZSB3cC1pbWFnZS0nK2FyZ3MuYXR0YWNobWVudC5pZCsnIHNpemUtZnVsbFwiIHNyYz1cIicrYXJncy5hdHRhY2htZW50LmNoYW5nZWQudXJsKydcIiAvPic7XG5cblx0XHRcdFx0XHRcdC8vIHJlcGxhY2UgaW1hZ2Vcblx0XHRcdFx0XHRcdCRjb250YWluZXIucmVwbGFjZVdpdGgoIGltZ0hUTUwgKTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSBvdGhlciBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdGVkaXRvci4kKCdpbWdbc3JjPVwiJytzcmMrJ1wiXScpLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5yZXBsYWNlV2l0aCggaW1nSFRNTCApO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0d29ya2Zsb3cudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXIuYmluZCgnRXJyb3InLGZ1bmN0aW9uKCB1cCwgYXJncyApe1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2codXAsYXJncyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICggc3JjLnN1YnN0cigwLDUpID09PSAnYmxvYjonICkge1xuXG5cdFx0XHRcdHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHRcdFx0XHR4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuXHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHR2YXIgcmVhZGVyO1xuXHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT0gNCApIHtcblx0XHRcdFx0XHRcdHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHVwbG9hZCggcmVhZGVyLnJlc3VsdCApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoIG5ldyBCbG9iKCBbIHhoci5yZXNwb25zZSBdLCB7IHR5cGU6ICdpbWFnZS9wbmcnIH0gKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR4aHIub3BlbiggJ0dFVCcsIHNyYyApO1xuXHRcdFx0XHR4aHIuc2VuZCggbnVsbCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBzcmMuc3Vic3RyKDAsNSkgPT09ICdkYXRhOicgKSB7XG5cdFx0XHRcdHVwbG9hZCggc3JjICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJGNvbnRhaW5lcjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICpcdEByZXR1cm46IG51bGx8dHJ1ZXxmYWxzZVxuXHRcdCAqL1xuXHRcdGNsaXBib2FyZEhhc0ltYWdlOmZ1bmN0aW9uKCBjbGlwYm9hcmREYXRhICkge1xuXHRcdFx0dmFyIGhhc0ltYWdlID0gZmFsc2U7XG5cdFx0XHRpZiAoIGNsaXBib2FyZERhdGEuaXRlbXMgKSB7XG5cdFx0XHRcdCQuZWFjaCggY2xpcGJvYXJkRGF0YS5pdGVtcywgZnVuY3Rpb24oaSxpdGVtKXtcblx0XHRcdFx0XHRpZiAoIGl0ZW0udHlwZSBpbiB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMucGFzdGUgKSB7XG5cdFx0XHRcdFx0XHRoYXNJbWFnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiBoYXNJbWFnZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBjbGlwYm9hcmREYXRhLnR5cGVzICkge1xuXHRcdFx0XHQkLmVhY2goIHRoZXBhc3RlLm9wdGlvbnMubWltZV90eXBlcy5wYXN0ZSwgZnVuY3Rpb24odHlwZSxleHQpe1xuXHRcdFx0XHRcdGlmICggY2xpcGJvYXJkRGF0YS50eXBlcy5pbmRleE9mKHR5cGUpID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRoYXNJbWFnZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiBoYXNJbWFnZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXG5cdH0sIHRoZXBhc3RlICk7XG5cbn0pKCBqUXVlcnksIHdwLm1lZGlhLCBtT3hpZSApO1xuXG4oZnVuY3Rpb24oJCxleHBvcnRzKXtcblxuXHR2YXIgY291bnRlciAgICAgID0gMCxcblx0XHRsMTBuID0gd3AubWVkaWEudGhlcGFzdGUubDEwbjtcblxuXHQkLmV4dGVuZCggd3AuVXBsb2FkZXIucHJvdG90eXBlLCB7XG5cdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKCBmaWxlX2F0dGFjaG1lbnQgKXtcblx0XHR9XG5cdH0pO1xuXG5cblx0LyoqXG5cdCAqXHRJbnRlZ3JhdGUgaW50byBtZWRpYSBsaWJyYXJ5IG1vZGFsXG5cdCAqL1xuXHQvLyBhZGQgc3RhdGVzIHRvIGJyb3dzZSByb3V0ZXJcblx0Xy5leHRlbmQoIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLCB7XG5cdFx0X3BhcmVudEluaXRpYWxpemU6IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUsXG5cdFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9wYXJlbnRJbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdHRoaXMuYmluZFBhc3RlSGFuZGxlcnMoKTtcblx0XHR9LFxuXHRcdF9wYXJlbnRCcm93c2VSb3V0ZXI6IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QucHJvdG90eXBlLmJyb3dzZVJvdXRlcixcblx0XHRicm93c2VSb3V0ZXIgOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHRcdHRoaXMuX3BhcmVudEJyb3dzZVJvdXRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cblx0XHRcdGlmICggd3AubWVkaWEudGhlcGFzdGUuc3VwcG9ydHMucGFzdGUgKSB7XG5cdFx0XHRcdHZpZXcuc2V0KHtwYXN0ZWJvYXJkOntcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jb3B5X3Bhc3RlLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAzNVxuXHRcdFx0XHR9fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJpbmRQYXN0ZUhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwcmV2aW91c0NvbnRlbnQgPSBmYWxzZTtcblx0XHRcblx0XHRcdC8vIGRpc21pc3MgY29udGVudCBvbiBjbG9zZVxuXHRcdFx0dGhpcy5vbiggJ2NvbnRlbnQ6cmVuZGVyIGNsb3NlJyAsIGZ1bmN0aW9uKGNvbnRlbnQpe1xuXHRcdFx0XHRpZiAoIHByZXZpb3VzQ29udGVudCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgcHJldmlvdXNDb250ZW50LmRpc21pc3MgKSB7XG5cdFx0XHRcdFx0cHJldmlvdXNDb250ZW50LmRpc21pc3MoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnICE9PSB0eXBlb2YgY29udGVudCApXG5cdFx0XHRcdFx0cHJldmlvdXNDb250ZW50ID0gY29udGVudDtcblx0XHRcdH0gLCB0aGlzICk7XG5cdFx0XG5cdFx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6cGFzdGVib2FyZCcsIHRoaXMuY29udGVudENyZWF0ZVBhc3RlYm9hcmQsIHRoaXMgKTtcblx0XHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlcjpwYXN0ZWJvYXJkJywgdGhpcy5jb250ZW50UmVuZGVyR3JhYmJlciwgdGhpcyApO1xuXG5cdFx0XHRmcmFtZSA9IHRoaXM7XG5cdFx0fSxcblx0XHQvLyBhZGQgaGFuZGxlcnNcblx0XHRjb250ZW50Q3JlYXRlUGFzdGVib2FyZDogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlKCk7XG5cblx0XHRcdHRoaXMuY3VycmVudFBhc3RlVmlldyA9IGNvbnRlbnQudmlldyA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIoIHsgXG5cdFx0XHRcdGNvbnRyb2xsZXJcdDogdGhpcywgXG5cdFx0XHRcdGdyYWJiZXJcdFx0OiB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LlBhc3RlYm9hcmRcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jdXJyZW50UGFzdGVWaWV3LnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScsIHRoaXMudXBsb2FkZWREYXRhSW1hZ2UgKTtcblx0XHR9LFxuXHRcdGNvbnRlbnRSZW5kZXJHcmFiYmVyOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRcdGNvbnRlbnQuc3RhcnRHcmFiYmluZygpO1xuXHRcdH0sXG5cdFx0dXBsb2FkZWREYXRhSW1hZ2U6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLmN1cnJlbnRQYXN0ZVZpZXcudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dmFyIG9iaiA9IHsgdmlldzogbnVsbCB9O1xuXHRcdFx0dGhpcy5icm93c2VDb250ZW50KG9iaik7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0KCBvYmoudmlldyApO1xuXHRcdFx0dGhpcy5yb3V0ZXIuZ2V0KCkuc2VsZWN0KCdicm93c2UnKVxuXHRcdH1cblx0fSk7XG5cdFxuXG5cblx0LyoqXG5cdCAqXHRBZGQgcGFzdGUgYnV0dG9uIHRvIHRvb2xiYXIgb24gdXBsb2FkLnBocFxuXHQgKi9cblx0Xy5leHRlbmQoIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyLnByb3RvdHlwZSwge1xuXHRcdF9wYXJlbnRJbml0aWFsaXplOlx0d3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXIucHJvdG90eXBlLmluaXRpYWxpemUsXG5cdFx0aW5pdGlhbGl6ZTpcdGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRwYXN0ZUJ0bjtcblxuXHRcdFx0dGhpcy5fcGFyZW50SW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XG5cdFx0XHRcblx0XHRcdHRoaXMudGhlcGFzdGUgPSB7XG5cdFx0XHRcdHBhc3RlXHQ6IHtcbi8vXHRcdFx0XHRcdGJ1dHRvblx0OiBmYWxzZSxcblx0XHRcdFx0XHRncmFiYmVyXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdG1vZGFsXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdG1vZGVcdDogJ3Bhc3RlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudFx0XHQ6IGZhbHNlXG5cdFx0XHR9XG5cblx0XHRcdGlmICggISAoIHRoaXMuY29udHJvbGxlciBpbnN0YW5jZW9mIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QgKSApIHtcblxuXHRcdFx0XHRpZiAoIHdwLm1lZGlhLnRoZXBhc3RlLnN1cHBvcnRzLnBhc3RlICkge1xuXG5cdFx0XHRcdFx0cGFzdGVCdG4gPSBuZXcgd3AubWVkaWEudmlldy5CdXR0b24oIHtcblx0XHRcdFx0XHRcdHRleHRcdFx0OiBsMTBuLmNvcHlfcGFzdGUsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU6ICAnZ3JhYmJlci1idXR0b24nLFxuXHRcdFx0XHRcdFx0cHJpb3JpdHlcdDogLTY0LFxuXHRcdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRzZWxmLnRoZXBhc3RlLmFjdGl2ZSA9IHNlbGYudGhlcGFzdGUucGFzdGU7XG5cdFx0XHRcdFx0XHRcdHNlbGYudGhlcGFzdGVPcGVuKCBsMTBuLmNvcHlfcGFzdGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0dGhpcy50aGVwYXN0ZS5wYXN0ZS5ncmFiYmVyID0gbmV3IHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlR3JhYmJlcigge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlclx0OiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRncmFiYmVyXHRcdDogd3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkLFxuXHRcdFx0XHRcdFx0d3B1cGxvYWRlclx0OiB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXJcblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAncGFzdGVNb2RlQnV0dG9uJywgcGFzdGVCdG4ucmVuZGVyKCkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dGhlcGFzdGVVcGxvYWRlZDogZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHR0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLmRpc21pc3MoKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwuY2xvc2UoKTtcblx0XHRcdHRoaXMudGhlcGFzdGVDbG9zZSgpO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVFcnJvcjogZnVuY3Rpb24oIGUgKSB7XG5cdFx0XHRjb25zb2xlLmxvZyggJ2Vycm9yJywgZSApO1xuXHRcdH0sXG5cdFx0dGhlcGFzdGVPcGVuOiBmdW5jdGlvbiggdGl0bGUgKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwgID0gIG5ldyB3cC5tZWRpYS52aWV3Lk1vZGFsKCB7XG5cdFx0XHRcdGNvbnRyb2xsZXIgOiB0aGlzLFxuXHRcdFx0XHR0aXRsZSAgICAgIDogdGl0bGVcblx0XHRcdH0gKTtcblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwuY29udGVudCggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlciApO1xuXHRcdFx0dGhpcy50aGVwYXN0ZS5tb2RhbC5vcGVuKCk7XG5cblx0XHRcdHRoaXMudGhlcGFzdGUubW9kYWwub24oICdjbG9zZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLnRoZXBhc3RlQ2xvc2UuYXBwbHkoc2VsZik7XG5cdFx0XHRcdHNlbGYudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIuc3RvcEdyYWJiaW5nKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci5zdGFydEdyYWJiaW5nKCk7XG5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMudGhlcGFzdGUuYWN0aXZlLmdyYWJiZXIudXBsb2FkZXIsICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJywgdGhpcy50aGVwYXN0ZVVwbG9hZGVkICk7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnZXJyb3I6dXBsb2FkZWQ6ZGF0YWltYWdlJywgdGhpcy50aGVwYXN0ZUVycm9yICk7XG5cdFx0fSxcblx0XHR0aGVwYXN0ZUNsb3NlOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dGhpcy5jb250cm9sbGVyLmRlYWN0aXZhdGVNb2RlKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5tb2RlICkuYWN0aXZhdGVNb2RlKCAnZWRpdCcgKTtcblxuXHRcdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLnRoZXBhc3RlLmFjdGl2ZS5ncmFiYmVyLnVwbG9hZGVyLCAnYWN0aW9uOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHRcdHRoaXMuc3RvcExpc3RlbmluZyggdGhpcy50aGVwYXN0ZS5hY3RpdmUuZ3JhYmJlci51cGxvYWRlciwgJ2Vycm9yOnVwbG9hZGVkOmRhdGFpbWFnZScgKTtcblx0XHR9XG5cdH0pO1xuXHRcbn0pKGpRdWVyeSx3aW5kb3cpO1xuXG4oZnVuY3Rpb24oJCx3aW5kb3csbyl7XG5cdHZhciB0aGVwYXN0ZSA9IHdwLm1lZGlhLnRoZXBhc3RlLFxuXHRcdEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHRcdE1vZGFsICA9IHdwLm1lZGlhLnZpZXcuTW9kYWwsXG5cdFx0bDEwbiAgID0gdGhlcGFzdGUubDEwbjtcblxuXG5cdHdwLm1lZGlhLnRoZXBhc3RlLnZpZXcuRGF0YVNvdXJjZUltYWdlVXBsb2FkZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdFx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCd0aGVwYXN0ZS11cGxvYWRlcicpLFxuXHRcdGNsYXNzTmFtZTogJ3RoZXBhc3RlLXVwbG9hZGVyJyxcblx0XHRjb250cm9sbGVyOm51bGwsXG5cdFx0aW1hZ2UgOiBudWxsLFxuXHRcdCRkaXNjYXJkQnRuIDogbnVsbCxcblx0XHQkdXBsb2FkQnRuIDogbnVsbCxcblxuXHRcdHVwbG9hZGVyIDogbnVsbCxcblxuXHRcdGV2ZW50cyA6IHtcblx0XHRcdCdjbGljayBbZGF0YS1hY3Rpb249XCJ1cGxvYWRcIl0nXHQ6ICd1cGxvYWRJbWFnZScsXG5cdFx0XHQnY2xpY2sgW2RhdGEtYWN0aW9uPVwiZGlzY2FyZFwiXSdcdDogJ2Rpc2NhcmRJbWFnZScsXG5cdFx0fSxcblx0XHRpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHdwLm1lZGlhLlZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lIDogbDEwbi5pbWFnZVxuXHRcdFx0fSk7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRcdGluc3RyID0gbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHR0YWdOYW1lICAgIDogJ2RpdicsXG5cdFx0XHRcdGNsYXNzTmFtZSAgOiAnaW5zdHJ1bWVudHMnLFxuXHRcdFx0XHRjb250cm9sbGVyIDogdGhpcy5jb250cm9sbGVyXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy51cGxvYWRlciA9IHRoaXMub3B0aW9ucy51cGxvZGVyO1xuXHRcdH0sXG5cdFx0c2V0SW1hZ2VEYXRhIDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy4kaW1hZ2VDb250YWluZXIuaHRtbCgnJykuZ2V0KDApLFxuXHRcdFx0XHRzZWxmID0gdGhpcyxcblx0XHRcdFx0Zm9ybWF0ID0gZGF0YS5tYXRjaCgvZGF0YTooaW1hZ2VcXC8oXFx3KykpOy8pWzFdO1xuXG5cdFx0XHRpZiAoICEgdGhlcGFzdGUub3B0aW9ucy5taW1lX3R5cGVzLmNvbnZlcnRbZm9ybWF0XSApIHtcblx0XHRcdFx0Zm9ybWF0ID0gdGhpcy5vcHRpb25zLmRlZmF1bHRGaWxlRm9ybWF0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuaW1hZ2UgKSB7XG5cdFx0XHRcdHRoaXMuaW1hZ2UuZGVzdHJveSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmltYWdlID0gbmV3IG8uSW1hZ2UoKTtcblx0XHRcdHRoaXMuaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBvcHRzID0gc2VsZi5nZXRVcGxvYWRlcigpLmdldE9wdGlvbigncmVzaXplJyksXG5cdFx0XHRcdFx0c2NhbGUgPSBNYXRoLm1heCggb3B0cy53aWR0aCAvIHRoaXMud2lkdGgsIG9wdHMuaGVpZ2h0IC8gdGhpcy5oZWlnaHQgKTtcblxuXHRcdFx0XHQhIW9wdHMgJiYgKHNjYWxlIDwgMSkgJiYgdGhpcy5kb3duc2l6ZSggdGhpcy53aWR0aCpzY2FsZSwgdGhpcy5oZWlnaHQqc2NhbGUgKTtcblxuXHRcdFx0XHR0aGlzLmVtYmVkKCBjb250YWluZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbWFnZS5sb2FkKCBkYXRhICk7XG5cdFx0XHRpZiAoIHRoaXMuJGltYWdlQ29udGFpbmVyICkge1xuXHRcdFx0XHR0aGlzLiRpbWFnZUNvbnRhaW5lci5hcHBlbmQodGhpcy5pbWFnZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCJmb3JtYXRcIl0gaW5wdXRbdmFsdWU9XCInK2Zvcm1hdCsnXCJdJykucHJvcCggJ2NoZWNrZWQnLCB0cnVlICk7XG5cblxuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHJlbmRlciA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuJGltYWdlQ29udGFpbmVyID0gdGhpcy4kKCcuaW1hZ2UtY29udGFpbmVyJyk7XG5cdFx0XHR0aGlzLiRkaXNjYXJkQnRuID0gdGhpcy4kKCdbZGF0YS1hY3Rpb249XCJkaXNjYXJkXCJdJyk7XG5cdFx0XHR0aGlzLiR1cGxvYWRCdG4gPSB0aGlzLiQoJ1tkYXRhLWFjdGlvbj1cInVwbG9hZFwiXScpO1xuXHRcdFx0dGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwidGl0bGVcIl0nKS52YWwoIHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZU5hbWUgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0ZGlzY2FyZEltYWdlIDogZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjpkaXNjYXJkOmRhdGFpbWFnZScgLCB0aGlzICk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHR1cGxvYWRJbWFnZSA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cImZvcm1hdFwiXSA6Y2hlY2tlZCcpLnZhbCgpLFxuXHRcdFx0XHRzdWZmaXggPSB0aGVwYXN0ZS5vcHRpb25zLm1pbWVfdHlwZXMuY29udmVydFsgdHlwZSBdLFxuXHRcdFx0XHRuYW1lID0gdGhpcy4kKCdpbnB1dFtkYXRhLXNldHRpbmc9XCJ0aXRsZVwiXScpLnZhbCgpICsgJy4nICsgc3VmZml4LFxuXHRcdFx0XHRibG9iID0gdGhpcy5pbWFnZS5nZXRBc0Jsb2IoIHR5cGUsIHRoZXBhc3RlLm9wdGlvbnMuanBlZ19xdWFsaXR5ICk7XG5cblx0XHRcdHRoaXMuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cblx0XHRcdGJsb2IuZGV0YWNoKCBibG9iLmdldFNvdXJjZSgpICk7XG5cdFx0XHRibG9iLm5hbWUgPSBuYW1lO1xuXHRcdFx0YmxvYi50eXBlID0gdHlwZTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS5hZGRGaWxlKCBibG9iICwgbmFtZSApO1xuXG5cdFx0XHR0aGlzLmRpc2FibGVkKCB0cnVlICk7XG5cblx0XHRcdHRoaXMudHJpZ2dlciggJ2FjdGlvbjp1cGxvYWQ6ZGF0YWltYWdlJyAsIHRoaXMgKTtcblx0XHR9LFxuXHRcdHNob3c6ZnVuY3Rpb24oKXtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0aGlkZTpmdW5jdGlvbigpe1xuXHRcdFx0dGhpcy4kZWwuaGlkZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRkaXNhYmxlZCA6IGZ1bmN0aW9uKCBkaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuJGRpc2NhcmRCdG4ucHJvcCggJ2Rpc2FibGVkJywgZGlzYWJsZWQgKTtcblx0XHRcdHRoaXMuJHVwbG9hZEJ0bi5wcm9wKCAnZGlzYWJsZWQnLCBkaXNhYmxlZCApO1xuXHRcdH0sXG5cdFx0X3VwbG9hZFN1Y2Nlc3NIYW5kbGVyIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdhY3Rpb246dXBsb2FkZWQ6ZGF0YWltYWdlJyApO1xuXHRcdFx0dGhpcy5kaXNhYmxlZChmYWxzZSk7XG5cdFx0XHR0aGlzLnVuYmluZFVwbG9hZGVyRXZlbnRzKCk7XG5cdFx0fSxcblx0XHRfdXBsb2FkRXJyb3JIYW5kbGVyIDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdlcnJvcjp1cGxvYWRlZDpkYXRhaW1hZ2UnICk7XG5cdFx0XHR0aGlzLmRpc2FibGVkKGZhbHNlKTtcblx0XHRcdHRoaXMudW5iaW5kVXBsb2FkZXJFdmVudHMoKTtcblx0XHR9LFxuXHRcdGJpbmRVcGxvYWRlckV2ZW50cyA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLmJpbmQoICdGaWxlVXBsb2FkZWQnLFx0dGhpcy5fdXBsb2FkU3VjY2Vzc0hhbmRsZXIsXHR0aGlzICk7XG5cdFx0XHR0aGlzLmdldFVwbG9hZGVyKCkuYmluZCggJ0Vycm9yJyxcdFx0XHR0aGlzLl91cGxvYWRFcnJvckhhbmRsZXIsXHR0aGlzICk7XG5cdFx0fSxcblx0XHR1bmJpbmRVcGxvYWRlckV2ZW50cyA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRVcGxvYWRlcigpLnVuYmluZCggJ0ZpbGVVcGxvYWRlZCcsXHR0aGlzLl91cGxvYWRTdWNjZXNzSGFuZGxlcixcdHRoaXMgKTtcblx0XHRcdHRoaXMuZ2V0VXBsb2FkZXIoKS51bmJpbmQoICdFcnJvcicsXHRcdFx0dGhpcy5fdXBsb2FkRXJyb3JIYW5kbGVyLFx0dGhpcyApO1xuXHRcdH0sXG5cdFx0Z2V0VXBsb2FkZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udHJvbGxlci51cGxvYWRlci51cGxvYWRlci51cGxvYWRlcjtcblx0XHR9XG5cdH0pO1xuXG5cblx0d3AubWVkaWEudGhlcGFzdGUudmlldy5QYXN0ZWJvYXJkID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtcGFzdGVib2FyZCcpLFxuXHRcdGNsYXNzTmFtZTogJ3RoZXBhc3RlLXBhc3RlYm9hcmQnLFxuXHRcdGNvbnRyb2xsZXI6bnVsbCxcblx0XHRhY3Rpb246J3Bhc3RlJyxcblx0XHQkcGFzdGVib2FyZCA6IG51bGwsXG5cblx0XHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmQgPSB0aGlzLiQoICcuaW5qZWN0b3InICkucGFzdGFibGVDb250ZW50ZWRpdGFibGUoKTtcblx0XHRcdHRoaXMuJG1lc3NhZ2UgPSB0aGlzLiQoICcubWVzc2FnZScgKTtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmQub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcblx0XHRcdFx0c2VsZi5zaG93X21lc3NhZ2UoJycpO1xuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdGFydCA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRjbGlwYm9hcmRIYXNJbWFnZTtcblxuXHRcdFx0dGhpcy5pbWFnZVBhc3RlZCA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLiRwYXN0ZWJvYXJkXG5cdFx0XHRcdC5vbigncGFzdGUnLGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdGNsaXBib2FyZEhhc0ltYWdlID0gd3AubWVkaWEudGhlcGFzdGUuY2xpcGJvYXJkSGFzSW1hZ2UoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ3Bhc3RlVGV4dCcgLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblxuXHRcdFx0XHRcdGlmICggY2xpcGJvYXJkSGFzSW1hZ2UgfHwgc2VsZi5pbWFnZVBhc3RlZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZi5zaG93X21lc3NhZ2UoIGwxMG4ucGFzdGVfZXJyb3Jfbm9faW1hZ2UgKTtcblx0XHRcdFx0XHQkKCB0aGlzICkuaHRtbCgnJyk7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oJ3Bhc3RlSW1hZ2UnICwgZnVuY3Rpb24oIGUsIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmltYWdlUGFzdGVkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzZWxmLnRyaWdnZXIoICdhY3Rpb246Y3JlYXRlOmRhdGFpbWFnZScsIHRoaXMgLCBkYXRhLmRhdGFVUkwgKTtcblx0XHRcdFx0XHRzZWxmLmltYWdlUGFzdGVkID0gdHJ1ZTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5vbigncGFzdGVJbWFnZUVycm9yJyAsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0XHRcdHNlbGYuc2hvd19tZXNzYWdlKCBsMTBuLnBhc3RlX2Vycm9yICk7XG5cdFx0XHRcdFx0JCggdGhpcyApLmh0bWwoJycpO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0O1xuXG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHNlbGYuJHBhc3RlYm9hcmQuZ2V0KDApLmZvY3VzKCk7XG5cdFx0XHR9LDEpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdHN0b3AgOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJHBhc3RlYm9hcmRcblx0XHRcdFx0Lm9mZigncGFzdGVJbWFnZScpXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlSW1hZ2VFcnJvcicpXG5cdFx0XHRcdC5vZmYoJ3Bhc3RlVGV4dCcpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzaG93OmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kZWwuc2hvdygpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRoaWRlOmZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kZWwuaGlkZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzaG93X21lc3NhZ2U6ZnVuY3Rpb24oIG1zZyApIHtcblx0XHRcdHRoaXMuJG1lc3NhZ2UudGV4dCggbXNnICk7XG5cdFx0fVxuXHR9KTtcblxuXHR3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZUdyYWJiZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG4vL1x0XHR0YWdOYW1lOiAgICdkaXYnLFxuXHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgndGhlcGFzdGUtZ3JhYmJlcicpLFxuXHRcdGNsYXNzTmFtZSA6ICd0aGVwYXN0ZS1ncmFiYmVyJyxcblxuXHRcdGdyYWJiZXIgOiBudWxsLFxuXHRcdHVwbG9hZGVyIDogbnVsbCxcblxuXHRcdGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciByZXQgPSB3cC5tZWRpYS5WaWV3LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdHdwdXBsb2FkZXJcdFx0OiBudWxsLFxuXHRcdFx0XHRkZWZhdWx0RmlsZU5hbWVcdDogbDEwbi5wYXN0ZWQsXG5cdFx0XHRcdGRlZmF1bHRGaWxlRm9ybWF0IDogJ2ltYWdlL3BuZycsXG5cdFx0XHRcdHRpdGxlXHRcdFx0OiBsMTBuLmNvcHlfcGFzdGVcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmdyYWJiZXIgID0gbmV3IHRoaXMub3B0aW9ucy5ncmFiYmVyKCB7IGNvbnRyb2xsZXJcdDogdGhpcy5jb250cm9sbGVyIH0gKTtcblxuXHRcdFx0dGhpcy51cGxvYWRlciA9IG5ldyB3cC5tZWRpYS50aGVwYXN0ZS52aWV3LkRhdGFTb3VyY2VJbWFnZVVwbG9hZGVyKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sbGVyXHRcdFx0OiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHR1cGxvZGVyXHRcdFx0XHQ6IHRoaXMub3B0aW9ucy53cHVwbG9hZGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdEZpbGVOYW1lXHRcdDogdGhpcy5vcHRpb25zLmRlZmF1bHRGaWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRGaWxlRm9ybWF0XHQ6IHRoaXMub3B0aW9ucy5kZWZhdWx0RmlsZUZvcm1hdFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblxuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5ncmFiYmVyLCAnYWN0aW9uOmNyZWF0ZTpkYXRhaW1hZ2UnLFx0dGhpcy5pbWFnZUNyZWF0ZWQgKTtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMudXBsb2FkZXIsICdhY3Rpb246ZGlzY2FyZDpkYXRhaW1hZ2UnLFx0dGhpcy5zdGFydEdyYWJiaW5nICk7XG5cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSxcblx0XHRyZW5kZXI6ZnVuY3Rpb24oKXtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0d3AubWVkaWEuVmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0dGhpcy4kKCcuY29udGVudCcpXG5cdFx0XHRcdC5hcHBlbmQoIHRoaXMuZ3JhYmJlci5yZW5kZXIoKS4kZWwgKVxuXHRcdFx0XHQuYXBwZW5kKCB0aGlzLnVwbG9hZGVyLnJlbmRlcigpLiRlbCApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXHRcdGltYWdlQ3JlYXRlZCA6IGZ1bmN0aW9uKCBncmFiYmVyICwgaW1hZ2VEYXRhICkge1xuXHRcdFx0dGhpcy5ncmFiYmVyLnN0b3AoKS5oaWRlKCk7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLnNob3coKS5zZXRJbWFnZURhdGEoIGltYWdlRGF0YSApO1xuXHRcdH0sXG5cdFx0c3RhcnRHcmFiYmluZzpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMudXBsb2FkZXIuaGlkZSgpO1xuXHRcdFx0dGhpcy5ncmFiYmVyLnNob3coKS5zdGFydCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRzdG9wR3JhYmJpbmc6ZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmdyYWJiZXIuc3RvcCgpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRnZXRBY3Rpb24gOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdyYWJiZXIuYWN0aW9uO1xuXHRcdH0sXG5cdFx0ZGlzbWlzczpmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZ3JhYmJlci5zdG9wKCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnksd2luZG93LG1PeGllKTtcbiJdfQ== 
  • the-paste/trunk/languages/the-paste-de_DE.po

    r1730916 r1762953  
    33"Project-Id-Version: The Paste v0.3.0\n" 
    44"Report-Msgid-Bugs-To: \n" 
    5 "POT-Creation-Date: 2017-09-16 14:51+0100\n" 
    6 "PO-Revision-Date: 2017-09-16 14:53+0100\n" 
     5"POT-Creation-Date: 2017-11-10 11:49+0100\n" 
     6"PO-Revision-Date: 2017-11-10 11:49+0100\n" 
    77"Last-Translator: Jörn Lund <joern@podpirate.org>\n" 
    88"Language-Team: \n" 
     
    1212"Content-Transfer-Encoding: 8bit\n" 
    1313"Plural-Forms: nplurals=2; plural=n != 1;\n" 
    14 "X-Generator: Poedit 1.8.1\n" 
     14"X-Generator: Poedit 2.0.4\n" 
    1515"X-Poedit-SourceCharset: UTF-8\n" 
    1616"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" 
    1717"_n_noop:1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;esc_attr__;" 
    1818"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n" 
    19 "X-Poedit-Basepath: ../\n" 
     19"X-Poedit-Basepath: ..\n" 
    2020"X-Textdomain-Support: yes\n" 
    2121"X-Poedit-SearchPath-0: .\n" 
     
    4040msgstr "Eingefügt" 
    4141 
     42#: include/ThePaste/Admin/Admin.php:51 
     43msgid "Pasted into" 
     44msgstr "Eingefügt in" 
     45 
    4246# @ default 
    43 #: include/ThePaste/Admin/Admin.php:51 
     47#: include/ThePaste/Admin/Admin.php:52 
    4448msgid "Image" 
    4549msgstr "Bild" 
    4650 
    4751# @ cheese 
    48 #: include/ThePaste/Admin/Admin.php:52 
     52#: include/ThePaste/Admin/Admin.php:53 
    4953msgid "No image data pasted." 
    5054msgstr "Kein Bild in der Zwischenablage." 
    5155 
    52 #: include/ThePaste/Admin/Admin.php:53 
     56#: include/ThePaste/Admin/Admin.php:54 
    5357msgid "Error pasting image data." 
    54 msgstr "Fehler beim Einfügen" 
     58msgstr "Fehler beim Einfügen." 
    5559 
    56 #: include/ThePaste/Admin/Admin.php:54 
     60#: include/ThePaste/Admin/Admin.php:55 
    5761msgid "Upload pasted images" 
    5862msgstr "Eingefügte Bilder sofort hochladen" 
    5963 
    60 #: include/ThePaste/Admin/Admin.php:55 
     64#: include/ThePaste/Admin/Admin.php:56 
    6165msgid "Upload image" 
    6266msgstr "Bild hochladen" 
    63  
    64 #: include/ThePaste/Settings/SettingsMedia.php:31 
    65 msgid "Pasted Images" 
    66 msgstr "Eingefügte Bilder" 
    67  
    68 #: include/ThePaste/Settings/SettingsMedia.php:45 
    69 msgid "Pasteboard" 
    70 msgstr "Pasteboard" 
    71  
    72 #: include/ThePaste/Settings/SettingsMedia.php:51 
    73 msgid "Enable Copy-Paste image uploads." 
    74 msgstr "Copy-Paste Bilduploads aktivieren" 
    7567 
    7668# @ cheese 
    7769#: include/template/pasteboard.php:9 
    7870msgid "Paste some image Data from your clipboard" 
    79 msgstr "Füge Bilder aus der Zwischenablage ein." 
     71msgstr "Füge Bilder aus der Zwischenablage ein" 
    8072 
    8173#: include/template/pasteboard.php:11 
     
    9789msgid "Upload" 
    9890msgstr "Upload" 
     91 
     92#~ msgid "Pasted Images" 
     93#~ msgstr "Eingefügte Bilder" 
     94 
     95#~ msgid "Pasteboard" 
     96#~ msgstr "Pasteboard" 
     97 
     98#~ msgid "Enable Copy-Paste image uploads." 
     99#~ msgstr "Copy-Paste Bilduploads aktivieren" 
    99100 
    100101# @ cheese 
  • the-paste/trunk/readme.txt

    r1762085 r1762953  
    44Tags: paste, clipboard, image, editor, media 
    55Requires at least: 4.5.0 
    6 Tested up to: 4.8.1 
     6Tested up to: 5.0-alpha-42142 
    77Requires PHP: 5.3.0 
    8 Stable tag: 1.0.3 
     8Stable tag: 1.0.4 
    99License: GPLv2 or later 
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    4343== Changelog == 
    4444 
     45= 1.0.4 = 
     46* Support Text Widget 
     47* Better Media Titles 
     48 
    4549= 1.0.3 = 
    4650* Fix JS Error in TextWidget 
Note: See TracChangeset for help on using the changeset viewer.