--------------------------------------------------------------------------- ope.setData()  オブジェクトのデータを設定する ope.decode()   ファイル出力された履歴の入力用ルーチン ope.toString() ファイル出力する履歴の出力用ルーチン ---------------------------------------------------------------------------
968307
function(piece, property, old, num){
		this.group = piece.group;
		this.property = property;
		this.bx  = piece.bx;
		this.by  = piece.by;
		this.old = old;
		this.num = num;
		if(property.length>4 && property.substr(0,4)==='snum'){
			this.property = 'snum';
			this.pos      = property.substr(4);
		}
	}
581236
function(evt) {
    $('output').innerHTML = '';
    $('result').innerHTML = '';
    oMX.Init(); /* begin with new objects */
    fls = [];
    var cnt = 0;
    var files = evt.target.files; /* FileList object */
    for (var i = 0; i < files.length; i++) { /* loop the selected files */
      var reader = new FileReader();
      reader.onload = function(file) {
        fls[cnt + 1] = oMX.AddFile(file) ? true : false;  /* get a file */
        var c = $('result').innerHTML;
        if (c !== '') {
          c += ', ';
        }
        $('result').innerHTML = c + fls[cnt];
        cnt += 2;
      };
      fls.push(files[i].name, null);
      reader.readAsText(files[i]);
    }
  }
912621
function parseImageOption(){ // (type,quality,option)のはず
	var imageopt = {};
	var type = pzpr.Candle.current;
	var cellsize = null, bgcolor = null, quality = null;
	for(var i=0;i<arguments.length;i++){
		var argv = arguments[i];
		switch(typeof argv){
			case 'string':
				type = argv;
				break;
			case 'number':
				if(argv>1.01){ cellsize = argv;}else{ quality = argv;}
				break;
			case 'object':
				if('cellsize' in argv){ cellsize = argv.cellsize;}
				if('bgcolor'  in argv){ bgcolor  = argv.bgcolor;}
				break;
		}
	}
	
	imageopt.type = ((type||pzpr.Candle.current).match(/svg/)?'svg':'canvas');
	imageopt.mimetype = (imageopt.type!=='svg' ? 'image/'+type : 'image/svg+xml');
	if(quality!==null && quality!==void 0){ imageopt.quality = quality;}
	
	if(cellsize!==null){ imageopt.cellsize = cellsize;}
	if(bgcolor !==null){ imageopt.bgcolor  = bgcolor;}
	
	return imageopt;
}
1367087
@Override
	public Map<String, Object> procedure(final SqlContext sqlContext) throws SQLException {
		// パラメータログを出力する
		MDC.put(SUPPRESS_PARAMETER_LOG_OUTPUT, Boolean.FALSE.toString());

		// procedureやfunctionの場合、SQL文法エラーになるためバインドパラメータコメントを出力しない
		sqlContext.contextAttrs().put(CTX_ATTR_KEY_OUTPUT_BIND_COMMENT, false);

		// コンテキスト変換
		transformContext(sqlContext, false);

		StopWatch watch = null;

		try (CallableStatement callableStatement = getCallableStatement(sqlContext)) {

			// パラメータ設定
			sqlContext.bindParams(callableStatement);

			if (LOG.isDebugEnabled()) {
				LOG.debug("Execute stored procedure.");
				watch = new StopWatch();
				watch.start();
			}

			beforeProcedure(sqlContext);

			// デフォルト最大リトライ回数を取得し、個別指定（SqlContextの値）があれば上書き
			int maxRetryCount = getMaxRetryCount();
			if (sqlContext.getMaxRetryCount() > 0) {
				maxRetryCount = sqlContext.getMaxRetryCount();
			}

			// デフォルトリトライ待機時間を取得し、個別指定（SqlContextの値）があれば上書き
			int retryWaitTime = getRetryWaitTime();
			if (sqlContext.getRetryWaitTime() > 0) {
				retryWaitTime = sqlContext.getRetryWaitTime();
			}
			int loopCount = 0;
			do {
				try {
					if (maxRetryCount > 0 && getSqlConfig().getDialect().isRollbackToSavepointBeforeRetry()) {
						setSavepoint(RETRY_SAVEPOINT_NAME);
					}
					getSqlFilterManager().doProcedure(sqlContext, callableStatement, callableStatement.execute());
					break;
				} catch (SQLException ex) {
					if (maxRetryCount > 0 && getSqlConfig().getDialect().isRollbackToSavepointBeforeRetry()) {
						rollback(RETRY_SAVEPOINT_NAME);
					}
					if (maxRetryCount > loopCount) {
						String errorCode = String.valueOf(ex.getErrorCode());
						String sqlState = ex.getSQLState();
						if (getSqlRetryCodes().contains(errorCode) || getSqlRetryCodes().contains(sqlState)) {
							if (LOG.isDebugEnabled()) {
								LOG.debug(String.format(
										"Caught the error code to be retried.(%d times). Retry after %,3d ms.",
										loopCount + 1, retryWaitTime));
							}
							if (retryWaitTime > 0) {
								try {
									Thread.sleep(retryWaitTime);
								} catch (InterruptedException ie) {
									// do nothing
								}
							}
						} else {
							throw ex;
						}
					} else {
						throw ex;
					}
				} finally {
					if (maxRetryCount > 0 && getSqlConfig().getDialect().isRollbackToSavepointBeforeRetry()) {
						releaseSavepoint(RETRY_SAVEPOINT_NAME);
					}
					sqlContext.contextAttrs().put(CTX_ATTR_KEY_RETRY_COUNT, loopCount);
				}
			} while (maxRetryCount > loopCount++);
			// 結果取得
			return sqlContext.getOutParams(callableStatement);
		} catch (SQLException ex) {
			handleException(sqlContext, ex);
		} finally {
			afterProcedure(sqlContext);
			if (LOG.isDebugEnabled() && watch != null) {
				watch.stop();
				LOG.debug("Stored procedure execution time [{}] : [{}]", sqlContext.getSqlName(), watch.toString());
			}
			MDC.remove(SUPPRESS_PARAMETER_LOG_OUTPUT);
		}
		return null;
	}
851118
public function validate ($validate_rule = null, $data_set = [], $force_source = false) {
		//結果の初期化
		$result = [];

		//現在のバリデーションルールを取得
		$validate_rule = $validate_rule ?? $this->rule->validate ?? null;
		if (is_callable($validate_rule)) {
			$validate_rule = $validate_rule();
		}

		//実行対象のバリデーションがあるか確認、なければ対象はなかったとして終了
		if (is_null($validate_rule)) {
			$this->hasValidator = false;
			return [];
		}
		$this->hasValidator = true;

		//外部入力値を取得
		$request_access = LazyArrayObject::Create([
			'parameter'	=> Request::GetParameters(),
			'data'		=> Request::GetPostData(),
			'post'		=> Request::GetPost(),
			'upload'	=> Request::GetUploadFileData(),
			'cookie'	=> Request::GetCookies(),
			'route'		=> $this->route,
			'direct'	=> $data_set,
		]);

		//検証の実行：入力一要素ごとに処理を行う
		foreach (array_filter(($validate_rule instanceof \ArrayObject) ? $validate_rule->getArrayCopy() : $validate_rule) as $target => $rules) {
			//短縮設定を掬い取る
			$rule_length = count($rules);
			for ($i = 0;$i < $rule_length;$i++) {
				$data_set = array_slice($rules, $i, 1);
				$idx = key($data_set);
				$rule = current($data_set);
				if (is_int($idx) && is_string($rule)) {
					$rules = array_merge(array_slice($rules, 0, $i), [$rule => true], array_slice($rules, $i + 1));
				}
			}

			//先行する検証の結果を参照するかどうか
			$premise = $rules['premise'] ?? null;
			if ($premise) {
				foreach (Arrays::AdjustArray($premise) as $error_name) {
					//一つでもエラーとなっている先行検証結果がある場合、処理そのものをスキップ
					if (isset($result[$error_name])) {
						continue 2;
					}
				}
			}

			//データ取得対象ソースの指定
			$source = $force_source ?: ($rules['rules']['source'] ?? $rules['source'] ?? (Request::IsPostMethod() ? 'data' : 'parameter'));
			$data = $request_access->$source;

			//先行確認値があった場合、突合チェック
			$pre_check_pattern = null;
			if (($position = strpos($target, '@value=')) !== false) {
				$pre_check_pattern = substr($target, $position + strlen('@value='));
				$target = substr($target, 0, $position);

				//先行入力値とマッチしなかった場合はスキップ
				if ($pre_check_pattern !== null && preg_match(sprintf("/^%s$/u", str_replace('/', "\\/", $pre_check_pattern)), $data->$target) !== 1) {
					continue;
				}
			}

			//指定があった場合、値の取得先を差し替え
			$name = $rules['name'] ?? $target;

			//検証実行：結果はどんどん末尾に追加していく
			$ret = Validator::BulkCheck($data, [$name => $rules], $result) ?? [];
			if (!empty($ret)) {
				foreach ($ret as $target => $error_message_list) {
					$result += $result + [$target => $error_message_list];
				}

				//入力要素レベルのis_lastが存在した場合、ここで処理終了となる
				if ($rules['is_last'] ?? null) {
					break;
				}
			}
		}

		//処理の終了
		return $result;
	}
1265758
public static function FilesDetectiveSessionFixation () {
		//==============================================
		//変数初期化
		//==============================================
		$save_path = static::SavePath();

		//==============================================
		//ディレクトリ
		//==============================================
		//ディレクトリ存在確認
		if (!file_exists($save_path)) {
			if (!mkdir($save_path, 0700, true)) {
				throw CoreException::RaiseSystemError('セッションセーブディレクトリがありません。dir:%s', [$save_path]);
			}
		}

		//対象確認
		if (!is_dir($save_path)) {
			throw CoreException::RaiseSystemError('セッションセーブディレクトリがファイルです。dir:%s', [$save_path]);
		}

		//書き込み権確認
		if (!is_writable($save_path)) {
			throw CoreException::RaiseSystemError('セッションセーブディレクトリに書き込めません。dir:%s', [$save_path]);
		}

		//読み込み権確認
		if (!is_readable($save_path)) {
			throw CoreException::RaiseSystemError('セッションセーブディレクトリから読み込みできません。dir:%s', [$save_path]);
		}

		//==============================================
		//ファイル：セッションフィクセーション対策
		//==============================================
		//セッション取得元検証
		$session_name = session_name();
		if (isset($_POST[$session_name]) || isset($_GET[$session_name])) {
			throw CoreException::RaiseSystemError('クッキー以外の経路でセッションを指定されました。session_id:%s', [$session_id]);
		}

		//セッションIDがあった場合の検証
		$session_id = (isset($_COOKIE[$session_name])) ? $_COOKIE[$session_name] : session_id();
		if ($session_id !== '') {
			//不正な文字列がないか検証
			if (strpos($session_id, '.') !== false || strpos($session_id, '/') !== false || strpos($session_id, "\\") !== false) {
				throw CoreException::RaiseSystemError('セッションIDに不正な文字列が存在します。session_id:%s', [$session_id]);
			}

			//セッションファイルパスの作成
			$session_file_path = sprintf('%s/%s%s', str_replace("\\", '/', $save_path), static::SESSION_FILE_NAME_PREFIX, $session_id);

			//ファイル存在確認
			if (!file_exists($session_file_path)) {
				static::DeleteSessionCookie();
				throw CoreException::RaiseSystemError('セッションファイルがありません。セッションフィクセーションの疑いがあります。file:%s', [$session_file_path]);
			}

			//対象確認
			if (!is_file($session_file_path)) {
				throw CoreException::RaiseSystemError('セッションファイルがファイルではありません。file:%s', [$session_file_path]);
			}

			//書き込み権確認
			if (!is_writable($session_file_path)) {
				throw CoreException::RaiseSystemError('セッションファイルに書き込めません。file:%s', [$session_file_path]);
			}

			//読み込み権確認
			if (!is_readable($session_file_path)) {
				throw CoreException::RaiseSystemError('セッションファイルから読み込みできません。file:%s', [$session_file_path]);
			}
		}

		//==============================================
		//処理の終了
		//==============================================
		return true;
	}
1055656
function (data) {
    var str = '', start = true;
    var jsondata = '';
    for (var key in data) {
      if (typeof (jsondata = JSON.stringify(data[key])) === 'string') {
        str += (start? '': '&');
        str += encodeURIComponent(key) + '=' + encodeURIComponent(jsondata);
        if (start) { start = false; }
      }
    }
    return str;
  }
206189
public static function ReplacePhpConstValue ($value) {
		$match_count	= 0;
		$null_count		= 0;
		$ret = preg_replace_callback(
			"/\{PHP_(CONST|METHOD|FILE|FW2_DI_STATIC):(.+)\}/",
			function ($matches) use (&$null_count) {
				switch ($matches[1]) {
					case 'METHOD':
						$matches[2] = static::ReplacePhpConstValue($matches[2]);
						$chunk = explode('|', $matches[2]);

						$method = explode('::', $chunk[0]);
						if (is_array($method) && !is_callable($chunk[0])) {
							throw CoreException::RaiseSystemError('実行できないメソッド名が設定されています。%s::%s', [$method[0], $method[1]]);
						} else if (!is_array($method) && !function_exists($method[0])) {
							throw CoreException::RaiseSystemError('実行できない関数名が設定されています。%s', [$method[0]]);
						}
						$const_value = call_user_func($method, $chunk[1] ?? null);
						$const_value !== null ?: $null_count++;
						return $const_value;
					case 'CONST':
						$matches[2] = static::ReplacePhpConstValue($matches[2]);
						$chunk = explode('|', $matches[2]);

						try {
							$const_value = ConstUtility::Get($chunk[0], (isset($chunk[1])) ? $chunk[1] : NULL, TRUE);
						} catch (CoreException $ce) {
							throw CoreException::RaiseSystemError('設定ファイルに存在しない定数名が設定されています。const name:%s', [$chunk[0]]);
						}
						$const_value !== null ?: $null_count++;
						return $const_value;
					case 'FILE':
						$matches[2] = static::ReplacePhpConstValue($matches[2]);
						$chunk = explode('|', $matches[2]);

						$file_path = $chunk[0];
						$target_row = $chunk[1] ?? 1;
						$default_value = $chunk[2] ?? '';

						if ($file_path == '') {
							return $default_value;
						}

						$handle = fopen($file_path, "r");
						$value = static::GetTargeRow($handle, $target_row) ?: $default_value;
						fclose($handle);
						return $value;
					case 'FW2_DI_STATIC':
						$chunk = explode('::', $matches[2]);
						$class_path = [DI::GetClassPath($chunk[0]), $chunk[1]];
						$const_value = $class_path();
						$const_value !== null ?: $null_count++;
						return $const_value;
				}
			},
			$value,
			-1,
			$match_count
		);
		return $match_count === $null_count && $ret === '' ? null : $ret;
	}
1202850
function makeDefaultNamePair(config, obj, packageName) {
  const regex = /^default/;
  let nam = "";
  let result = [];

  for (let defaultName of Object.keys(config)) {
    if (regex.test(defaultName)) {
      nam = defaultName.substr(7, 1).toLowerCase() + defaultName.substr(8); //defaultを除いて先頭文字を小文字にする
      if (obj.hasOwnProperty(nam)) {
        result.push([nam, defaultName]);
      } else {
        throw new Error(`${packageName}: makeDefaultNamePair is failed. [${nam}, ${defaultName}]`);
      }
    }
  }
  return result;
}
366254
function pullDeps(options, reg, contents, modData) {
    var deps = [],
        origId, depPathResult;
    // var base = options.base || path.resolve(modData.path, '..');
    reg.lastIndex = 0;
    // 删除代码注释
    contents = deleteCodeComments(contents);
    contents.replace(reg, function (m, m1) {
        try {
            m1 = eval(m1);
        } catch (err) {
            m1 = '';
            var filePath = modData ? modData.path : '';
            var code = m;
            code = m.replace(/[\r\n]*/g, '');
            console.log(chalk.yellow(`${PLUGIN_NAME} warning:`), chalk.gray(err.message));
            console.log(chalk.yellow('                   file path:'), chalk.gray(filePath));
            console.log(chalk.yellow('                   code snippet:'), chalk.gray(code));
        }
        if (m1) {
            if (typeof m1 === 'string') {
                origId = m1;
                if (origId && origId.slice(0, 4) !== 'http' && origId.slice(0, 2) !== '//') {
                    depPathResult = modPathResolve(options, origId);
                    deps.unshift({
                        id: depPathResult.id,
                        origId: depPathResult.path,
                        extName: depPathResult.extName
                    });
                }
            } else if (Array.isArray(m1)) {
                for (var i = 0; i < m1.length; i++) {
                    origId = m1[i];
                    if (origId && origId.slice(0, 4) !== 'http' && origId.slice(0, 2) !== '//') {
                        depPathResult = modPathResolve(options, origId);
                        deps.unshift({
                            id: depPathResult.id,
                            origId: depPathResult.path,
                            extName: depPathResult.extName
                        });
                    }
                }
            }
        }
    });
    return deps;
}
85856
function formatArray (koyomi, date, format) {
  return format.map(x => {

    // 変換なし
    if (typeof x === 'string') {
      return x;

    // 変換あり
    } else {

      var v;
      var fn = PARAMS[x.p];

      // 変換関数が文字列の場合はカスタマイズ文字列の処理とする
      if (typeof fn === 'string') {
        var c = compile(fn);
        v = formatArray(koyomi, date, c.v).join('');
        if (c.o) {
          v = formatOptions(v, c.o);
        }

      // 関数の場合はそのまま結果を受け取る
      } else {
        v = fn(date, koyomi);

        // 結果が配列の場合はさらに変換作業を行う
        if (Array.isArray(v)) {
          var f = compile(v[1]);
          v = formatArray(koyomi, v[0], f.v).join('');
          if (f.o){
            // 全体オプション (全角、漢数字等)
            v = formatOptions(v, f.o);
          }
        }
      }

      // 個別オプション
      return x.hasOwnProperty('o') ? convertFormatNumber(v, x.o) : v;
    }
  });
}
166902
function(val, o){
				var tmp;
				var fVal = $.trim(val || '').split(/\s+/);
				if(fVal.length == 2){
					if(fVal[0].indexOf(':') != -1 && fVal[1].indexOf(':') == -1){
						tmp = fVal[1];
						fVal[1] = fVal[0];
						fVal[0] = tmp;
					}
					val = this.date(fVal[0], o) +'T'+ this.time(fVal[1], o);
				} else if (fVal.length == 3) {
					val = this.date(fVal[0], o) +'T'+ this.time(fVal[1]+fVal[2], o);
				}
				return val;
			}
192330
function(p) {

			var _this = this;
			var w = window;
			var data = p.data;

			// Is data a form object
			if (_this.domInstance('form', data)) {
				data = _this.nodeListToJSON(data.elements);
			}
			else if ('NodeList' in w && data instanceof NodeList) {
				data = _this.nodeListToJSON(data);
			}
			else if (_this.domInstance('input', data)) {
				data = _this.nodeListToJSON([data]);
			}

			// Is data a blob, File, FileList?
			if (('File' in w && data instanceof w.File) ||
				('Blob' in w && data instanceof w.Blob) ||
				('FileList' in w && data instanceof w.FileList)) {
				data = {file: data};
			}

			// Loop through data if it's not form data it must now be a JSON object
			if (!('FormData' in w && data instanceof w.FormData)) {

				for (var x in data) if (data.hasOwnProperty(x)) {

					if ('FileList' in w && data[x] instanceof w.FileList) {
						if (data[x].length === 1) {
							data[x] = data[x][0];
						}
					}
					else if (_this.domInstance('input', data[x]) && data[x].type === 'file') {
						continue;
					}
					else if (_this.domInstance('input', data[x]) ||
						_this.domInstance('select', data[x]) ||
						_this.domInstance('textArea', data[x])) {
						data[x] = data[x].value;
					}
					else if (_this.domInstance(null, data[x])) {
						data[x] = data[x].innerHTML || data[x].innerText;
					}
				}
			}

			p.data = data;
			return data;
		}
331667
public static function Comparison ($operand_left, $operator, $operand_right, $replace_value_list = []) {
		// チェックボックスの!=判定用に元のIDを保持しておく。
		$left_value_id = $operand_left;

		//値のどちらかがnullの場合は即死
		if ($operand_left === null || $operand_right === null) {
			return false;
		}

		//左辺値のフォーマット
		$operand_left = is_array($operand_left) ? static::ExecuteCalcList($operand_left, $replace_value_list) : $replace_value_list[$operand_left] ?? '';

		//右辺値のフォーマット
		$operand_right = is_array($operand_right) ? static::ExecuteCalcList($operand_right, $replace_value_list) : $replace_value_list[$operand_right] ?? $operand_right;

		if ($operand_left === false || $operand_right === false) {
			return false;
		}

		// データ有無チェック
		switch ($operator) {
			case static::COMP_OP_EQ:
			case static::COMP_OP_N_EQ:
			case static::COMP_OP_LT:
			case static::COMP_OP_LT_EQ:
			case static::COMP_OP_GT:
			case static::COMP_OP_GT_EQ:
			case static::COMP_OP_REGEX:
				if ($operand_left === null ||
					$operand_left === '' ||
					$operand_right === null ||
					$operand_right === '') {
					return false;
				}
		}

		//比較演算
		switch ($operator) {
			case static::COMP_OP_EQ:
				return $operand_left	==	$operand_right;
			case static::COMP_OP_N_EQ:
				return $operand_left	!=	$operand_right;
			case static::COMP_OP_LT:
				return $operand_left	<	$operand_right;
			case static::COMP_OP_LT_EQ:
				return $operand_left	<=	$operand_right;
			case static::COMP_OP_GT:
				return $operand_left	>	$operand_right;
			case static::COMP_OP_GT_EQ:
				return $operand_left	>=	$operand_right;
			case static::COMP_OP_ANY:
				return $operand_left	!=	null && ($operand_left != '' || $operand_left === 0);
			case static::COMP_OP_EMPTY:
				return $operand_left	==	null || ($operand_left == '' && $operand_left !== 0);
			case static::COMP_OP_REGEX:
				return preg_match("/". $operand_right ."/", $operand_left) === 1;
		}

		//対象となる比較演算子がない場合はfalse
		return false;
	}
300853
function(p, style) {
		var i, o, s, b, sticy, suid, sgid, str, oct;
		
		if (!style) {
			style = this.options.fileModeStyle.toLowerCase();
		}
		p = $.trim(p);
		if (p.match(/[rwxs-]{9}$/i)) {
			str = p = p.substr(-9);
			if (style == 'string') {
				return str;
			}
			oct = '';
			s = 0;
			for (i=0; i<7; i=i+3) {
				o = p.substr(i, 3);
				b = 0;
				if (o.match(/[r]/i)) {
					b += 4;
				}
				if (o.match(/[w]/i)) {
					b += 2;
				}
				if (o.match(/[xs]/i)) {
					if (o.match(/[xs]/)) {
						b += 1;
					}
					if (o.match(/[s]/i)) {
						if (i == 0) {
							s += 4;
						} else if (i == 3) {
							s += 2;
						}
					}
				}
				oct += b.toString(8);
			}
			if (s) {
				oct = s.toString(8) + oct;
			}
		} else {
			p = parseInt(p, 8);
			oct = p? p.toString(8) : '';
			if (!p || style == 'octal') {
				return oct;
			}
			o = p.toString(8);
			s = 0;
			if (o.length > 3) {
				o = o.substr(-4);
				s = parseInt(o.substr(0, 1), 8);
				o = o.substr(1);
			}
			sticy = ((s & 1) == 1); // not support
			sgid = ((s & 2) == 2);
			suid = ((s & 4) == 4);
			str = '';
			for(i=0; i<3; i++) {
				if ((parseInt(o.substr(i, 1), 8) & 4) == 4) {
					str += 'r';
				} else {
					str += '-';
				}
				if ((parseInt(o.substr(i, 1), 8) & 2) == 2) {
					str += 'w';
				} else {
					str += '-';
				}
				if ((parseInt(o.substr(i, 1), 8) & 1) == 1) {
					str += ((i==0 && suid)||(i==1 && sgid))? 's' : 'x';
				} else {
					str += '-';
				}
			}
		}
		if (style == 'both') {
			return str + ' (' + oct + ')';
		} else if (style == 'string') {
			return str;
		} else {
			return oct;
		}
	}
1087180
function(data) {

    var _mode = QRMode.MODE_NUMBER;
    var _data = data;

    var _this = {};

    _this.getMode = function() {
      return _mode;
    };

    _this.getLength = function(buffer) {
      return _data.length;
    };

    _this.write = function(buffer) {

      var data = _data;

      var i = 0;

      while (i + 2 < data.length) {
        buffer.put(strToNum(data.substring(i, i + 3) ), 10);
        i += 3;
      }

      if (i < data.length) {
        if (data.length - i == 1) {
          buffer.put(strToNum(data.substring(i, i + 1) ), 4);
        } else if (data.length - i == 2) {
          buffer.put(strToNum(data.substring(i, i + 2) ), 7);
        }
      }
    };

    var strToNum = function(s) {
      var num = 0;
      for (var i = 0; i < s.length; i += 1) {
        num = num * 10 + chatToNum(s.charAt(i) );
      }
      return num;
    };

    var chatToNum = function(c) {
      if ('0' <= c && c <= '9') {
        return c.charCodeAt(0) - '0'.charCodeAt(0);
      }
      throw 'illegal char :' + c;
    };

    return _this;
  }
326664
function fixdata(data) {
		var o = '',
			l = 0,
			w = 10240;
		for (; l < data.byteLength / w; ++l)
			o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
		o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
		return o;
	}