HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: text/html
Content-Language: en-US
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 0
Referrer-Policy: strict-origin-when-cross-origin
set-cookie: XSRF-TOKEN=097a04fa-8dfa-455d-9526-db112cee2cc0; Path=/
content-length: 89296
connection: close
<!doctype html>
<html
lang="en"
>
<head>
<title>蜉蝣的博客</title>
<meta charset="utf-8" />
<meta name="renderer" content="webkit" />
<meta name="format-detection" content="telephone=no" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover"
/>
<meta http-equiv="x-dns-prefetch-control" content="on" />
<meta name="site" content="http://www.fuyou-a.top/" />
<!-- OG -->
<meta property="og:image" content="/upload/android_chrome_192.png" />
<meta property="og:description" content="site.seo.description" />
<meta property="og:type" content="website" />
<meta property="og:locale" content="zh_CN" />
<meta property="og:site_name" content="蜉蝣的博客-Recording..." />
<meta property="og:url" content="http://www.fuyou-a.top/" />
<meta property="og:title" content="蜉蝣的博客" />
<meta property="twitter:partner" content="ogwp" />
<!-- /OG -->
<script id="theme-config-getter">
const ThemeConfig = {
theme_mode: "user",
enable_loading_bar: true,
enable_footer: true,
footer_position: "none",
check_baidu_collect: false,
baidu_token: "",
enable_back2top: true,
enable_back2top_smooth: true,
enable_weather: false,
weather_key: "",
link_behavior: "default",
enable_tag_cloud: true,
tag_cloud_type: document.getElementById('tags-3d') ? '3d' : 'list',
enable_fixed_header: true,
enable_clean_mode: false,
cursor_effect: "off",
enable_offscreen_tip: false,
enable_birthday: false,
birthday: "2021\/11\/11 06:30",
light_time_scope: "5:00~19:00",
enable_console_theme: false,
version: "1.3.0",
enable_big_banner: true,
enable_banner: false,
banner_direction: "horizontal",
enable_banner_loop: true,
banner_effect: "slide",
banner_speed: 500,
enable_banner_handle: true,
enable_banner_autoplay: true,
banner_delay: "3500",
enable_banner_switch_button: true,
enable_banner_pagination: true,
enable_index_list_ajax: false,
post_index_page_size: false,
backdrop: "off",
favicon: "",
enable_index_list_effect: true,
index_list_effect_class: "fadeInUp",
show_loaded_time: false,
enable_debug: false,
access_key: false,
enable_copy: true,
enable_share: true,
enable_share_link: true,
enable_share_weixin: true,
enable_like: true,
enable_toc: true,
enable_progress_bar: true,
enable_code_expander: false,
enable_fold_long_code: false,
enable_comment: true,
toc_depth: "0",
enable_code_title: true,
enable_code_hr: true,
enable_code_macdot: true,
enable_code_line_number: false,
enable_code_newline: false,
show_tools_when_hover: true,
enable_code_copy: true,
enable_copy_right_text: false,
copy_right_text: "",
offscreen_title_leave: "\u6B6A\uFF0C\u4F60\u53BB\u54EA\u91CC\u4E86\uFF1F",
offscreen_title_back: "(\u3064\u30A7\u2282)\u54A6\uFF0C\u53C8\u56DE\u6765\u4E86!",
enable_journal_effect: true,
// prettier-ignore
journal_list_effect_class: "fadeInUp",
enable_like_journal: true,
enable_comment_journal: true,
journal_block_height: "300",
long_code_height: "800",
lazyload_avatar: "\/themes\/theme-Joe3\/assets\/svg\/spinner-preloader.svg",
photos_layout: 'waterfall',
// prettier-ignore
blog_url: "http:\/\/www.fuyou-a.top",
blog_title: "\u8709\u8763\u7684\u535A\u5BA2",
// prettier-ignore
BASE_RES_URL: "\/themes\/theme-Joe3",
BASE_URL: 'https://bbchin.com',
};
//转数字
ThemeConfig.banner_speed = parseInt(ThemeConfig.banner_speed);
ThemeConfig.banner_delay = parseInt(ThemeConfig.banner_delay);
ThemeConfig.toc_depth = parseInt(ThemeConfig.toc_depth);
ThemeConfig.journal_block_height = parseInt(ThemeConfig.journal_block_height);
ThemeConfig.long_code_height = parseInt(ThemeConfig.long_code_height);
ThemeConfig.photos_gap = 10;
ThemeConfig.enable_photos_effect = true;
</script>
<script id="compatiable-checker">
// 兼容性检查
function detectIE() {
var n = window.navigator.userAgent,
e = n.indexOf('MSIE ');
if (e > 0) {
return parseInt(n.substring(e + 5, n.indexOf('.', e)), 10);
}
if (n.indexOf('Trident/') > 0) {
var r = n.indexOf('rv:');
return parseInt(n.substring(r + 3, n.indexOf('.', r)), 10);
}
var i = n.indexOf('Edge/');
return i > 0 && parseInt(n.substring(i + 5, n.indexOf('.', i)), 10);
}
detectIE() &&
(alert('当前站点不支持IE浏览器或您开启了兼容模式,请使用其他浏览器访问或关闭兼容模式。'),
(location.href = 'https://www.baidu.com'));
</script>
<script id="theme-config-getter" type="text/javascript">
if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
ThemeConfig['mode'] = 'development';
console.log(ThemeConfig.mode);
}
if (ThemeConfig.mode === 'development') {
console.log('Joe3主题配置:', ThemeConfig);
console.log('资源根路径:', ThemeConfig.BASE_RES_URL);
}
// 读取主题模式
var initThemeMode = function () {
try {
var curMode = '';
if (ThemeConfig.theme_mode === 'auto') {
var light_scope = ThemeConfig.light_time_scope.split('~');
var now = new Date();
var today = now.toLocaleString().split(' ')[0];
var curMode =
now >= new Date(today + ' ' + light_scope[0]) &&
now <= new Date(today + ' ' + light_scope[1])
? 'light'
: 'dark';
localStorage.removeItem('data-mode');
} else if (ThemeConfig.theme_mode === 'user') {
// 用户模式下优先从本地取主题模式,默认为浅色
curMode = localStorage.getItem('data-mode') || 'light';
localStorage.setItem('data-mode', curMode);
} else {
// 非用户模式下直接取后台配置的模式
curMode = ThemeConfig.theme_mode;
localStorage.removeItem('data-mode');
}
document.querySelector('html').setAttribute('data-mode', curMode);
} catch (e) {
console.log(e);
}
};
initThemeMode();
window.Joe = {
BASE_API: '',
isMobile: /windows phone|iphone|android/gi.test(window.navigator.userAgent),
bloggerGenerateAvatarOpts: (function () {
let generateAvatarOpts = {};
let generate_avatar_opts_str = '{bgColor:'',textColor:'',useTextGradient:false}';
if (generate_avatar_opts_str) {
// generate_avatar_opts_str 示例:{bgColor:'',textColor:'',useTextGradient:false}, 解析 generate_avatar_opts 配置
try {
// 防止 ' 等特殊字符导致 JSON 解析失败
const eleTmp = document.createElement('div');
eleTmp.innerHTML = generate_avatar_opts_str;
// key 自动加上 "" 防止报错,’ 自动转成 “
generate_avatar_opts_str = eleTmp.innerHTML
.replace(/'/g, '"')
.replace(/([\w]+):/g, '"$1":');
generateAvatarOpts = JSON.parse(generate_avatar_opts_str);
} catch (e) {
console.error(
'Joe3主题配置:生成文字性头像的配置解析失败,使用默认配置。generate_avatar_opts_str:',
generate_avatar_opts_str,
' ,error:',
e
);
}
}
return generateAvatarOpts;
})(),
errorImg: function (target, src) {
const targetSrc = target.getAttribute('src');
console.log(
'加载图片失败',
' ,srcArg:',
src,
' .target.src:',
targetSrc,
' ,target.alt:',
target.getAttribute('alt'),
' ,target.dataset.errSrc:',
target.dataset.errSrc,
' ,target.dataset.textAvatar:',
target.dataset.textAvatar
);
let generatedTextAvatar;
let generatedTextAvatarBase64;
switch (src) {
case 'HomeErrImg': {
// 如果 src 是 HomeErrImg 则使用首页配置里配置的文章错误缺省图
src = '/themes/theme-Joe3/assets/img/default_thumbnail.png';
break;
}
case 'LinksErrImg': {
// 如果 src 是 LinksErrImg 则使用友链配置里配置的友链默认 logo
src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
if (
!src ||
src === targetSrc ||
(targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
) {
if (target.dataset.textAvatar || target.getAttribute('alt')) {
generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
src = generatedTextAvatarBase64;
} else {
src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
}
}
break;
}
case 'ErrAvatarImg': {
// 如果 src 是 ErrAvatarImg 则使用博主配置里配置的默认头像
src = target.dataset.errSrc || '/upload/Quicker_20240719_192526.png';
if (
!src ||
src === targetSrc ||
(targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
) {
if (target.dataset.textAvatar || target.getAttribute('alt')) {
generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
src = generatedTextAvatarBase64;
} else {
src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
}
}
break;
}
case 'LoadFailedImg': {
// 如果 src 是 LoadFailedImg 则使用加载失败的图片
src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/img_load_failed.jpg';
break;
}
}
const nowSrc = src || target.dataset.errSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
if (targetSrc === nowSrc) return;
if (
generatedTextAvatarBase64 &&
generatedTextAvatar &&
nowSrc === generatedTextAvatarBase64
) {
target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
} else if (target.getAttribute('data-generated-text-avatar')) {
target.removeAttribute('data-generated-text-avatar');
}
console.log(
'加载图片失败,使用默认图片:',
nowSrc,
' ,oldSrc:',
targetSrc,
' ,target.alt:',
target.getAttribute('alt')
);
target.setAttribute('onerror', null);
target.setAttribute('src', nowSrc);
},
// 已经加载 transparent-placeholder.png 后替换图片
loadedPlaceholderReplaceImg: function (target, src) {
const targetSrc = target.getAttribute('src');
if (
!targetSrc ||
src === targetSrc ||
targetSrc.indexOf('/assets/img/transparent-placeholder.png') === -1
) {
return;
}
console.log(
'加载图片 transparent-placeholder.png 后替换图片',
' ,srcArg:',
src,
' ,target.alt:',
target.getAttribute('alt'),
' ,target.dataset.replaceSrc:',
target.dataset.replaceSrc,
' ,target.dataset.textAvatar:',
target.dataset.textAvatar
);
let generatedTextAvatar;
let generatedTextAvatarBase64;
switch (src) {
case 'LinksImg': {
// 如果 src 是 LinksImg 则使用友链配置里配置的友链默认 logo
src = target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
if (!src || src === targetSrc) {
if (target.dataset.textAvatar || target.getAttribute('alt')) {
generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
src = generatedTextAvatarBase64;
} else {
src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
}
}
break;
}
case 'AvatarImg': {
// 如果 src 是 AvatarImg 则使用博主配置里配置的默认头像
src = target.dataset.replaceSrc || '/upload/Quicker_20240719_192526.png';
if (!src || src === targetSrc) {
if (target.dataset.textAvatar || target.getAttribute('alt')) {
generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
src = generatedTextAvatarBase64;
} else {
src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
}
}
break;
}
}
const nowSrc =
src || target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
if (targetSrc === nowSrc) return;
if (
generatedTextAvatarBase64 &&
generatedTextAvatar &&
nowSrc === generatedTextAvatarBase64
) {
target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
} else if (target.getAttribute('data-generated-text-avatar')) {
target.removeAttribute('data-generated-text-avatar');
}
console.log('加载替换后的图片:', nowSrc, ' ,target.alt:', target.getAttribute('alt'));
target.setAttribute('onload', null);
target.setAttribute('src', nowSrc);
},
replaceAllTextAvatarImage: function () {
console.log('call replaceAllTextAvatarImage');
const generatedEles = document.querySelectorAll('img[data-generated-text-avatar]');
generatedEles.forEach(function (ele) {
const generatedTextAvatar = ele.getAttribute('data-generated-text-avatar');
const generatedTextAvatarBase64 = Joe.generateTex
{
"@category" : "datascan",
"@timestamp" : "2024-11-21T10:21:11.000Z",
"app" : {
"extract" : {
"domain" : [
"bbchin.com",
"baidu.com",
"fuyou-a.top"
],
"hostname" : [
"bbchin.com",
"www.baidu.com",
"www.fuyou-a.top"
],
"ip" : [
"127.0.0.1"
],
"url" : [
"http://www.fuyou-a.top/",
"https://bbchin.com",
"https://www.baidu.com"
]
},
"favicon" : {
"image" : "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9InpoLUNOIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPHRpdGxlPuacquaJvuWIsOaCqOimgeeahOi1hOa6kCAtIOicieido+eahOWNmuWuojwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJyZW5kZXJlciIgY29udGVudD0id2Via2l0IiAvPgogICAgCiAgICA8bWV0YSBuYW1lPSJmb3JtYXQtZGV0ZWN0aW9uIiBjb250ZW50PSJ0ZWxlcGhvbmU9bm8iIC8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJuby1zaXRlYXBwIiAvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLCBjaHJvbWU9MSIgLz4KICAgIDxtZXRhCiAgICAgIG5hbWU9InZpZXdwb3J0IgogICAgICBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHVzZXItc2NhbGFibGU9bm8sIGluaXRpYWwtc2NhbGU9MS4wLCBzaHJpbmstdG8tZml0PW5vLCB2aWV3cG9ydC1maXQ9Y292ZXIiCiAgICAvPgogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IiR7bWV0YV9rZXl3b3JkcyF9IiAvPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiR7bWV0YV9kZXNjcmlwdGlvbiF9IiAvPgogICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSIke3VzZXIubmlja25hbWUhfSIgLz4KICAgIDxtZXRhIG5hbWU9InNpdGUiIGNvbnRlbnQ9IiR7YmxvZ191cmwhfSIgLz4KICAgIDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgc2l6ZT0iMzJ4MzIiIGhyZWY9IiR7b3B0aW9ucy5ibG9nX2Zhdmljb24hfSIgLz4KICAgIAogICAgCiAgICA8c2NyaXB0IGlkPSJ0aGVtZS1jb25maWctZ2V0dGVyIj4KICAgICAgY29uc3QgVGhlbWVDb25maWcgPSB7CiAgICAgICAgdGhlbWVfbW9kZTogInVzZXIiLAogICAgICAgIGVuYWJsZV9sb2FkaW5nX2JhcjogdHJ1ZSwKICAgICAgICBlbmFibGVfZm9vdGVyOiB0cnVlLAogICAgICAgIGZvb3Rlcl9wb3NpdGlvbjogIm5vbmUiLAogICAgICAgIGNoZWNrX2JhaWR1X2NvbGxlY3Q6IGZhbHNlLAogICAgICAgIGJhaWR1X3Rva2VuOiAiIiwKICAgICAgICBlbmFibGVfYmFjazJ0b3A6IHRydWUsCiAgICAgICAgZW5hYmxlX2JhY2sydG9wX3Ntb290aDogdHJ1ZSwKICAgICAgICBlbmFibGVfd2VhdGhlcjogZmFsc2UsCiAgICAgICAgd2VhdGhlcl9rZXk6ICIiLAogICAgICAgIGxpbmtfYmVoYXZpb3I6ICJkZWZhdWx0IiwKICAgICAgICBlbmFibGVfdGFnX2Nsb3VkOiB0cnVlLAogICAgICAgIHRhZ19jbG91ZF90eXBlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFncy0zZCcpID8gJzNkJyA6ICdsaXN0JywKICAgICAgICBlbmFibGVfZml4ZWRfaGVhZGVyOiB0cnVlLAogICAgICAgIGVuYWJsZV9jbGVhbl9tb2RlOiBmYWxzZSwKICAgICAgICBjdXJzb3JfZWZmZWN0OiAib2ZmIiwKICAgICAgICBlbmFibGVfb2Zmc2NyZWVuX3RpcDogZmFsc2UsCiAgICAgICAgZW5hYmxlX2JpcnRoZGF5OiBmYWxzZSwKICAgICAgICBiaXJ0aGRheTogIjIwMjFcLzExXC8xMSAwNjozMCIsCiAgICAgICAgbGlnaHRfdGltZV9zY29wZTogIjU6MDB+MTk6MDAiLAogICAgICAgIGVuYWJsZV9jb25zb2xlX3RoZW1lOiBmYWxzZSwKICAgICAgICB2ZXJzaW9uOiAiMS4zLjAiLAoKICAgICAgICBlbmFibGVfYmlnX2Jhbm5lcjogdHJ1ZSwKICAgICAgICBlbmFibGVfYmFubmVyOiBmYWxzZSwKICAgICAgICBiYW5uZXJfZGlyZWN0aW9uOiAiaG9yaXpvbnRhbCIsCiAgICAgICAgZW5hYmxlX2Jhbm5lcl9sb29wOiB0cnVlLAogICAgICAgIGJhbm5lcl9lZmZlY3Q6ICJzbGlkZSIsCiAgICAgICAgYmFubmVyX3NwZWVkOiA1MDAsCiAgICAgICAgZW5hYmxlX2Jhbm5lcl9oYW5kbGU6IHRydWUsCiAgICAgICAgZW5hYmxlX2Jhbm5lcl9hdXRvcGxheTogdHJ1ZSwKICAgICAgICBiYW5uZXJfZGVsYXk6ICIzNTAwIiwKICAgICAgICBlbmFibGVfYmFubmVyX3N3aXRjaF9idXR0b246IHRydWUsCiAgICAgICAgZW5hYmxlX2Jhbm5lcl9wYWdpbmF0aW9uOiB0cnVlLAogICAgICAgIGVuYWJsZV9pbmRleF9saXN0X2FqYXg6IGZhbHNlLAogICAgICAgIHBvc3RfaW5kZXhfcGFnZV9zaXplOiBmYWxzZSwKICAgICAgICBiYWNrZHJvcDogIm9mZiIsCiAgICAgICAgZmF2aWNvbjogIiIsCiAgICAgICAgZW5hYmxlX2luZGV4X2xpc3RfZWZmZWN0OiB0cnVlLAogICAgICAgIGluZGV4X2xpc3RfZWZmZWN0X2NsYXNzOiAiZmFkZUluVXAiLAogICAgICAgIHNob3dfbG9hZGVkX3RpbWU6IGZhbHNlLAogICAgICAgIGVuYWJsZV9kZWJ1ZzogZmFsc2UsCiAgICAgICAgYWNjZXNzX2tleTogZmFsc2UsCiAgICAgICAgZW5hYmxlX2NvcHk6IHRydWUsCiAgICAgICAgZW5hYmxlX3NoYXJlOiB0cnVlLAogICAgICAgIGVuYWJsZV9zaGFyZV9saW5rOiB0cnVlLAogICAgICAgIGVuYWJsZV9zaGFyZV93ZWl4aW46IHRydWUsCiAgICAgICAgZW5hYmxlX2xpa2U6IHRydWUsCiAgICAgICAgZW5hYmxlX3RvYzogdHJ1ZSwKICAgICAgICBlbmFibGVfcHJvZ3Jlc3NfYmFyOiB0cnVlLAogICAgICAgIGVuYWJsZV9jb2RlX2V4cGFuZGVyOiBmYWxzZSwKICAgICAgICBlbmFibGVfZm9sZF9sb25nX2NvZGU6IGZhbHNlLAogICAgICAgIGVuYWJsZV9jb21tZW50OiB0cnVlLAogICAgICAgIHRvY19kZXB0aDogIjAiLAogICAgICAgIGVuYWJsZV9jb2RlX3RpdGxlOiB0cnVlLAogICAgICAgIGVuYWJsZV9jb2RlX2hyOiB0cnVlLAogICAgICAgIGVuYWJsZV9jb2RlX21hY2RvdDogdHJ1ZSwKICAgICAgICBlbmFibGVfY29kZV9saW5lX251bWJlcjogZmFsc2UsCiAgICAgICAgZW5hYmxlX2NvZGVfbmV3bGluZTogZmFsc2UsCiAgICAgICAgc2hvd190b29sc193aGVuX2hvdmVyOiB0cnVlLAogICAgICAgIGVuYWJsZV9jb2RlX2NvcHk6IHRydWUsCiAgICAgICAgZW5hYmxlX2NvcHlfcmlnaHRfdGV4dDogZmFsc2UsCiAgICAgICAgY29weV9yaWdodF90ZXh0OiAiIiwKICAgICAgICBvZmZzY3JlZW5fdGl0bGVfbGVhdmU6ICJcdTZCNkFcdUZGMENcdTRGNjBcdTUzQkJcdTU0RUFcdTkxQ0NcdTRFODZcdUZGMUYiLAogICAgICAgIG9mZnNjcmVlbl90aXRsZV9iYWNrOiAiKFx1MzA2NFx1MzBBN1x1MjI4MilcdTU0QTZcdUZGMENcdTUzQzhcdTU2REVcdTY3NjVcdTRFODYhIiwKICAgICAgICBlbmFibGVfam91cm5hbF9lZmZlY3Q6IHRydWUsCiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlCiAgICAgICAgam91cm5hbF9saXN0X2VmZmVjdF9jbGFzczogImZhZGVJblVwIiwKICAgICAgICBlbmFibGVfbGlrZV9qb3VybmFsOiB0cnVlLAogICAgICAgIGVuYWJsZV9jb21tZW50X2pvdXJuYWw6IHRydWUsCiAgICAgICAgam91cm5hbF9ibG9ja19oZWlnaHQ6ICIzMDAiLAogICAgICAgIGxvbmdfY29kZV9oZWlnaHQ6ICI4MDAiLAogICAgICAgIGxhenlsb2FkX2F2YXRhcjogIlwvdGhlbWVzXC90aGVtZS1Kb2UzXC9hc3NldHNcL3N2Z1wvc3Bpbm5lci1wcmVsb2FkZXIuc3ZnIiwKICAgICAgICBwaG90b3NfbGF5b3V0OiAnd2F0ZXJmYWxsJywKICAgICAgICAvLyBwcmV0dGllci1pZ25vcmUKICAgICAgICBibG9nX3VybDogImh0dHA6XC9cL3d3dy5mdXlvdS1hLnRvcCIsCiAgICAgICAgYmxvZ190aXRsZTogIlx1ODcwOVx1ODc2M1x1NzY4NFx1NTM1QVx1NUJBMiIsCiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlCiAgICAgICAgQkFTRV9SRVNfVVJMOiAiXC90aGVtZXNcL3RoZW1lLUpvZTMiLAogICAgICAgIEJBU0VfVVJMOiAnaHR0cHM6Ly9iYmNoaW4uY29tJywKICAgICAgfTsKICAgICAgLy/ovazmlbDlrZcKICAgICAgVGhlbWVDb25maWcuYmFubmVyX3NwZWVkID0gcGFyc2VJbnQoVGhlbWVDb25maWcuYmFubmVyX3NwZWVkKTsKICAgICAgVGhlbWVDb25maWcuYmFubmVyX2RlbGF5ID0gcGFyc2VJbnQoVGhlbWVDb25maWcuYmFubmVyX2RlbGF5KTsKICAgICAgVGhlbWVDb25maWcudG9jX2RlcHRoID0gcGFyc2VJbnQoVGhlbWVDb25maWcudG9jX2RlcHRoKTsKICAgICAgVGhlbWVDb25maWcuam91cm5hbF9ibG9ja19oZWlnaHQgPSBwYXJzZUludChUaGVtZUNvbmZpZy5qb3VybmFsX2Jsb2NrX2hlaWdodCk7CiAgICAgIFRoZW1lQ29uZmlnLmxvbmdfY29kZV9oZWlnaHQgPSBwYXJzZUludChUaGVtZUNvbmZpZy5sb25nX2NvZGVfaGVpZ2h0KTsKICAgICAgVGhlbWVDb25maWcucGhvdG9zX2dhcCA9IDEwOwogICAgICBUaGVtZUNvbmZpZy5lbmFibGVfcGhvdG9zX2VmZmVjdCA9IHRydWU7CiAgICA8L3NjcmlwdD4KICAKICAgIAogICAgCiAgICA8c2NyaXB0IGlkPSJjb21wYXRpYWJsZS1jaGVja2VyIj4KICAgICAgLy8g5YW85a655oCn5qOA5p+lCiAgICAgIGZ1bmN0aW9uIGRldGVjdElFKCkgewogICAgICAgIHZhciBuID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsCiAgICAgICAgICBlID0gbi5pbmRleE9mKCdNU0lFICcpOwogICAgICAgIGlmIChlID4gMCkgewogICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG4uc3Vic3RyaW5nKGUgKyA1LCBuLmluZGV4T2YoJy4nLCBlKSksIDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKG4uaW5kZXhPZignVHJpZGVudC8nKSA+IDApIHsKICAgICAgICAgIHZhciByID0gbi5pbmRleE9mKCdydjonKTsKICAgICAgICAgIHJldHVybiBwYXJzZUludChuLnN1YnN0cmluZyhyICsgMywgbi5pbmRleE9mKCcuJywgcikpLCAxMCk7CiAgICAgICAgfQogICAgICAgIHZhciBpID0gbi5pbmRleE9mKCdFZGdlLycpOwogICAgICAgIHJldHVybiBpID4gMCAmJiBwYXJzZUludChuLnN1YnN0cmluZyhpICsgNSwgbi5pbmRleE9mKCcuJywgaSkpLCAxMCk7CiAgICAgIH0KICAgICAgZGV0ZWN0SUUoKSAmJgogICAgICAgIChhbGVydCgn5b2T5YmN56uZ54K55LiN5pSv5oyBSUXmtY/op4jlmajmiJbmgqjlvIDlkK/kuoblhbzlrrnmqKHlvI/vvIzor7fkvb/nlKjlhbbku5bmtY/op4jlmajorr/pl67miJblhbPpl63lhbzlrrnmqKHlvI/jgIInKSwKICAgICAgICAobG9jYXRpb24uaHJlZiA9ICdodHRwczovL3d3dy5iYWlkdS5jb20nKSk7CiAgICA8L3NjcmlwdD4KCiAgICA8c2NyaXB0IGlkPSJ0aGVtZS1jb25maWctZ2V0dGVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09ICcxMjcuMC4wLjEnKSB7CiAgICAgICAgVGhlbWVDb25maWdbJ21vZGUnXSA9ICdkZXZlbG9wbWVudCc7CiAgICAgICAgY29uc29sZS5sb2coVGhlbWVDb25maWcubW9kZSk7CiAgICAgIH0KCiAgICAgIGlmIChUaGVtZUNvbmZpZy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnKSB7CiAgICAgICAgY29uc29sZS5sb2coJ0pvZTPkuLvpopjphY3nva7vvJonLCBUaGVtZUNvbmZpZyk7CiAgICAgICAgY29uc29sZS5sb2coJ+i1hOa6kOaguei3r+W+hO+8micsIFRoZW1lQ29uZmlnLkJBU0VfUkVTX1VSTCk7CiAgICAgIH0KICAgICAgLy8g6K+75Y+W5Li76aKY5qih5byPCiAgICAgIHZhciBpbml0VGhlbWVNb2RlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgY3VyTW9kZSA9ICcnOwogICAgICAgICAgaWYgKFRoZW1lQ29uZmlnLnRoZW1lX21vZGUgPT09ICdhdXRvJykgewogICAgICAgICAgICB2YXIgbGlnaHRfc2NvcGUgPSBUaGVtZUNvbmZpZy5saWdodF90aW1lX3Njb3BlLnNwbGl0KCd+Jyk7CiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgdG9kYXkgPSBub3cudG9Mb2NhbGVTdHJpbmcoKS5zcGxpdCgnICcpWzBdOwogICAgICAgICAgICB2YXIgY3VyTW9kZSA9CiAgICAgICAgICAgICAgbm93ID49IG5ldyBEYXRlKHRvZGF5ICsgJyAnICsgbGlnaHRfc2NvcGVbMF0pICYmCiAgICAgICAgICAgICAgbm93IDw9IG5ldyBEYXRlKHRvZGF5ICsgJyAnICsgbGlnaHRfc2NvcGVbMV0pCiAgICAgICAgICAgICAgICA/ICdsaWdodCcKICAgICAgICAgICAgICAgIDogJ2RhcmsnOwogICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZGF0YS1tb2RlJyk7CiAgICAgICAgICB9IGVsc2UgaWYgKFRoZW1lQ29uZmlnLnRoZW1lX21vZGUgPT09ICd1c2VyJykgewogICAgICAgICAgICAvLyDnlKjmiLfmqKHlvI/kuIvkvJjlhYjku47mnKzlnLDlj5bkuLvpopjmqKHlvI/vvIzpu5jorqTkuLrmtYXoibIKICAgICAgICAgICAgY3VyTW9kZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRhLW1vZGUnKSB8fCAnbGlnaHQnOwogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGF0YS1tb2RlJywgY3VyTW9kZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDpnZ7nlKjmiLfmqKHlvI/kuIvnm7TmjqXlj5blkI7lj7DphY3nva7nmoTmqKHlvI8KICAgICAgICAgICAgY3VyTW9kZSA9IFRoZW1lQ29uZmlnLnRoZW1lX21vZGU7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdkYXRhLW1vZGUnKTsKICAgICAgICAgIH0KICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9kZScsIGN1ck1vZGUpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaW5pdFRoZW1lTW9kZSgpOwogICAgICB3aW5kb3cuSm9lID0gewogICAgICAgIEJBU0VfQVBJOiAnJywKICAgICAgICBpc01vYmlsZTogL3dpbmRvd3MgcGhvbmV8aXBob25lfGFuZHJvaWQvZ2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksCiAgICAgICAgYmxvZ2dlckdlbmVyYXRlQXZhdGFyT3B0czogKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGxldCBnZW5lcmF0ZUF2YXRhck9wdHMgPSB7fTsKICAgICAgICAgIGxldCBnZW5lcmF0ZV9hdmF0YXJfb3B0c19zdHIgPSAne2JnQ29sb3I6JiMzOTsmIzM5Oyx0ZXh0Q29sb3I6JiMzOTsmIzM5Oyx1c2VUZXh0R3JhZGllbnQ6ZmFsc2V9JzsKICAgICAgICAgIGlmIChnZW5lcmF0ZV9hdmF0YXJfb3B0c19zdHIpIHsKICAgICAgICAgICAgLy8gZ2VuZXJhdGVfYXZhdGFyX29wdHNfc3RyIOekuuS+i++8mntiZ0NvbG9yOicnLHRleHRDb2xvcjonJyx1c2VUZXh0R3JhZGllbnQ6ZmFsc2V9LCDop6PmnpAgZ2VuZXJhdGVfYXZhdGFyX29wdHMg6YWN572uCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgLy8g6Ziy5q2iICYjMzk7IOetieeJueauiuWtl+espuWvvOiHtCBKU09OIOino+aekOWksei0pQogICAgICAgICAgICAgIGNvbnN0IGVsZVRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgIGVsZVRtcC5pbm5lckhUTUwgPSBnZW5lcmF0ZV9hdmF0YXJfb3B0c19zdHI7CiAgICAgICAgICAgICAgLy8ga2V5IOiHquWKqOWKoOS4iiAiIiDpmLLmraLmiqXplJnvvIzigJkg6Ieq5Yqo6L2s5oiQIOKAnAogICAgICAgICAgICAgIGdlbmVyYXRlX2F2YXRhcl9vcHRzX3N0ciA9IGVsZVRtcC5pbm5lckhUTUwKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICciJykKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oW1x3XSspOi9nLCAnIiQxIjonKTsKICAgICAgICAgICAgICBnZW5lcmF0ZUF2YXRhck9wdHMgPSBKU09OLnBhcnNlKGdlbmVyYXRlX2F2YXRhcl9vcHRzX3N0cik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgICAgICAgJ0pvZTPkuLvpopjphY3nva7vvJrnlJ/miJDmloflrZfmgKflpLTlg4/nmoTphY3nva7op6PmnpDlpLHotKXvvIzkvb/nlKjpu5jorqTphY3nva7jgIJnZW5lcmF0ZV9hdmF0YXJfb3B0c19zdHI6JywKICAgICAgICAgICAgICAgIGdlbmVyYXRlX2F2YXRhcl9vcHRzX3N0ciwKICAgICAgICAgICAgICAgICcgLGVycm9yOicsCiAgICAgICAgICAgICAgICBlCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQXZhdGFyT3B0czsKICAgICAgICB9KSgpLAogICAgICAgIGVycm9ySW1nOiBmdW5jdGlvbiAodGFyZ2V0LCBzcmMpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldFNyYyA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3NyYycpOwogICAgICAgICAgY29uc29sZS5sb2coCiAgICAgICAgICAgICfliqDovb3lm77niYflpLHotKUnLAogICAgICAgICAgICAnICxzcmNBcmc6JywKICAgICAgICAgICAgc3JjLAogICAgICAgICAgICAnIC50YXJnZXQuc3JjOicsCiAgICAgICAgICAgIHRhcmdldFNyYywKICAgICAgICAgICAgJyAsdGFyZ2V0LmFsdDonLAogICAgICAgICAgICB0YXJnZXQuZ2V0QXR0cmlidXRlKCdhbHQnKSwKICAgICAgICAgICAgJyAsdGFyZ2V0LmRhdGFzZXQuZXJyU3JjOicsCiAgICAgICAgICAgIHRhcmdldC5kYXRhc2V0LmVyclNyYywKICAgICAgICAgICAgJyAsdGFyZ2V0LmRhdGFzZXQudGV4dEF2YXRhcjonLAogICAgICAgICAgICB0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyCiAgICAgICAgICApOwoKICAgICAgICAgIGxldCBnZW5lcmF0ZWRUZXh0QXZhdGFyOwogICAgICAgICAgbGV0IGdlbmVyYXRlZFRleHRBdmF0YXJCYXNlNjQ7CgogICAgICAgICAgc3dpdGNoIChzcmMpIHsKICAgICAgICAgICAgY2FzZSAnSG9tZUVyckltZyc6IHsKICAgICAgICAgICAgICAvLyDlpoLmnpwgc3JjIOaYryBIb21lRXJySW1nIOWImeS9v+eUqOmmlumhtemFjee9rumHjOmFjee9rueahOaWh+eroOmUmeivr+e8uuecgeWbvgogICAgICAgICAgICAgIHNyYyA9ICcvdGhlbWVzL3RoZW1lLUpvZTMvYXNzZXRzL2ltZy9kZWZhdWx0X3RodW1ibmFpbC5wbmcnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgJ0xpbmtzRXJySW1nJzogewogICAgICAgICAgICAgIC8vIOWmguaenCBzcmMg5pivIExpbmtzRXJySW1nIOWImeS9v+eUqOWPi+mTvumFjee9rumHjOmFjee9rueahOWPi+mTvum7mOiupCBsb2dvCiAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0LmRhdGFzZXQuZXJyU3JjIHx8ICcvdGhlbWVzL3RoZW1lLUpvZTMvYXNzZXRzL2ltZy9kZWZhdWx0X2xpbmtzX2xvZ28ucG5nJzsKICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhc3JjIHx8CiAgICAgICAgICAgICAgICBzcmMgPT09IHRhcmdldFNyYyB8fAogICAgICAgICAgICAgICAgKHRhcmdldFNyYyAmJiB0YXJnZXRTcmMuaW5kZXhPZignL2Fzc2V0cy9pbWcvdHJhbnNwYXJlbnQtcGxhY2Vob2xkZXIucG5nJykgIT09IC0xKQogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKHRhcmdldC5kYXRhc2V0LnRleHRBdmF0YXIgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JykpIHsKICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkVGV4dEF2YXRhciA9IHRhcmdldC5kYXRhc2V0LnRleHRBdmF0YXIgfHwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0Jyk7CiAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZFRleHRBdmF0YXJCYXNlNjQgPSBKb2UuZ2VuZXJhdGVUZXh0QXZhdGFySW1hZ2UoZ2VuZXJhdGVkVGV4dEF2YXRhcik7CiAgICAgICAgICAgICAgICAgIHNyYyA9IGdlbmVyYXRlZFRleHRBdmF0YXJCYXNlNjQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBzcmMgPSAnL3RoZW1lcy90aGVtZS1Kb2UzL2Fzc2V0cy9pbWcvZGVmYXVsdF9saW5rc19sb2dvLnBuZyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgJ0VyckF2YXRhckltZyc6IHsKICAgICAgICAgICAgICAvLyDlpoLmnpwgc3JjIOaYryBFcnJBdmF0YXJJbWcg5YiZ5L2/55So5Y2a5Li76YWN572u6YeM6YWN572u55qE6buY6K6k5aS05YOPCiAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0LmRhdGFzZXQuZXJyU3JjIHx8ICcvdXBsb2FkL1F1aWNrZXJfMjAyNDA3MTlfMTkyNTI2LnBuZyc7CiAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgIXNyYyB8fAogICAgICAgICAgICAgICAgc3JjID09PSB0YXJnZXRTcmMgfHwKICAgICAgICAgICAgICAgICh0YXJnZXRTcmMgJiYgdGFyZ2V0U3JjLmluZGV4T2YoJy9hc3NldHMvaW1nL3RyYW5zcGFyZW50LXBsYWNlaG9sZGVyLnBuZycpICE9PSAtMSkKICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpKSB7CiAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZFRleHRBdmF0YXIgPSB0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpOwogICAgICAgICAgICAgICAgICBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0ID0gSm9lLmdlbmVyYXRlVGV4dEF2YXRhckltYWdlKGdlbmVyYXRlZFRleHRBdmF0YXIpOwogICAgICAgICAgICAgICAgICBzcmMgPSBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3JjID0gJy90aGVtZXMvdGhlbWUtSm9lMy9hc3NldHMvaW1nL3BlZXBzLWF2YXRhci5wbmcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICdMb2FkRmFpbGVkSW1nJzogewogICAgICAgICAgICAgIC8vIOWmguaenCBzcmMg5pivIExvYWRGYWlsZWRJbWcg5YiZ5L2/55So5Yqg6L295aSx6LSl55qE5Zu+54mHCiAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0LmRhdGFzZXQuZXJyU3JjIHx8ICcvdGhlbWVzL3RoZW1lLUpvZTMvYXNzZXRzL2ltZy9pbWdfbG9hZF9mYWlsZWQuanBnJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IG5vd1NyYyA9IHNyYyB8fCB0YXJnZXQuZGF0YXNldC5lcnJTcmMgfHwgJy90aGVtZXMvdGhlbWUtSm9lMy9hc3NldHMvaW1nL0pvZTMucG5nJzsKICAgICAgICAgIGlmICh0YXJnZXRTcmMgPT09IG5vd1NyYykgcmV0dXJuOwoKICAgICAgICAgIGlmICgKICAgICAgICAgICAgZ2VuZXJhdGVkVGV4dEF2YXRhckJhc2U2NCAmJgogICAgICAgICAgICBnZW5lcmF0ZWRUZXh0QXZhdGFyICYmCiAgICAgICAgICAgIG5vd1NyYyA9PT0gZ2VuZXJhdGVkVGV4dEF2YXRhckJhc2U2NAogICAgICAgICAgKSB7CiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZ2VuZXJhdGVkLXRleHQtYXZhdGFyJywgZ2VuZXJhdGVkVGV4dEF2YXRhcik7CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ2VuZXJhdGVkLXRleHQtYXZhdGFyJykpIHsKICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1nZW5lcmF0ZWQtdGV4dC1hdmF0YXInKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zb2xlLmxvZygKICAgICAgICAgICAgJ+WKoOi9veWbvueJh+Wksei0pe+8jOS9v+eUqOm7mOiupOWbvueJhzonLAogICAgICAgICAgICBub3dTcmMsCiAgICAgICAgICAgICcgLG9sZFNyYzonLAogICAgICAgICAgICB0YXJnZXRTcmMsCiAgICAgICAgICAgICcgLHRhcmdldC5hbHQ6JywKICAgICAgICAgICAgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JykKICAgICAgICAgICk7CiAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmVycm9yJywgbnVsbCk7CiAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdzcmMnLCBub3dTcmMpOwogICAgICAgIH0sCiAgICAgICAgLy8g5bey57uP5Yqg6L29IHRyYW5zcGFyZW50LXBsYWNlaG9sZGVyLnBuZyDlkI7mm7/mjaLlm77niYcKICAgICAgICBsb2FkZWRQbGFjZWhvbGRlclJlcGxhY2VJbWc6IGZ1bmN0aW9uICh0YXJnZXQsIHNyYykgewogICAgICAgICAgY29uc3QgdGFyZ2V0U3JjID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3JjJyk7CiAgICAgICAgICBpZiAoCiAgICAgICAgICAgICF0YXJnZXRTcmMgfHwKICAgICAgICAgICAgc3JjID09PSB0YXJnZXRTcmMgfHwKICAgICAgICAgICAgdGFyZ2V0U3JjLmluZGV4T2YoJy9hc3NldHMvaW1nL3RyYW5zcGFyZW50LXBsYWNlaG9sZGVyLnBuZycpID09PSAtMQogICAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zb2xlLmxvZygKICAgICAgICAgICAgJ+WKoOi9veWbvueJhyB0cmFuc3BhcmVudC1wbGFjZWhvbGRlci5wbmcg5ZCO5pu/5o2i5Zu+54mHJywKICAgICAgICAgICAgJyAsc3JjQXJnOicsCiAgICAgICAgICAgIHNyYywKICAgICAgICAgICAgJyAsdGFyZ2V0LmFsdDonLAogICAgICAgICAgICB0YXJnZXQuZ2V0QXR0cmlidXRlKCdhbHQnKSwKICAgICAgICAgICAgJyAsdGFyZ2V0LmRhdGFzZXQucmVwbGFjZVNyYzonLAogICAgICAgICAgICB0YXJnZXQuZGF0YXNldC5yZXBsYWNlU3JjLAogICAgICAgICAgICAnICx0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyOicsCiAgICAgICAgICAgIHRhcmdldC5kYXRhc2V0LnRleHRBdmF0YXIKICAgICAgICAgICk7CgogICAgICAgICAgbGV0IGdlbmVyYXRlZFRleHRBdmF0YXI7CiAgICAgICAgICBsZXQgZ2VuZXJhdGVkVGV4dEF2YXRhckJhc2U2NDsKCiAgICAgICAgICBzd2l0Y2ggKHNyYykgewogICAgICAgICAgICBjYXNlICdMaW5rc0ltZyc6IHsKICAgICAgICAgICAgICAvLyDlpoLmnpwgc3JjIOaYryBMaW5rc0ltZyDliJnkvb/nlKjlj4vpk77phY3nva7ph4zphY3nva7nmoTlj4vpk77pu5jorqQgbG9nbwogICAgICAgICAgICAgIHNyYyA9IHRhcmdldC5kYXRhc2V0LnJlcGxhY2VTcmMgfHwgJy90aGVtZXMvdGhlbWUtSm9lMy9hc3NldHMvaW1nL2RlZmF1bHRfbGlua3NfbG9nby5wbmcnOwogICAgICAgICAgICAgIGlmICghc3JjIHx8IHNyYyA9PT0gdGFyZ2V0U3JjKSB7CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRhdGFzZXQudGV4dEF2YXRhciB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdhbHQnKSkgewogICAgICAgICAgICAgICAgICBnZW5lcmF0ZWRUZXh0QXZhdGFyID0gdGFyZ2V0LmRhdGFzZXQudGV4dEF2YXRhciB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdhbHQnKTsKICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkVGV4dEF2YXRhckJhc2U2NCA9IEpvZS5nZW5lcmF0ZVRleHRBdmF0YXJJbWFnZShnZW5lcmF0ZWRUZXh0QXZhdGFyKTsKICAgICAgICAgICAgICAgICAgc3JjID0gZ2VuZXJhdGVkVGV4dEF2YXRhckJhc2U2NDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHNyYyA9ICcvdGhlbWVzL3RoZW1lLUpvZTMvYXNzZXRzL2ltZy9kZWZhdWx0X2xpbmtzX2xvZ28ucG5nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnQXZhdGFySW1nJzogewogICAgICAgICAgICAgIC8vIOWmguaenCBzcmMg5pivIEF2YXRhckltZyDliJnkvb/nlKjljZrkuLvphY3nva7ph4zphY3nva7nmoTpu5jorqTlpLTlg48KICAgICAgICAgICAgICBzcmMgPSB0YXJnZXQuZGF0YXNldC5yZXBsYWNlU3JjIHx8ICcvdXBsb2FkL1F1aWNrZXJfMjAyNDA3MTlfMTkyNTI2LnBuZyc7CiAgICAgICAgICAgICAgaWYgKCFzcmMgfHwgc3JjID09PSB0YXJnZXRTcmMpIHsKICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpKSB7CiAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZFRleHRBdmF0YXIgPSB0YXJnZXQuZGF0YXNldC50ZXh0QXZhdGFyIHx8IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FsdCcpOwogICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLWdlbmVyYXRlZC10ZXh0LWF2YXRhcicsIGdlbmVyYXRlZFRleHRBdmF0YXIpOwogICAgICAgICAgICAgICAgICBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0ID0gSm9lLmdlbmVyYXRlVGV4dEF2YXRhckltYWdlKGdlbmVyYXRlZFRleHRBdmF0YXIpOwogICAgICAgICAgICAgICAgICBzcmMgPSBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3JjID0gJy90aGVtZXMvdGhlbWUtSm9lMy9hc3NldHMvaW1nL3BlZXBzLWF2YXRhci5wbmcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IG5vd1NyYyA9CiAgICAgICAgICAgIHNyYyB8fCB0YXJnZXQuZGF0YXNldC5yZXBsYWNlU3JjIHx8ICcvdGhlbWVzL3RoZW1lLUpvZTMvYXNzZXRzL2ltZy9Kb2UzLnBuZyc7CiAgICAgICAgICBpZiAodGFyZ2V0U3JjID09PSBub3dTcmMpIHJldHVybjsKCiAgICAgICAgICBpZiAoCiAgICAgICAgICAgIGdlbmVyYXRlZFRleHRBdmF0YXJCYXNlNjQgJiYKICAgICAgICAgICAgZ2VuZXJhdGVkVGV4dEF2YXRhciAmJgogICAgICAgICAgICBub3dTcmMgPT09IGdlbmVyYXRlZFRleHRBdmF0YXJCYXNlNjQKICAgICAgICAgICkgewogICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLWdlbmVyYXRlZC10ZXh0LWF2YXRhcicsIGdlbmVyYXRlZFRleHRBdmF0YXIpOwogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWdlbmVyYXRlZC10ZXh0LWF2YXRhcicpKSB7CiAgICAgICAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZ2VuZXJhdGVkLXRleHQtYXZhdGFyJyk7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc29sZS5sb2coJ+WKoOi9veabv+aNouWQjueahOWbvueJhzonLCBub3dTcmMsICcgLHRhcmdldC5hbHQ6JywgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnYWx0JykpOwogICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnb25sb2FkJywgbnVsbCk7CiAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdzcmMnLCBub3dTcmMpOwogICAgICAgIH0sCiAgICAgICAgcmVwbGFjZUFsbFRleHRBdmF0YXJJbWFnZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgY29uc29sZS5sb2coJ2NhbGwgcmVwbGFjZUFsbFRleHRBdmF0YXJJbWFnZScpOwogICAgICAgICAgY29uc3QgZ2VuZXJhdGVkRWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZ1tkYXRhLWdlbmVyYXRlZC10ZXh0LWF2YXRhcl0nKTsKICAgICAgICAgIGdlbmVyYXRlZEVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7CiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFRleHRBdmF0YXIgPSBlbGUuZ2V0QXR0cmlidXRlKCdkYXRhLWdlbmVyYXRlZC10ZXh0LWF2YXRhcicpOwogICAgICAgICAgICBjb25zdCBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0ID0gSm9lLmdlbmVyYXRlVGV4dEF2YXRhckltYWdlKGdlbmVyYXRlZFRleHRBdmF0YXIpOwogICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCdzcmMnLCBnZW5lcmF0ZWRUZXh0QXZhdGFyQmFzZTY0KTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgLy8g55Sf5oiQ6ZqP5py66aKc6Imy5Ye95pWwCiAgICAgICAgZ2V0UmFuZG9tQ29sb3I6IGZ1bmN0aW9uIChhbHBoYSkgewogICAgICAgICAgY29uc3QgbGV0dGVycyA9ICcwMTIzNDU2Nzg5QUJDREVGJzsKICAgICAgICAgIGxldCBjb2xvciA9ICcjJzsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAgICAgICAgICAgIGNvbG9yICs9IGxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpXTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhbHBoYSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBjb2xvciArIChhbHBoYSA+PSAwICYmIGFscGhhIDw9IDEgPyBNYXRoLnJvdW5kKGFscGhhICogMjU1KS50b1N0cmluZygxNikgOiAnRkYnKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICAgICB9LAogICAgICAgIC8vIOeUn+aIkOmaj+acuuminOiJsueahOaWh+Wtl+aAp+WktOWDjwogICAgICAgIGdlbmVyYXRlVGV4dEF2YXRhckltYWdlOiBmdW5jdGlvbiAodGV4dCwgb3B0cykgewogICAgICAgICAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIEpvZS5ibG9nZ2VyR2VuZXJhdGVBdmF0YXJPcHRzLCBvcHRzIHx8IHt9KTsKICAgICAgICAgIG9wdHMuZm9udFNpemUgPSBvcHRzLmZvbnRTaXplIHx8IDUwOwogICAgICAgICAgb3B0cy5mb250ID0gb3B0cy5mb250IHx8ICdHcmVhdCBWaWJlcyc7CiAgICAgICAgICBvcHRzLmNhbnZhc1JhZGl1cyA9IG9wdHMuY2FudmFzV2lkdGggfHwgMS41ICogb3B0cy5mb250U2l6ZTsKCiAgICAgICAgICAvLyDlpoLmnpzmmK8gdmFyKC0teHh4eCnvvIzliJnor7TmmI7mmK8gY3NzIOmFjee9rueahOWPmOmHj++8jOmcgOimgeS7jmh0bWzmoLflvI/kuK3op6PmnpDmiJDlhbfkvZPlgLwKICAgICAgICAgIGlmIChvcHRzLnRleHRDb2xvciAmJiAvdmFyXCgtLShbXHctXSspXCkvLnRlc3Qob3B0cy50ZXh0Q29sb3IpKSB7CiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gb3B0cy50ZXh0Q29sb3IubWF0Y2goL3ZhclwoLS0oW1x3LV0rKVwpLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgIGxldCBjc3NWYXIgPQogICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLScgKyBtYXRjaFsxXSkKICAgICAgICAgICAgICAgICAgLnRyaW0oKSB8fAogICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KQogICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS0nICsgbWF0Y2hbMV0pCiAgICAgICAgICAgICAgICAgIC50cmltKCk7CiAgICAgICAgICAgICAgaWYgKGNzc1ZhcikgewogICAgICAgICAgICAgICAgb3B0cy50ZXh0Q29sb3IgPSBjc3NWYXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgLy8g5aaC5p6c5pivIHZhcigtLXh4eHgp77yM5YiZ6K+05piO5pivIGNzcyDphY3nva7nmoTlj5jph4/vvIzpnIDopoHku45odG1s5qC35byP5Lit6Kej5p6Q5oiQ5YW35L2T5YC8CiAgICAgICAgICBpZiAob3B0cy5iZ0NvbG9yICYmIC92YXJcKC0tKFtcdy1dKylcKS8udGVzdChvcHRzLmJnQ29sb3IpKSB7CiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gb3B0cy5iZ0NvbG9yLm1hdGNoKC92YXJcKC0tKFtcdy1dKylcKS8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICBsZXQgY3NzVmFyID0KICAgICAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KQogICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS0nICsgbWF0Y2hbMV0pCiAgICAgICAgICAgICAgICAgIC50cmltKCkgfHwKICAgICAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkKICAgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tJyArIG1hdGNoWzFdKQogICAgICAgICAgICAgICAgICAudHJpbSgpOwogICAgICAgICAgICAgIGlmIChjc3NWYXIpIHsKICAgICAgICAgICAgICAgIG9wdHMuYmdDb2xvciA9IGNzc1ZhcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICAvLyDliJvlu7rkuIDkuKrmlrDnmoQgQ2FudmFzIOWFg+e0oAogICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgICAgICAvLyDorr7nva4gQ2FudmFzIOeahOWwuuWvuAogICAgICAgICAgY2FudmFzLndpZHRoID0gb3B0cy5jYW52YXNSYWRpdXM7CiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5jYW52YXNSYWRpdXM7CgogICAgICAgICAgaWYgKG9wdHMuYmdDb2xvcikgewogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0cy5iZ0NvbG9yOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8g55Sf5oiQ6ZqP5py66aKc6Imy55qE5riQ5Y+Y6IOM5pmvCiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KAogICAgICAgICAgICAgIGNhbnZhcy53aWR0aCAvIDIsCiAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCAvIDIsCiAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICBjYW52YXMud2lkdGggLyAyLAogICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgLyAyLAogICAgICAgICAgICAgIGNhbnZhcy53aWR0aCAvIDIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIEpvZS5nZXRSYW5kb21Db2xvcigwLjcpKTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIEpvZS5nZXRSYW5kb21Db2xvcigwLjcpKTsKCiAgICAgICAgICAgIC8vIOe7mOWItua4kOWPmOiDjOaZrwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ3JhZGllbnQ7CiAgICAgICAgICB9CgogICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgY3R4LmFyYyhjYW52YXMud2lkdGggLyAyLCBjYW52YXMuaGVpZ2h0IC8gMiwgY2FudmFzLndpZHRoIC8gMiwgMCwgTWF0aC5QSSAqIDIpOwogICAgICAgICAgY3R4LmZpbGwoKTsKCiAgICAgICAgICAvLyDorr7nva7mlofmnKzmoLflvI8KICAgICAgICAgIGN0eC5mb250ID0gYCR7b3B0cy5mb250U2l6ZX1weCAke29wdHMuZm9udH1gOwoKICAgICAgICAgIGlmIChvcHRzLnRleHRDb2xvcikgewogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0cy50ZXh0Q29sb3I7CiAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMudXNlVGV4dEdyYWRpZW50KSB7CiAgICAgICAgICAgIC8vIOeUn+aIkOaWh+Wtl+eahOe6v+aAp+a4kOWPmAogICAgICAgICAgICBjb25zdCB0ZXh0R3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgdGV4dEdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCBKb2UuZ2V0UmFuZG9tQ29sb3IoMC45KSk7IC8vIOaWh+Wtl+eahOa4kOWPmOiJsgogICAgICAgICAgICB0ZXh0R3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIEpvZS5nZXRSYW5kb21Db2xvcigwLjkpKTsgLy8g5paH5a2X55qE5riQ5Y+Y6ImyCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0R3JhZGllbnQ7CiAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMuYmdDb2xvcikgewogICAgICAgICAgICAvLyDorr7nva7kuobog4zmma/oibLvvIzkvYbmmK/msqHmnInorr7nva7mloflrZfpopzoibLvvIzliJnpnIDopoHorr7nva7pu5jorqTmloflrZfpopzoibLkuLrpu5HoibLvvIzpmLLmraLmloflrZfpopzoibLlkozog4zmma/oibLkuIDoh7TjgJDms6jvvJvog4zmma/oibLkuLrmuJDlj5joibLvvIzmloflrZfog73mmL7npLrlh7rmnaXvvIzlm6DmraTkuI3pnIDopoHorr7nva7mloflrZfpopzoibLjgJEKICAgICAgICAgICAgLy8g5aaC5p6cIGJnQ29sb3Ig5Li66buR6Imy77yM5YiZ5paH5a2X6aKc6Imy6K6+572u5Li655m96Imy77yM5ZCm5YiZ6K6+572u5Li66buR6ImyCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAvKCMwMDAwMDB8IzAwMHxibGFjaykvLnRlc3Qob3B0cy5iZ0NvbG9yKSA/ICcjZmZmJyA6ICcjMDAwJzsKICAgICAgICAgIH0KCiAgICAgICAgICBjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7CiAgICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7CgogICAgICAgICAgLy8g5ZyoIENhbnZhcyDkuIrnu5jliLbmlofmnKwKICAgICAgICAgIGN0eC5maWxsVGV4dCh0ZXh0LmNoYXJBdCgwKSwgY2FudmFzLndpZHRoIC8gMiwgY2FudmFzLmhlaWdodCAvIDIpOwoKICAgICAgICAgIC8vIOi/lOWbnueUn+aIkOeahOWbvueJh+WvueixoSBiYXNlNjQg57yW56CBCiAgICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgpOwogICAgICAgIH0sCiAgICAgIH07CiAgICAgIFRoZW1lQ29uZmlnLmVuYWJsZV9jb25zb2xlX3RoZW1lICYmCiAgICAgICAgY29uc29sZS5sb2coCiAgICAgICAgICAnJWNUaGVtZSBCeSAgSmlld2VuJyArICcgfCDniYjmnKwgVicgKyBUaGVtZUNvbmZpZy52ZXJzaW9uLAogICAgICAgICAgJ3BhZGRpbmc6IDhweCAxNXB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDI3MGRlZywgIzk4NmZlZSwgIzg2OTVlNiwgIzY4YjdkZCwgIzE4ZDdkMyk7Ym9yZGVyLXJhZGl1czogMCAxNXB4IDAgMTVweDsnCiAgICAgICAgKTsKICAgIDwvc2NyaXB0PgogIAogICAgPHN0eWxlPgogICAgICBodG1sLAogICAgICBib2R5IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAuam9lX3BhZ2VfNDA0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyOwogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOwogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsOwogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICAgICAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICB9CiAgICAgIC5qb2VfcGFnZV80MDQgLmVycm9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAtMTB2aDsKICAgICAgfQogICAgICAuam9lX3BhZ2VfNDA0IGltZyB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgICBtYXgtd2lkdGg6IDcwMHB4OwogICAgICB9CiAgICAgIC5qb2VfcGFnZV80MDQgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDMwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4OwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQogICAgICAuam9lX3BhZ2VfNDA0IC5lcnJvcl9saW5rIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDM2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3M7CiAgICAgIH0KICAgICAgLmpvZV9wYWdlXzQwNCAuZXJyb3JfbGluazpob3ZlciB7CiAgICAgICAgY29sb3I6ICM2YzYzZmY7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNmM2M2ZmOwogICAgICB9CiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7CiAgICAgICAgLmpvZV9wYWdlXzQwNCAudGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIH0KICAgICAgICAuam9lX3BhZ2VfNDA0IC5lcnJvcl9saW5rIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHggMzBweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC1oZWlnaHQ6IDUwMHB4KSB7CiAgICAgICAgLmpvZV9wYWdlXzQwNCAudGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIH0KICAgICAgICAuam9lX3BhZ2VfNDA0IGltZyB7CiAgICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIH0KICAgICAgICAuam9lX3BhZ2VfNDA0IC5lcnJvcl9saW5rIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHggMzBweDsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPG1ldGEgY29udGVudD0iSGFsbyAyLjE3LjIiIG5hbWU9ImdlbmVyYXRvciIvPjwhLS0gcGx1Z2luLWNvbW1lbnQtd2lkZ2V0IHN0YXJ0IC0tPgo8c2NyaXB0IHNyYz0iL3BsdWdpbnMvUGx1Z2luQ29tbWVudFdpZGdldC9hc3NldHMvc3RhdGljL2NvbW1lbnQtd2lkZ2V0LmlpZmUuanM/dmVyc2lvbj0yLjQuMCI+PC9zY3JpcHQ+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3BsdWdpbnMvUGx1Z2luQ29tbWVudFdpZGdldC9hc3NldHMvc3RhdGljL3N0eWxlLmNzcz92ZXJzaW9uPTIuNC4wIiAvPgo8IS0tIHBsdWdpbi1jb21tZW50LXdpZGdldCBlbmQgLS0+CjwhLS0gUGx1Z2luU2VhcmNoV2lkZ2V0IHN0YXJ0IC0tPgo8c2NyaXB0IHNyYz0iL3BsdWdpbnMvUGx1Z2luU2VhcmNoV2lkZ2V0L2Fzc2V0cy9zdGF0aWMvc2VhcmNoLXdpZGdldC5paWZlLmpzP3ZlcnNpb249MS42LjEiIGFzeW5jPjwvc2NyaXB0Pgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9wbHVnaW5zL1BsdWdpblNlYXJjaFdpZGdldC9hc3NldHMvc3RhdGljL3N0eWxlLmNzcz92ZXJzaW9uPTEuNi4xIiAvPgo8IS0tIFBsdWdpblNlYXJjaFdpZGdldCBlbmQgLS0+CjxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iL3VwbG9hZC9hbmRyb2lkX2Nocm9tZV8xOTIucG5nIiAvPgo8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJqb2VfcGFnZV80MDQiPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvciI+CiAgICAgICAgPGltZyBzcmM9Ii90aGVtZXMvdGhlbWUtSm9lMy9hc3NldHMvc3ZnLzQwNC5zdmciIGFsdD0iNDA0IiAvPgogICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPuKAnOacquaJvuWIsOaCqOimgeeahOi1hOa6kOKAnTwvaDM+CiAgICAgICAgPGEgaHJlZj0iLyIgY2xhc3M9ImVycm9yX2xpbmsiPuWbnuWIsOS4u+mhtTwvYT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K",
"imagemd5" : "ce93af9fd5ae70675141660de86e6de9",
"imagemmh3" : -806667015,
"length" : 23619,
"url" : "/favicon.ico"
},
"http" : {
"bodymd5" : "55e46bc49240c222acde52e8d961b88d",
"bodymmh3" : 555802820,
"headermd5" : "d119588140633475dc5310271d216bad",
"headermmh3" : 39567789,
"title" : "\u8709\u8763\u7684\u535a\u5ba2"
},
"length" : 16384
},
"asn" : "AS37963",
"city" : "Beijing",
"country" : "CN",
"cpe" : "<enterprise field>: cpe",
"cpecount" : "<enterprise field>: cpecount",
"data" : "HTTP/1.1 200 OK\r\nVary: Origin\r\nVary: Access-Control-Request-Method\r\nVary: Access-Control-Request-Headers\r\nContent-Type: text/html\r\nContent-Language: en-US\r\nCache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache\r\nExpires: 0\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 0\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nset-cookie: XSRF-TOKEN=097a04fa-8dfa-455d-9526-db112cee2cc0; Path=/\r\ncontent-length: 89296\r\nconnection: close\r\n\r\n<!doctype html>\n<html\n lang=\"en\"\n>\n <head>\n <title>\u8709\u8763\u7684\u535a\u5ba2</title>\n\n <meta charset=\"utf-8\" />\n <meta name=\"renderer\" content=\"webkit\" />\n \n <meta name=\"format-detection\" content=\"telephone=no\" />\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n <meta http-equiv=\"Cache-Control\" content=\"no-siteapp\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge, chrome=1\" />\n <meta\n name=\"viewport\"\n content=\"width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover\"\n />\n \n <meta http-equiv=\"x-dns-prefetch-control\" content=\"on\" />\n <meta name=\"site\" content=\"http://www.fuyou-a.top/\" />\n <!-- OG -->\n <meta property=\"og:image\" content=\"/upload/android_chrome_192.png\" />\n <meta property=\"og:description\" content=\"site.seo.description\" />\n <meta property=\"og:type\" content=\"website\" />\n <meta property=\"og:locale\" content=\"zh_CN\" />\n <meta property=\"og:site_name\" content=\"\u8709\u8763\u7684\u535a\u5ba2-Recording...\" />\n <meta property=\"og:url\" content=\"http://www.fuyou-a.top/\" />\n <meta property=\"og:title\" content=\"\u8709\u8763\u7684\u535a\u5ba2\" />\n <meta property=\"twitter:partner\" content=\"ogwp\" />\n <!-- /OG -->\n\n \n \n <script id=\"theme-config-getter\">\n const ThemeConfig = {\n theme_mode: \"user\",\n enable_loading_bar: true,\n enable_footer: true,\n footer_position: \"none\",\n check_baidu_collect: false,\n baidu_token: \"\",\n enable_back2top: true,\n enable_back2top_smooth: true,\n enable_weather: false,\n weather_key: \"\",\n link_behavior: \"default\",\n enable_tag_cloud: true,\n tag_cloud_type: document.getElementById('tags-3d') ? '3d' : 'list',\n enable_fixed_header: true,\n enable_clean_mode: false,\n cursor_effect: \"off\",\n enable_offscreen_tip: false,\n enable_birthday: false,\n birthday: \"2021\\/11\\/11 06:30\",\n light_time_scope: \"5:00~19:00\",\n enable_console_theme: false,\n version: \"1.3.0\",\n\n enable_big_banner: true,\n enable_banner: false,\n banner_direction: \"horizontal\",\n enable_banner_loop: true,\n banner_effect: \"slide\",\n banner_speed: 500,\n enable_banner_handle: true,\n enable_banner_autoplay: true,\n banner_delay: \"3500\",\n enable_banner_switch_button: true,\n enable_banner_pagination: true,\n enable_index_list_ajax: false,\n post_index_page_size: false,\n backdrop: \"off\",\n favicon: \"\",\n enable_index_list_effect: true,\n index_list_effect_class: \"fadeInUp\",\n show_loaded_time: false,\n enable_debug: false,\n access_key: false,\n enable_copy: true,\n enable_share: true,\n enable_share_link: true,\n enable_share_weixin: true,\n enable_like: true,\n enable_toc: true,\n enable_progress_bar: true,\n enable_code_expander: false,\n enable_fold_long_code: false,\n enable_comment: true,\n toc_depth: \"0\",\n enable_code_title: true,\n enable_code_hr: true,\n enable_code_macdot: true,\n enable_code_line_number: false,\n enable_code_newline: false,\n show_tools_when_hover: true,\n enable_code_copy: true,\n enable_copy_right_text: false,\n copy_right_text: \"\",\n offscreen_title_leave: \"\\u6B6A\\uFF0C\\u4F60\\u53BB\\u54EA\\u91CC\\u4E86\\uFF1F\",\n offscreen_title_back: \"(\\u3064\\u30A7\\u2282)\\u54A6\\uFF0C\\u53C8\\u56DE\\u6765\\u4E86!\",\n enable_journal_effect: true,\n // prettier-ignore\n journal_list_effect_class: \"fadeInUp\",\n enable_like_journal: true,\n enable_comment_journal: true,\n journal_block_height: \"300\",\n long_code_height: \"800\",\n lazyload_avatar: \"\\/themes\\/theme-Joe3\\/assets\\/svg\\/spinner-preloader.svg\",\n photos_layout: 'waterfall',\n // prettier-ignore\n blog_url: \"http:\\/\\/www.fuyou-a.top\",\n blog_title: \"\\u8709\\u8763\\u7684\\u535A\\u5BA2\",\n // prettier-ignore\n BASE_RES_URL: \"\\/themes\\/theme-Joe3\",\n BASE_URL: 'https://bbchin.com',\n };\n //\u8f6c\u6570\u5b57\n ThemeConfig.banner_speed = parseInt(ThemeConfig.banner_speed);\n ThemeConfig.banner_delay = parseInt(ThemeConfig.banner_delay);\n ThemeConfig.toc_depth = parseInt(ThemeConfig.toc_depth);\n ThemeConfig.journal_block_height = parseInt(ThemeConfig.journal_block_height);\n ThemeConfig.long_code_height = parseInt(ThemeConfig.long_code_height);\n ThemeConfig.photos_gap = 10;\n ThemeConfig.enable_photos_effect = true;\n </script>\n \n \n \n <script id=\"compatiable-checker\">\n // \u517c\u5bb9\u6027\u68c0\u67e5\n function detectIE() {\n var n = window.navigator.userAgent,\n e = n.indexOf('MSIE ');\n if (e > 0) {\n return parseInt(n.substring(e + 5, n.indexOf('.', e)), 10);\n }\n if (n.indexOf('Trident/') > 0) {\n var r = n.indexOf('rv:');\n return parseInt(n.substring(r + 3, n.indexOf('.', r)), 10);\n }\n var i = n.indexOf('Edge/');\n return i > 0 && parseInt(n.substring(i + 5, n.indexOf('.', i)), 10);\n }\n detectIE() &&\n (alert('\u5f53\u524d\u7ad9\u70b9\u4e0d\u652f\u6301IE\u6d4f\u89c8\u5668\u6216\u60a8\u5f00\u542f\u4e86\u517c\u5bb9\u6a21\u5f0f\uff0c\u8bf7\u4f7f\u7528\u5176\u4ed6\u6d4f\u89c8\u5668\u8bbf\u95ee\u6216\u5173\u95ed\u517c\u5bb9\u6a21\u5f0f\u3002'),\n (location.href = 'https://www.baidu.com'));\n </script>\n\n <script id=\"theme-config-getter\" type=\"text/javascript\">\n if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {\n ThemeConfig['mode'] = 'development';\n console.log(ThemeConfig.mode);\n }\n\n if (ThemeConfig.mode === 'development') {\n console.log('Joe3\u4e3b\u9898\u914d\u7f6e\uff1a', ThemeConfig);\n console.log('\u8d44\u6e90\u6839\u8def\u5f84\uff1a', ThemeConfig.BASE_RES_URL);\n }\n // \u8bfb\u53d6\u4e3b\u9898\u6a21\u5f0f\n var initThemeMode = function () {\n try {\n var curMode = '';\n if (ThemeConfig.theme_mode === 'auto') {\n var light_scope = ThemeConfig.light_time_scope.split('~');\n var now = new Date();\n var today = now.toLocaleString().split(' ')[0];\n var curMode =\n now >= new Date(today + ' ' + light_scope[0]) &&\n now <= new Date(today + ' ' + light_scope[1])\n ? 'light'\n : 'dark';\n localStorage.removeItem('data-mode');\n } else if (ThemeConfig.theme_mode === 'user') {\n // \u7528\u6237\u6a21\u5f0f\u4e0b\u4f18\u5148\u4ece\u672c\u5730\u53d6\u4e3b\u9898\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u4e3a\u6d45\u8272\n curMode = localStorage.getItem('data-mode') || 'light';\n localStorage.setItem('data-mode', curMode);\n } else {\n // \u975e\u7528\u6237\u6a21\u5f0f\u4e0b\u76f4\u63a5\u53d6\u540e\u53f0\u914d\u7f6e\u7684\u6a21\u5f0f\n curMode = ThemeConfig.theme_mode;\n localStorage.removeItem('data-mode');\n }\n document.querySelector('html').setAttribute('data-mode', curMode);\n } catch (e) {\n console.log(e);\n }\n };\n initThemeMode();\n window.Joe = {\n BASE_API: '',\n isMobile: /windows phone|iphone|android/gi.test(window.navigator.userAgent),\n bloggerGenerateAvatarOpts: (function () {\n let generateAvatarOpts = {};\n let generate_avatar_opts_str = '{bgColor:'',textColor:'',useTextGradient:false}';\n if (generate_avatar_opts_str) {\n // generate_avatar_opts_str \u793a\u4f8b\uff1a{bgColor:'',textColor:'',useTextGradient:false}, \u89e3\u6790 generate_avatar_opts \u914d\u7f6e\n try {\n // \u9632\u6b62 ' \u7b49\u7279\u6b8a\u5b57\u7b26\u5bfc\u81f4 JSON \u89e3\u6790\u5931\u8d25\n const eleTmp = document.createElement('div');\n eleTmp.innerHTML = generate_avatar_opts_str;\n // key \u81ea\u52a8\u52a0\u4e0a \"\" \u9632\u6b62\u62a5\u9519\uff0c\u2019 \u81ea\u52a8\u8f6c\u6210 \u201c\n generate_avatar_opts_str = eleTmp.innerHTML\n .replace(/'/g, '\"')\n .replace(/([\\w]+):/g, '\"$1\":');\n generateAvatarOpts = JSON.parse(generate_avatar_opts_str);\n } catch (e) {\n console.error(\n 'Joe3\u4e3b\u9898\u914d\u7f6e\uff1a\u751f\u6210\u6587\u5b57\u6027\u5934\u50cf\u7684\u914d\u7f6e\u89e3\u6790\u5931\u8d25\uff0c\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\u3002generate_avatar_opts_str:',\n generate_avatar_opts_str,\n ' ,error:',\n e\n );\n }\n }\n return generateAvatarOpts;\n })(),\n errorImg: function (target, src) {\n const targetSrc = target.getAttribute('src');\n console.log(\n '\u52a0\u8f7d\u56fe\u7247\u5931\u8d25',\n ' ,srcArg:',\n src,\n ' .target.src:',\n targetSrc,\n ' ,target.alt:',\n target.getAttribute('alt'),\n ' ,target.dataset.errSrc:',\n target.dataset.errSrc,\n ' ,target.dataset.textAvatar:',\n target.dataset.textAvatar\n );\n\n let generatedTextAvatar;\n let generatedTextAvatarBase64;\n\n switch (src) {\n case 'HomeErrImg': {\n // \u5982\u679c src \u662f HomeErrImg \u5219\u4f7f\u7528\u9996\u9875\u914d\u7f6e\u91cc\u914d\u7f6e\u7684\u6587\u7ae0\u9519\u8bef\u7f3a\u7701\u56fe\n src = '/themes/theme-Joe3/assets/img/default_thumbnail.png';\n break;\n }\n case 'LinksErrImg': {\n // \u5982\u679c src \u662f LinksErrImg \u5219\u4f7f\u7528\u53cb\u94fe\u914d\u7f6e\u91cc\u914d\u7f6e\u7684\u53cb\u94fe\u9ed8\u8ba4 logo\n src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';\n if (\n !src ||\n src === targetSrc ||\n (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)\n ) {\n if (target.dataset.textAvatar || target.getAttribute('alt')) {\n generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');\n generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);\n src = generatedTextAvatarBase64;\n } else {\n src = '/themes/theme-Joe3/assets/img/default_links_logo.png';\n }\n }\n break;\n }\n case 'ErrAvatarImg': {\n // \u5982\u679c src \u662f ErrAvatarImg \u5219\u4f7f\u7528\u535a\u4e3b\u914d\u7f6e\u91cc\u914d\u7f6e\u7684\u9ed8\u8ba4\u5934\u50cf\n src = target.dataset.errSrc || '/upload/Quicker_20240719_192526.png';\n if (\n !src ||\n src === targetSrc ||\n (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)\n ) {\n if (target.dataset.textAvatar || target.getAttribute('alt')) {\n generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');\n generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);\n src = generatedTextAvatarBase64;\n } else {\n src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';\n }\n }\n break;\n }\n case 'LoadFailedImg': {\n // \u5982\u679c src \u662f LoadFailedImg \u5219\u4f7f\u7528\u52a0\u8f7d\u5931\u8d25\u7684\u56fe\u7247\n src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/img_load_failed.jpg';\n break;\n }\n }\n\n const nowSrc = src || target.dataset.errSrc || '/themes/theme-Joe3/assets/img/Joe3.png';\n if (targetSrc === nowSrc) return;\n\n if (\n generatedTextAvatarBase64 &&\n generatedTextAvatar &&\n nowSrc === generatedTextAvatarBase64\n ) {\n target.setAttribute('data-generated-text-avatar', generatedTextAvatar);\n } else if (target.getAttribute('data-generated-text-avatar')) {\n target.removeAttribute('data-generated-text-avatar');\n }\n\n console.log(\n '\u52a0\u8f7d\u56fe\u7247\u5931\u8d25\uff0c\u4f7f\u7528\u9ed8\u8ba4\u56fe\u7247:',\n nowSrc,\n ' ,oldSrc:',\n targetSrc,\n ' ,target.alt:',\n target.getAttribute('alt')\n );\n target.setAttribute('onerror', null);\n target.setAttribute('src', nowSrc);\n },\n // \u5df2\u7ecf\u52a0\u8f7d transparent-placeholder.png \u540e\u66ff\u6362\u56fe\u7247\n loadedPlaceholderReplaceImg: function (target, src) {\n const targetSrc = target.getAttribute('src');\n if (\n !targetSrc ||\n src === targetSrc ||\n targetSrc.indexOf('/assets/img/transparent-placeholder.png') === -1\n ) {\n return;\n }\n\n console.log(\n '\u52a0\u8f7d\u56fe\u7247 transparent-placeholder.png \u540e\u66ff\u6362\u56fe\u7247',\n ' ,srcArg:',\n src,\n ' ,target.alt:',\n target.getAttribute('alt'),\n ' ,target.dataset.replaceSrc:',\n target.dataset.replaceSrc,\n ' ,target.dataset.textAvatar:',\n target.dataset.textAvatar\n );\n\n let generatedTextAvatar;\n let generatedTextAvatarBase64;\n\n switch (src) {\n case 'LinksImg': {\n // \u5982\u679c src \u662f LinksImg \u5219\u4f7f\u7528\u53cb\u94fe\u914d\u7f6e\u91cc\u914d\u7f6e\u7684\u53cb\u94fe\u9ed8\u8ba4 logo\n src = target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';\n if (!src || src === targetSrc) {\n if (target.dataset.textAvatar || target.getAttribute('alt')) {\n generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');\n generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);\n src = generatedTextAvatarBase64;\n } else {\n src = '/themes/theme-Joe3/assets/img/default_links_logo.png';\n }\n }\n break;\n }\n case 'AvatarImg': {\n // \u5982\u679c src \u662f AvatarImg \u5219\u4f7f\u7528\u535a\u4e3b\u914d\u7f6e\u91cc\u914d\u7f6e\u7684\u9ed8\u8ba4\u5934\u50cf\n src = target.dataset.replaceSrc || '/upload/Quicker_20240719_192526.png';\n if (!src || src === targetSrc) {\n if (target.dataset.textAvatar || target.getAttribute('alt')) {\n generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');\n target.setAttribute('data-generated-text-avatar', generatedTextAvatar);\n generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);\n src = generatedTextAvatarBase64;\n } else {\n src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';\n }\n }\n break;\n }\n }\n\n const nowSrc =\n src || target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/Joe3.png';\n if (targetSrc === nowSrc) return;\n\n if (\n generatedTextAvatarBase64 &&\n generatedTextAvatar &&\n nowSrc === generatedTextAvatarBase64\n ) {\n target.setAttribute('data-generated-text-avatar', generatedTextAvatar);\n } else if (target.getAttribute('data-generated-text-avatar')) {\n target.removeAttribute('data-generated-text-avatar');\n }\n\n console.log('\u52a0\u8f7d\u66ff\u6362\u540e\u7684\u56fe\u7247:', nowSrc, ' ,target.alt:', target.getAttribute('alt'));\n target.setAttribute('onload', null);\n target.setAttribute('src', nowSrc);\n },\n replaceAllTextAvatarImage: function () {\n console.log('call replaceAllTextAvatarImage');\n const generatedEles = document.querySelectorAll('img[data-generated-text-avatar]');\n generatedEles.forEach(function (ele) {\n const generatedTextAvatar = ele.getAttribute('data-generated-text-avatar');\n const generatedTextAvatarBase64 = Joe.generateTex",
"datamd5" : "074cd6ce0f7c102aa8670567ede58c28",
"datammh3" : 1299520463,
"device" : {
"class" : "<enterprise field>: device.class"
},
"geolocus" : {
"asn" : "AS37963",
"continent" : "AS",
"continentname" : "Asia",
"country" : "CN",
"countryname" : "China",
"domain" : [
"alibaba-inc.com",
"cnnic.cn"
],
"isineu" : "false",
"latitude" : "35.86166",
"location" : "35.86166,104.195397",
"longitude" : "104.195397",
"netname" : "ALISOFT",
"organization" : "Hangzhou Alibaba Advertising Co.,Ltd.",
"subnet" : "59.110.0.0/16"
},
"ip" : "59.110.143.30",
"ipv6" : "false",
"latitude" : "39.9110",
"location" : "39.9110,116.3950",
"longitude" : "116.3950",
"node" : {
"country" : "<enterprise field>: node.country",
"groupid" : "<enterprise field>: node.groupid",
"id" : "<enterprise field>: node.id",
"physicalcountry" : "<enterprise field>: node.physicalcountry"
},
"organization" : "Hangzhou Alibaba Advertising Co.,Ltd.",
"os" : "Linux Kernel",
"osvendor" : "Linux",
"port" : 8090,
"protocol" : "http",
"protocolversion" : "1.1",
"reason" : "OK",
"seen_date" : "2024-11-21",
"source" : "datascan",
"status" : 200,
"subnet" : "59.110.0.0/16",
"tls" : "false",
"transport" : "tcp",
"url" : "/"
}