PageSourceSearch

https://rental.worldlibrary.co.jp/wp-content/themes/rental/js/script.js?ver=20251003-1

js worldlibrary.co.jp collected 2026-10-04 13:26:03 UTC 104,628 bytes, 846 lines download raw bytes

1"use strict";
2
3/**
4 * アラート
5 *
6 * @param {string} type
7 * @param {string} text
8 * @param {number|boolean} auto_close
9 */
10function wlr_alert(type, message) {
11  var auto_close = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3000;
12  var types = ['success', 'error', 'warning', 'info', 'question'];
13
14  if (!types.includes(type)) {
15    return;
16  }
17
18  var param = {
19    titleText: '',
20    html: message,
21    icon: type,
22    confirmButtonText: '閉じる'
23  };
24
25  if (auto_close) {
26    param.timer = auto_close;
27  }
28
29  Swal.fire(param);
30}
31
32(function ($) {
33  $(document).ready(function () {
34    /**
35     * ページ読込時 アラート表示
36     */
37    var alert_cookie = Cookies.get('wlr_alert');
38
39    if (alert_cookie != null && alert_cookie.length) {
40      var data = JSON.parse(alert_cookie);
41      Cookies.set('wlr_alert', '');
42      var auto_close = data.auto_close ? 3000 : false;
43      wlr_alert(data.type, data.text, auto_close);
44    }
45    /**
46     * パスワード表示
47     */
48
49
50    $('.toggle_password').each(function (i, el) {
51      var t = $(el);
52      var p = $(el).siblings('input[type="password"]');
53      t.on('click', function () {
54        t.toggleClass('active');
55
56        if (t.hasClass('active')) {
57          p.attr('type', 'text');
58        } else {
59          p.attr('type', 'password');
60        }
61      });
62    });
63  });
64  /**
65   * vh, vw
66   */
67
68  $(window).on('load resize orientationchange', function () {
69    setTimeout(function () {
70      var vh = window.innerHeight * 0.01;
71      var vw = window.innerWidth * 0.01;
72      document.documentElement.style.setProperty('--vh', "".concat(vh, "px"));
73      document.documentElement.style.setProperty('--vw', "".concat(vw, "px"));
74    }, 150);
75  });
76})(jQuery);
77
78(function ($) {
79  $(document).ready(function () {
80    $('.password_sw').on('click', function () {
81      var wrapper = $(this).closest('.password_wrapper');
82      wrapper.toggleClass('visible');
83      var type = wrapper.hasClass('visible') ? 'text' : 'password';
84      wrapper.find('input').attr('type', type);
85    });
86  });
87})(jQuery);
88
89(function ($) {
90  $(document).ready(function () {
91    if ($('body').hasClass('page-mypage')) {
92      // 郵便番号変更時の住所自動入力制御
93      var setup_postcode_autofill = function setup_postcode_autofill(postcode_selector, fields_mapping) {
94        var $postcode_input = $(postcode_selector);
95
96        if ($postcode_input.length) {
97          var original_postcode = String($postcode_input.data('original-value') || '');
98          $postcode_input.on('input', function () {
99            var current_value = String($(this).val()); // 7桁の数字が入力され、かつ元の値と異なる場合
100
101            if (/^[0-9]{7}$/.test(current_value) && current_value !== original_postcode) {
102              // YubinBango.Coreを直接呼び出して住所を取得
103              new YubinBango.Core(current_value, function (addr) {
104                // 住所フィールドに値を設定
105                $(fields_mapping.pref).val(addr.region);
106                $(fields_mapping.city).val(addr.locality);
107                $(fields_mapping.street).val(addr.street);
108              });
109            }
110          });
111        }
112      }; // 会員情報の郵便番号
113
114
115      var input_events = 'focus keyup paste change blur'; // お届け先情報 表示切替
116
117      var $sync = $('#sync_shipping_fields');
118      var $shipping_table = $('.shipping_fields_table');
119
120      if ($sync.prop('checked')) {
121        $shipping_table.removeClass('active');
122      } else {
123        $shipping_table.addClass('active');
124      }
125
126      $sync.on('click', function () {
127        if ($(this).prop('checked')) {
128          $shipping_table.removeClass('active');
129        } else {
130          $shipping_table.addClass('active');
131        }
132      }); // お届け先情報 入力内容を同期
133
134      var sync_fields = function sync_fields() {
135        $('.member_fields input').each(function (i, el) {
136          var $m = $(this);
137          var m_key = $m.attr('name');
138          var m_val = $m.val();
139          var $s = $("input[name=\"shipping_".concat(m_key, "\"]"));
140
141          if ($s.length) {
142            $s.val(m_val);
143          }
144        });
145      };
146
147      $('.member_fields input').add($sync).on(input_events, function () {
148        if ($sync.prop('checked')) {
149          sync_fields();
150        }
151      });
152      setup_postcode_autofill('input[name="postcode"]', {
153        pref: 'input[name="address_pref"]',
154        city: 'input[name="address_city"]',
155        street: 'input[name="address1"]'
156      }); // お届け先情報の郵便番号
157
158      setup_postcode_autofill('input[name="shipping_postcode"]', {
159        pref: 'input[name="shipping_address_pref"]',
160        city: 'input[name="shipping_address_city"]',
161        street: 'input[name="shipping_address1"]'
162      }); // submit
163
164      $('.form_buttons .edit').on('click', function () {
165        $(this).closest('form').submit();
166      }); // 編集対象の顧客を選択
167
168      $('.switch_customer select').select2({
169        placeholder: '編集対象の顧客を選択',
170        allowClear: false
171      }).one('select2:open', function () {
172        $('.select2-search__field').attr('placeholder', '顧客名・メール・取引先コード・電話番号 を入力');
173        var observer = new MutationObserver(function (mutations) {
174          mutations.forEach(function (mutation) {
175            if (mutation.type === 'childList') {
176              $('.select2-results__option').each(function (i, el) {
177                var $option = $(el);
178
179                if ($option.hasClass('multiline')) {
180                  return;
181                }
182
183                var text = $option.text().replace(/ /g, '<br>');
184                $option.html(text);
185                $option.addClass('multiline');
186              });
187            }
188          });
189        });
190        var target = document.querySelector('.select2-results__options');
191        observer.observe(target, {
192          childList: true
193        });
194      });
195    } // 契約ステータス
196
197
198    if ($('body').is('.page-mypage-child.page-status')) {
199      var toggle_form_button = function toggle_form_button() {
200        var status = $('[name="status"]').val();
201        var status_old = $('[name="status_old"]').val();
202        var $buttons = $('.form_buttons');
203
204        if (status == status_old) {
205          $buttons.addClass('disabled');
206        } else {
207          $buttons.removeClass('disabled');
208        }
209      };
210
211      toggle_form_button();
212      $('[name="status"]').on('change', toggle_form_button);
213    }
214  });
215})(jQuery);
216
217(function ($) {
218  $(document).ready(function () {
219    /**
220     * プラン選択
221     */
222    if ($('.plan_fields').length) {
223      // 要素
224      var $plans = $('input[name="plan"]');
225      var $models = $('#plan_models');
226      var $models_field = $models.closest('.field');
227      var $age_fields = $('select[name^="plan_age_"]');
228      var $age_fields_wrapper = $age_fields.closest('.select_wrapper');
229      var $shipping_interval = $('select[name="plan_shipping_interval"]');
230      var $bookshelf = $('[name="plan_option_bookshelf"]');
231      var $b_wrapper = $bookshelf.closest('.select_wrapper'); // 区分ごとの冊数
232
233      var shipping_intervals = [1, 2, 3, 4, 5, 6];
234      var library_shipping_intervals = [3, 6];
235      var age_total_limit = 10;
236      var segment_numbers = {
237        'free': {
238          'age_a': 0,
239          'age_b': 0,
240          'age_c': 0,
241          'english_a': 0,
242          'english_b': 0,
243          'shipping_interval': 1
244        },
245        'model_a': {
246          'age_a': 3,
247          'age_b': 2,
248          'age_c': 0,
249          'english_a': 0,
250          'english_b': 0,
251          'shipping_interval': 4
252        },
253        'model_b': {
254          'age_a': 3,
255          'age_b': 3,
256          'age_c': 4,
257          'english_a': 0,
258          'english_b': 0,
259          'shipping_interval': 1
260        },
261        'library': {
262          'age_a': 0,
263          'age_b': 0,
264          'age_c': 0,
265          'english_a': 0,
266          'english_b': 0,
267          'shipping_interval': 3
268        }
269      }; // 冊数をセット
270
271      $('input[name="plan"]').on('change', function () {
272        var checked_plan = $('input[name="plan"]:checked').val();
273        var numbers = segment_numbers[checked_plan]; // ライブラリープラン
274
275        var interval_options = '';
276
277        if (checked_plan == 'library') {
278          $age_fields_wrapper.addClass('disabled');
279          library_shipping_intervals.forEach(function (month) {
280            interval_options += "<option value=\"".concat(month, "\">").concat(month, "</option>");
281          });
282        } else {
283          $age_fields_wrapper.removeClass('disabled');
284          shipping_intervals.forEach(function (month) {
285            interval_options += "<option value=\"".concat(month, "\">").concat(month, "</option>");
286          });
287        }
288
289        $shipping_interval.html(interval_options); // 冊数をセット
290
291        lodash.forEach(numbers, function (value, key) {
292          $("select[name=\"plan_".concat(key, "\"]")).val(value).change();
293        }); // おすすめモデル表示切替
294
295        if ($models.prop('checked')) {
296          $models_field.addClass('checked');
297        } else {
298          $models_field.removeClass('checked');
299        }
300      }); // 冊数バリデーション (年齢区分 上限)
301
302      $age_fields.on('change', function () {
303        var age_count = 0;
304        var $changed_select = $(this);
305        $age_fields.each(function (i, el) {
306          age_count += Number($(el).val());
307        }); // 年齢区分 上限
308
309        if (age_count > age_total_limit) {
310          var diff = age_count - age_total_limit;
311          var new_value = $changed_select.val() - diff;
312          $changed_select.val(new_value);
313          var message = "\u300C\u5E74\u9F62\u533A\u5206\u300D\u306E\u7D75\u672C\u306F\u3001\n\u5408\u8A08".concat(age_total_limit, "\u518A\u307E\u3067\u9078\u629E\u3067\u304D\u307E\u3059\u3002");
314          alert(message);
315        }
316      }); // 冊数バリデーション (年齢区分・英語絵本 下限)
317
318      $('.form_buttons .edit').on('click', function (event) {
319        var valid = validate_plan_books_count();
320      }); // リセット
321
322      $('.reset').on('click', function () {
323        var message = 'プランの選択内容をリセットします。\nよろしいですか?';
324
325        if (confirm(message)) {
326          $('[name="plan"][value="free"]').trigger('click').prop('checked', false);
327          $('[name^="plan_option_"]').val(0).trigger('change');
328        }
329      }); // プラン切替
330
331      if ($models.prop('checked')) {
332        $models_field.addClass('checked');
333      }
334
335      $('.plan_fields .plans input').on('click', function () {
336        var name = $(this).attr('name');
337        var value = $(this).val();
338        var model_items = ['model_a', 'model_b'];
339
340        if (name == 'plan') {
341          if (model_items.includes(value)) {
342            $models.prop('checked', true);
343          } else {
344            $models.prop('checked', false);
345          }
346        } else if (name == 'plan_models') {
347          var checked_plan = $('input[name="plan"]:checked').val();
348
349          if (!model_items.includes(checked_plan)) {
350            $plans.prop('checked', false);
351            $('input[name="plan"][value="model_a"]').prop('checked', true).change();
352          }
353        }
354      }); // 料金を計算
355
356      $('[name^="plan_"]').on('change', function () {
357        $('.price_items').addClass('loading');
358      }).on('change', lodash.debounce(function () {
359        var param = new FormData();
360        param.append('plan', $('[name="plan"]:checked').val());
361        $('[name^="plan_"]').each(function (i, el) {
362          var key = $(el).attr('name').replace('plan_', '');
363          param.append(key, $(el).val());
364        });
365        axios.post(WLR.api + 'plan/calc_price', param).then(function (response) {
366          if (response.status != 200) {
367            return;
368          }
369
370          var data = response.data; // お見積り金額
371
372          var price_items = ['books_count', 'options_total', 'monthly_total', 'initial_total'];
373          price_items.forEach(function (item) {
374            var formatter = new Intl.NumberFormat('ja-JP');
375            var output = item == 'books_count' ? data[item] : formatter.format(data[item]);
376            $(".price_items .".concat(item)).attr('data-number', output); // signup
377
378            $(".payment_fields .price.".concat(item)).attr('data-number', output); // mypage contract
379
380            $(".page-contract .price_fields .price.".concat(item)).attr('data-number', output);
381          }); // 3Dセキュア
382
383          var amount = data['initial_total'];
384          $('[name="payment_credit_amount"]').val(amount);
385        })["catch"](function (error) {
386          console.log(error);
387        }).then(function () {
388          $('.price_items').removeClass('loading');
389        });
390      }, 100)); // 年齢区分・交換頻度を手動変更時
391      // プランを「自由に選ぶ」に変更
392      // ライブラリープランの場合には交換頻度を変更可
393
394      $('[name^="plan_age_"], [name="plan_shipping_interval"]').on('change', function () {
395        var $hover = $('[name^="plan_age_"]:hover, [name="plan_shipping_interval"]:hover');
396        var $library_checked = $('[name="plan"][value="library"]:checked');
397
398        if ($hover.length && !$library_checked.length) {
399          $plans.prop('checked', false);
400          $models.prop('checked', false);
401          $models_field.removeClass('checked');
402          $('[name="plan"][value="free"]').prop('checked', true);
403        }
404      });
405    }
406  });
407})(jQuery);
408
409function validate_plan_books_count() {
410  var books_count = 0;
411  var $book_fields = $('select[name^="plan_age_"], select[name^="plan_english_"]');
412  var checked_plan = $('input[name="plan"]:checked').val();
413
414  if (checked_plan == null) {
415    return;
416  }
417
418  $book_fields.each(function (i, el) {
419    books_count += Number($(el).val());
420  });
421  var valid = books_count || checked_plan == 'library';
422
423  if (!valid) {
424    $('html, body').animate({
425      scrollTop: 0
426    }, 200);
427    var message = "\u300C\u5E74\u9F62\u533A\u5206\u300D\u300C\u82F1\u8A9E\u7D75\u672C\u300D\n\u5408\u308F\u305B\u30661\u518A\u4EE5\u4E0A\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
428    alert(message);
429  }
430
431  return valid;
432}
433
434(function ($) {
435  $(document).ready(function () {
436    if ($('body').is('.page-signup, .page-payment')) {
437      var init_payment_fields = function init_payment_fields() {
438        $('.payment_credit_fields, .payment_invoice_fields').removeClass('active');
439        var $credit_items = $('.payment_credit_fields input');
440        var type = $('[name="payment_type"]:checked').val();
441        $(".payment_".concat(type, "_fields")).addClass('active'); // クレジットカード 必須項目
442
443        if (type == 'credit') {
444          $credit_items.prop('required', true);
445        } else {
446          $credit_items.prop('required', false);
447        }
448      };
449
450      init_payment_fields();
451      $('[name="payment_type"]').on('change', init_payment_fields);
452    }
453  });
454})(jQuery);
455/*
456 * カード情報からトークン生成
457 */
458
459
460function signup_payment_create_token() {
461  CPToken.TokenCreate({
462    aid: WLR.payment_aid,
463    cn: $('[name="payment_credit_number"]').val(),
464    cvv: $('[name="payment_credit_cvc"]').val(),
465    ed: $('[name="payment_credit_expiration_year"]').val() + $('[name="payment_credit_expiration_month"]').val(),
466    fn: $('[name="payment_credit_first_name"]').val(),
467    ln: $('[name="payment_credit_last_name"]').val()
468  }, signup_payment_auth);
469}
470/*
471 * 3Dセキュア
472 */
473
474
475function signup_payment_auth(result, error) {
476  // トークン生成に成功すれば認証を実行
477  if (result == 'Success') {
478    var token = $('[name="payment_credit_token"]').val();
479    var amount = $('[name="payment_credit_amount"]').val();
480    ThreeDSAdapter.authenticate({
481      tkn: token,
482      aid: WLR.payment_aid,
483      am: amount,
484      tx: 0,
485      sf: 0,
486      em: $('[name="email"]').val(),
487      pn: $('[name="tel"]').val()
488    }, signup_payment_submit);
489  } else {
490    // トークン生成に失敗すればエラー表示
491    signup_payment_error(error);
492  }
493}
494/*
495 * カード情報からトークン生成後 フォームをsubmit
496 */
497
498
499function signup_payment_submit(result, error) {
500  // 決済成功時
501  if (result == 'Success') {
502    // トークン以外のカード情報をクリア
503    $('[name^="payment_credit_"]:not([name="payment_credit_token"])').val(''); // カード情報の必須属性を外し、バリデーションを回避
504
505    $('[name^="payment_credit_"]').prop('required', false); // フォームデータ送信
506
507    $('.form_wrapper form').submit();
508  } else {
509    // 決済失敗時
510    signup_payment_error(error);
511  }
512}
513/*
514 * トークン生成失敗時
515 */
516
517
518function signup_payment_error(error) {
519  var text = "\u6C7A\u6E08\u30A8\u30E9\u30FC\u3067\u3059\u3002\u30AB\u30FC\u30C9\u60C5\u5831\u3092\u3054\u78BA\u8A8D\u304F\u3060\u3055\u3044\u3002\n\u30A8\u30E9\u30FC\u30B3\u30FC\u30C9 : ".concat(error.code);
520  alert(text);
521}
522
523(function ($) {
524  $(document).ready(function () {
525    if ($('body').hasClass('page-signup')) {
526      $('#next_preview').on('click', function () {
527        var $input_fields = $('.plan_fields, .member_fields, .shipping_fields');
528        var $preview_fields = $('.preview_plan_fields, .preview_option_fields, .preview_member_fields, .preview_shipping_fields');
529        var $payment_plans = $('.payment_credit_fields, .payment_invoice_fields').find('td[data-name="plan"]'); // テキストフィールド, textarea, select プレビューを生成
530
531        $input_fields.find('input, textarea, select').each(function (i, el) {
532          var el_type = $(el).prop('nodeName').toLowerCase();
533          var type = $(el).attr('type');
534          var name = $(el).attr('name');
535
536          if (['radio', 'checkbox'].includes(type) || name == 'password') {
537            return;
538          }
539
540          var value = el_type == 'select' ? $(el).find('option:selected').text() : $(el).val();
541          $preview_fields.find("td[data-name=\"".concat(name, "\"]")).attr('data-value', value);
542        }); // radio, checkbox  プレビューを消去
543
544        $input_fields.find('[type="radio"], [type="checkbox"]').each(function (i, el) {
545          var name = $(el).attr('name');
546          $preview_fields.find("td[data-name=\"".concat(name, "\"]")).attr('data-value', '');
547        }); // radio プレビューを生成
548
549        $input_fields.find('[type="radio"]:checked').each(function (i, el) {
550          var name = $(el).attr('name');
551          var id = $(el).attr('id');
552          var label = $("label[for=\"".concat(id, "\"]")).text();
553          $preview_fields.find("td[data-name=\"".concat(name, "\"]")).attr('data-value', label);
554
555          if (name == 'plan') {
556            $payment_plans.attr('data-value', label);
557          }
558        }); // checkbox プレビューを生成
559
560        var checkbox_values = {};
561        $input_fields.find('[type="checkbox"]:checked').each(function (i, el) {
562          var name = $(el).attr('name');
563          var id = $(el).attr('id');
564          var label = $("label[for=\"".concat(id, "\"]")).text();
565
566          if (name == null) {
567            return;
568          }
569
570          name = name.replace('[]', '');
571
572          if (checkbox_values["".concat(name)] == null) {
573            checkbox_values["".concat(name)] = [];
574          }
575
576          checkbox_values["".concat(name)].push(label);
577        });
578        lodash.forEach(checkbox_values, function (values, name) {
579          var labels = values.join(', ');
580          $preview_fields.find("td[data-name=\"".concat(name, "\"]")).attr('data-value', labels);
581        }); // お届け先情報
582
583        var sync = $('#sync_shipping_fields').prop('checked');
584        var $s_table = $('.preview_shipping_fields_table');
585        $('#preview_sync_shipping_fields').prop('checked', sync);
586
587        if (sync) {
588          $s_table.removeClass('active');
589        } else {
590          $s_table.addClass('active');
591        }
592      });
593    }
594  });
595})(jQuery);
596
597(function ($) {
598  $(document).ready(function () {
599    if ($('body').is('.page-signup, .page-payment, .page-mypage')) {
600      /**
601       * エラー表示
602       * @param boolean scroll
603       */
604      var validation_show_error = function validation_show_error(scroll) {
605        $('.parsley-errors-list').each(function (i, el) {
606          $(el).closest('tr').find('th').append($(el));
607        });
608        $('.form_wrapper th').each(function (i, el) {
609          var list_len = $(el).find('.parsley-errors-list').length;
610
611          if (list_len > 1) {
612            var list_first = $(el).find('.parsley-errors-list:eq(0)');
613            var list_not_first = $(el).find('.parsley-errors-list:not(:eq(0))');
614            var list_items = $(el).find('.parsley-errors-list li');
615            list_first.prepend(list_items);
616            list_not_first.remove();
617            list_first.html(lodash.uniqBy(list_items.toArray(), function (e) {
618              return e.innerText;
619            }));
620          }
621        });
622
623        if (scroll) {
624          var offset = $('.parsley-errors-list[aria-hidden="false"]:eq(0)').offset().top - 50;
625          $('html, body').animate({
626            scrollTop: offset
627          }, 200);
628        }
629      };
630      /**
631       * バリデーション
632       */
633
634
635      var elements = 'input, textarea, select';
636      /**
637       * 属性を追加
638       */
639
640      $('.form_wrapper').find(elements).each(function (i, el) {
641        $(el).attr('data-parsley-trigger', 'blur focusout change');
642      });
643      $('.plan_fields').find(elements).each(function (i, el) {
644        $(el).attr('data-parsley-group', 'plan');
645      });
646      $('.member_shipping_fields').find(elements).each(function (i, el) {
647        $(el).attr('data-parsley-group', 'member');
648      });
649      $('.payment_fields, .payment_credit_fields').find(elements).each(function (i, el) {
650        $(el).attr('data-parsley-group', 'payment');
651      });
652      var validation;
653      $('.form_wrapper form').each(function (i, el) {
654        var $form = $(el);
655
656        if ($form.closest('#switch_customer').length) {
657          return;
658        }
659
660        validation = $form.parsley();
661        validation.on('field:validated', function () {
662          if (!validation.isValid()) {
663            validation_show_error(false);
664          }
665        });
666      });
667      /**
668       * ボタン クリック時
669       * プランの選択 → お客様情報の入力
670       */
671
672      $('#next_member').on('click', function () {
673        validation.validate({
674          group: 'plan'
675        });
676
677        if (validation.isValid({
678          group: 'plan'
679        })) {
680          if (validate_plan_books_count()) {
681            switch_signup_step('member');
682          } else {
683            switch_signup_step('plan');
684          }
685        } else {
686          validation_show_error(true);
687        }
688      });
689      /**
690       * ボタン クリック時
691       * お客様情報の入力 → お申し込み内容の確認
692       */
693
694      $('#next_preview').on('click', function () {
695        validation.validate({
696          group: 'member'
697        });
698
699        if (validation.isValid({
700          group: 'member'
701        })) {
702          if (validate_plan_books_count()) {
703            switch_signup_step('preview');
704          } else {
705            switch_signup_step('plan');
706          }
707        } else {
708          validation_show_error(true);
709        }
710      });
711      /**
712       * クレジットカード決済 申込ボタンのクリック時
713       * バリデーション
714       */
715
716      $('#form_submit').on('click', function (event) {
717        validation.validate({
718          group: 'payment'
719        });
720
721        if (validation.isValid({
722          group: 'payment'
723        })) {
724          // クレジット決済であればトークン生成等を実行
725          if ($('[name="payment_type"]:checked').val() == 'credit') {
726            event.preventDefault(); // カード名義 文字数バリデーション
727
728            var fn = $('[name="payment_credit_first_name"]').val();
729            var ln = $('[name="payment_credit_last_name"]').val();
730            var name_len = 0 + fn.length + ln.length;
731
732            if (name_len > 44) {
733              alert('お名前は合計44文字以内で入力してください。');
734              return;
735            }
736
737            signup_payment_create_token();
738          } else {
739            $('.form_wrapper form').submit();
740          }
741        } else {
742          validation_show_error(true);
743        }
744      });
745    }
746  });
747})(jQuery);
748
749function switch_signup_step(step) {
750  // body, fields
751  var step_classes = 'step-plan step-member step-preview step-payment step-complete';
752  $('body').removeClass(step_classes);
753  $('body').addClass("step-".concat(step));
754  var scroll_position = step == 'member' ? $('#next_member').offset().top - 20 : 0;
755  $('html, body').animate({
756    scrollTop: scroll_position
757  }, 0); // nav
758
759  $('.signup_steps .step').removeClass('active');
760  var nav_step = step == 'member' ? 'plan' : step;
761  $(".signup_steps .step-".concat(nav_step)).addClass('active');
762}
763
764(function ($) {
765  $(document).ready(function () {
766    if ($('body').hasClass('page-signup')) {
767      var input_events = 'focus keyup paste change blur'; // フォーム表示切替
768
769      $('body').addClass('step-plan');
770      $('.form_buttons button').on('click', function () {
771        var btn_id = $(this).attr('id');
772
773        if (btn_id == 'back_plan') {
774          switch_signup_step('plan');
775        } else if (btn_id == 'back_preview') {
776          switch_signup_step('preview');
777        } else if (btn_id == 'next_payment') {
778          switch_signup_step('payment');
779        }
780      }); // お届け先情報 表示切替
781
782      var $sync = $('#sync_shipping_fields');
783      $sync.on('click', function () {
784        var $table = $('.shipping_fields_table');
785
786        if ($(this).prop('checked')) {
787          $table.removeClass('active');
788        } else {
789          $table.addClass('active');
790        }
791      }); // お届け先情報 入力内容を同期
792
793      var sync_fields = function sync_fields() {
794        $('.member_fields input').each(function (i, el) {
795          var $m = $(this);
796          var m_key = $m.attr('name');
797          var m_val = $m.val();
798          var $s = $("input[name=\"shipping_".concat(m_key, "\"]"));
799
800          if ($s.length) {
801            $s.val(m_val);
802          }
803        });
804      };
805
806      $('.member_fields input').add($sync).on(input_events, function () {
807        if ($sync.prop('checked')) {
808          sync_fields();
809        }
810      }); // 定休日チェックボックス
811
812      $('[name="holidays[]"]').on('click change', function () {
813        var $clicked = $(this);
814        var click_checked = $clicked.prop('checked') ? $clicked.val() : null;
815        var weekdays = ['mon', 'tue', 'wed', 'thu', 'fri'];
816        var holidays = [];
817        var weekday_holidays = [];
818        $('[name="holidays[]"]:checked').each(function (i, el) {
819          var val = $(el).val();
820          holidays.push(val);
821
822          if (weekdays.includes(val)) {
823            weekday_holidays.push(val);
824          }
825        });
826
827        if (holidays.includes('none')) {
828          if (click_checked == 'none') {
829            // "定休日なし" のとき、全曜日のチェック外す
830            $('[name="holidays[]"]:not([value="none"])').prop('checked', false);
831          } else {
832            // 曜日にチェックあれば "定休日なし" のチェック外す
833            $('[name="holidays[]"][value="none"]').prop('checked', false);
834          }
835        }
836
837        if (weekday_holidays.length >= 5) {
838          // 全曜日チェックは不可にする
839          $clicked.prop('checked', false);
840          alert('平日すべてを定休日にはできません。');
841        }
842      });
843    }
844  });
845})(jQuery);
846//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGVzL19jb21tb24uanMiLCJmaWxlcy9fZm9ybS5qcyIsImZpbGVzL215cGFnZS5qcyIsImZpbGVzL3BsYW4uanMiLCJmaWxlcy9zaWdudXAtcGF5bWVudC5qcyIsImZpbGVzL3NpZ251cC1wcmV2aWV3LmpzIiwiZmlsZXMvc2lnbnVwLXZhbGlkYXRpb24uanMiLCJmaWxlcy9zaWdudXAuanMiXSwibmFtZXMiOlsid2xyX2FsZXJ0IiwidHlwZSIsIm1lc3NhZ2UiLCJhdXRvX2Nsb3NlIiwidHlwZXMiLCJpbmNsdWRlcyIsInBhcmFtIiwidGl0bGVUZXh0IiwiaHRtbCIsImljb24iLCJjb25maXJtQnV0dG9uVGV4dCIsInRpbWVyIiwiU3dhbCIsImZpcmUiLCIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsImFsZXJ0X2Nvb2tpZSIsIkNvb2tpZXMiLCJnZXQiLCJsZW5ndGgiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwic2V0IiwidGV4dCIsImVhY2giLCJpIiwiZWwiLCJ0IiwicCIsInNpYmxpbmdzIiwib24iLCJ0b2dnbGVDbGFzcyIsImhhc0NsYXNzIiwiYXR0ciIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJ2aCIsImlubmVySGVpZ2h0IiwidnciLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsImpRdWVyeSIsIndyYXBwZXIiLCJjbG9zZXN0Iiwi
846ZmluZCIsInNldHVwX3Bvc3Rjb2RlX2F1dG9maWxsIiwicG9zdGNvZGVfc2VsZWN0b3IiLCJmaWVsZHNfbWFwcGluZyIsIiRwb3N0Y29kZV9pbnB1dCIsIm9yaWdpbmFsX3Bvc3Rjb2RlIiwiU3RyaW5nIiwiY3VycmVudF92YWx1ZSIsInZhbCIsInRlc3QiLCJZdWJpbkJhbmdvIiwiQ29yZSIsImFkZHIiLCJwcmVmIiwicmVnaW9uIiwiY2l0eSIsImxvY2FsaXR5Iiwic3RyZWV0IiwiaW5wdXRfZXZlbnRzIiwiJHN5bmMiLCIkc2hpcHBpbmdfdGFibGUiLCJwcm9wIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInN5bmNfZmllbGRzIiwiJG0iLCJtX2tleSIsIm1fdmFsIiwiJHMiLCJhZGQiLCJzdWJtaXQiLCJzZWxlY3QyIiwicGxhY2Vob2xkZXIiLCJhbGxvd0NsZWFyIiwib25lIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiZm9yRWFjaCIsIm11dGF0aW9uIiwiJG9wdGlvbiIsInJlcGxhY2UiLCJ0YXJnZXQiLCJxdWVyeVNlbGVjdG9yIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsImlzIiwidG9nZ2xlX2Zvcm1fYnV0dG9uIiwic3RhdHVzIiwic3RhdHVzX29sZCIsIiRidXR0b25zIiwiJHBsYW5zIiwiJG1vZGVscyIsIiRtb2RlbHNfZmllbGQiLCIkYWdlX2ZpZWxkcyIsIiRhZ2VfZmllbGRzX3dyYXBwZXIiLCIkc2hpcHBpbmdfaW50ZXJ2YWwiLCIkYm9va3NoZWxmIiwiJGJfd3JhcHBlciIsInNoaXBwaW5nX2ludGVydmFscyIsImxpYnJhcnlfc2hpcHBpbmdfaW50ZXJ2YWxzIiwiYWdlX3RvdGFsX2xpbWl0Iiwic2VnbWVudF9udW1iZXJzIiwiY2hlY2tlZF9wbGFuIiwibnVtYmVycyIsImludGVydmFsX29wdGlvbnMiLCJtb250aCIsImxvZGFzaCIsInZhbHVlIiwia2V5IiwiY2hhbmdlIiwiYWdlX2NvdW50IiwiJGNoYW5nZWRfc2VsZWN0IiwiTnVtYmVyIiwiZGlmZiIsIm5ld192YWx1ZSIsImFsZXJ0IiwiZXZlbnQiLCJ2YWxpZCIsInZhbGlkYXRlX3BsYW5fYm9va3NfY291bnQiLCJjb25maXJtIiwidHJpZ2dlciIsIm5hbWUiLCJtb2RlbF9pdGVtcyIsImRlYm91bmNlIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJheGlvcyIsInBvc3QiLCJXTFIiLCJhcGkiLCJ0aGVuIiwicmVzcG9uc2UiLCJwcmljZV9pdGVtcyIsIml0ZW0iLCJmb3JtYXR0ZXIiLCJJbnRsIiwiTnVtYmVyRm9ybWF0Iiwib3V0cHV0IiwiZm9ybWF0IiwiYW1vdW50IiwiZXJyb3IiLCJjb25zb2xlIiwibG9nIiwiJGhvdmVyIiwiJGxpYnJhcnlfY2hlY2tlZCIsImJvb2tzX2NvdW50IiwiJGJvb2tfZmllbGRzIiwiYW5pbWF0ZSIsInNjcm9sbFRvcCIsImluaXRfcGF5bWVudF9maWVsZHMiLCIkY3JlZGl0X2l0ZW1zIiwic2lnbnVwX3BheW1lbnRfY3JlYXRlX3Rva2VuIiwiQ1BUb2tlbiIsIlRva2VuQ3JlYXRlIiwiYWlkIiwicGF5bWVudF9haWQiLCJjbiIsImN2diIsImVkIiwiZm4iLCJsbiIsInNpZ251cF9wYXltZW50X2F1dGgiLCJyZXN1bHQiLCJ0b2tlbiIsIlRocmVlRFNBZGFwdGVyIiwiYXV0aGVudGljYXRlIiwidGtuIiwiYW0iLCJ0eCIsInNmIiwiZW0iLCJwbiIsInNpZ251cF9wYXltZW50X3N1Ym1pdCIsInNpZ251cF9wYXltZW50X2Vycm9yIiwiY29kZSIsIiRpbnB1dF9maWVsZHMiLCIkcHJldmlld19maWVsZHMiLCIkcGF5bWVudF9wbGFucyIsImVsX3R5cGUiLCJ0b0xvd2VyQ2FzZSIsImlkIiwibGFiZWwiLCJjaGVja2JveF92YWx1ZXMiLCJwdXNoIiwidmFsdWVzIiwibGFiZWxzIiwiam9pbiIsInN5bmMiLCIkc190YWJsZSIsInZhbGlkYXRpb25fc2hvd19lcnJvciIsInNjcm9sbCIsImxpc3RfbGVuIiwibGlzdF9maXJzdCIsImxpc3Rfbm90X2ZpcnN0IiwibGlzdF9pdGVtcyIsInByZXBlbmQiLCJyZW1vdmUiLCJ1bmlxQnkiLCJ0b0FycmF5IiwiZSIsImlubmVyVGV4dCIsIm9mZnNldCIsInRvcCIsImVsZW1lbnRzIiwidmFsaWRhdGlvbiIsIiRmb3JtIiwicGFyc2xleSIsImlzVmFsaWQiLCJ2YWxpZGF0ZSIsImdyb3VwIiwic3dpdGNoX3NpZ251cF9zdGVwIiwicHJldmVudERlZmF1bHQiLCJuYW1lX2xlbiIsInN0ZXAiLCJzdGVwX2NsYXNzZXMiLCJzY3JvbGxfcG9zaXRpb24iLCJuYXZfc3RlcCIsImJ0bl9pZCIsIiR0YWJsZSIsIiRjbGlja2VkIiwiY2xpY2tfY2hlY2tlZCIsIndlZWtkYXlzIiwiaG9saWRheXMiLCJ3ZWVrZGF5X2hvbGlkYXlzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBQUEsU0FBQSxDQUFBQyxJQUFBLEVBQUFDLE9BQUEsRUFBQTtBQUFBLE1BQUFDLFVBQUEsdUVBQUEsSUFBQTtBQUNBLE1BQUFDLEtBQUEsR0FBQSxDQUFBLFNBQUEsRUFBQSxPQUFBLEVBQUEsU0FBQSxFQUFBLE1BQUEsRUFBQSxVQUFBLENBQUE7O0FBQ0EsTUFBQSxDQUFBQSxLQUFBLENBQUFDLFFBQUEsQ0FBQUosSUFBQSxDQUFBLEVBQUE7QUFDQTtBQUNBOztBQUNBLE1BQUFLLEtBQUEsR0FBQTtBQUNBQyxJQUFBQSxTQUFBLEVBQUEsRUFEQTtBQUVBQyxJQUFBQSxJQUFBLEVBQUFOLE9BRkE7QUFHQU8sSUFBQUEsSUFBQSxFQUFBUixJQUhBO0FBSUFTLElBQUFBLGlCQUFBLEVBQUE7QUFKQSxHQUFBOztBQU1BLE1BQUFQLFVBQUEsRUFBQTtBQUNBRyxJQUFBQSxLQUFBLENBQUFLLEtBQUEsR0FBQVIsVUFBQTtBQUNBOztBQUNBUyxFQUFBQSxJQUFBLENBQUFDLElBQUEsQ0FBQVAsS0FBQTtBQUNBOztBQUVBLENBQUEsVUFBQVEsQ0FBQSxFQUFBO0FBRUFBLEVBQUFBLENBQUEsQ0FBQUMsU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QUFDLGdCQUFBLEdBQUEsRUFBQTtBQUNBMU4sUUFBQUEsQ0FBQSxDQUFBLDZCQUFBLENBQUEsQ0FBQVksSUFBQSxDQUFBLFVBQUFDLENBQUEsRUFBQUMsRUFBQSxFQUFBO0FBQ0EsY0FBQTRCLEdBQUEsR0FBQTFDLENBQUEsQ0FBQWMsRUFBQSxDQUFBLENBQUE0QixHQUFBLEVBQUE7QUFDQStLLFVBQUFBLFFBQUEsQ0FBQXZDLElBQUEsQ0FBQXhJLEdBQUE7O0FBQ0EsY0FBQThLLFFBQUEsQ0FBQWpPLFFBQUEsQ0FBQW1ELEdBQUEsQ0FBQSxFQUFBO0FBQ0FnTCxZQUFBQSxnQkFBQSxDQUFBeEMsSUFBQSxDQUFBeEksR0FBQTtBQUNBO0FBQ0EsU0FOQTs7QUFPQSxZQUFBK0ssUUFBQSxDQUFBbE8sUUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBO0FBQ0EsY0FBQWdPLGFBQUEsSUFBQSxNQUFBLEVBQUE7QUFDQTtBQUNBdk4sWUFBQUEsQ0FBQSxDQUFBLHlDQUFBLENBQUEsQ0FBQXVELElBQUEsQ0FBQSxTQUFBLEVBQUEsS0FBQTtBQUNBLFdBSEEsTUFHQTtBQUNBO0FBQ0F2RCxZQUFBQSxDQUFBLENBQUEsbUNBQUEsQ0FBQSxDQUFBdUQsSUFBQSxDQUFBLFNBQUEsRUFBQSxLQUFBO0FBQ0E7QUFDQTs7QUFDQSxZQUFBbUssZ0JBQUEsQ0FBQXBOLE1BQUEsSUFBQSxDQUFBLEVBQUE7QUFDQTtBQUNBZ04sVUFBQUEsUUFBQSxDQUFBL0osSUFBQSxDQUFBLFNBQUEsRUFBQSxLQUFBO0FBQ0F1RCxVQUFBQSxLQUFBLENBQUEsbUJBQUEsQ0FBQTtBQUNBO0FBQ0EsT0E1QkE7QUE4QkE7QUFFQSxHQTlFQTtBQStFQSxDQWhGQSxFQWdGQS9FLE1BaEZBIiwiZmlsZSI6InNjcmlwdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog44Ki44Op44O844OIXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSBhdXRvX2Nsb3NlXG4gKi9cbmZ1bmN0aW9uIHdscl9hbGVydCh0eXBlLCBtZXNzYWdlLCBhdXRvX2Nsb3NlPTMwMDApIHtcbiAgY29uc3QgdHlwZXMgPSBbJ3N1Y2Nlc3MnLCAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJywgJ3F1ZXN0aW9uJ107XG4gIGlmICghdHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFyYW0gPSB7XG4gICAgdGl0bGVUZXh0OiAnJyxcbiAgICBodG1sOiBtZXNzYWdlLF
846xuICAgIGljb246IHR5cGUsXG4gICAgY29uZmlybUJ1dHRvblRleHQ6ICfplonjgZjjgosnXG4gIH07XG4gIGlmIChhdXRvX2Nsb3NlKSB7XG4gICAgcGFyYW0udGltZXIgPSBhdXRvX2Nsb3NlO1xuICB9XG4gIFN3YWwuZmlyZShwYXJhbSlcbn1cblxuKGZ1bmN0aW9uICgkKSB7XG5cbiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuXG4gICAgLyoqXG4gICAgICog44Oa44O844K46Kqt6L685pmCIOOCouODqeODvOODiOihqOekulxuICAgICAqL1xuICAgIGNvbnN0IGFsZXJ0X2Nvb2tpZSA9IENvb2tpZXMuZ2V0KCd3bHJfYWxlcnQnKTtcbiAgICBpZiAoYWxlcnRfY29va2llICE9IG51bGwgJiYgYWxlcnRfY29va2llLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoYWxlcnRfY29va2llKTtcbiAgICAgIENvb2tpZXMuc2V0KCd3bHJfYWxlcnQnLCAnJyk7XG4gICAgICBjb25zdCBhdXRvX2Nsb3NlID0gZGF0YS5hdXRvX2Nsb3NlID8gMzAwMCA6IGZhbHNlO1xuICAgICAgd2xyX2FsZXJ0KGRhdGEudHlwZSwgZGF0YS50ZXh0LCBhdXRvX2Nsb3NlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDjg5Hjgrnjg6/jg7zjg4nooajnpLpcbiAgICAgKi9cbiAgICAkKCcudG9nZ2xlX3Bhc3N3b3JkJykuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgIGNvbnN0IHQgPSAkKGVsKTtcbiAgICAgIGNvbnN0IHAgPSAkKGVsKS5zaWJsaW5ncygnaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdJyk7XG4gICAgICB0Lm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdC50b2dnbGVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIGlmICh0Lmhhc0NsYXNzKCdhY3RpdmUnKSkge1xuICAgICAgICAgIHAuYXR0cigndHlwZScsICd0ZXh0Jyk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICBwLmF0dHIoJ3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLyoqXG4gICAqIHZoLCB2d1xuICAgKi9cbiAgJCh3aW5kb3cpLm9uKCdsb2FkIHJlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZoID0gd2luZG93LmlubmVySGVpZ2h0ICogMC4wMTtcbiAgICAgIGNvbnN0IHZ3ID0gd2luZG93LmlubmVyV2lkdGggKiAwLjAxO1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXZoJywgYCR7dmh9cHhgKTtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS12dycsIGAke3Z3fXB4YCk7XG4gICAgfSwgMTUwKTtcbiAgfSk7XG5cbn0pKGpRdWVyeSk7XG4iLCIoZnVuY3Rpb24gKCQpIHtcbiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuXG4gICAgJCgnLnBhc3N3b3JkX3N3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9ICQodGhpcykuY2xvc2VzdCgnLnBhc3N3b3JkX3dyYXBwZXInKTtcbiAgICAgIHdyYXBwZXIudG9nZ2xlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIGNvbnN0IHR5cGUgPSB3cmFwcGVyLmhhc0NsYXNzKCd2aXNpYmxlJykgPyAndGV4dCcgOiAncGFzc3dvcmQnO1xuICAgICAgd3JhcHBlci5maW5kKCdpbnB1dCcpLmF0dHIoJ3R5cGUnLCB0eXBlKTtcbiAgICB9KTtcblxuICB9KTtcbn0pKGpRdWVyeSk7XG4iLCIoZnVuY3Rpb24gKCQpIHtcbiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuXG4gICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygncGFnZS1teXBhZ2UnKSkge1xuXG4gICAgICBjb25zdCBpbnB1dF9ldmVudHMgPSAnZm9jdXMga2V5dXAgcGFzdGUgY2hhbmdlIGJsdXInO1xuXG4gICAgICAvLyDjgYrlsYrjgZHlhYjmg4XloLEg6KGo56S65YiH5pu/XG4gICAgICBjb25zdCAkc3luYyA9ICQoJyNzeW5jX3NoaXBwaW5nX2ZpZWxkcycpO1xuICAgICAgY29uc3QgJHNoaXBwaW5nX3RhYmxlID0gJCgnLnNoaXBwaW5nX2ZpZWxkc190YWJsZScpO1xuICAgICAgaWYgKCRzeW5jLnByb3AoJ2NoZWNrZWQnKSkge1xuICAgICAgICAkc2hpcHBpbmdfdGFibGUucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHNoaXBwaW5nX3RhYmxlLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICAgICRzeW5jLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCQodGhpcykucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgJHNoaXBwaW5nX3RhYmxlLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkc2hpcHBpbmdfdGFibGUuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOOBiuWxiuOBkeWFiOaDheWgsSDlhaXlipvlhoXlrrnjgpLlkIzmnJ9cbiAgICAgIGNvbnN0IHN5bmNfZmllbGRzID0gKCkgPT4ge1xuICAgICAgICAkKCcubWVtYmVyX2ZpZWxkcyBpbnB1dCcpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgY29uc3QgJG0gPSAkKHRoaXMpO1xuICAgICAgICAgIGNvbnN0IG1fa2V5ID0gJG0uYXR0cignbmFtZScpO1xuICAgICAgICAgIGNvbnN0IG1fdmFsID0gJG0udmFsKCk7XG4gICAgICAgICAgY29uc3QgJHMgPSAkKGBpbnB1dFtuYW1lPVwic2hpcHBpbmdfJHttX2tleX1cIl1gKTtcbiAgICAgICAgICBpZiAoJHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAkcy52YWwobV92YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgJCgnLm1lbWJlcl9maWVsZHMgaW5wdXQnKS5hZGQoJHN5bmMpLm9uKGlucHV0X2V2ZW50cywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJHN5bmMucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgc3luY19maWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIOmDteS+v+eVquWPt+WkieabtOaZguOBruS9j+aJgOiHquWLleWFpeWKm+WItuW+oVxuICAgICAgZnVuY3Rpb24gc2V0dXBfcG9zdGNvZGVfYXV0b2ZpbGwocG9zdGNvZGVfc2VsZWN0b3IsIGZpZWxkc19tYXBwaW5nKSB7XG4gICAgICAgIGNvbnN0ICRwb3N0Y29kZV9pbnB1dCA9ICQocG9zdGNvZGVfc2VsZWN0b3IpO1xuICAgICAgICBpZiAoJHBvc3Rjb2RlX2lucHV0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsX3Bvc3Rjb2RlID0gU3RyaW5nKCRwb3N0Y29kZV9pbnB1dC5kYXRhKCdvcmlnaW5hbC12YWx1ZScpIHx8ICcnKTtcbiAgICAgICAgICAkcG9zdGNvZGVfaW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudF92YWx1ZSA9IFN0cmluZygkKHRoaXMpLnZhbCgpKTtcbiAgICAgICAgICAgIC8vIDfmoYHjga7mlbDlrZfjgYzlhaXlipvjgZXjgozjgIHjgYvjgaTlhYPjga7lgKTjgajnlbDjgarjgovloLTlkIhcbiAgICAgICAgICAgIGlmICgvXlswLTldezd9JC8udGVzdChjdXJyZW50X3ZhbHVlKSAmJiAoY3VycmVudF92YWx1ZSAhPT0gb3JpZ2luYWxfcG9zdGNvZGUpKSB7XG4gICAgICAgICAgICAgIC8vIFl1YmluQmFuZ28uQ29yZeOCkuebtOaOpeWRvOOBs+WHuuOBl+OBpuS9j+aJgOOCkuWPluW+l1xuICAgICAgICAgICAgICBuZXcgWXViaW5CYW5nby5Db3JlKGN1cnJlbnRfdmFsdWUsIGZ1bmN0aW9uIChhZGRyKSB7XG4gICAgICAgICAgICAgICAgLy8g5L2P5omA44OV44Kj44O844Or44OJ44Gr5YCk44KS6Kit5a6aXG4gICAgICAgICAgICAgICAgJChmaWVsZHNfbWFwcGluZy5wcmVmKS52YWwoYWRkci5yZWdpb24pO1xuICAgICAgICAgICAgICAgICQoZmllbGRzX21hcHBpbmcuY2l0eSkudmFsKGFkZHIubG9jYWxpdHkpO1xuICAgICAgICAgICAgICAgICQoZmllbGRzX21hcHBpbmcuc3RyZWV0KS52YWwoYWRkci5zdHJlZXQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
846H1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8g5Lya5ZOh5oOF5aCx44Gu6YO15L6/55Wq5Y+3XG4gICAgICBzZXR1cF9wb3N0Y29kZV9hdXRvZmlsbCgnaW5wdXRbbmFtZT1cInBvc3Rjb2RlXCJdJywge1xuICAgICAgICBwcmVmICA6ICdpbnB1dFtuYW1lPVwiYWRkcmVzc19wcmVmXCJdJyxcbiAgICAgICAgY2l0eSAgOiAnaW5wdXRbbmFtZT1cImFkZHJlc3NfY2l0eVwiXScsXG4gICAgICAgIHN0cmVldDogJ2lucHV0W25hbWU9XCJhZGRyZXNzMVwiXSdcbiAgICAgIH0pO1xuICAgICAgLy8g44GK5bGK44GR5YWI5oOF5aCx44Gu6YO15L6/55Wq5Y+3XG4gICAgICBzZXR1cF9wb3N0Y29kZV9hdXRvZmlsbCgnaW5wdXRbbmFtZT1cInNoaXBwaW5nX3Bvc3Rjb2RlXCJdJywge1xuICAgICAgICBwcmVmICA6ICdpbnB1dFtuYW1lPVwic2hpcHBpbmdfYWRkcmVzc19wcmVmXCJdJyxcbiAgICAgICAgY2l0eSAgOiAnaW5wdXRbbmFtZT1cInNoaXBwaW5nX2FkZHJlc3NfY2l0eVwiXScsXG4gICAgICAgIHN0cmVldDogJ2lucHV0W25hbWU9XCJzaGlwcGluZ19hZGRyZXNzMVwiXSdcbiAgICAgIH0pO1xuXG4gICAgICAvLyBzdWJtaXRcbiAgICAgICQoJy5mb3JtX2J1dHRvbnMgLmVkaXQnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIOe3qOmbhuWvvuixoeOBrumhp+WuouOCkumBuOaKnlxuICAgICAgJCgnLnN3aXRjaF9jdXN0b21lciBzZWxlY3QnKS5zZWxlY3QyKHtcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfnt6jpm4blr77osaHjga7poaflrqLjgpLpgbjmip4nLFxuICAgICAgICBhbGxvd0NsZWFyOiBmYWxzZVxuICAgICAgfSkub25lKCdzZWxlY3QyOm9wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoJy5zZWxlY3QyLXNlYXJjaF9fZmllbGQnKS5hdHRyKCdwbGFjZWhvbGRlcicsICfpoaflrqLlkI3jg7vjg6Hjg7zjg6vjg7vlj5blvJXlhYjjgrPjg7zjg4njg7vpm7voqbHnlarlj7cg44KS5YWl5YqbJyk7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnKSB7XG4gICAgICAgICAgICAgICQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbicpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJG9wdGlvbiA9ICQoZWwpO1xuICAgICAgICAgICAgICAgIGlmICgkb3B0aW9uLmhhc0NsYXNzKCdtdWx0aWxpbmUnKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gJG9wdGlvbi50ZXh0KCkucmVwbGFjZSgv44CAL2csICc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgJG9wdGlvbi5odG1sKHRleHQpO1xuICAgICAgICAgICAgICAgICRvcHRpb24uYWRkQ2xhc3MoJ211bHRpbGluZScpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMnKTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgICBjaGlsZExpc3Q6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIH1cblxuICAgIC8vIOWlkee0hOOCueODhuODvOOCv+OCuVxuICAgIGlmICgkKCdib2R5JykuaXMoJy5wYWdlLW15cGFnZS1jaGlsZC5wYWdlLXN0YXR1cycpKSB7XG4gICAgICB0b2dnbGVfZm9ybV9idXR0b24oKTtcbiAgICAgICQoJ1tuYW1lPVwic3RhdHVzXCJdJykub24oJ2NoYW5nZScsIHRvZ2dsZV9mb3JtX2J1dHRvbik7XG4gICAgICBmdW5jdGlvbiB0b2dnbGVfZm9ybV9idXR0b24oKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyAgICAgPSAkKCdbbmFtZT1cInN0YXR1c1wiXScpLnZhbCgpO1xuICAgICAgICBjb25zdCBzdGF0dXNfb2xkID0gJCgnW25hbWU9XCJzdGF0dXNfb2xkXCJdJykudmFsKCk7XG4gICAgICAgIGNvbnN0ICRidXR0b25zICAgPSAkKCcuZm9ybV9idXR0b25zJyk7XG4gICAgICAgIGlmIChzdGF0dXMgPT0gc3RhdHVzX29sZCkge1xuICAgICAgICAgICRidXR0b25zLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRidXR0b25zLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xufSkoalF1ZXJ5KTtcbiIsIihmdW5jdGlvbiAoJCkge1xuICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG5cbiAgICAvKipcbiAgICAgKiDjg5fjg6njg7Ppgbjmip5cbiAgICAgKi9cbiAgICBpZiAoJCgnLnBsYW5fZmllbGRzJykubGVuZ3RoKSB7XG4gICAgICAvLyDopoHntKBcbiAgICAgIGNvbnN0ICRwbGFucyAgICAgICAgICAgICAgPSAkKCdpbnB1dFtuYW1lPVwicGxhblwiXScpO1xuICAgICAgY29uc3QgJG1vZGVscyAgICAgICAgICAgICA9ICQoJyNwbGFuX21vZGVscycpO1xuICAgICAgY29uc3QgJG1vZGVsc19maWVsZCAgICAgICA9ICRtb2RlbHMuY2xvc2VzdCgnLmZpZWxkJyk7XG4gICAgICBjb25zdCAkYWdlX2ZpZWxkcyAgICAgICAgID0gJCgnc2VsZWN0W25hbWVePVwicGxhbl9hZ2VfXCJdJyk7XG4gICAgICBjb25zdCAkYWdlX2ZpZWxkc193cmFwcGVyID0gJGFnZV9maWVsZHMuY2xvc2VzdCgnLnNlbGVjdF93cmFwcGVyJyk7XG4gICAgICBjb25zdCAkc2hpcHBpbmdfaW50ZXJ2YWwgID0gJCgnc2VsZWN0W25hbWU9XCJwbGFuX3NoaXBwaW5nX2ludGVydmFsXCJdJyk7XG4gICAgICBjb25zdCAkYm9va3NoZWxmICAgICAgICAgID0gJCgnW25hbWU9XCJwbGFuX29wdGlvbl9ib29rc2hlbGZcIl0nKTtcbiAgICAgIGNvbnN0ICRiX3dyYXBwZXIgICAgICAgICAgPSAkYm9va3NoZWxmLmNsb3Nlc3QoJy5zZWxlY3Rfd3JhcHBlcicpO1xuICAgICAgLy8g5Yy65YiG44GU44Go44Gu5YaK5pWwXG4gICAgICBjb25zdCBzaGlwcGluZ19pbnRlcnZhbHMgICAgICAgICA9IFsxLCAyLCAzLCA0LCA1LCA2XTtcbiAgICAgIGNvbnN0IGxpYnJhcnlfc2hpcHBpbmdfaW50ZXJ2YWxzID0gWzMsIDZdO1xuICAgICAgY29uc3QgYWdlX3RvdGFsX2xpbWl0ID0gMTA7XG4gICAgICBjb25zdCBzZWdtZW50X251bWJlcnMgPSB7XG4gICAgICAgICdmcmVlJyA6IHtcbiAgICAgICAgICAnYWdlX2EnICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICdhZ2VfYicgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgJ2FnZV9jJyAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAnZW5nbGlzaF9hJyAgICAgICAgOiAwLFxuICAgICAgICAgICdlbmdsaXNoX2InICAgICAgICA6IDAsXG4gICAgICAgICAgJ3NoaXBwaW5nX2ludGVydmFsJzogMVxuICAgICAgICB9LFxuICAgICAgICAnbW9kZWxfYScgOiB7XG4gICAgICAgICAgJ2FnZV9hJyAgICAgICAgICAgIDogMyxcbiAgICAgICAgICAnYWdlX2InICAgICAgICAgICAgOiAyLFxuICAgICAgICAgICdhZ2VfYycgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgJ2VuZ2xpc2hfYScgICAgICAgIDogMCxcbiAgICAgICAgICAnZW5nbGlzaF9iJyAgICAgICAgOiAwLFxuICAgICAgICAgICdzaGlwcGluZ19pbnRlcnZhbCc6IDRcbiAgICAgICAgfSxcbiAgICAgICAgJ21vZGVsX2InIDoge1xuICAgICAgICAgICdhZ2VfYScgICAgICAgICAgICA6IDMsXG4gICAgICAgICAgJ2FnZV9iJyAgICAgICAgICAgIDogMyxcbiAgICAgICAgICAnYWdlX2MnICAgICAgICAgICAgOiA0LFxuICAgICAgICAgICdlbmdsaXNoX2EnICAgICAgICA6IDAsXG4gICAgICAgICAgJ2VuZ2xpc2hfYicgICAgICAgIDogMCxcbiAgICAgICAgICAnc2hpcHBpbmdfaW50ZXJ2YWwnOiAxXG4gICAgICAgI
846H0sXG4gICAgICAgICdsaWJyYXJ5JyA6IHtcbiAgICAgICAgICAnYWdlX2EnICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICdhZ2VfYicgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgJ2FnZV9jJyAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAnZW5nbGlzaF9hJyAgICAgICAgOiAwLFxuICAgICAgICAgICdlbmdsaXNoX2InICAgICAgICA6IDAsXG4gICAgICAgICAgJ3NoaXBwaW5nX2ludGVydmFsJzogM1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIC8vIOWGiuaVsOOCkuOCu+ODg+ODiFxuICAgICAgJCgnaW5wdXRbbmFtZT1cInBsYW5cIl0nKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjaGVja2VkX3BsYW4gPSAkKCdpbnB1dFtuYW1lPVwicGxhblwiXTpjaGVja2VkJykudmFsKCk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBzZWdtZW50X251bWJlcnNbY2hlY2tlZF9wbGFuXTtcbiAgICAgICAgLy8g44Op44Kk44OW44Op44Oq44O844OX44Op44OzXG4gICAgICAgIGxldCBpbnRlcnZhbF9vcHRpb25zID0gJyc7XG4gICAgICAgIGlmIChjaGVja2VkX3BsYW4gPT0gJ2xpYnJhcnknKSB7XG4gICAgICAgICAgJGFnZV9maWVsZHNfd3JhcHBlci5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgICBsaWJyYXJ5X3NoaXBwaW5nX2ludGVydmFscy5mb3JFYWNoKG1vbnRoID0+IHtcbiAgICAgICAgICAgIGludGVydmFsX29wdGlvbnMgKz0gYDxvcHRpb24gdmFsdWU9XCIke21vbnRofVwiPiR7bW9udGh9PC9vcHRpb24+YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkYWdlX2ZpZWxkc193cmFwcGVyLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgIHNoaXBwaW5nX2ludGVydmFscy5mb3JFYWNoKG1vbnRoID0+IHtcbiAgICAgICAgICAgIGludGVydmFsX29wdGlvbnMgKz0gYDxvcHRpb24gdmFsdWU9XCIke21vbnRofVwiPiR7bW9udGh9PC9vcHRpb24+YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAkc2hpcHBpbmdfaW50ZXJ2YWwuaHRtbChpbnRlcnZhbF9vcHRpb25zKTtcbiAgICAgICAgLy8g5YaK5pWw44KS44K744OD44OIXG4gICAgICAgIGxvZGFzaC5mb3JFYWNoKG51bWJlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAkKGBzZWxlY3RbbmFtZT1cInBsYW5fJHtrZXl9XCJdYCkudmFsKHZhbHVlKS5jaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOOBiuOBmeOBmeOCgeODouODh+ODq+ihqOekuuWIh+abv1xuICAgICAgICBpZiAoJG1vZGVscy5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICAkbW9kZWxzX2ZpZWxkLmFkZENsYXNzKCdjaGVja2VkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJG1vZGVsc19maWVsZC5yZW1vdmVDbGFzcygnY2hlY2tlZCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOWGiuaVsOODkOODquODh+ODvOOCt+ODp+ODsyAo5bm06b2i5Yy65YiGIOS4iumZkClcbiAgICAgICRhZ2VfZmllbGRzLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBhZ2VfY291bnQgID0gMDtcbiAgICAgICAgY29uc3QgJGNoYW5nZWRfc2VsZWN0ID0gJCh0aGlzKTtcbiAgICAgICAgJGFnZV9maWVsZHMuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgICBhZ2VfY291bnQgKz0gTnVtYmVyKCQoZWwpLnZhbCgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOW5tOm9ouWMuuWIhiDkuIrpmZBcbiAgICAgICAgaWYgKGFnZV9jb3VudCA+IGFnZV90b3RhbF9saW1pdCkge1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSAoYWdlX2NvdW50IC0gYWdlX3RvdGFsX2xpbWl0KTtcbiAgICAgICAgICBjb25zdCBuZXdfdmFsdWUgPSAoJGNoYW5nZWRfc2VsZWN0LnZhbCgpIC0gZGlmZik7XG4gICAgICAgICAgJGNoYW5nZWRfc2VsZWN0LnZhbChuZXdfdmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBg44CM5bm06b2i5Yy65YiG44CN44Gu57W15pys44Gv44CBXFxu5ZCI6KiIJHthZ2VfdG90YWxfbGltaXR95YaK44G+44Gn6YG45oqe44Gn44GN44G+44GZ44CCYDtcbiAgICAgICAgICBhbGVydChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyDlhormlbDjg5Djg6rjg4fjg7zjgrfjg6fjg7MgKOW5tOm9ouWMuuWIhuODu+iLseiqnue1teacrCDkuIvpmZApXG4gICAgICAkKCcuZm9ybV9idXR0b25zIC5lZGl0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVfcGxhbl9ib29rc19jb3VudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyDjg6rjgrvjg4Pjg4hcbiAgICAgICQoJy5yZXNldCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICfjg5fjg6njg7Pjga7pgbjmip7lhoXlrrnjgpLjg6rjgrvjg4Pjg4jjgZfjgb7jgZnjgIJcXG7jgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8nO1xuICAgICAgICBpZiAoY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgICAgICQoJ1tuYW1lPVwicGxhblwiXVt2YWx1ZT1cImZyZWVcIl0nKS50cmlnZ2VyKCdjbGljaycpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgJCgnW25hbWVePVwicGxhbl9vcHRpb25fXCJdJykudmFsKDApLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOODl+ODqeODs+WIh+abv1xuICAgICAgaWYgKCRtb2RlbHMucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICRtb2RlbHNfZmllbGQuYWRkQ2xhc3MoJ2NoZWNrZWQnKTtcbiAgICAgIH1cbiAgICAgICQoJy5wbGFuX2ZpZWxkcyAucGxhbnMgaW5wdXQnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgICAgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgY29uc3QgdmFsdWUgICA9ICQodGhpcykudmFsKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsX2l0ZW1zID0gWydtb2RlbF9hJywgJ21vZGVsX2InXTtcbiAgICAgICAgaWYgKG5hbWUgPT0gJ3BsYW4nKSB7XG4gICAgICAgICAgaWYgKG1vZGVsX2l0ZW1zLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgJG1vZGVscy5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtb2RlbHMucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgI
846H0gZWxzZSBpZiAobmFtZSA9PSAncGxhbl9tb2RlbHMnKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZF9wbGFuID0gJCgnaW5wdXRbbmFtZT1cInBsYW5cIl06Y2hlY2tlZCcpLnZhbCgpO1xuICAgICAgICAgIGlmICghbW9kZWxfaXRlbXMuaW5jbHVkZXMoY2hlY2tlZF9wbGFuKSkge1xuICAgICAgICAgICAgJHBsYW5zLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwicGxhblwiXVt2YWx1ZT1cIm1vZGVsX2FcIl0nKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSkuY2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOaWmemHkeOCkuioiOeul1xuICAgICAgJCgnW25hbWVePVwicGxhbl9cIl0nKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcucHJpY2VfaXRlbXMnKS5hZGRDbGFzcygnbG9hZGluZycpO1xuICAgICAgfSkub24oJ2NoYW5nZScsIGxvZGFzaC5kZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIHBhcmFtLmFwcGVuZCgncGxhbicsICQoJ1tuYW1lPVwicGxhblwiXTpjaGVja2VkJykudmFsKCkpO1xuICAgICAgICAkKCdbbmFtZV49XCJwbGFuX1wiXScpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gJChlbCkuYXR0cignbmFtZScpLnJlcGxhY2UoJ3BsYW5fJywgJycpO1xuICAgICAgICAgIHBhcmFtLmFwcGVuZChrZXksICQoZWwpLnZhbCgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF4aW9zLnBvc3QoV0xSLmFwaSArICdwbGFuL2NhbGNfcHJpY2UnLCBwYXJhbSlcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgLy8g44GK6KaL56mN44KK6YeR6aGNXG4gICAgICAgICAgICBjb25zdCBwcmljZV9pdGVtcyA9IFsnYm9va3NfY291bnQnLCAnb3B0aW9uc190b3RhbCcsICdtb250aGx5X3RvdGFsJywgJ2luaXRpYWxfdG90YWwnXTtcbiAgICAgICAgICAgIHByaWNlX2l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgnamEtSlAnKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKGl0ZW0gPT0gJ2Jvb2tzX2NvdW50JykgPyBkYXRhW2l0ZW1dIDogZm9ybWF0dGVyLmZvcm1hdChkYXRhW2l0ZW1dKTtcbiAgICAgICAgICAgICAgJChgLnByaWNlX2l0ZW1zIC4ke2l0ZW19YCkuYXR0cignZGF0YS1udW1iZXInLCBvdXRwdXQpO1xuICAgICAgICAgICAgICAvLyBzaWdudXBcbiAgICAgICAgICAgICAgJChgLnBheW1lbnRfZmllbGRzIC5wcmljZS4ke2l0ZW19YCkuYXR0cignZGF0YS1udW1iZXInLCBvdXRwdXQpO1xuICAgICAgICAgICAgICAvLyBteXBhZ2UgY29udHJhY3RcbiAgICAgICAgICAgICAgJChgLnBhZ2UtY29udHJhY3QgLnByaWNlX2ZpZWxkcyAucHJpY2UuJHtpdGVtfWApLmF0dHIoJ2RhdGEtbnVtYmVyJywgb3V0cHV0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gM0Tjgrvjgq3jg6XjgqJcbiAgICAgICAgICAgIGNvbnN0IGFtb3VudCA9IGRhdGFbJ2luaXRpYWxfdG90YWwnXTtcbiAgICAgICAgICAgICQoJ1tuYW1lPVwicGF5bWVudF9jcmVkaXRfYW1vdW50XCJdJykudmFsKGFtb3VudCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcucHJpY2VfaXRlbXMnKS5yZW1vdmVDbGFzcygnbG9hZGluZycpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSwgMTAwKSk7XG4gICAgICAvLyDlubTpvaLljLrliIbjg7vkuqTmj5vpoLvluqbjgpLmiYvli5XlpInmm7TmmYJcbiAgICAgIC8vIOODl+ODqeODs+OCkuOAjOiHqueUseOBq+mBuOOBtuOAjeOBq+WkieabtFxuICAgICAgLy8g44Op44Kk44OW44Op44Oq44O844OX44Op44Oz44Gu5aC05ZCI44Gr44Gv5Lqk5o+b6aC75bqm44KS5aSJ5pu05Y+vXG4gICAgICAkKCdbbmFtZV49XCJwbGFuX2FnZV9cIl0sIFtuYW1lPVwicGxhbl9zaGlwcGluZ19pbnRlcnZhbFwiXScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICRob3ZlciA9ICQoJ1tuYW1lXj1cInBsYW5fYWdlX1wiXTpob3ZlciwgW25hbWU9XCJwbGFuX3NoaXBwaW5nX2ludGVydmFsXCJdOmhvdmVyJyk7XG4gICAgICAgIGNvbnN0ICRsaWJyYXJ5X2NoZWNrZWQgPSAkKCdbbmFtZT1cInBsYW5cIl1bdmFsdWU9XCJsaWJyYXJ5XCJdOmNoZWNrZWQnKTtcbiAgICAgICAgaWYgKCRob3Zlci5sZW5ndGggJiYgISRsaWJyYXJ5X2NoZWNrZWQubGVuZ3RoKSB7XG4gICAgICAgICAgJHBsYW5zLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgJG1vZGVscy5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICRtb2RlbHNfZmllbGQucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTtcbiAgICAgICAgICAkKCdbbmFtZT1cInBsYW5cIl1bdmFsdWU9XCJmcmVlXCJdJykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG59KShqUXVlcnkpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZV9wbGFuX2Jvb2tzX2NvdW50KCkge1xuICBsZXQgYm9va3NfY291bnQgPSAwO1xuICBjb25zdCAkYm9va19maWVsZHMgPSAkKCdzZWxlY3RbbmFtZV49XCJwbGFuX2FnZV9cIl0sIHNlbGVjdFtuYW1lXj1cInBsYW5fZW5nbGlzaF9cIl0nKTtcbiAgY29uc3QgY2hlY2tlZF9wbGFuID0gJCgnaW5wdXRbbmFtZT1cInBsYW5cIl06Y2hlY2tlZCcpLnZhbCgpO1xuICBpZiAoY2hlY2tlZF9wbGFuID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgJGJvb2tfZmllbGRzLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgYm9va3NfY291bnQgKz0gTnVtYmVyKCQoZWwpLnZhbCgpKTtcbiAgfSk7XG4gIGNvbnN0IHZhbGlkID0gKGJvb2tzX2NvdW50IHx8IChjaGVja2VkX3BsYW4gPT0gJ2xpYnJhcnknKSlcbiAgaWYgKCF2YWxpZCkge1xuICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCAyMDApO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBg44CM5bm06b2i5Yy65YiG44CN44CM6Iux6Kqe57W15pys44CNXFxu5ZCI44KP44Gb44GmMeWGiuS7peS4iumBuOaKnuOBl+OBpuOBj+OBoOOBleOBhOOAgmA7XG4gICAgYWxlcnQobWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuIiwiKGZ1bmN0aW9uICgkKSB7XG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICgkKCdib2R5JykuaXMoJy5wYWdlLXNpZ251cCwgLnBhZ2UtcGF5bWVudCcpKSB7XG5cbiAgICAgIGluaXRf
846cGF5bWVudF9maWVsZHMoKTtcbiAgICAgICQoJ1tuYW1lPVwicGF5bWVudF90eXBlXCJdJykub24oJ2NoYW5nZScsIGluaXRfcGF5bWVudF9maWVsZHMpO1xuXG4gICAgICBmdW5jdGlvbiBpbml0X3BheW1lbnRfZmllbGRzKCkge1xuICAgICAgICAkKCcucGF5bWVudF9jcmVkaXRfZmllbGRzLCAucGF5bWVudF9pbnZvaWNlX2ZpZWxkcycpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgY29uc3QgJGNyZWRpdF9pdGVtcyA9ICQoJy5wYXltZW50X2NyZWRpdF9maWVsZHMgaW5wdXQnKTtcbiAgICAgICAgY29uc3QgdHlwZSA9ICQoJ1tuYW1lPVwicGF5bWVudF90eXBlXCJdOmNoZWNrZWQnKS52YWwoKTtcbiAgICAgICAgJChgLnBheW1lbnRfJHt0eXBlfV9maWVsZHNgKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIC8vIOOCr+ODrOOCuOODg+ODiOOCq+ODvOODiSDlv4XpoIjpoIXnm65cbiAgICAgICAgaWYgKHR5cGUgPT0gJ2NyZWRpdCcpIHtcbiAgICAgICAgICAkY3JlZGl0X2l0ZW1zLnByb3AoJ3JlcXVpcmVkJywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGNyZWRpdF9pdGVtcy5wcm9wKCdyZXF1aXJlZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gIH0pO1xufSkoalF1ZXJ5KTtcblxuLypcbiAqIOOCq+ODvOODieaDheWgseOBi+OCieODiOODvOOCr+ODs+eUn+aIkFxuICovXG5mdW5jdGlvbiBzaWdudXBfcGF5bWVudF9jcmVhdGVfdG9rZW4oKSB7XG4gIENQVG9rZW4uVG9rZW5DcmVhdGUoe1xuICAgIGFpZDogV0xSLnBheW1lbnRfYWlkLFxuICAgIGNuOiAgJCgnW25hbWU9XCJwYXltZW50X2NyZWRpdF9udW1iZXJcIl0nKS52YWwoKSxcbiAgICBjdnY6ICQoJ1tuYW1lPVwicGF5bWVudF9jcmVkaXRfY3ZjXCJdJykudmFsKCksXG4gICAgZWQ6ICAkKCdbbmFtZT1cInBheW1lbnRfY3JlZGl0X2V4cGlyYXRpb25feWVhclwiXScpLnZhbCgpXG4gICAgICAgKyAkKCdbbmFtZT1cInBheW1lbnRfY3JlZGl0X2V4cGlyYXRpb25fbW9udGhcIl0nKS52YWwoKSxcbiAgICBmbjogICQoJ1tuYW1lPVwicGF5bWVudF9jcmVkaXRfZmlyc3RfbmFtZVwiXScpLnZhbCgpLFxuICAgIGxuOiAgJCgnW25hbWU9XCJwYXltZW50X2NyZWRpdF9sYXN0X25hbWVcIl0nKS52YWwoKVxuICB9LCBzaWdudXBfcGF5bWVudF9hdXRoKTtcbn1cblxuLypcbiAqIDNE44K744Kt44Ol44KiXG4gKi9cbmZ1bmN0aW9uIHNpZ251cF9wYXltZW50X2F1dGgocmVzdWx0LCBlcnJvcikge1xuICAvLyDjg4jjg7zjgq/jg7PnlJ/miJDjgavmiJDlip/jgZnjgozjgbDoqo3oqLzjgpLlrp/ooYxcbiAgaWYgKHJlc3VsdCA9PSAnU3VjY2VzcycpIHtcbiAgICBjb25zdCB0b2tlbiAgPSAkKCdbbmFtZT1cInBheW1lbnRfY3JlZGl0X3Rva2VuXCJdJykudmFsKCk7XG4gICAgY29uc3QgYW1vdW50ID0gJCgnW25hbWU9XCJwYXltZW50X2NyZWRpdF9hbW91bnRcIl0nKS52YWwoKTtcbiAgICBUaHJlZURTQWRhcHRlci5hdXRoZW50aWNhdGUoe1xuICAgICAgdGtuOiB0b2tlbixcbiAgICAgIGFpZDogV0xSLnBheW1lbnRfYWlkLFxuICAgICAgYW06ICBhbW91bnQsXG4gICAgICB0eDogIDAsXG4gICAgICBzZjogIDAsXG4gICAgICBlbTogICQoJ1tuYW1lPVwiZW1haWxcIl0nKS52YWwoKSxcbiAgICAgIHBuOiAgJCgnW25hbWU9XCJ0ZWxcIl0nKS52YWwoKVxuICAgIH0sIHNpZ251cF9wYXltZW50X3N1Ym1pdCk7XG4gIH0gZWxzZSB7XG4gICAgLy8g44OI44O844Kv44Oz55Sf5oiQ44Gr5aSx5pWX44GZ44KM44Gw44Ko44Op44O86KGo56S6XG4gICAgc2lnbnVwX3BheW1lbnRfZXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbi8qXG4gKiDjgqvjg7zjg4nmg4XloLHjgYvjgonjg4jjg7zjgq/jg7PnlJ/miJDlvowg44OV44Kp44O844Og44KSc3VibWl0XG4gKi9cbmZ1bmN0aW9uIHNpZ251cF9wYXltZW50X3N1Ym1pdChyZXN1bHQsIGVycm9yKSB7XG4gIC8vIOaxuua4iOaIkOWKn+aZglxuICBpZiAocmVzdWx0ID09ICdTdWNjZXNzJykge1xuICAgIC8vIOODiOODvOOCr+ODs+S7peWkluOBruOCq+ODvOODieaDheWgseOCkuOCr+ODquOColxuICAgICQoJ1tuYW1lXj1cInBheW1lbnRfY3JlZGl0X1wiXTpub3QoW25hbWU9XCJwYXltZW50X2NyZWRpdF90b2tlblwiXSknKS52YWwoJycpO1xuICAgIC8vIOOCq+ODvOODieaDheWgseOBruW/hemgiOWxnuaAp+OCkuWkluOBl+OAgeODkOODquODh+ODvOOCt+ODp+ODs+OCkuWbnumBv1xuICAgICQoJ1tuYW1lXj1cInBheW1lbnRfY3JlZGl0X1wiXScpLnByb3AoJ3JlcXVpcmVkJywgZmFsc2UpO1xuICAgIC8vIOODleOCqeODvOODoOODh+ODvOOCv+mAgeS/oVxuICAgICQoJy5mb3JtX3dyYXBwZXIgZm9ybScpLnN1Ym1pdCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIOaxuua4iOWkseaVl+aZglxuICAgIHNpZ251cF9wYXltZW50X2Vycm9yKGVycm9yKTtcbiAgfVxufVxuXG4vKlxuICog44OI44O844Kv44Oz55Sf5oiQ5aSx5pWX5pmCXG4gKi9cbmZ1bmN0aW9uIHNpZ251cF9wYXltZW50X2Vycm9yKGVycm9yKSB7XG4gIGNvbnN0IHRleHQgPSBg5rG65riI44Ko44Op44O844Gn44GZ44CC44Kr44O844OJ5oOF5aCx44KS44GU56K66KqN44GP44Gg44GV44GE44CCXFxu44Ko44Op44O844Kz44O844OJIDogJHtlcnJvci5jb2RlfWA7XG4gIGFsZXJ0KHRleHQpO1xufVxuIiwiKGZ1bmN0aW9uICgkKSB7XG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICgkKCdib2R5JykuaGFzQ2xhc3MoJ3BhZ2Utc2lnbnVwJykpIHtcblxuICAgICAgJCgnI25leHRfcHJldmlldycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJGlucHV0X2ZpZWxkcyAgID0gJCgnLnBsYW5fZmllbGRzLCAubWVtYmVyX2ZpZWxkcywgLnNoaXBwaW5nX2ZpZWxkcycpO1xuICAgICAgICBjb25zdCAkcHJldmlld19maWVsZHMgPSAkKCcucHJldmlld19wbGFuX2ZpZWxkcywgLnByZXZpZXdfb3B0aW9uX2ZpZWxkcywgLnByZXZpZXdfbWVtYmVyX2ZpZWxkcywgLnByZXZpZXdfc2hpcHBpbmdfZmllbGRzJyk7XG4gICAgICAgIGNvbnN0ICRwYXltZW50X3BsYW5zICA9ICQoJy5wYXltZW50X2NyZWRpdF9maWVsZHMsIC5wYXltZW50X2ludm9pY2VfZmllbGRzJykuZmluZCgndGRbZGF0YS1uYW1lPVwicGxhblwiXScpO1xuICAgICAgICAvLyDjg4bjgq3jgrnjg4jjg5XjgqPjg7zjg6vjg4ksIHRleHRhcmVhLCBzZWxlY3Qg44OX44Os44OT44Ol44O844KS55Sf5oiQXG4gICAgICAgICRpbnB1dF9maWVsZHMuZmluZCgnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAgIGNvbnN0IGVsX3R5cGUgPSAkKGVsKS5wcm9wKCdub2RlTmFtZScpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgY29uc3QgdHlwZSAgICA9ICQoZWwpLmF0dHIoJ3R5cGUnKTtcbiAgICAgICAgICBjb25zdCBuYW1lICAgID0gJChlbCkuYXR0cignbmFtZScpO1xuICAgICAgICAgIGlmIChbJ3JhZGlvJywgJ2NoZWNrYm94J10uaW5jbHVkZXModHlwZSkgfHwgKG5hbWUgPT0gJ3Bhc3N3b3JkJykpIHtcbiAgICAgICAgICAgI
846HJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoZWxfdHlwZSA9PSAnc2VsZWN0JykgPyAkKGVsKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCkgOiAkKGVsKS52YWwoKTtcbiAgICAgICAgICAkcHJldmlld19maWVsZHMuZmluZChgdGRbZGF0YS1uYW1lPVwiJHtuYW1lfVwiXWApLmF0dHIoJ2RhdGEtdmFsdWUnLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByYWRpbywgY2hlY2tib3ggIOODl+ODrOODk+ODpeODvOOCkua2iOWOu1xuICAgICAgICAkaW5wdXRfZmllbGRzLmZpbmQoJ1t0eXBlPVwicmFkaW9cIl0sIFt0eXBlPVwiY2hlY2tib3hcIl0nKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSAkKGVsKS5hdHRyKCduYW1lJyk7XG4gICAgICAgICAgJHByZXZpZXdfZmllbGRzLmZpbmQoYHRkW2RhdGEtbmFtZT1cIiR7bmFtZX1cIl1gKS5hdHRyKCdkYXRhLXZhbHVlJywgJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmFkaW8g44OX44Os44OT44Ol44O844KS55Sf5oiQXG4gICAgICAgICRpbnB1dF9maWVsZHMuZmluZCgnW3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgICBjb25zdCBuYW1lICA9ICQoZWwpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICBjb25zdCBpZCAgICA9ICQoZWwpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSAkKGBsYWJlbFtmb3I9XCIke2lkfVwiXWApLnRleHQoKTtcbiAgICAgICAgICAkcHJldmlld19maWVsZHMuZmluZChgdGRbZGF0YS1uYW1lPVwiJHtuYW1lfVwiXWApLmF0dHIoJ2RhdGEtdmFsdWUnLCBsYWJlbCk7XG4gICAgICAgICAgaWYgKG5hbWUgPT0gJ3BsYW4nKSB7XG4gICAgICAgICAgICAkcGF5bWVudF9wbGFucy5hdHRyKCdkYXRhLXZhbHVlJywgbGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNoZWNrYm94IOODl+ODrOODk+ODpeODvOOCkueUn+aIkFxuICAgICAgICBjb25zdCBjaGVja2JveF92YWx1ZXMgPSB7fTtcbiAgICAgICAgJGlucHV0X2ZpZWxkcy5maW5kKCdbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAgIGxldCAgIG5hbWUgID0gJChlbCkuYXR0cignbmFtZScpO1xuICAgICAgICAgIGNvbnN0IGlkICAgID0gJChlbCkuYXR0cignaWQnKTtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9ICQoYGxhYmVsW2Zvcj1cIiR7aWR9XCJdYCkudGV4dCgpO1xuICAgICAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgnW10nLCAnJyk7XG4gICAgICAgICAgaWYgKGNoZWNrYm94X3ZhbHVlc1tgJHtuYW1lfWBdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNoZWNrYm94X3ZhbHVlc1tgJHtuYW1lfWBdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrYm94X3ZhbHVlc1tgJHtuYW1lfWBdLnB1c2gobGFiZWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgbG9kYXNoLmZvckVhY2goY2hlY2tib3hfdmFsdWVzLCBmdW5jdGlvbih2YWx1ZXMsIG5hbWUpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbHMgPSB2YWx1ZXMuam9pbignLCAnKTtcbiAgICAgICAgICAkcHJldmlld19maWVsZHMuZmluZChgdGRbZGF0YS1uYW1lPVwiJHtuYW1lfVwiXWApLmF0dHIoJ2RhdGEtdmFsdWUnLCBsYWJlbHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g44GK5bGK44GR5YWI5oOF5aCxXG4gICAgICAgIGNvbnN0IHN5bmMgPSAkKCcjc3luY19zaGlwcGluZ19maWVsZHMnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgIGNvbnN0ICRzX3RhYmxlID0gJCgnLnByZXZpZXdfc2hpcHBpbmdfZmllbGRzX3RhYmxlJyk7XG4gICAgICAgICQoJyNwcmV2aWV3X3N5bmNfc2hpcHBpbmdfZmllbGRzJykucHJvcCgnY2hlY2tlZCcsIHN5bmMpO1xuICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICRzX3RhYmxlLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkc190YWJsZS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gIH0pO1xufSkoalF1ZXJ5KTtcbiIsIihmdW5jdGlvbiAoJCkge1xuICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG5cbiAgICBpZiAoJCgnYm9keScpLmlzKCcucGFnZS1zaWdudXAsIC5wYWdlLXBheW1lbnQsIC5wYWdlLW15cGFnZScpKSB7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0JztcblxuICAgICAgLyoqXG4gICAgICAgKiDlsZ7mgKfjgpLov73liqBcbiAgICAgICAqL1xuICAgICAgJCgnLmZvcm1fd3JhcHBlcicpLmZpbmQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICQoZWwpLmF0dHIoJ2RhdGEtcGFyc2xleS10cmlnZ2VyJywgJ2JsdXIgZm9jdXNvdXQgY2hhbmdlJyk7XG4gICAgICB9KTtcbiAgICAgICQoJy5wbGFuX2ZpZWxkcycpLmZpbmQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICQoZWwpLmF0dHIoJ2RhdGEtcGFyc2xleS1ncm91cCcsICdwbGFuJyk7XG4gICAgICB9KTtcbiAgICAgICQoJy5tZW1iZXJfc2hpcHBpbmdfZmllbGRzJykuZmluZChlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgJChlbCkuYXR0cignZGF0YS1wYXJzbGV5LWdyb3VwJywgJ21lbWJlcicpO1xuICAgICAgfSk7XG4gICAgICAkKCcucGF5bWVudF9maWVsZHMsIC5wYXltZW50X2NyZWRpdF9maWVsZHMnKS5maW5kKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICAkKGVsKS5hdHRyKCdkYXRhLXBhcnNsZXktZ3JvdXAnLCAncGF5bWVudCcpO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICog44Ko44Op44O86KGo56S6XG4gICAgICAgKiBAcGFyYW0gYm9vbGVhbiBzY3JvbGxcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gdmFsaWRhdGlvbl9zaG93X2Vycm9yKHNjcm9sbCkge1xuICAgICAgICAkKCcucGFyc2xleS1lcnJvcnMtbGlzdCcpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgJChlbCkuY2xvc2VzdCgndHInKS5maW5kKCd0aCcpLmFwcGVuZCgkKGVsKSk7XG4gICAgICAgI
846H0pO1xuICAgICAgICAkKCcuZm9ybV93cmFwcGVyIHRoJykuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgICBjb25zdCBsaXN0X2xlbiA9ICQoZWwpLmZpbmQoJy5wYXJzbGV5LWVycm9ycy1saXN0JykubGVuZ3RoO1xuICAgICAgICAgIGlmIChsaXN0X2xlbiA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RfZmlyc3QgPSAkKGVsKS5maW5kKCcucGFyc2xleS1lcnJvcnMtbGlzdDplcSgwKScpO1xuICAgICAgICAgICAgY29uc3QgbGlzdF9ub3RfZmlyc3QgPSAkKGVsKS5maW5kKCcucGFyc2xleS1lcnJvcnMtbGlzdDpub3QoOmVxKDApKScpO1xuICAgICAgICAgICAgY29uc3QgbGlzdF9pdGVtcyA9ICQoZWwpLmZpbmQoJy5wYXJzbGV5LWVycm9ycy1saXN0IGxpJyk7XG4gICAgICAgICAgICBsaXN0X2ZpcnN0LnByZXBlbmQobGlzdF9pdGVtcyk7XG4gICAgICAgICAgICBsaXN0X25vdF9maXJzdC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxpc3RfZmlyc3QuaHRtbChcbiAgICAgICAgICAgICAgbG9kYXNoLnVuaXFCeShsaXN0X2l0ZW1zLnRvQXJyYXkoKSwgZSA9PiBlLmlubmVyVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNjcm9sbCkge1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICQoJy5wYXJzbGV5LWVycm9ycy1saXN0W2FyaWEtaGlkZGVuPVwiZmFsc2VcIl06ZXEoMCknKS5vZmZzZXQoKS50b3AgLSA1MDtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBvZmZzZXR9LCAyMDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICog44OQ44Oq44OH44O844K344On44OzXG4gICAgICAgKi9cbiAgICAgIHZhciB2YWxpZGF0aW9uO1xuICAgICAgJCgnLmZvcm1fd3JhcHBlciBmb3JtJykuZWFjaChmdW5jdGlvbiAoaSwgZWwpIHtcbiAgICAgICAgY29uc3QgJGZvcm0gPSAkKGVsKTtcbiAgICAgICAgaWYgKCRmb3JtLmNsb3Nlc3QoJyNzd2l0Y2hfY3VzdG9tZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiA9ICRmb3JtLnBhcnNsZXkoKTtcbiAgICAgICAgdmFsaWRhdGlvbi5vbignZmllbGQ6dmFsaWRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25fc2hvd19lcnJvcihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIOODnOOCv+ODsyDjgq/jg6rjg4Pjgq/mmYJcbiAgICAgICAqIOODl+ODqeODs+OBrumBuOaKniDihpIg44GK5a6i5qeY5oOF5aCx44Gu5YWl5YqbXG4gICAgICAgKi9cbiAgICAgICQoJyNuZXh0X21lbWJlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh7Z3JvdXA6ICdwbGFuJ30pO1xuICAgICAgICBpZiAodmFsaWRhdGlvbi5pc1ZhbGlkKHtncm91cDogJ3BsYW4nfSkpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVfcGxhbl9ib29rc19jb3VudCgpKSB7XG4gICAgICAgICAgICBzd2l0Y2hfc2lnbnVwX3N0ZXAoJ21lbWJlcicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2hfc2lnbnVwX3N0ZXAoJ3BsYW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbl9zaG93X2Vycm9yKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiDjg5zjgr/jg7Mg44Kv44Oq44OD44Kv5pmCXG4gICAgICAgKiDjgYrlrqLmp5jmg4XloLHjga7lhaXlipsg4oaSIOOBiueUs+OBl+i+vOOBv+WGheWuueOBrueiuuiqjVxuICAgICAgICovXG4gICAgICAkKCcjbmV4dF9wcmV2aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKHtncm91cDogJ21lbWJlcid9KTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb24uaXNWYWxpZCh7Z3JvdXA6ICdtZW1iZXInfSkpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVfcGxhbl9ib29rc19jb3VudCgpKSB7XG4gICAgICAgICAgICBzd2l0Y2hfc2lnbnVwX3N0ZXAoJ3ByZXZpZXcnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoX3NpZ251cF9zdGVwKCdwbGFuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25fc2hvd19lcnJvcih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICog44Kv44Os44K444OD44OI44Kr44O844OJ5rG65riIIOeUs+i+vOODnOOCv+ODs+OBruOCr+ODquODg+OCr+aZglxuICAgICAgICog44OQ44Oq44OH44O844K344On44OzXG4gICAgICAgKi9cbiAgICAgICQoJyNmb3JtX3N1Ym1pdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKHtncm91cDogJ3BheW1lbnQnfSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uLmlzVmFsaWQoe2dyb3VwOiAncGF5bWVudCd9KSkge1xuICAgICAgICAgIC8vIOOCr+ODrOOCuOODg+ODiOaxuua4iOOBp+OBguOCjOOBsOODiOODvOOCr+ODs+eUn+aIkOetieOCkuWun+ihjFxuICAgICAgICAgIGlmICgkKCdbbmFtZT1cInBheW1lbnRfdHlwZVwiXTpjaGVja2VkJykudmFsKCkgPT0gJ2NyZWRpdCcpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyDjgqvjg7zjg4nlkI3nvqkg5paH5a2X5pWw44OQ44Oq44OH44O844K344On44OzXG4gICAgICAgICAgICBjb25zdCBmbiA9ICQoJ1tuYW1lPVwicGF5bWVudF9jcmVkaXRfZmlyc3RfbmFtZVwiXScpLnZhbCgpO1xuICAgICAgICAgICAgY29uc3QgbG4gPSAkKCdbbmFtZT1cInBheW1lbnRfY3JlZGl0X2xhc3RfbmFtZVwiXScpLnZhbCgpO1xuICAgICAgICAgICAgY29uc3QgbmFtZV9sZW4gPSAoMCArIGZuLmxlbmd0aCArIGxuLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAobmFtZV9sZW4gPiA0NCkge1xuICAgICAgICAgICAgICBhbGVydCgn44GK5ZCN5YmN44Gv5ZCI6KiINDTmloflrZfku6XlhoXjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2lnbnVwX3BheW1lbnRfY3JlYXRlX3Rva2VuKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJy5mb3JtX3dyYXBwZXIgZm9ybScpLnN1Ym1pdCgpO1xuICAgICAgICAgI
846H1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3Nob3dfZXJyb3IodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gIH0pO1xufSkoalF1ZXJ5KTtcbiIsImZ1bmN0aW9uIHN3aXRjaF9zaWdudXBfc3RlcChzdGVwKSB7XG4gIC8vIGJvZHksIGZpZWxkc1xuICBjb25zdCBzdGVwX2NsYXNzZXMgPSAnc3RlcC1wbGFuIHN0ZXAtbWVtYmVyIHN0ZXAtcHJldmlldyBzdGVwLXBheW1lbnQgc3RlcC1jb21wbGV0ZSc7XG4gICQoJ2JvZHknKS5yZW1vdmVDbGFzcyhzdGVwX2NsYXNzZXMpO1xuICAkKCdib2R5JykuYWRkQ2xhc3MoYHN0ZXAtJHtzdGVwfWApO1xuICBjb25zdCBzY3JvbGxfcG9zaXRpb24gPSAoc3RlcCA9PSAnbWVtYmVyJylcbiAgICA/ICgkKCcjbmV4dF9tZW1iZXInKS5vZmZzZXQoKS50b3AgLSAyMCkgOiAwO1xuICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBzY3JvbGxfcG9zaXRpb259LCAwKTtcbiAgLy8gbmF2XG4gICQoJy5zaWdudXBfc3RlcHMgLnN0ZXAnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gIGNvbnN0IG5hdl9zdGVwID0gKHN0ZXAgPT0gJ21lbWJlcicpID8gJ3BsYW4nIDogc3RlcDtcbiAgJChgLnNpZ251cF9zdGVwcyAuc3RlcC0ke25hdl9zdGVwfWApLmFkZENsYXNzKCdhY3RpdmUnKTtcbn1cblxuKGZ1bmN0aW9uICgkKSB7XG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICgkKCdib2R5JykuaGFzQ2xhc3MoJ3BhZ2Utc2lnbnVwJykpIHtcblxuICAgICAgY29uc3QgaW5wdXRfZXZlbnRzID0gJ2ZvY3VzIGtleXVwIHBhc3RlIGNoYW5nZSBibHVyJztcblxuICAgICAgLy8g44OV44Kp44O844Og6KGo56S65YiH5pu/XG4gICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ3N0ZXAtcGxhbicpO1xuICAgICAgJCgnLmZvcm1fYnV0dG9ucyBidXR0b24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ0bl9pZCA9ICQodGhpcykuYXR0cignaWQnKTtcbiAgICAgICAgaWYgKGJ0bl9pZCA9PSAnYmFja19wbGFuJykge1xuICAgICAgICAgIHN3aXRjaF9zaWdudXBfc3RlcCgncGxhbicpO1xuICAgICAgICB9IGVsc2UgaWYgKGJ0bl9pZCA9PSAnYmFja19wcmV2aWV3Jykge1xuICAgICAgICAgIHN3aXRjaF9zaWdudXBfc3RlcCgncHJldmlldycpO1xuICAgICAgICB9IGVsc2UgaWYgKGJ0bl9pZCA9PSAnbmV4dF9wYXltZW50Jykge1xuICAgICAgICAgIHN3aXRjaF9zaWdudXBfc3RlcCgncGF5bWVudCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOOBiuWxiuOBkeWFiOaDheWgsSDooajnpLrliIfmm79cbiAgICAgIGNvbnN0ICRzeW5jID0gJCgnI3N5bmNfc2hpcHBpbmdfZmllbGRzJyk7XG4gICAgICAkc3luYy5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICR0YWJsZSA9ICQoJy5zaGlwcGluZ19maWVsZHNfdGFibGUnKTtcbiAgICAgICAgaWYgKCQodGhpcykucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgJHRhYmxlLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkdGFibGUuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIOOBiuWxiuOBkeWFiOaDheWgsSDlhaXlipvlhoXlrrnjgpLlkIzmnJ9cbiAgICAgIGNvbnN0IHN5bmNfZmllbGRzID0gKCkgPT4ge1xuICAgICAgICAkKCcubWVtYmVyX2ZpZWxkcyBpbnB1dCcpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgY29uc3QgJG0gPSAkKHRoaXMpO1xuICAgICAgICAgIGNvbnN0IG1fa2V5ID0gJG0uYXR0cignbmFtZScpO1xuICAgICAgICAgIGNvbnN0IG1fdmFsID0gJG0udmFsKCk7XG4gICAgICAgICAgY29uc3QgJHMgPSAkKGBpbnB1dFtuYW1lPVwic2hpcHBpbmdfJHttX2tleX1cIl1gKTtcbiAgICAgICAgICBpZiAoJHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAkcy52YWwobV92YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgJCgnLm1lbWJlcl9maWVsZHMgaW5wdXQnKS5hZGQoJHN5bmMpLm9uKGlucHV0X2V2ZW50cywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJHN5bmMucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgc3luY19maWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyDlrprkvJHml6Xjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrlcbiAgICAgICQoJ1tuYW1lPVwiaG9saWRheXNbXVwiXScpLm9uKCdjbGljayBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICRjbGlja2VkID0gJCh0aGlzKTtcbiAgICAgICAgY29uc3QgY2xpY2tfY2hlY2tlZCA9ICRjbGlja2VkLnByb3AoJ2NoZWNrZWQnKVxuICAgICAgICAgID8gJGNsaWNrZWQudmFsKCkgOiBudWxsO1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFsnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaSddO1xuICAgICAgICBsZXQgaG9saWRheXMgICAgICAgICA9IFtdO1xuICAgICAgICBsZXQgd2Vla2RheV9ob2xpZGF5cyA9IFtdO1xuICAgICAgICAkKCdbbmFtZT1cImhvbGlkYXlzW11cIl06Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gJChlbCkudmFsKCk7XG4gICAgICAgICAgaG9saWRheXMucHVzaCh2YWwpO1xuICAgICAgICAgIGlmICh3ZWVrZGF5cy5pbmNsdWRlcyh2YWwpKSB7XG4gICAgICAgICAgICB3ZWVrZGF5X2hvbGlkYXlzLnB1c2godmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaG9saWRheXMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICAgIGlmIChjbGlja19jaGVja2VkID09ICdub25lJykge1xuICAgICAgICAgICAgLy8gXCLlrprkvJHml6XjgarjgZdcIiDjga7jgajjgY3jgIHlhajmm5zml6Xjga7jg4Hjgqfjg4Pjgq/lpJbjgZlcbiAgICAgICAgICAgICQoJ1tuYW1lPVwiaG9saWRheXNbXVwiXTpub3QoW3ZhbHVlPVwibm9uZVwiXSknKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgI
846H0gZWxzZSB7XG4gICAgICAgICAgICAvLyDmm5zml6Xjgavjg4Hjgqfjg4Pjgq/jgYLjgozjgbAgXCLlrprkvJHml6XjgarjgZdcIiDjga7jg4Hjgqfjg4Pjgq/lpJbjgZlcbiAgICAgICAgICAgICQoJ1tuYW1lPVwiaG9saWRheXNbXVwiXVt2YWx1ZT1cIm5vbmVcIl0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2Vla2RheV9ob2xpZGF5cy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgIC8vIOWFqOabnOaXpeODgeOCp+ODg+OCr+OBr+S4jeWPr+OBq+OBmeOCi1xuICAgICAgICAgICRjbGlja2VkLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgYWxlcnQoJ+W5s+aXpeOBmeOBueOBpuOCkuWumuS8keaXpeOBq+OBr+OBp+OBjeOBvuOBm+OCk+OAgicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH1cblxuICB9KTtcbn0pKGpRdWVyeSk7XG4iXX0=

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.