Overview
Max Total Supply
1,000,000,000 POC
Holders
246 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ERC20POC
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-22 */ // SPDX-License-Identifier: MIT // File: openzeppelin-solidity/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: contracts/4_ERC20POC.sol pragma solidity ^0.8.9; contract ERC20POC is ERC20 { uint256 constant INIT_SUPPLY_POC = 1000000000; // 1,000,000,000 address _owner; uint256 _locked_POC_total; uint256 _fee_rate; uint256 _submit_daily_limit_total; uint256 _submit_daily_limit_personal; struct bridge_staff { address user; uint256 quota; } bridge_staff[] private arr_staff; enum Submit_state {submit, cancel, complete} struct pegin_data { uint256 reg_date; bytes32 id; address user; uint256 amount; uint256 fee; Submit_state state; } mapping (bytes32 => pegin_data) private arr_pegin_submit; mapping (uint256 => bytes32) private arr_pegin_submit_key; uint256 arr_pegin_submit_key_start = 1; uint256 arr_pegin_submit_key_last = 0; enum Reserve_state {reserve, cancel, complete} struct pegout_data { uint256 reg_date; bytes32 id; address user; uint256 amount; address staff; Reserve_state state; } mapping (bytes32 => pegout_data) private arr_pegout_reserve; mapping (uint256 => bytes32) private arr_pegout_reserve_key; uint256 arr_pegout_reserve_key_start = 1; uint256 arr_pegout_reserve_key_last = 0; constructor(uint256 fee_rate, uint256 locking_POC, address new_staff, uint256 new_staff_locked_POC, uint256 new_submit_daily_limit_total, uint256 new_submit_daily_limit_personal) ERC20("PocketArena", "POC") { _owner = msg.sender; _mint(_owner, (INIT_SUPPLY_POC * (10 ** uint256(decimals())))); _locked_POC_total = locking_POC; staff_add(new_staff, new_staff_locked_POC); _fee_rate_set(fee_rate); _submit_daily_limit_total = new_submit_daily_limit_total; _submit_daily_limit_personal = new_submit_daily_limit_personal; } modifier onlyOwner() { require(msg.sender == _owner, "only owner is possible"); _; } modifier onlyStaff() { (bool is_staff, uint256 quota) = staff_check(msg.sender); require(is_staff, "only staff is possible"); _; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { if (msg.sender == _owner) { require(balanceOf(_owner) - (_locked_POC_total - staff_quota_total()) >= amount, "sendable POC is not enough"); } else { (bool is_staff, ) = staff_check(msg.sender); if (is_staff) { require(recipient == _owner, "staff can transfer POC to the owner only"); } else { (is_staff, ) = staff_check(recipient); require(!is_staff, "you can't transfer POC to the staff"); } } _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { if (sender == _owner) { require(balanceOf(_owner) - (_locked_POC_total - staff_quota_total()) >= amount, "sendable POC is not enough"); } else { (bool is_staff, uint256 quota) = staff_check(msg.sender); if (is_staff) { require(quota >= amount, "staff can transferFrom POC within quota"); } } _transfer(sender, recipient, amount); uint256 currentAllowance = allowance(sender, _msgSender()); require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function staff_list() onlyOwner external view returns (bridge_staff[] memory) { return arr_staff; } function staff_add(address new_staff, uint256 new_staff_locked_POC) onlyOwner public returns (bool) { require(arr_staff.length < 5, "it allows max 5 staffs only"); require(new_staff != _owner, "owner can't be staff"); (bool is_staff, ) = staff_check(new_staff); require(!is_staff, "it's already added as staff"); transfer(new_staff, new_staff_locked_POC); arr_staff.push(bridge_staff(new_staff, new_staff_locked_POC)); return true; } event evt_staff_del(bool result); function staff_del() onlyStaff external { uint256 del_index = arr_staff.length + 1; for (uint256 i=0; i<arr_staff.length; i++) { if (arr_staff[i].user == msg.sender) { transfer(_owner, balanceOf(msg.sender)); delete arr_staff[i]; del_index = i; break; } } if (del_index >= (arr_staff.length + 1)) { emit evt_staff_del(false); } else { for (uint256 i=del_index; i<arr_staff.length-1; i++){ arr_staff[i] = arr_staff[i+1]; } arr_staff.pop(); emit evt_staff_del(true); } } function staff_check(address user) public view returns (bool, uint256) { bool is_staff = false; uint256 quota = 0; for (uint256 i=0; i<arr_staff.length; i++) { if (arr_staff[i].user == user) { is_staff = true; quota = arr_staff[i].quota; break; } } return (is_staff, quota); } event evt_staff_quota_add(bool result); function staff_quota_add(address staff, uint256 increased) onlyOwner external { (bool is_staff, ) = staff_check(staff); require(is_staff, "you can add quota for existed staff only"); require(_locked_POC_total - staff_quota_total() > increased, "you can add within your locked_POC"); for (uint256 i=0; i<arr_staff.length; i++) { if (arr_staff[i].user == staff) { _transfer(msg.sender, staff, increased); arr_staff[i].quota += increased; break; } } emit evt_staff_quota_add(true); } event evt_staff_quota_minus(bool result); function staff_quota_minus(uint256 decreased) onlyStaff external { (, uint256 quota) = staff_check(msg.sender); require(quota >= decreased, "you can minus within your locked_POC"); for (uint256 i=0; i<arr_staff.length; i++) { if (arr_staff[i].user == msg.sender) { transfer(_owner, decreased); arr_staff[i].quota -= decreased; break; } } emit evt_staff_quota_minus(true); } function staff_quota_total() onlyOwner public view returns (uint256) { uint256 total = 0; for (uint256 i=0; i<arr_staff.length; i++) { total += arr_staff[i].quota; } return total; } function _fee_rate_get() onlyOwner external view returns (uint256) { return _fee_rate; } event evt_fee_rate_set(uint256 _fee_rate); function _fee_rate_set(uint256 new_fee_rate) onlyOwner public { require(new_fee_rate <= 10000 * 100, "rate should be 1000000 or less"); _fee_rate = new_fee_rate; emit evt_fee_rate_set(_fee_rate); } function fee_get(uint256 amount) public view returns (uint256) { return amount * _fee_rate / 10000 / 100; } function locked_POC_total() external view returns (uint256) { return _locked_POC_total; } event evt_locked_POC_total_add(uint256 _locked_POC_total); function locked_POC_total_add(uint256 amount) onlyOwner external { require((balanceOf(_owner) - _locked_POC_total) >= amount, "lockable POC is not enough"); _locked_POC_total += amount; emit evt_locked_POC_total_add(_locked_POC_total); } event evt_locked_POC_total_minus(uint256 _locked_POC_total); function locked_POC_total_minus(uint256 amount) onlyOwner external { require((_locked_POC_total - staff_quota_total()) >= amount, "lockable POC is not enough"); _locked_POC_total -= amount; emit evt_locked_POC_total_minus(_locked_POC_total); } function _submit_daily_limit_total_get() onlyOwner external view returns (uint256) { return _submit_daily_limit_total; } event evt_submit_daily_limit_total_set(uint256 _submit_daily_limit_total); function _submit_daily_limit_total_set(uint256 new_submit_daily_limit_total) onlyOwner external { _submit_daily_limit_total = new_submit_daily_limit_total; emit evt_submit_daily_limit_total_set(_submit_daily_limit_total); } function _submit_daily_limit_personal_get() onlyOwner external view returns (uint256) { return _submit_daily_limit_personal; } event evt_submit_daily_limit_personal_set(uint256 _submit_daily_limit_personal); function _submit_daily_limit_personal_set(uint256 new_submit_daily_limit_personal) onlyOwner external { _submit_daily_limit_personal = new_submit_daily_limit_personal; emit evt_submit_daily_limit_personal_set(_submit_daily_limit_personal); } function arr_pegin_submit_key_last_get() onlyOwner external view returns (uint256) { return arr_pegin_submit_key_last; } function arr_pegin_submit_key_start_get() onlyOwner external view returns (uint256) { return arr_pegin_submit_key_start; } event evt_arr_pegin_submit_key_start_set(uint256 arr_pegin_submit_key_start); function arr_pegin_submit_key_start_set(uint256 new_arr_pegin_submit_key_start) onlyOwner external { arr_pegin_submit_key_start = new_arr_pegin_submit_key_start; emit evt_arr_pegin_submit_key_start_set(arr_pegin_submit_key_start); } function arr_pegout_reserve_key_last_get() onlyOwner external view returns (uint256) { return arr_pegout_reserve_key_last; } function arr_pegout_reserve_key_start_get() onlyOwner external view returns (uint256) { return arr_pegout_reserve_key_start; } event evt_arr_pegout_reserve_key_start_set(uint256 arr_pegout_reserve_ey_start); function arr_pegout_reserve_key_start_set(uint256 new_arr_pegout_reserve_key_start) onlyOwner external { arr_pegout_reserve_key_start = new_arr_pegout_reserve_key_start; emit evt_arr_pegout_reserve_key_start_set(arr_pegout_reserve_key_start); } event evt_pegin_submit(pegin_data temp); function pegin_submit(uint256 amount) external { uint256 calc_fee = fee_get(amount); require(balanceOf(msg.sender) >= (amount + calc_fee), "your balance is not enough"); uint256 daily_total = 0; uint256 daily_personal = 0; for (uint256 i=arr_pegin_submit_key_last; i>=arr_pegin_submit_key_start; i--) { if ((block.timestamp - arr_pegin_submit[arr_pegin_submit_key[i]].reg_date) < 86400) { daily_total += 1; require(daily_total < _submit_daily_limit_total, "we dont't get the submit anymore today"); if (arr_pegin_submit[arr_pegin_submit_key[i]].user == msg.sender) { daily_personal += 1; require(daily_personal < _submit_daily_limit_personal, "you can't submit anymore today"); } } else { break; } } transfer(_owner, (amount + calc_fee)); _locked_POC_total += (amount + calc_fee); bytes32 temp_key = keccak256(abi.encodePacked(block.timestamp, msg.sender)); pegin_data memory temp = pegin_data(block.timestamp, temp_key, msg.sender, amount, calc_fee, Submit_state.submit); arr_pegin_submit[temp_key] = temp; arr_pegin_submit_key_last += 1; arr_pegin_submit_key[arr_pegin_submit_key_last] = temp_key; emit evt_pegin_submit(temp); } function pegin_submit_list(bytes32 id) external view returns (pegin_data memory) { return arr_pegin_submit[id]; } function pegin_submit_list(uint256 count_per_page, uint256 current_page) external view returns (pegin_data[] memory) { uint256 new_arr_pegin_submit_key_last; uint256 new_arr_pegin_submit_key_start; if (current_page == 0) { current_page = 1; } if (current_page == 1) { new_arr_pegin_submit_key_last = arr_pegin_submit_key_last; } else { uint256 key_position = count_per_page * (current_page - 1); if (arr_pegin_submit_key_last <= key_position) { new_arr_pegin_submit_key_last = 0; } else { new_arr_pegin_submit_key_last = arr_pegin_submit_key_last - key_position; } } if (new_arr_pegin_submit_key_last < count_per_page) { new_arr_pegin_submit_key_start = arr_pegin_submit_key_start; } else { if ( new_arr_pegin_submit_key_last < (arr_pegin_submit_key_start + count_per_page) ) { new_arr_pegin_submit_key_start = arr_pegin_submit_key_start; } else { new_arr_pegin_submit_key_start = new_arr_pegin_submit_key_last - count_per_page + 1; } } uint256 temp_size = 0; if (new_arr_pegin_submit_key_start < (new_arr_pegin_submit_key_last + 1) ) { temp_size = new_arr_pegin_submit_key_last - new_arr_pegin_submit_key_start + 1; } pegin_data[] memory arr_temp = new pegin_data[](temp_size); uint256 index = 0; for (uint256 i=new_arr_pegin_submit_key_last; i>=new_arr_pegin_submit_key_start; i--) { arr_temp[index] = arr_pegin_submit[arr_pegin_submit_key[i]]; index += 1; } return arr_temp; } event evt_pegin_submit_complete(bool result); function pegin_submit_complete(bytes32[] memory complete_id) onlyStaff external { uint256 len = complete_id.length; for (uint256 i=0; i<len; i++) { if (arr_pegin_submit[complete_id[i]].reg_date > 0) { arr_pegin_submit[complete_id[i]].state = Submit_state.complete; } } emit evt_pegin_submit_complete(true); } event evt_pegin_submit_cancel(bool result); function pegin_submit_cancel(bytes32[] memory del_id) onlyStaff external { uint256 len = del_id.length; for (uint256 i=0; i<len; i++) { if (arr_pegin_submit[del_id[i]].reg_date > 0) { if (arr_pegin_submit[del_id[i]].state == Submit_state.submit) { transfer(arr_pegin_submit[del_id[i]].user, (arr_pegin_submit[del_id[i]].amount + arr_pegin_submit[del_id[i]].fee)); _locked_POC_total -= (arr_pegin_submit[del_id[i]].amount + arr_pegin_submit[del_id[i]].fee); arr_pegin_submit[del_id[i]].state = Submit_state.cancel; } } } emit evt_pegin_submit_cancel(false); } event evt_pegout_reserve(bool result); function pegout_reserve(uint256[] memory reg_date, bytes32[] memory id, address[] memory user, uint256[] memory amount) onlyStaff external { uint256 len = reg_date.length; require(len == id.length, "2nd parameter is missed"); require(len == user.length, "3rd parameter is missed"); require(len == amount.length, "4th parameter is missed"); (, uint256 quota) = staff_check(msg.sender); uint256 total_amount = 0; for (uint256 i=0; i<len; i++) { require(arr_pegout_reserve[id[i]].reg_date == 0, "there is an already reserved data"); total_amount += amount[i]; } require(quota >= total_amount, "your unlocked_POC balance is not enough"); for (uint256 i=0; i<len; i++) { increaseAllowance(user[i], amount[i]); arr_pegout_reserve[id[i]] = pegout_data(reg_date[i], id[i], user[i], amount[i], msg.sender, Reserve_state.reserve); arr_pegout_reserve_key_last += 1; arr_pegout_reserve_key[arr_pegout_reserve_key_last] = id[i]; } emit evt_pegout_reserve(true); } function pegout_reserve_list(bytes32 id) external view returns (pegout_data memory) { return arr_pegout_reserve[id]; } function pegout_reserve_list(uint256 count_per_page, uint256 current_page) external view returns (pegout_data[] memory) { uint256 new_arr_pegout_reserve_key_last; uint256 new_arr_pegout_reserve_key_start; if (current_page == 0) { current_page = 1; } if (current_page == 1) { new_arr_pegout_reserve_key_last = arr_pegout_reserve_key_last; } else { uint256 key_position = count_per_page * (current_page - 1); if (arr_pegout_reserve_key_last <= key_position) { new_arr_pegout_reserve_key_last = 0; } else { new_arr_pegout_reserve_key_last = arr_pegout_reserve_key_last - key_position; } } if (new_arr_pegout_reserve_key_last < count_per_page) { new_arr_pegout_reserve_key_start = arr_pegout_reserve_key_start; } else { if ( new_arr_pegout_reserve_key_last < (arr_pegout_reserve_key_start + count_per_page) ) { new_arr_pegout_reserve_key_start = arr_pegout_reserve_key_start; } else { new_arr_pegout_reserve_key_start = new_arr_pegout_reserve_key_last - count_per_page + 1; } } uint256 temp_size = 0; if (new_arr_pegout_reserve_key_start < (new_arr_pegout_reserve_key_last + 1) ) { temp_size = new_arr_pegout_reserve_key_last - new_arr_pegout_reserve_key_start + 1; } pegout_data[] memory arr_temp = new pegout_data[](temp_size); uint256 index = 0; for (uint256 i=new_arr_pegout_reserve_key_last; i>=new_arr_pegout_reserve_key_start; i--) { arr_temp[index] = arr_pegout_reserve[arr_pegout_reserve_key[i]]; index += 1; } return arr_temp; } event evt_pegout_run(bytes32[] arr_temp); function pegout_run(bytes32[] memory id) external { uint256 len = id.length; bytes32[] memory arr_temp = new bytes32[](len); uint256 temp_index = 0; for (uint256 i=0; i<len; i++) { if (arr_pegout_reserve[id[i]].reg_date > 0) { if ( (arr_pegout_reserve[id[i]].user == msg.sender) && (arr_pegout_reserve[id[i]].state == Reserve_state.reserve) ) { bool result = transferFrom(arr_pegout_reserve[id[i]].staff, msg.sender, arr_pegout_reserve[id[i]].amount); if (result) { arr_pegout_reserve[id[i]].state = Reserve_state.complete; _locked_POC_total -= arr_pegout_reserve[id[i]].amount; arr_temp[temp_index] = id[i]; temp_index += 1; } } } } emit evt_pegout_run(arr_temp); } event evt_pegout_reserve_cancel(bool result); function pegout_reserve_cancel(bytes32[] memory del_id) onlyStaff external { uint256 len = del_id.length; for (uint256 i=0; i<len; i++) { if (arr_pegout_reserve[del_id[i]].reg_date > 0) { if (arr_pegout_reserve[del_id[i]].staff == msg.sender) { decreaseAllowance(arr_pegout_reserve[del_id[i]].user, arr_pegout_reserve[del_id[i]].amount); arr_pegout_reserve[del_id[i]].state = Reserve_state.cancel; } } } emit evt_pegout_reserve_cancel(true); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"fee_rate","type":"uint256"},{"internalType":"uint256","name":"locking_POC","type":"uint256"},{"internalType":"address","name":"new_staff","type":"address"},{"internalType":"uint256","name":"new_staff_locked_POC","type":"uint256"},{"internalType":"uint256","name":"new_submit_daily_limit_total","type":"uint256"},{"internalType":"uint256","name":"new_submit_daily_limit_personal","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"arr_pegin_submit_key_start","type":"uint256"}],"name":"evt_arr_pegin_submit_key_start_set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"arr_pegout_reserve_ey_start","type":"uint256"}],"name":"evt_arr_pegout_reserve_key_start_set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fee_rate","type":"uint256"}],"name":"evt_fee_rate_set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_locked_POC_total","type":"uint256"}],"name":"evt_locked_POC_total_add","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_locked_POC_total","type":"uint256"}],"name":"evt_locked_POC_total_minus","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"reg_date","type":"uint256"},{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"enum ERC20POC.Submit_state","name":"state","type":"uint8"}],"indexed":false,"internalType":"struct ERC20POC.pegin_data","name":"temp","type":"tuple"}],"name":"evt_pegin_submit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_pegin_submit_cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_pegin_submit_complete","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_pegout_reserve","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_pegout_reserve_cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"arr_temp","type":"bytes32[]"}],"name":"evt_pegout_run","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_staff_del","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_staff_quota_add","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"evt_staff_quota_minus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_submit_daily_limit_personal","type":"uint256"}],"name":"evt_submit_daily_limit_personal_set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_submit_daily_limit_total","type":"uint256"}],"name":"evt_submit_daily_limit_total_set","type":"event"},{"inputs":[],"name":"_fee_rate_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_fee_rate","type":"uint256"}],"name":"_fee_rate_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_submit_daily_limit_personal_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_submit_daily_limit_personal","type":"uint256"}],"name":"_submit_daily_limit_personal_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_submit_daily_limit_total_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_submit_daily_limit_total","type":"uint256"}],"name":"_submit_daily_limit_total_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arr_pegin_submit_key_last_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"arr_pegin_submit_key_start_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_arr_pegin_submit_key_start","type":"uint256"}],"name":"arr_pegin_submit_key_start_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arr_pegout_reserve_key_last_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"arr_pegout_reserve_key_start_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_arr_pegout_reserve_key_start","type":"uint256"}],"name":"arr_pegout_reserve_key_start_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fee_get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked_POC_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"locked_POC_total_add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"locked_POC_total_minus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pegin_submit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"del_id","type":"bytes32[]"}],"name":"pegin_submit_cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"complete_id","type":"bytes32[]"}],"name":"pegin_submit_complete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count_per_page","type":"uint256"},{"internalType":"uint256","name":"current_page","type":"uint256"}],"name":"pegin_submit_list","outputs":[{"components":[{"internalType":"uint256","name":"reg_date","type":"uint256"},{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"enum ERC20POC.Submit_state","name":"state","type":"uint8"}],"internalType":"struct ERC20POC.pegin_data[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"pegin_submit_list","outputs":[{"components":[{"internalType":"uint256","name":"reg_date","type":"uint256"},{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"enum ERC20POC.Submit_state","name":"state","type":"uint8"}],"internalType":"struct ERC20POC.pegin_data","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"reg_date","type":"uint256[]"},{"internalType":"bytes32[]","name":"id","type":"bytes32[]"},{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"pegout_reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"del_id","type":"bytes32[]"}],"name":"pegout_reserve_cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count_per_page","type":"uint256"},{"internalType":"uint256","name":"current_page","type":"uint256"}],"name":"pegout_reserve_list","outputs":[{"components":[{"internalType":"uint256","name":"reg_date","type":"uint256"},{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"staff","type":"address"},{"internalType":"enum ERC20POC.Reserve_state","name":"state","type":"uint8"}],"internalType":"struct ERC20POC.pegout_data[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"pegout_reserve_list","outputs":[{"components":[{"internalType":"uint256","name":"reg_date","type":"uint256"},{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"staff","type":"address"},{"internalType":"enum ERC20POC.Reserve_state","name":"state","type":"uint8"}],"internalType":"struct ERC20POC.pegout_data","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"id","type":"bytes32[]"}],"name":"pegout_run","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_staff","type":"address"},{"internalType":"uint256","name":"new_staff_locked_POC","type":"uint256"}],"name":"staff_add","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"staff_check","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staff_del","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staff_list","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"quota","type":"uint256"}],"internalType":"struct ERC20POC.bridge_staff[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staff","type":"address"},{"internalType":"uint256","name":"increased","type":"uint256"}],"name":"staff_quota_add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"decreased","type":"uint256"}],"name":"staff_quota_minus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staff_quota_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600d556000600e55600160115560006012553480156200002557600080fd5b50604051620046c9380380620046c9833981016040819052620000489162000a78565b6040518060400160405280600b81526020016a506f636b65744172656e6160a81b81525060405180604001604052806003815260200162504f4360e81b8152508160039080519060200190620000a0929190620009d2565b508051620000b6906004906020840190620009d2565b5050600580546001600160a01b03191633908117909155620001029150620000dc601290565b620000ec9060ff16600a62000bef565b620000fc90633b9aca0062000c04565b62000133565b60068590556200011384846200020b565b506200011f866200041b565b6008919091556009555062000ccc92505050565b6001600160a01b0382166200018f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620001a3919062000c26565b90915550506001600160a01b03821660009081526020819052604081208054839290620001d290849062000c26565b90915550506040518181526001600160a01b03831690600090600080516020620046a98339815191529060200160405180910390a35050565b6005546000906001600160a01b03163314620002595760405162461bcd60e51b8152602060048201526016602482015260008051602062004689833981519152604482015260640162000186565b600a54600511620002ad5760405162461bcd60e51b815260206004820152601b60248201527f697420616c6c6f7773206d6178203520737461666673206f6e6c790000000000604482015260640162000186565b6005546001600160a01b03848116911614156200030d5760405162461bcd60e51b815260206004820152601460248201527f6f776e65722063616e2774206265207374616666000000000000000000000000604482015260640162000186565b60006200031a84620004f6565b50905080156200036d5760405162461bcd60e51b815260206004820152601b60248201527f6974277320616c72656164792061646465642061732073746166660000000000604482015260640162000186565b6200037984846200059f565b5050604080518082019091526001600160a01b03848116825260208201848152600a80546001808201835560009290925293517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600290950294850180546001600160a01b0319169190941617909255517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a99092019190915590505b92915050565b6005546001600160a01b03163314620004665760405162461bcd60e51b8152602060048201526016602482015260008051602062004689833981519152604482015260640162000186565b620f4240811115620004bb5760405162461bcd60e51b815260206004820152601e60248201527f726174652073686f756c642062652031303030303030206f72206c6573730000604482015260640162000186565b60078190556040518181527f44d7f274761b6d6d82edfb8a062c11fa4244bdcced48cd855bd2718e33b9f30e9060200160405180910390a150565b60008060008060005b600a548110156200059457856001600160a01b0316600a82815481106200052a576200052a62000c41565b60009182526020909120600290910201546001600160a01b031614156200057f5760019250600a818154811062000565576200056562000c41565b906000526020600020906002020160010154915062000594565b806200058b8162000c57565b915050620004ff565b509094909350915050565b6005546000906001600160a01b03163314156200064d5781620005c16200075c565b600654620005d0919062000c75565b6005546001600160a01b0316600090815260208190526040902054620005f7919062000c75565b1015620006475760405162461bcd60e51b815260206004820152601a60248201527f73656e6461626c6520504f43206973206e6f7420656e6f756768000000000000604482015260640162000186565b62000746565b60006200065a33620004f6565b5090508015620006da576005546001600160a01b03858116911614620006d45760405162461bcd60e51b815260206004820152602860248201527f73746166662063616e207472616e7366657220504f4320746f20746865206f776044820152676e6572206f6e6c7960c01b606482015260840162000186565b62000744565b620006e584620004f6565b5090508015620007445760405162461bcd60e51b815260206004820152602360248201527f796f752063616e2774207472616e7366657220504f4320746f2074686520737460448201526230b33360e91b606482015260840162000186565b505b620007533384846200080b565b50600192915050565b6005546000906001600160a01b03163314620007aa5760405162461bcd60e51b8152602060048201526016602482015260008051602062004689833981519152604482015260640162000186565b6000805b600a548110156200080557600a8181548110620007cf57620007cf62000c41565b90600052602060002090600202016001015482620007ee919062000c26565b915080620007fc8162000c57565b915050620007ae565b50905090565b6001600160a01b038316620008715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840162000186565b6001600160a01b038216620008d55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840162000186565b6001600160a01b038316600090815260208190526040902054818110156200094f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840162000186565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906200098890849062000c26565b92505081905550826001600160a01b0316846001600160a01b0316600080516020620046a983398151915284604051620009c491815260200190565b60405180910390a350505050565b828054620009e09062000c8f565b90600052602060002090601f01602090048101928262000a04576000855562000a4f565b82601f1062000a1f57805160ff191683800117855562000a4f565b8280016001018555821562000a4f579182015b8281111562000a4f57825182559160200191906001019062000a32565b5062000a5d92915062000a61565b5090565b5b8082111562000a5d576000815560010162000a62565b60008060008060008060c0878903121562000a9257600080fd5b86516020880151604089015191975095506001600160a01b038116811462000ab957600080fd5b80945050606087015192506080870151915060a087015190509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b3357816000190482111562000b175762000b1762000adc565b8085161562000b2557918102915b93841c939080029062000af7565b509250929050565b60008262000b4c5750600162000415565b8162000b5b5750600062000415565b816001811462000b74576002811462000b7f5762000b9f565b600191505062000415565b60ff84111562000b935762000b9362000adc565b50506001821b62000415565b5060208310610133831016604e8410600b841016171562000bc4575081810a62000415565b62000bd0838362000af2565b806000190482111562000be75762000be762000adc565b029392505050565b600062000bfd838362000b3b565b9392505050565b600081600019048311821515161562000c215762000c2162000adc565b500290565b6000821982111562000c3c5762000c3c62000adc565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000c6e5762000c6e62000adc565b5060010190565b60008282101562000c8a5762000c8a62000adc565b500390565b600181811c9082168062000ca457607f821691505b6020821081141562000cc657634e487b7160e01b600052602260045260246000fd5b50919050565b6139ad8062000cdc6000396000f3fe608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e1461056d578063e1e40367146105a6578063e2855a29146105b9578063e3c973db146105c1578063e8960f16146105c9578063f3e838ac146105dc57600080fd5b8063a9059cbb1461050c578063ad5c08091461051f578063c23bfa271461053f578063c43af3c814610547578063c81be0c01461055a57600080fd5b806386fb60531161011557806386fb6053146104a55780638ac38e73146104b85780638ec9cfb7146104cb57806395d89b41146104de578063a457c2d7146104e6578063a4710259146104f957600080fd5b806370a082311461042e5780637716b43f1461045757806379f8d6501461046a5780637c716d2d1461047257806386a6bca61461049257600080fd5b806332d2a575116101ea5780633eb0d711116101ae5780633eb0d711146103a15780634254b10a146103b4578063681aa4f5146103d4578063681d06bc146103e95780636da9a52b146103f15780636fc1f7391461041b57600080fd5b806332d2a5751461033557806334780c6e146103485780633950935114610368578063396e407d1461037b5780633a482e491461038e57600080fd5b806320821b651161023c57806320821b65146102f357806323b872dd146102fb578063270ffff01461030e57806327880be3146103165780632d95320f1461031e578063313ce5671461032657600080fd5b8062fd5c521461027857806306fdde031461028d578063095ea7b3146102ab57806314edf8e7146102ce57806318160ddd146102e1575b600080fd5b61028b610286366004613345565b6105e4565b005b6102956107ce565b6040516102a29190613382565b60405180910390f35b6102be6102b93660046133f3565b610860565b60405190151581526020016102a2565b61028b6102dc36600461341d565b610877565b6002545b6040519081526020016102a2565b6102e56108dd565b6102be610309366004613436565b610911565b6102e5610ac3565b6102e5610af7565b6102e5610b2b565b604051601281526020016102a2565b6102be6103433660046133f3565b610bb0565b61035b610356366004613472565b610d88565b6040516102a29190613518565b6102be6103763660046133f3565b610f9c565b61028b61038936600461341d565b610fd8565b61028b61039c36600461341d565b6110c3565b61028b6103af36600461341d565b611175565b6103c76103c2366004613472565b6111d4565b6040516102a291906135ae565b6103dc6113e0565b6040516102a291906135f0565b6102e5611480565b6104046103ff366004613648565b6114b4565b6040805192151583526020830191909152016102a2565b61028b61042936600461341d565b611551565b6102e561043c366004613648565b6001600160a01b031660009081526020819052604090205490565b61028b61046536600461366a565b6115b0565b61028b611a4c565b61048561048036600461341d565b611cae565b6040516102a29190613771565b61028b6104a03660046133f3565b611d47565b61028b6104b336600461341d565b611f23565b61028b6104c636600461341d565b611f82565b61028b6104d936600461341d565b61205a565b6102956121d5565b6102be6104f43660046133f3565b6121e4565b6102e561050736600461341d565b61227d565b6102be61051a3660046133f3565b6122a6565b61053261052d36600461341d565b612444565b6040516102a2919061377f565b6102e56124c8565b61028b610555366004613345565b6124fc565b61028b610568366004613345565b61278d565b6102e561057b36600461378d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61028b6105b436600461341d565b612a6e565b6006546102e5565b6102e5612dd3565b61028b6105d7366004613345565b612e07565b6102e5612f15565b6000806105f0336114b4565b915091508161061a5760405162461bcd60e51b8152600401610611906137c0565b60405180910390fd5b825160005b81811015610792576000600f600087848151811061063f5761063f6137f0565b6020026020010151815260200190815260200160002060000154111561078057336001600160a01b0316600f600087848151811061067f5761067f6137f0565b6020908102919091018101518252810191909152604001600020600401546001600160a01b0316141561078057610727600f60008784815181106106c5576106c56137f0565b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160a01b0316600f6000888581518110610708576107086137f0565b60200260200101518152602001908152602001600020600301546121e4565b506001600f6000878481518110610740576107406137f0565b6020026020010151815260200190815260200160002060040160146101000a81548160ff0219169083600281111561077a5761077a613494565b02179055505b8061078a8161381c565b91505061061f565b50604051600181527f2eea81f920d801abb127ac102eeee5434dcb2f9a8ca059911828951a19a5af8e906020015b60405180910390a150505050565b6060600380546107dd90613837565b80601f016020809104026020016040519081016040528092919081815260200182805461080990613837565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b600061086d338484612f49565b5060015b92915050565b6005546001600160a01b031633146108a15760405162461bcd60e51b815260040161061190613872565b60098190556040518181527ff7d86081f14f866c144a935a2a3230c7b9305eae6f4ca126b8c14e244c09178e906020015b60405180910390a150565b6005546000906001600160a01b0316331461090a5760405162461bcd60e51b815260040161061190613872565b5060075490565b6005546000906001600160a01b03858116911614156109b85781610933610b2b565b60065461094091906138a2565b6005546001600160a01b031660009081526020819052604090205461096591906138a2565b10156109b35760405162461bcd60e51b815260206004820152601a60248201527f73656e6461626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b610a31565b6000806109c4336114b4565b915091508115610a2e5783811015610a2e5760405162461bcd60e51b815260206004820152602760248201527f73746166662063616e207472616e7366657246726f6d20504f432077697468696044820152666e2071756f746160c81b6064820152608401610611565b50505b610a3c84848461306d565b6000610a48853361057b565b905082811015610aab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610611565b610ab88533858403612f49565b506001949350505050565b6005546000906001600160a01b03163314610af05760405162461bcd60e51b815260040161061190613872565b50600d5490565b6005546000906001600160a01b03163314610b245760405162461bcd60e51b815260040161061190613872565b50600e5490565b6005546000906001600160a01b03163314610b585760405162461bcd60e51b815260040161061190613872565b6000805b600a54811015610baa57600a8181548110610b7957610b796137f0565b90600052602060002090600202016001015482610b9691906138b9565b915080610ba28161381c565b915050610b5c565b50905090565b6005546000906001600160a01b03163314610bdd5760405162461bcd60e51b815260040161061190613872565b600a54600511610c2f5760405162461bcd60e51b815260206004820152601b60248201527f697420616c6c6f7773206d6178203520737461666673206f6e6c7900000000006044820152606401610611565b6005546001600160a01b0384811691161415610c845760405162461bcd60e51b815260206004820152601460248201527337bbb732b91031b0b713ba1031329039ba30b33360611b6044820152606401610611565b6000610c8f846114b4565b5090508015610ce05760405162461bcd60e51b815260206004820152601b60248201527f6974277320616c726561647920616464656420617320737461666600000000006044820152606401610611565b610cea84846122a6565b5050604080518082019091526001600160a01b03938416815260208101928352600a80546001808201835560009290925291517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600290930292830180546001600160a01b031916919096161790945591517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9909201919091555090565b606060008083610d9757600193505b8360011415610daa57600e549150610de8565b6000610db76001866138a2565b610dc190876138d1565b905080600e5411610dd55760009250610de6565b80600e54610de391906138a2565b92505b505b84821015610df95750600d54610e2f565b84600d54610e0791906138b9565b821015610e175750600d54610e2f565b610e2185836138a2565b610e2c9060016138b9565b90505b6000610e3c8360016138b9565b821015610e5b57610e4d82846138a2565b610e589060016138b9565b90505b60008167ffffffffffffffff811115610e7657610e7661326f565b604051908082528060200260200182016040528015610eaf57816020015b610e9c61323c565b815260200190600190039081610e945790505b5090506000845b848110610f8f576000818152600c60209081526040808320548352600b825291829020825160c081018452815481526001820154928101929092526002808201546001600160a01b031693830193909352600381015460608301526004810154608083015260058101549192909160a084019160ff90911690811115610f3e57610f3e613494565b6002811115610f4f57610f4f613494565b81525050838381518110610f6557610f656137f0565b6020908102919091010152610f7b6001836138b9565b915080610f87816138f0565b915050610eb6565b5090979650505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161086d918590610fd39086906138b9565b612f49565b6005546001600160a01b031633146110025760405162461bcd60e51b815260040161061190613872565b6006546005546001600160a01b0316600090815260208190526040902054829161102b916138a2565b10156110795760405162461bcd60e51b815260206004820152601a60248201527f6c6f636b61626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b806006600082825461108b91906138b9565b90915550506006546040519081527f48e75d963556c73a6e61becb72a8ae1da71054b8d95f5cdb152a2bc82b633214906020016108d2565b6005546001600160a01b031633146110ed5760405162461bcd60e51b815260040161061190613872565b620f42408111156111405760405162461bcd60e51b815260206004820152601e60248201527f726174652073686f756c642062652031303030303030206f72206c65737300006044820152606401610611565b60078190556040518181527f44d7f274761b6d6d82edfb8a062c11fa4244bdcced48cd855bd2718e33b9f30e906020016108d2565b6005546001600160a01b0316331461119f5760405162461bcd60e51b815260040161061190613872565b600d8190556040518181527fda3961ad215e4b3a5e8a8d1ebb00465549bd709426acc216c614ccbe82c98237906020016108d2565b6060600080836111e357600193505b83600114156111f6576012549150611234565b60006112036001866138a2565b61120d90876138d1565b905080601254116112215760009250611232565b8060125461122f91906138a2565b92505b505b84821015611245575060115461127b565b8460115461125391906138b9565b821015611263575060115461127b565b61126d85836138a2565b6112789060016138b9565b90505b60006112888360016138b9565b8210156112a75761129982846138a2565b6112a49060016138b9565b90505b60008167ffffffffffffffff8111156112c2576112c261326f565b6040519080825280602002602001820160405280156112fb57816020015b6112e861323c565b8152602001906001900390816112e05790505b5090506000845b848110610f8f576000818152601060209081526040808320548352600f825291829020825160c081018452815481526001820154928101929092526002808201546001600160a01b039081169484019490945260038201546060840152600482015493841660808401529192909160a0840191600160a01b900460ff169081111561138f5761138f613494565b60028111156113a0576113a0613494565b815250508383815181106113b6576113b66137f0565b60209081029190910101526113cc6001836138b9565b9150806113d8816138f0565b915050611302565b6005546060906001600160a01b0316331461140d5760405162461bcd60e51b815260040161061190613872565b600a805480602002602001604051908101604052809291908181526020016000905b82821015611477576000848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161142f565b50505050905090565b6005546000906001600160a01b031633146114ad5760405162461bcd60e51b815260040161061190613872565b5060125490565b60008060008060005b600a5481101561154657856001600160a01b0316600a82815481106114e4576114e46137f0565b60009182526020909120600290910201546001600160a01b031614156115345760019250600a818154811061151b5761151b6137f0565b9060005260206000209060020201600101549150611546565b8061153e8161381c565b9150506114bd565b509094909350915050565b6005546001600160a01b0316331461157b5760405162461bcd60e51b815260040161061190613872565b60118190556040518181527f2f65196dde255155d9bdcd0a07e84fccdb32f3397a732a4f9bf5e4dedeae6cf8906020016108d2565b6000806115bc336114b4565b91509150816115dd5760405162461bcd60e51b8152600401610611906137c0565b85518551811461162f5760405162461bcd60e51b815260206004820152601760248201527f326e6420706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b8451811461167f5760405162461bcd60e51b815260206004820152601760248201527f33726420706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b835181146116cf5760405162461bcd60e51b815260206004820152601760248201527f34746820706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b60006116da336114b4565b9150506000805b838110156117ab57600f60008a83815181106116ff576116ff6137f0565b60200260200101518152602001908152602001600020600001546000146117725760405162461bcd60e51b815260206004820152602160248201527f746865726520697320616e20616c7265616479207265736572766564206461746044820152606160f81b6064820152608401610611565b868181518110611784576117846137f0565b60200260200101518261179791906138b9565b9150806117a38161381c565b9150506116e1565b508082101561180c5760405162461bcd60e51b815260206004820152602760248201527f796f757220756e6c6f636b65645f504f432062616c616e6365206973206e6f74604482015266040cadcdeeaced60cb1b6064820152608401610611565b60005b83811015611a0c5761185388828151811061182c5761182c6137f0565b6020026020010151888381518110611846576118466137f0565b6020026020010151610f9c565b506040518060c001604052808b8381518110611871576118716137f0565b602002602001015181526020018a8381518110611890576118906137f0565b602002602001015181526020018983815181106118af576118af6137f0565b60200260200101516001600160a01b031681526020018883815181106118d7576118d76137f0565b602090810291909101810151825233908201526040016000815250600f60008b8481518110611908576119086137f0565b602090810291909101810151825281810192909252604090810160002083518155918301516001830155820151600280830180546001600160a01b03199081166001600160a01b039485161790915560608501516003850155608085015160048501805492831691909416908117845560a086015193926001600160a81b03199092161790600160a01b9084908111156119a4576119a4613494565b02179055509050506001601260008282546119bf91906138b9565b925050819055508881815181106119d8576119d86137f0565b6020026020010151601060006012548152602001908152602001600020819055508080611a049061381c565b91505061180f565b50604051600181527fa01f4aa78aab843add0b82ba010b6f1e3493b7cca1d7b1cb3ae19292234fde689060200160405180910390a1505050505050505050565b600080611a58336114b4565b9150915081611a795760405162461bcd60e51b8152600401610611906137c0565b600a54600090611a8a9060016138b9565b905060005b600a54811015611b4b57336001600160a01b0316600a8281548110611ab657611ab66137f0565b60009182526020909120600290910201546001600160a01b03161415611b395760055433600090815260208190526040902054611afc916001600160a01b0316906122a6565b50600a8181548110611b1057611b106137f0565b60009182526020822060029091020180546001600160a01b031916815560010155905080611b4b565b80611b438161381c565b915050611a8f565b50600a54611b5a9060016138b9565b8110611b9a57604051600081527ff5d0a37d9d30bca20b539b1c530e0be52db0520c7ee2cc4e7903508bb976318a906020015b60405180910390a1505050565b805b600a54611bab906001906138a2565b811015611c3a57600a611bbf8260016138b9565b81548110611bcf57611bcf6137f0565b9060005260206000209060020201600a8281548110611bf057611bf06137f0565b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b0390921691909117815560019182015491015580611c328161381c565b915050611b9c565b50600a805480611c4c57611c4c613907565b60008281526020812060026000199093019283020180546001600160a01b031916815560019081019190915591556040517ff5d0a37d9d30bca20b539b1c530e0be52db0520c7ee2cc4e7903508bb976318a91611b8d91901515815260200190565b611cb661323c565b6000828152600b6020908152604091829020825160c081018452815481526001820154928101929092526002808201546001600160a01b031693830193909352600381015460608301526004810154608083015260058101549192909160a084019160ff90911690811115611d2d57611d2d613494565b6002811115611d3e57611d3e613494565b90525092915050565b6005546001600160a01b03163314611d715760405162461bcd60e51b815260040161061190613872565b6000611d7c836114b4565b50905080611ddd5760405162461bcd60e51b815260206004820152602860248201527f796f752063616e206164642071756f746120666f722065786973746564207374604482015267616666206f6e6c7960c01b6064820152608401610611565b81611de6610b2b565b600654611df391906138a2565b11611e4b5760405162461bcd60e51b815260206004820152602260248201527f796f752063616e206164642077697468696e20796f7572206c6f636b65645f506044820152614f4360f01b6064820152608401610611565b60005b600a54811015611ef157836001600160a01b0316600a8281548110611e7557611e756137f0565b60009182526020909120600290910201546001600160a01b03161415611edf57611ea033858561306d565b82600a8281548110611eb457611eb46137f0565b90600052602060002090600202016001016000828254611ed491906138b9565b90915550611ef19050565b80611ee98161381c565b915050611e4e565b50604051600181527f58eae0867f682b9ccaa8e5384cf4a6eb8b36e76b52b545732a3e0578534a20fa90602001611b8d565b6005546001600160a01b03163314611f4d5760405162461bcd60e51b815260040161061190613872565b60088190556040518181527fb14b77f1029e53b6e3a961e7d70bd6414dd3557264e1f42b029b4eb03adb8620906020016108d2565b6005546001600160a01b03163314611fac5760405162461bcd60e51b815260040161061190613872565b80611fb5610b2b565b600654611fc291906138a2565b10156120105760405162461bcd60e51b815260206004820152601a60248201527f6c6f636b61626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b806006600082825461202291906138a2565b90915550506006546040519081527f44f6a8537fe7a9f24f6f08f38b81249830a617dccf491f4aad34108abdc21138906020016108d2565b600080612066336114b4565b91509150816120875760405162461bcd60e51b8152600401610611906137c0565b6000612092336114b4565b915050838110156120f15760405162461bcd60e51b8152602060048201526024808201527f796f752063616e206d696e75732077697468696e20796f7572206c6f636b65646044820152635f504f4360e01b6064820152608401610611565b60005b600a548110156121a357336001600160a01b0316600a828154811061211b5761211b6137f0565b60009182526020909120600290910201546001600160a01b0316141561219157600554612151906001600160a01b0316866122a6565b5084600a8281548110612166576121666137f0565b9060005260206000209060020201600101600082825461218691906138a2565b909155506121a39050565b8061219b8161381c565b9150506120f4565b50604051600181527fe9165db35512f504b05e4a5b8876d63af2bd6c103d77c88db580b7ee445804ab906020016107c0565b6060600480546107dd90613837565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122665760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610611565b6122733385858403612f49565b5060019392505050565b600060646127106007548461229291906138d1565b61229c919061391d565b610871919061391d565b6005546000906001600160a01b031633141561234a57816122c5610b2b565b6006546122d291906138a2565b6005546001600160a01b03166000908152602081905260409020546122f791906138a2565b10156123455760405162461bcd60e51b815260206004820152601a60248201527f73656e6461626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b612439565b6000612355336114b4565b50905080156123d1576005546001600160a01b038581169116146123cc5760405162461bcd60e51b815260206004820152602860248201527f73746166662063616e207472616e7366657220504f4320746f20746865206f776044820152676e6572206f6e6c7960c01b6064820152608401610611565b612437565b6123da846114b4565b50905080156124375760405162461bcd60e51b815260206004820152602360248201527f796f752063616e2774207472616e7366657220504f4320746f2074686520737460448201526230b33360e91b6064820152608401610611565b505b61086d33848461306d565b61244c61323c565b6000828152600f6020908152604091829020825160c081018452815481526001820154928101929092526002808201546001600160a01b039081169484019490945260038201546060840152600482015493841660808401529192909160a0840191600160a01b900460ff1690811115611d2d57611d2d613494565b6005546000906001600160a01b031633146124f55760405162461bcd60e51b815260040161061190613872565b5060115490565b600080612508336114b4565b91509150816125295760405162461bcd60e51b8152600401610611906137c0565b825160005b8181101561275b576000600b600087848151811061254e5761254e6137f0565b60200260200101518152602001908152602001600020600001541115612749576000600b6000878481518110612586576125866137f0565b60209081029190910181015182528101919091526040016000206005015460ff1660028111156125b8576125b8613494565b14156127495761266e600b60008784815181106125d7576125d76137f0565b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160a01b0316600b600088858151811061261a5761261a6137f0565b6020026020010151815260200190815260200160002060040154600b600089868151811061264a5761264a6137f0565b602002602001015181526020019081526020016000206003015461051a91906138b9565b50600b6000868381518110612685576126856137f0565b6020026020010151815260200190815260200160002060040154600b60008784815181106126b5576126b56137f0565b60200260200101518152602001908152602001600020600301546126d991906138b9565b600660008282546126ea91906138a2565b925050819055506001600b6000878481518110612709576127096137f0565b6020026020010151815260200190815260200160002060050160006101000a81548160ff0219169083600281111561274357612743613494565b02179055505b806127538161381c565b91505061252e565b50604051600081527fd7583003970f9f71dfeab511948231c6ffa4f48d9f7932a590aec38ae6177333906020016107c0565b805160008167ffffffffffffffff8111156127aa576127aa61326f565b6040519080825280602002602001820160405280156127d3578160200160208202803683370190505b5090506000805b83811015612a3e576000600f60008784815181106127fa576127fa6137f0565b60200260200101518152602001908152602001600020600001541115612a2c57336001600160a01b0316600f600087848151811061283a5761283a6137f0565b6020908102919091018101518252810191909152604001600020600201546001600160a01b03161480156128bb57506000600f6000878481518110612881576128816137f0565b6020026020010151815260200190815260200160002060040160149054906101000a900460ff1660028111156128b9576128b9613494565b145b15612a2c57600061293e600f60008885815181106128db576128db6137f0565b6020026020010151815260200190815260200160002060040160009054906101000a90046001600160a01b031633600f60008a878151811061291f5761291f6137f0565b6020026020010151815260200190815260200160002060030154610911565b90508015612a2a576002600f600088858151811061295e5761295e6137f0565b6020026020010151815260200190815260200160002060040160146101000a81548160ff0219169083600281111561299857612998613494565b0217905550600f60008784815181106129b3576129b36137f0565b6020026020010151815260200190815260200160002060030154600660008282546129de91906138a2565b925050819055508582815181106129f7576129f76137f0565b6020026020010151848481518110612a1157612a116137f0565b6020908102919091010152612a276001846138b9565b92505b505b80612a368161381c565b9150506127da565b507feba106e724c8673573cc3e2f9cde462bd0c481e216d3612114bbe91c89322d44826040516107c0919061393f565b6000612a798261227d565b9050612a8581836138b9565b336000908152602081905260409020541015612ae35760405162461bcd60e51b815260206004820152601a60248201527f796f75722062616c616e6365206973206e6f7420656e6f7567680000000000006044820152606401610611565b600e5460009081905b600d548110612c3c576000818152600c60209081526040808320548352600b9091529020546201518090612b2090426138a2565b1015612c2557612b316001846138b9565b92506008548310612b935760405162461bcd60e51b815260206004820152602660248201527f776520646f6e7427742067657420746865207375626d697420616e796d6f726560448201526520746f64617960d01b6064820152608401610611565b6000818152600c60209081526040808320548352600b9091529020600201546001600160a01b0316331415612c2057612bcd6001836138b9565b91506009548210612c205760405162461bcd60e51b815260206004820152601e60248201527f796f752063616e2774207375626d697420616e796d6f726520746f64617900006044820152606401610611565b612c2a565b612c3c565b80612c34816138f0565b915050612aec565b50600554612c57906001600160a01b031661051a85876138b9565b50612c6283856138b9565b60066000828254612c7391906138b9565b90915550506040805142602080830182905233606081901b6bffffffffffffffffffffffff191684860152845160348186030181526054850180875281519184019190912061011486018752938152607485018481526094860192835260b486018b815260d487018b8152600060f4909801888152878952600b909652979096208251815590516001808301919091559251600280830180546001600160a01b0319166001600160a01b0390931692909217909155955160038201559551600487015591516005860180549496939586959293919260ff191691908490811115612d5f57612d5f613494565b02179055509050506001600e6000828254612d7a91906138b9565b9091555050600e546000908152600c602052604090819020839055517f7fdffe642f86630c1e9315516c2a38f18d477955d6477c35fd3e349f4cc7383b90612dc3908390613771565b60405180910390a1505050505050565b6005546000906001600160a01b03163314612e005760405162461bcd60e51b815260040161061190613872565b5060085490565b600080612e13336114b4565b9150915081612e345760405162461bcd60e51b8152600401610611906137c0565b825160005b81811015612ee3576000600b6000878481518110612e5957612e596137f0565b60200260200101518152602001908152602001600020600001541115612ed1576002600b6000878481518110612e9157612e916137f0565b6020026020010151815260200190815260200160002060050160006101000a81548160ff02191690836002811115612ecb57612ecb613494565b02179055505b80612edb8161381c565b915050612e39565b50604051600181527f67490e0c2c7d7f6351f9af14d680c6804518528cb92a58cfd97d43ad4ecdc098906020016107c0565b6005546000906001600160a01b03163314612f425760405162461bcd60e51b815260040161061190613872565b5060095490565b6001600160a01b038316612fab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610611565b6001600160a01b03821661300c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610611565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610611565b6001600160a01b0382166131335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610611565b6001600160a01b038316600090815260208190526040902054818110156131ab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610611565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906131e29084906138b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161322e91815260200190565b60405180910390a350505050565b6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132ae576132ae61326f565b604052919050565b600067ffffffffffffffff8211156132d0576132d061326f565b5060051b60200190565b600082601f8301126132eb57600080fd5b813560206133006132fb836132b6565b613285565b82815260059290921b8401810191818101908684111561331f57600080fd5b8286015b8481101561333a5780358352918301918301613323565b509695505050505050565b60006020828403121561335757600080fd5b813567ffffffffffffffff81111561336e57600080fd5b61337a848285016132da565b949350505050565b600060208083528351808285015260005b818110156133af57858101830151858201604001528201613393565b818111156133c1576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146133ee57600080fd5b919050565b6000806040838503121561340657600080fd5b61340f836133d7565b946020939093013593505050565b60006020828403121561342f57600080fd5b5035919050565b60008060006060848603121561344b57600080fd5b613454846133d7565b9250613462602085016133d7565b9150604084013590509250925092565b6000806040838503121561348557600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106134c857634e487b7160e01b600052602160045260246000fd5b50565b805182526020810151602083015260018060a01b036040820151166040830152606081015160608301526080810151608083015260a081015161350d816134aa565b8060a0840152505050565b6020808252825182820181905260009190848201906040850190845b8181101561355a576135478385516134cb565b9284019260c09290920191600101613534565b50909695505050505050565b8051825260208101516020830152604081015160018060a01b03808216604085015260608301516060850152806080840151166080850152505060a081015161350d816134aa565b6020808252825182820181905260009190848201906040850190845b8181101561355a576135dd838551613566565b9284019260c092909201916001016135ca565b602080825282518282018190526000919060409081850190868401855b8281101561363b57815180516001600160a01b0316855286015186850152928401929085019060010161360d565b5091979650505050505050565b60006020828403121561365a57600080fd5b613663826133d7565b9392505050565b6000806000806080858703121561368057600080fd5b843567ffffffffffffffff8082111561369857600080fd5b6136a4888389016132da565b95506020915081870135818111156136bb57600080fd5b6136c789828a016132da565b9550506040870135818111156136dc57600080fd5b8701601f810189136136ed57600080fd5b80356136fb6132fb826132b6565b81815260059190911b8201840190848101908b83111561371a57600080fd5b928501925b8284101561373f57613730846133d7565b8252928501929085019061371f565b9650505050606087013591508082111561375857600080fd5b50613765878288016132da565b91505092959194509250565b60c0810161087182846134cb565b60c081016108718284613566565b600080604083850312156137a057600080fd5b6137a9836133d7565b91506137b7602084016133d7565b90509250929050565b6020808252601690820152756f6e6c7920737461666620697320706f737369626c6560501b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561383057613830613806565b5060010190565b600181811c9082168061384b57607f821691505b6020821081141561386c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601690820152756f6e6c79206f776e657220697320706f737369626c6560501b604082015260600190565b6000828210156138b4576138b4613806565b500390565b600082198211156138cc576138cc613806565b500190565b60008160001904831182151516156138eb576138eb613806565b500290565b6000816138ff576138ff613806565b506000190190565b634e487b7160e01b600052603160045260246000fd5b60008261393a57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252825182820181905260009190848201906040850190845b8181101561355a5783518352928401929184019160010161395b56fea26469706673582212204ce2c9c54d399064d2e5bf264f9659cc648d61efb73f98140ac9bec4d77c43c864736f6c634300080a00336f6e6c79206f776e657220697320706f737369626c6500000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000002919bcc5b3665f2fb000000000000000000000000000000e9deafd0bef9832950ae1b06d7490b1fb70c34780000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102735760003560e01c806370a0823111610151578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e1461056d578063e1e40367146105a6578063e2855a29146105b9578063e3c973db146105c1578063e8960f16146105c9578063f3e838ac146105dc57600080fd5b8063a9059cbb1461050c578063ad5c08091461051f578063c23bfa271461053f578063c43af3c814610547578063c81be0c01461055a57600080fd5b806386fb60531161011557806386fb6053146104a55780638ac38e73146104b85780638ec9cfb7146104cb57806395d89b41146104de578063a457c2d7146104e6578063a4710259146104f957600080fd5b806370a082311461042e5780637716b43f1461045757806379f8d6501461046a5780637c716d2d1461047257806386a6bca61461049257600080fd5b806332d2a575116101ea5780633eb0d711116101ae5780633eb0d711146103a15780634254b10a146103b4578063681aa4f5146103d4578063681d06bc146103e95780636da9a52b146103f15780636fc1f7391461041b57600080fd5b806332d2a5751461033557806334780c6e146103485780633950935114610368578063396e407d1461037b5780633a482e491461038e57600080fd5b806320821b651161023c57806320821b65146102f357806323b872dd146102fb578063270ffff01461030e57806327880be3146103165780632d95320f1461031e578063313ce5671461032657600080fd5b8062fd5c521461027857806306fdde031461028d578063095ea7b3146102ab57806314edf8e7146102ce57806318160ddd146102e1575b600080fd5b61028b610286366004613345565b6105e4565b005b6102956107ce565b6040516102a29190613382565b60405180910390f35b6102be6102b93660046133f3565b610860565b60405190151581526020016102a2565b61028b6102dc36600461341d565b610877565b6002545b6040519081526020016102a2565b6102e56108dd565b6102be610309366004613436565b610911565b6102e5610ac3565b6102e5610af7565b6102e5610b2b565b604051601281526020016102a2565b6102be6103433660046133f3565b610bb0565b61035b610356366004613472565b610d88565b6040516102a29190613518565b6102be6103763660046133f3565b610f9c565b61028b61038936600461341d565b610fd8565b61028b61039c36600461341d565b6110c3565b61028b6103af36600461341d565b611175565b6103c76103c2366004613472565b6111d4565b6040516102a291906135ae565b6103dc6113e0565b6040516102a291906135f0565b6102e5611480565b6104046103ff366004613648565b6114b4565b6040805192151583526020830191909152016102a2565b61028b61042936600461341d565b611551565b6102e561043c366004613648565b6001600160a01b031660009081526020819052604090205490565b61028b61046536600461366a565b6115b0565b61028b611a4c565b61048561048036600461341d565b611cae565b6040516102a29190613771565b61028b6104a03660046133f3565b611d47565b61028b6104b336600461341d565b611f23565b61028b6104c636600461341d565b611f82565b61028b6104d936600461341d565b61205a565b6102956121d5565b6102be6104f43660046133f3565b6121e4565b6102e561050736600461341d565b61227d565b6102be61051a3660046133f3565b6122a6565b61053261052d36600461341d565b612444565b6040516102a2919061377f565b6102e56124c8565b61028b610555366004613345565b6124fc565b61028b610568366004613345565b61278d565b6102e561057b36600461378d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61028b6105b436600461341d565b612a6e565b6006546102e5565b6102e5612dd3565b61028b6105d7366004613345565b612e07565b6102e5612f15565b6000806105f0336114b4565b915091508161061a5760405162461bcd60e51b8152600401610611906137c0565b60405180910390fd5b825160005b81811015610792576000600f600087848151811061063f5761063f6137f0565b6020026020010151815260200190815260200160002060000154111561078057336001600160a01b0316600f600087848151811061067f5761067f6137f0565b6020908102919091018101518252810191909152604001600020600401546001600160a01b0316141561078057610727600f60008784815181106106c5576106c56137f0565b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160a01b0316600f6000888581518110610708576107086137f0565b60200260200101518152602001908152602001600020600301546121e4565b506001600f6000878481518110610740576107406137f0565b6020026020010151815260200190815260200160002060040160146101000a81548160ff0219169083600281111561077a5761077a613494565b02179055505b8061078a8161381c565b91505061061f565b50604051600181527f2eea81f920d801abb127ac102eeee5434dcb2f9a8ca059911828951a19a5af8e906020015b60405180910390a150505050565b6060600380546107dd90613837565b80601f016020809104026020016040519081016040528092919081815260200182805461080990613837565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b600061086d338484612f49565b5060015b92915050565b6005546001600160a01b031633146108a15760405162461bcd60e51b815260040161061190613872565b60098190556040518181527ff7d86081f14f866c144a935a2a3230c7b9305eae6f4ca126b8c14e244c09178e906020015b60405180910390a150565b6005546000906001600160a01b0316331461090a5760405162461bcd60e51b815260040161061190613872565b5060075490565b6005546000906001600160a01b03858116911614156109b85781610933610b2b565b60065461094091906138a2565b6005546001600160a01b031660009081526020819052604090205461096591906138a2565b10156109b35760405162461bcd60e51b815260206004820152601a60248201527f73656e6461626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b610a31565b6000806109c4336114b4565b915091508115610a2e5783811015610a2e5760405162461bcd60e51b815260206004820152602760248201527f73746166662063616e207472616e7366657246726f6d20504f432077697468696044820152666e2071756f746160c81b6064820152608401610611565b50505b610a3c84848461306d565b6000610a48853361057b565b905082811015610aab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610611565b610ab88533858403612f49565b506001949350505050565b6005546000906001600160a01b03163314610af05760405162461bcd60e51b815260040161061190613872565b50600d5490565b6005546000906001600160a01b03163314610b245760405162461bcd60e51b815260040161061190613872565b50600e5490565b6005546000906001600160a01b03163314610b585760405162461bcd60e51b815260040161061190613872565b6000805b600a54811015610baa57600a8181548110610b7957610b796137f0565b90600052602060002090600202016001015482610b9691906138b9565b915080610ba28161381c565b915050610b5c565b50905090565b6005546000906001600160a01b03163314610bdd5760405162461bcd60e51b815260040161061190613872565b600a54600511610c2f5760405162461bcd60e51b815260206004820152601b60248201527f697420616c6c6f7773206d6178203520737461666673206f6e6c7900000000006044820152606401610611565b6005546001600160a01b0384811691161415610c845760405162461bcd60e51b815260206004820152601460248201527337bbb732b91031b0b713ba1031329039ba30b33360611b6044820152606401610611565b6000610c8f846114b4565b5090508015610ce05760405162461bcd60e51b815260206004820152601b60248201527f6974277320616c726561647920616464656420617320737461666600000000006044820152606401610611565b610cea84846122a6565b5050604080518082019091526001600160a01b03938416815260208101928352600a80546001808201835560009290925291517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600290930292830180546001600160a01b031916919096161790945591517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9909201919091555090565b606060008083610d9757600193505b8360011415610daa57600e549150610de8565b6000610db76001866138a2565b610dc190876138d1565b905080600e5411610dd55760009250610de6565b80600e54610de391906138a2565b92505b505b84821015610df95750600d54610e2f565b84600d54610e0791906138b9565b821015610e175750600d54610e2f565b610e2185836138a2565b610e2c9060016138b9565b90505b6000610e3c8360016138b9565b821015610e5b57610e4d82846138a2565b610e589060016138b9565b90505b60008167ffffffffffffffff811115610e7657610e7661326f565b604051908082528060200260200182016040528015610eaf57816020015b610e9c61323c565b815260200190600190039081610e945790505b5090506000845b848110610f8f576000818152600c60209081526040808320548352600b825291829020825160c081018452815481526001820154928101929092526002808201546001600160a01b031693830193909352600381015460608301526004810154608083015260058101549192909160a084019160ff90911690811115610f3e57610f3e613494565b6002811115610f4f57610f4f613494565b81525050838381518110610f6557610f656137f0565b6020908102919091010152610f7b6001836138b9565b915080610f87816138f0565b915050610eb6565b5090979650505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161086d918590610fd39086906138b9565b612f49565b6005546001600160a01b031633146110025760405162461bcd60e51b815260040161061190613872565b6006546005546001600160a01b0316600090815260208190526040902054829161102b916138a2565b10156110795760405162461bcd60e51b815260206004820152601a60248201527f6c6f636b61626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b806006600082825461108b91906138b9565b90915550506006546040519081527f48e75d963556c73a6e61becb72a8ae1da71054b8d95f5cdb152a2bc82b633214906020016108d2565b6005546001600160a01b031633146110ed5760405162461bcd60e51b815260040161061190613872565b620f42408111156111405760405162461bcd60e51b815260206004820152601e60248201527f726174652073686f756c642062652031303030303030206f72206c65737300006044820152606401610611565b60078190556040518181527f44d7f274761b6d6d82edfb8a062c11fa4244bdcced48cd855bd2718e33b9f30e906020016108d2565b6005546001600160a01b0316331461119f5760405162461bcd60e51b815260040161061190613872565b600d8190556040518181527fda3961ad215e4b3a5e8a8d1ebb00465549bd709426acc216c614ccbe82c98237906020016108d2565b6060600080836111e357600193505b83600114156111f6576012549150611234565b60006112036001866138a2565b61120d90876138d1565b905080601254116112215760009250611232565b8060125461122f91906138a2565b92505b505b84821015611245575060115461127b565b8460115461125391906138b9565b821015611263575060115461127b565b61126d85836138a2565b6112789060016138b9565b90505b60006112888360016138b9565b8210156112a75761129982846138a2565b6112a49060016138b9565b90505b60008167ffffffffffffffff8111156112c2576112c261326f565b6040519080825280602002602001820160405280156112fb57816020015b6112e861323c565b8152602001906001900390816112e05790505b5090506000845b848110610f8f576000818152601060209081526040808320548352600f825291829020825160c081018452815481526001820154928101929092526002808201546001600160a01b039081169484019490945260038201546060840152600482015493841660808401529192909160a0840191600160a01b900460ff169081111561138f5761138f613494565b60028111156113a0576113a0613494565b815250508383815181106113b6576113b66137f0565b60209081029190910101526113cc6001836138b9565b9150806113d8816138f0565b915050611302565b6005546060906001600160a01b0316331461140d5760405162461bcd60e51b815260040161061190613872565b600a805480602002602001604051908101604052809291908181526020016000905b82821015611477576000848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161142f565b50505050905090565b6005546000906001600160a01b031633146114ad5760405162461bcd60e51b815260040161061190613872565b5060125490565b60008060008060005b600a5481101561154657856001600160a01b0316600a82815481106114e4576114e46137f0565b60009182526020909120600290910201546001600160a01b031614156115345760019250600a818154811061151b5761151b6137f0565b9060005260206000209060020201600101549150611546565b8061153e8161381c565b9150506114bd565b509094909350915050565b6005546001600160a01b0316331461157b5760405162461bcd60e51b815260040161061190613872565b60118190556040518181527f2f65196dde255155d9bdcd0a07e84fccdb32f3397a732a4f9bf5e4dedeae6cf8906020016108d2565b6000806115bc336114b4565b91509150816115dd5760405162461bcd60e51b8152600401610611906137c0565b85518551811461162f5760405162461bcd60e51b815260206004820152601760248201527f326e6420706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b8451811461167f5760405162461bcd60e51b815260206004820152601760248201527f33726420706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b835181146116cf5760405162461bcd60e51b815260206004820152601760248201527f34746820706172616d65746572206973206d69737365640000000000000000006044820152606401610611565b60006116da336114b4565b9150506000805b838110156117ab57600f60008a83815181106116ff576116ff6137f0565b60200260200101518152602001908152602001600020600001546000146117725760405162461bcd60e51b815260206004820152602160248201527f746865726520697320616e20616c7265616479207265736572766564206461746044820152606160f81b6064820152608401610611565b868181518110611784576117846137f0565b60200260200101518261179791906138b9565b9150806117a38161381c565b9150506116e1565b508082101561180c5760405162461bcd60e51b815260206004820152602760248201527f796f757220756e6c6f636b65645f504f432062616c616e6365206973206e6f74604482015266040cadcdeeaced60cb1b6064820152608401610611565b60005b83811015611a0c5761185388828151811061182c5761182c6137f0565b6020026020010151888381518110611846576118466137f0565b6020026020010151610f9c565b506040518060c001604052808b8381518110611871576118716137f0565b602002602001015181526020018a8381518110611890576118906137f0565b602002602001015181526020018983815181106118af576118af6137f0565b60200260200101516001600160a01b031681526020018883815181106118d7576118d76137f0565b602090810291909101810151825233908201526040016000815250600f60008b8481518110611908576119086137f0565b602090810291909101810151825281810192909252604090810160002083518155918301516001830155820151600280830180546001600160a01b03199081166001600160a01b039485161790915560608501516003850155608085015160048501805492831691909416908117845560a086015193926001600160a81b03199092161790600160a01b9084908111156119a4576119a4613494565b02179055509050506001601260008282546119bf91906138b9565b925050819055508881815181106119d8576119d86137f0565b6020026020010151601060006012548152602001908152602001600020819055508080611a049061381c565b91505061180f565b50604051600181527fa01f4aa78aab843add0b82ba010b6f1e3493b7cca1d7b1cb3ae19292234fde689060200160405180910390a1505050505050505050565b600080611a58336114b4565b9150915081611a795760405162461bcd60e51b8152600401610611906137c0565b600a54600090611a8a9060016138b9565b905060005b600a54811015611b4b57336001600160a01b0316600a8281548110611ab657611ab66137f0565b60009182526020909120600290910201546001600160a01b03161415611b395760055433600090815260208190526040902054611afc916001600160a01b0316906122a6565b50600a8181548110611b1057611b106137f0565b60009182526020822060029091020180546001600160a01b031916815560010155905080611b4b565b80611b438161381c565b915050611a8f565b50600a54611b5a9060016138b9565b8110611b9a57604051600081527ff5d0a37d9d30bca20b539b1c530e0be52db0520c7ee2cc4e7903508bb976318a906020015b60405180910390a1505050565b805b600a54611bab906001906138a2565b811015611c3a57600a611bbf8260016138b9565b81548110611bcf57611bcf6137f0565b9060005260206000209060020201600a8281548110611bf057611bf06137f0565b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b0390921691909117815560019182015491015580611c328161381c565b915050611b9c565b50600a805480611c4c57611c4c613907565b60008281526020812060026000199093019283020180546001600160a01b031916815560019081019190915591556040517ff5d0a37d9d30bca20b539b1c530e0be52db0520c7ee2cc4e7903508bb976318a91611b8d91901515815260200190565b611cb661323c565b6000828152600b6020908152604091829020825160c081018452815481526001820154928101929092526002808201546001600160a01b031693830193909352600381015460608301526004810154608083015260058101549192909160a084019160ff90911690811115611d2d57611d2d613494565b6002811115611d3e57611d3e613494565b90525092915050565b6005546001600160a01b03163314611d715760405162461bcd60e51b815260040161061190613872565b6000611d7c836114b4565b50905080611ddd5760405162461bcd60e51b815260206004820152602860248201527f796f752063616e206164642071756f746120666f722065786973746564207374604482015267616666206f6e6c7960c01b6064820152608401610611565b81611de6610b2b565b600654611df391906138a2565b11611e4b5760405162461bcd60e51b815260206004820152602260248201527f796f752063616e206164642077697468696e20796f7572206c6f636b65645f506044820152614f4360f01b6064820152608401610611565b60005b600a54811015611ef157836001600160a01b0316600a8281548110611e7557611e756137f0565b60009182526020909120600290910201546001600160a01b03161415611edf57611ea033858561306d565b82600a8281548110611eb457611eb46137f0565b90600052602060002090600202016001016000828254611ed491906138b9565b90915550611ef19050565b80611ee98161381c565b915050611e4e565b50604051600181527f58eae0867f682b9ccaa8e5384cf4a6eb8b36e76b52b545732a3e0578534a20fa90602001611b8d565b6005546001600160a01b03163314611f4d5760405162461bcd60e51b815260040161061190613872565b60088190556040518181527fb14b77f1029e53b6e3a961e7d70bd6414dd3557264e1f42b029b4eb03adb8620906020016108d2565b6005546001600160a01b03163314611fac5760405162461bcd60e51b815260040161061190613872565b80611fb5610b2b565b600654611fc291906138a2565b10156120105760405162461bcd60e51b815260206004820152601a60248201527f6c6f636b61626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b806006600082825461202291906138a2565b90915550506006546040519081527f44f6a8537fe7a9f24f6f08f38b81249830a617dccf491f4aad34108abdc21138906020016108d2565b600080612066336114b4565b91509150816120875760405162461bcd60e51b8152600401610611906137c0565b6000612092336114b4565b915050838110156120f15760405162461bcd60e51b8152602060048201526024808201527f796f752063616e206d696e75732077697468696e20796f7572206c6f636b65646044820152635f504f4360e01b6064820152608401610611565b60005b600a548110156121a357336001600160a01b0316600a828154811061211b5761211b6137f0565b60009182526020909120600290910201546001600160a01b0316141561219157600554612151906001600160a01b0316866122a6565b5084600a8281548110612166576121666137f0565b9060005260206000209060020201600101600082825461218691906138a2565b909155506121a39050565b8061219b8161381c565b9150506120f4565b50604051600181527fe9165db35512f504b05e4a5b8876d63af2bd6c103d77c88db580b7ee445804ab906020016107c0565b6060600480546107dd90613837565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122665760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610611565b6122733385858403612f49565b5060019392505050565b600060646127106007548461229291906138d1565b61229c919061391d565b610871919061391d565b6005546000906001600160a01b031633141561234a57816122c5610b2b565b6006546122d291906138a2565b6005546001600160a01b03166000908152602081905260409020546122f791906138a2565b10156123455760405162461bcd60e51b815260206004820152601a60248201527f73656e6461626c6520504f43206973206e6f7420656e6f7567680000000000006044820152606401610611565b612439565b6000612355336114b4565b50905080156123d1576005546001600160a01b038581169116146123cc5760405162461bcd60e51b815260206004820152602860248201527f73746166662063616e207472616e7366657220504f4320746f20746865206f776044820152676e6572206f6e6c7960c01b6064820152608401610611565b612437565b6123da846114b4565b50905080156124375760405162461bcd60e51b815260206004820152602360248201527f796f752063616e2774207472616e7366657220504f4320746f2074686520737460448201526230b33360e91b6064820152608401610611565b505b61086d33848461306d565b61244c61323c565b6000828152600f6020908152604091829020825160c081018452815481526001820154928101929092526002808201546001600160a01b039081169484019490945260038201546060840152600482015493841660808401529192909160a0840191600160a01b900460ff1690811115611d2d57611d2d613494565b6005546000906001600160a01b031633146124f55760405162461bcd60e51b815260040161061190613872565b5060115490565b600080612508336114b4565b91509150816125295760405162461bcd60e51b8152600401610611906137c0565b825160005b8181101561275b576000600b600087848151811061254e5761254e6137f0565b60200260200101518152602001908152602001600020600001541115612749576000600b6000878481518110612586576125866137f0565b60209081029190910181015182528101919091526040016000206005015460ff1660028111156125b8576125b8613494565b14156127495761266e600b60008784815181106125d7576125d76137f0565b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160a01b0316600b600088858151811061261a5761261a6137f0565b6020026020010151815260200190815260200160002060040154600b600089868151811061264a5761264a6137f0565b602002602001015181526020019081526020016000206003015461051a91906138b9565b50600b6000868381518110612685576126856137f0565b6020026020010151815260200190815260200160002060040154600b60008784815181106126b5576126b56137f0565b60200260200101518152602001908152602001600020600301546126d991906138b9565b600660008282546126ea91906138a2565b925050819055506001600b6000878481518110612709576127096137f0565b6020026020010151815260200190815260200160002060050160006101000a81548160ff0219169083600281111561274357612743613494565b02179055505b806127538161381c565b91505061252e565b50604051600081527fd7583003970f9f71dfeab511948231c6ffa4f48d9f7932a590aec38ae6177333906020016107c0565b805160008167ffffffffffffffff8111156127aa576127aa61326f565b6040519080825280602002602001820160405280156127d3578160200160208202803683370190505b5090506000805b83811015612a3e576000600f60008784815181106127fa576127fa6137f0565b60200260200101518152602001908152602001600020600001541115612a2c57336001600160a01b0316600f600087848151811061283a5761283a6137f0565b6020908102919091018101518252810191909152604001600020600201546001600160a01b03161480156128bb57506000600f6000878481518110612881576128816137f0565b6020026020010151815260200190815260200160002060040160149054906101000a900460ff1660028111156128b9576128b9613494565b145b15612a2c57600061293e600f60008885815181106128db576128db6137f0565b6020026020010151815260200190815260200160002060040160009054906101000a90046001600160a01b031633600f60008a878151811061291f5761291f6137f0565b6020026020010151815260200190815260200160002060030154610911565b90508015612a2a576002600f600088858151811061295e5761295e6137f0565b6020026020010151815260200190815260200160002060040160146101000a81548160ff0219169083600281111561299857612998613494565b0217905550600f60008784815181106129b3576129b36137f0565b6020026020010151815260200190815260200160002060030154600660008282546129de91906138a2565b925050819055508582815181106129f7576129f76137f0565b6020026020010151848481518110612a1157612a116137f0565b6020908102919091010152612a276001846138b9565b92505b505b80612a368161381c565b9150506127da565b507feba106e724c8673573cc3e2f9cde462bd0c481e216d3612114bbe91c89322d44826040516107c0919061393f565b6000612a798261227d565b9050612a8581836138b9565b336000908152602081905260409020541015612ae35760405162461bcd60e51b815260206004820152601a60248201527f796f75722062616c616e6365206973206e6f7420656e6f7567680000000000006044820152606401610611565b600e5460009081905b600d548110612c3c576000818152600c60209081526040808320548352600b9091529020546201518090612b2090426138a2565b1015612c2557612b316001846138b9565b92506008548310612b935760405162461bcd60e51b815260206004820152602660248201527f776520646f6e7427742067657420746865207375626d697420616e796d6f726560448201526520746f64617960d01b6064820152608401610611565b6000818152600c60209081526040808320548352600b9091529020600201546001600160a01b0316331415612c2057612bcd6001836138b9565b91506009548210612c205760405162461bcd60e51b815260206004820152601e60248201527f796f752063616e2774207375626d697420616e796d6f726520746f64617900006044820152606401610611565b612c2a565b612c3c565b80612c34816138f0565b915050612aec565b50600554612c57906001600160a01b031661051a85876138b9565b50612c6283856138b9565b60066000828254612c7391906138b9565b90915550506040805142602080830182905233606081901b6bffffffffffffffffffffffff191684860152845160348186030181526054850180875281519184019190912061011486018752938152607485018481526094860192835260b486018b815260d487018b8152600060f4909801888152878952600b909652979096208251815590516001808301919091559251600280830180546001600160a01b0319166001600160a01b0390931692909217909155955160038201559551600487015591516005860180549496939586959293919260ff191691908490811115612d5f57612d5f613494565b02179055509050506001600e6000828254612d7a91906138b9565b9091555050600e546000908152600c602052604090819020839055517f7fdffe642f86630c1e9315516c2a38f18d477955d6477c35fd3e349f4cc7383b90612dc3908390613771565b60405180910390a1505050505050565b6005546000906001600160a01b03163314612e005760405162461bcd60e51b815260040161061190613872565b5060085490565b600080612e13336114b4565b9150915081612e345760405162461bcd60e51b8152600401610611906137c0565b825160005b81811015612ee3576000600b6000878481518110612e5957612e596137f0565b60200260200101518152602001908152602001600020600001541115612ed1576002600b6000878481518110612e9157612e916137f0565b6020026020010151815260200190815260200160002060050160006101000a81548160ff02191690836002811115612ecb57612ecb613494565b02179055505b80612edb8161381c565b915050612e39565b50604051600181527f67490e0c2c7d7f6351f9af14d680c6804518528cb92a58cfd97d43ad4ecdc098906020016107c0565b6005546000906001600160a01b03163314612f425760405162461bcd60e51b815260040161061190613872565b5060095490565b6001600160a01b038316612fab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610611565b6001600160a01b03821661300c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610611565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610611565b6001600160a01b0382166131335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610611565b6001600160a01b038316600090815260208190526040902054818110156131ab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610611565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906131e29084906138b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161322e91815260200190565b60405180910390a350505050565b6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132ae576132ae61326f565b604052919050565b600067ffffffffffffffff8211156132d0576132d061326f565b5060051b60200190565b600082601f8301126132eb57600080fd5b813560206133006132fb836132b6565b613285565b82815260059290921b8401810191818101908684111561331f57600080fd5b8286015b8481101561333a5780358352918301918301613323565b509695505050505050565b60006020828403121561335757600080fd5b813567ffffffffffffffff81111561336e57600080fd5b61337a848285016132da565b949350505050565b600060208083528351808285015260005b818110156133af57858101830151858201604001528201613393565b818111156133c1576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146133ee57600080fd5b919050565b6000806040838503121561340657600080fd5b61340f836133d7565b946020939093013593505050565b60006020828403121561342f57600080fd5b5035919050565b60008060006060848603121561344b57600080fd5b613454846133d7565b9250613462602085016133d7565b9150604084013590509250925092565b6000806040838503121561348557600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106134c857634e487b7160e01b600052602160045260246000fd5b50565b805182526020810151602083015260018060a01b036040820151166040830152606081015160608301526080810151608083015260a081015161350d816134aa565b8060a0840152505050565b6020808252825182820181905260009190848201906040850190845b8181101561355a576135478385516134cb565b9284019260c09290920191600101613534565b50909695505050505050565b8051825260208101516020830152604081015160018060a01b03808216604085015260608301516060850152806080840151166080850152505060a081015161350d816134aa565b6020808252825182820181905260009190848201906040850190845b8181101561355a576135dd838551613566565b9284019260c092909201916001016135ca565b602080825282518282018190526000919060409081850190868401855b8281101561363b57815180516001600160a01b0316855286015186850152928401929085019060010161360d565b5091979650505050505050565b60006020828403121561365a57600080fd5b613663826133d7565b9392505050565b6000806000806080858703121561368057600080fd5b843567ffffffffffffffff8082111561369857600080fd5b6136a4888389016132da565b95506020915081870135818111156136bb57600080fd5b6136c789828a016132da565b9550506040870135818111156136dc57600080fd5b8701601f810189136136ed57600080fd5b80356136fb6132fb826132b6565b81815260059190911b8201840190848101908b83111561371a57600080fd5b928501925b8284101561373f57613730846133d7565b8252928501929085019061371f565b9650505050606087013591508082111561375857600080fd5b50613765878288016132da565b91505092959194509250565b60c0810161087182846134cb565b60c081016108718284613566565b600080604083850312156137a057600080fd5b6137a9836133d7565b91506137b7602084016133d7565b90509250929050565b6020808252601690820152756f6e6c7920737461666620697320706f737369626c6560501b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561383057613830613806565b5060010190565b600181811c9082168061384b57607f821691505b6020821081141561386c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601690820152756f6e6c79206f776e657220697320706f737369626c6560501b604082015260600190565b6000828210156138b4576138b4613806565b500390565b600082198211156138cc576138cc613806565b500190565b60008160001904831182151516156138eb576138eb613806565b500290565b6000816138ff576138ff613806565b506000190190565b634e487b7160e01b600052603160045260246000fd5b60008261393a57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252825182820181905260009190848201906040850190845b8181101561355a5783518352928401929184019160010161395b56fea26469706673582212204ce2c9c54d399064d2e5bf264f9659cc648d61efb73f98140ac9bec4d77c43c864736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000002919bcc5b3665f2fb000000000000000000000000000000e9deafd0bef9832950ae1b06d7490b1fb70c34780000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : fee_rate (uint256): 10000
Arg [1] : locking_POC (uint256): 795000000000000000000000000
Arg [2] : new_staff (address): 0xe9DeaFD0BeF9832950aE1b06d7490B1fB70c3478
Arg [3] : new_staff_locked_POC (uint256): 500000000000000000000000
Arg [4] : new_submit_daily_limit_total (uint256): 100
Arg [5] : new_submit_daily_limit_personal (uint256): 1
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [1] : 000000000000000000000000000000000000000002919bcc5b3665f2fb000000
Arg [2] : 000000000000000000000000e9deafd0bef9832950ae1b06d7490b1fb70c3478
Arg [3] : 0000000000000000000000000000000000000000000069e10de76676d0800000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
16500:18496:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34472:520;;;;;;:::i;:::-;;:::i;:::-;;6471:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8638:169;;;;;;:::i;:::-;;:::i;:::-;;;2838:14:1;;2831:22;2813:41;;2801:2;2786:18;8638:169:0;2673:187:1;24876:254:0;;;;;;:::i;:::-;;:::i;7591:108::-;7679:12;;7591:108;;;3196:25:1;;;3184:2;3169:18;7591:108:0;3050:177:1;22916:96:0;;;:::i;19208:769::-;;;;;;:::i;:::-;;:::i;25278:130::-;;;:::i;25140:128::-;;;:::i;22689:213::-;;;:::i;7433:93::-;;;7516:2;3707:36:1;;3695:2;3680:18;7433:93:0;3565:184:1;20108:471:0;;;;;;:::i;:::-;;:::i;27870:1629::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10190:215::-;;;;;;:::i;:::-;;:::i;23587:255::-;;;;;;:::i;:::-;;:::i;23066:215::-;;;;;;:::i;:::-;;:::i;25497:245::-;;;;;;:::i;:::-;;:::i;31870:1684::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19993:107::-;;;:::i;:::-;;;;;;;:::i;25750:132::-;;;:::i;21236:345::-;;;;;;:::i;:::-;;:::i;:::-;;;;8088:14:1;;8081:22;8063:41;;8135:2;8120:18;;8113:34;;;;8036:18;21236:345:0;7895:258:1;26112:257:0;;;;;;:::i;:::-;;:::i;7762:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7863:18:0;7836:7;7863:18;;;;;;;;;;;;7762:127;30669:1055;;;;;;:::i;:::-;;:::i;20627:600::-;;;:::i;27737:123::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21632:554::-;;;;;;:::i;:::-;;:::i;24406:236::-;;;;;;:::i;:::-;;:::i;23914:261::-;;;;;;:::i;:::-;;:::i;22239:442::-;;;;;;:::i;:::-;;:::i;6690:104::-;;;:::i;10908:413::-;;;;;;:::i;:::-;;:::i;23289:115::-;;;;;;:::i;:::-;;:::i;18551:649::-;;;;;;:::i;:::-;;:::i;31732:128::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25890:134::-;;;:::i;29965:646::-;;;;;;:::i;:::-;;:::i;33607:808::-;;;;;;:::i;:::-;;:::i;8340:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8456:18:0;;;8429:7;8456:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8340:151;26429:1298;;;;;;:::i;:::-;;:::i;23420:97::-;23494:17;;23420:97;;24192:128;;;:::i;29556:354::-;;;;;;:::i;:::-;;:::i;24650:134::-;;;:::i;34472:520::-;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;;;;;;;;;34568:13;;34554:11:::1;34588:356;34608:3;34606:1;:5;34588:356;;;34672:1;34631:18;:29;34650:6;34657:1;34650:9;;;;;;;;:::i;:::-;;;;;;;34631:29;;;;;;;;;;;:38;;;:42;34627:310;;;34729:10;-1:-1:-1::0;;;;;34690:49:0::1;:18;:29;34709:6;34716:1;34709:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;34690:29;;;::::1;::::0;;;;;;-1:-1:-1;34690:29:0;:35:::1;;::::0;-1:-1:-1;;;;;34690:35:0::1;:49;34686:242;;;34754:91;34772:18;:29;34791:6;34798:1;34791:9;;;;;;;;:::i;:::-;;;;;;;34772:29;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1::0;;;;;34772:34:0::1;34808:18;:29;34827:6;34834:1;34827:9;;;;;;;;:::i;:::-;;;;;;;34808:29;;;;;;;;;;;:36;;;34754:17;:91::i;:::-;;34896:20;34858:18;:29;34877:6;34884:1;34877:9;;;;;;;;:::i;:::-;;;;;;;34858:29;;;;;;;;;;;:35;;;:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;34686:242;34613:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34588:356;;;-1:-1:-1::0;34955:31:0::1;::::0;34981:4:::1;2813:41:1::0;;34955:31:0::1;::::0;2801:2:1;2786:18;34955:31:0::1;;;;;;;;34547:445;18410:127:::0;;34472:520;:::o;6471:100::-;6525:13;6558:5;6551:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6471:100;:::o;8638:169::-;8721:4;8738:39;746:10;8761:7;8770:6;8738:8;:39::i;:::-;-1:-1:-1;8795:4:0;8638:169;;;;;:::o;24876:254::-;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;24985:28:::1;:62:::0;;;25059:65:::1;::::0;3196:25:1;;;25059:65:0::1;::::0;3184:2:1;3169:18;25059:65:0::1;;;;;;;;24876:254:::0;:::o;22916:96::-;18338:6;;22974:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;22997:9:0::1;::::0;22916:96;:::o;19208:769::-;19341:6;;19314:4;;-1:-1:-1;;;;;19331:16:0;;;19341:6;;19331:16;19327:343;;;19431:6;19407:19;:17;:19::i;:::-;19387:17;;:39;;;;:::i;:::-;19376:6;;-1:-1:-1;;;;;19376:6:0;7836:7;7863:18;;;;;;;;;;;19366:61;;;;:::i;:::-;:71;;19358:110;;;;-1:-1:-1;;;19358:110:0;;12554:2:1;19358:110:0;;;12536:21:1;12593:2;12573:18;;;12566:30;12632:28;12612:18;;;12605:56;12678:18;;19358:110:0;12352:350:1;19358:110:0;19327:343;;;19497:13;19512;19529:23;19541:10;19529:11;:23::i;:::-;19496:56;;;;19565:8;19561:102;;;19603:6;19594:5;:15;;19586:67;;;;-1:-1:-1;;;19586:67:0;;12909:2:1;19586:67:0;;;12891:21:1;12948:2;12928:18;;;12921:30;12987:34;12967:18;;;12960:62;-1:-1:-1;;;13038:18:1;;;13031:37;13085:19;;19586:67:0;12707:403:1;19586:67:0;19487:183;;19327:343;19676:36;19686:6;19694:9;19705:6;19676:9;:36::i;:::-;19719:24;19746:31;19756:6;746:10;8340:151;:::i;19746:31::-;19719:58;;19812:6;19792:16;:26;;19784:79;;;;-1:-1:-1;;;19784:79:0;;13317:2:1;19784:79:0;;;13299:21:1;13356:2;13336:18;;;13329:30;13395:34;13375:18;;;13368:62;-1:-1:-1;;;13446:18:1;;;13439:38;13494:19;;19784:79:0;13115:404:1;19784:79:0;19889:57;19898:6;746:10;19939:6;19920:16;:25;19889:8;:57::i;:::-;-1:-1:-1;19967:4:0;;19208:769;-1:-1:-1;;;;19208:769:0:o;25278:130::-;18338:6;;25353:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;25376:26:0::1;::::0;25278:130;:::o;25140:128::-;18338:6;;25214:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;25237:25:0::1;::::0;25140:128;:::o;22689:213::-;18338:6;;22749:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;22765:13:::1;22794:9:::0;22789:89:::1;22809:9;:16:::0;22807:18;::::1;22789:89;;;22850:9;22860:1;22850:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;22841:27;;;;;:::i;:::-;::::0;-1:-1:-1;22827:3:0;::::1;::::0;::::1;:::i;:::-;;;;22789:89;;;-1:-1:-1::0;22891:5:0;-1:-1:-1;22689:213:0;:::o;20108:471::-;18338:6;;20202:4;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;20223:9:::1;:16:::0;20242:1:::1;-1:-1:-1::0;20215:60:0::1;;;::::0;-1:-1:-1;;;20215:60:0;;13859:2:1;20215:60:0::1;::::0;::::1;13841:21:1::0;13898:2;13878:18;;;13871:30;13937:29;13917:18;;;13910:57;13984:18;;20215:60:0::1;13657:351:1::0;20215:60:0::1;20303:6;::::0;-1:-1:-1;;;;;20290:19:0;;::::1;20303:6:::0;::::1;20290:19;;20282:52;;;::::0;-1:-1:-1;;;20282:52:0;;14215:2:1;20282:52:0::1;::::0;::::1;14197:21:1::0;14254:2;14234:18;;;14227:30;-1:-1:-1;;;14273:18:1;;;14266:50;14333:18;;20282:52:0::1;14013:344:1::0;20282:52:0::1;20342:13;20361:22;20373:9;20361:11;:22::i;:::-;20341:42;;;20399:8;20398:9;20390:49;;;::::0;-1:-1:-1;;;20390:49:0;;14564:2:1;20390:49:0::1;::::0;::::1;14546:21:1::0;14603:2;14583:18;;;14576:30;14642:29;14622:18;;;14615:57;14689:18;;20390:49:0::1;14362:351:1::0;20390:49:0::1;20446:41;20455:9;20466:20;20446:8;:41::i;:::-;-1:-1:-1::0;;20509:45:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;20509:45:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;20494:9:::1;:61:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;20494:61:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;20494:61:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;-1:-1:-1;20494:61:0;20108:471::o;27870:1629::-;27966:19;27994:37;;28087:17;28083:57;;28131:1;28116:16;;28083:57;28150:12;28166:1;28150:17;28146:403;;;28210:25;;28178:57;;28146:403;;;28268:20;28309:16;28324:1;28309:12;:16;:::i;:::-;28291:35;;:14;:35;:::i;:::-;28268:58;;28368:12;28339:25;;:41;28335:207;;28425:1;28393:33;;28335:207;;;28520:12;28492:25;;:40;;;;:::i;:::-;28460:72;;28335:207;28259:290;28146:403;28591:14;28559:29;:46;28555:437;;;-1:-1:-1;28649:26:0;;28555:437;;;28770:14;28741:26;;:43;;;;:::i;:::-;28708:29;:77;28703:282;;;-1:-1:-1;28832:26:0;;28703:282;;;28925:46;28957:14;28925:29;:46;:::i;:::-;:50;;28974:1;28925:50;:::i;:::-;28892:83;;28703:282;28998:17;29064:33;:29;29096:1;29064:33;:::i;:::-;29030:30;:68;29026:170;;;29122:62;29154:30;29122:29;:62;:::i;:::-;:66;;29187:1;29122:66;:::i;:::-;29110:78;;29026:170;29202:28;29250:9;29233:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;29202:58:0;-1:-1:-1;29267:13:0;29306:29;29291:181;29340:30;29337:1;:33;29291:181;;29404:41;29421:23;;;:20;:23;;;;;;;;;29404:41;;:16;:41;;;;;;29386:59;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29386:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29404:41;;29386:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;:8;29395:5;29386:15;;;;;;;;:::i;:::-;;;;;;;;;;:59;29454:10;29463:1;29454:10;;:::i;:::-;;-1:-1:-1;29372:3:0;;;;:::i;:::-;;;;29291:181;;;-1:-1:-1;29485:8:0;;27870:1629;-1:-1:-1;;;;;;;27870:1629:0:o;10190:215::-;746:10;10278:4;10327:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10327:34:0;;;;;;;;;;10278:4;;10295:80;;10318:7;;10327:47;;10364:10;;10327:47;:::i;:::-;10295:8;:80::i;23587:255::-;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;23688:17:::1;::::0;23678:6:::1;::::0;-1:-1:-1;;;;;23678:6:0::1;7836:7:::0;7863:18;;;;;;;;;;;23710:6;;23668:37:::1;::::0;::::1;:::i;:::-;23667:49;;23659:88;;;::::0;-1:-1:-1;;;23659:88:0;;15234:2:1;23659:88:0::1;::::0;::::1;15216:21:1::0;15273:2;15253:18;;;15246:30;15312:28;15292:18;;;15285:56;15358:18;;23659:88:0::1;15032:350:1::0;23659:88:0::1;23775:6;23754:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23818:17:0::1;::::0;23793:43:::1;::::0;3196:25:1;;;23793:43:0::1;::::0;3184:2:1;3169:18;23793:43:0::1;3050:177:1::0;23066:215:0;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;23159:11:::1;23143:12;:27;;23135:70;;;::::0;-1:-1:-1;;;23135:70:0;;15589:2:1;23135:70:0::1;::::0;::::1;15571:21:1::0;15628:2;15608:18;;;15601:30;15667:32;15647:18;;;15640:60;15717:18;;23135:70:0::1;15387:354:1::0;23135:70:0::1;23212:9;:24:::0;;;23248:27:::1;::::0;3196:25:1;;;23248:27:0::1;::::0;3184:2:1;3169:18;23248:27:0::1;3050:177:1::0;25497:245:0;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;25603:26:::1;:59:::0;;;25674:62:::1;::::0;3196:25:1;;;25674:62:0::1;::::0;3184:2:1;3169:18;25674:62:0::1;3050:177:1::0;31870:1684:0;31968:20;31997:39;;32094:17;32090:57;;32138:1;32123:16;;32090:57;32157:12;32173:1;32157:17;32153:415;;;32219:27;;32185:61;;32153:415;;;32279:20;32320:16;32335:1;32320:12;:16;:::i;:::-;32302:35;;:14;:35;:::i;:::-;32279:58;;32381:12;32350:27;;:43;32346:215;;32440:1;32406:35;;32346:215;;;32539:12;32509:27;;:42;;;;:::i;:::-;32475:76;;32346:215;32270:298;32153:415;32612:14;32578:31;:48;32574:455;;;-1:-1:-1;32672:28:0;;32574:455;;;32799:14;32768:28;;:45;;;;:::i;:::-;32733:31;:81;32728:294;;;-1:-1:-1;32863:28:0;;32728:294;;;32960:48;32994:14;32960:31;:48;:::i;:::-;:52;;33011:1;32960:52;:::i;:::-;32925:87;;32728:294;33035:17;33103:35;:31;33137:1;33103:35;:::i;:::-;33067:32;:72;33063:178;;;33163:66;33197:32;33163:31;:66;:::i;:::-;:70;;33232:1;33163:70;:::i;:::-;33151:82;;33063:178;33247:29;33297:9;33279:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;33247:60:0;-1:-1:-1;33314:13:0;33353:31;33338:189;33389:32;33386:1;:35;33338:189;;33455:45;33474:25;;;:22;:25;;;;;;;;;33455:45;;:18;:45;;;;;;33437:63;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33437:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33455:45;;33437:63;;;;-1:-1:-1;;;33437:63:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;:8;33446:5;33437:15;;;;;;;;:::i;:::-;;;;;;;;;;:63;33509:10;33518:1;33509:10;;:::i;:::-;;-1:-1:-1;33423:3:0;;;;:::i;:::-;;;;33338:189;;19993:107;18338:6;;20048:21;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;20085:9:::1;20078:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;20078:16:0::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;19993:107:::0;:::o;25750:132::-;18338:6;;25826:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;25849:27:0::1;::::0;25750:132;:::o;21236:345::-;21292:4;21298:7;21314:13;21342;21371:9;21366:179;21386:9;:16;21384:18;;21366:179;;;21443:4;-1:-1:-1;;;;;21422:25:0;:9;21432:1;21422:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;21422:17:0;:25;21418:120;;;21471:4;21460:15;;21494:9;21504:1;21494:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;21486:26;;21523:5;;21418:120;21404:3;;;;:::i;:::-;;;;21366:179;;;-1:-1:-1;21559:8:0;;21569:5;;-1:-1:-1;21236:345:0;-1:-1:-1;;21236:345:0:o;26112:257::-;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;26222:28:::1;:63:::0;;;26297:66:::1;::::0;3196:25:1;;;26297:66:0::1;::::0;3184:2:1;3169:18;26297:66:0::1;3050:177:1::0;30669:1055:0;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;30829:15;;30866:9;;30859:16;::::1;30851:52;;;::::0;-1:-1:-1;;;30851:52:0;;15948:2:1;30851:52:0::1;::::0;::::1;15930:21:1::0;15987:2;15967:18;;;15960:30;16026:25;16006:18;;;15999:53;16069:18;;30851:52:0::1;15746:347:1::0;30851:52:0::1;30925:4;:11;30918:3;:18;30910:54;;;::::0;-1:-1:-1;;;30910:54:0;;16300:2:1;30910:54:0::1;::::0;::::1;16282:21:1::0;16339:2;16319:18;;;16312:30;16378:25;16358:18;;;16351:53;16421:18;;30910:54:0::1;16098:347:1::0;30910:54:0::1;30986:6;:13;30979:3;:20;30971:56;;;::::0;-1:-1:-1;;;30971:56:0;;16652:2:1;30971:56:0::1;::::0;::::1;16634:21:1::0;16691:2;16671:18;;;16664:30;16730:25;16710:18;;;16703:53;16773:18;;30971:56:0::1;16450:347:1::0;30971:56:0::1;31037:13;31054:23;31066:10;31054:11;:23::i;:::-;31034:43;;;31084:20;31120:9:::0;31115:166:::1;31135:3;31133:1;:5;31115:166;;;31162:18;:25;31181:2;31184:1;31181:5;;;;;;;;:::i;:::-;;;;;;;31162:25;;;;;;;;;;;:34;;;31200:1;31162:39;31154:85;;;::::0;-1:-1:-1;;;31154:85:0;;17004:2:1;31154:85:0::1;::::0;::::1;16986:21:1::0;17043:2;17023:18;;;17016:30;17082:34;17062:18;;;17055:62;-1:-1:-1;;;17133:18:1;;;17126:31;17174:19;;31154:85:0::1;16802:397:1::0;31154:85:0::1;31264:6;31271:1;31264:9;;;;;;;;:::i;:::-;;;;;;;31248:25;;;;;:::i;:::-;::::0;-1:-1:-1;31140:3:0;::::1;::::0;::::1;:::i;:::-;;;;31115:166;;;;31304:12;31295:5;:21;;31287:73;;;::::0;-1:-1:-1;;;31287:73:0;;17406:2:1;31287:73:0::1;::::0;::::1;17388:21:1::0;17445:2;17425:18;;;17418:30;17484:34;17464:18;;;17457:62;-1:-1:-1;;;17535:18:1;;;17528:37;17582:19;;31287:73:0::1;17204:403:1::0;31287:73:0::1;31372:9;31367:316;31387:3;31385:1;:5;31367:316;;;31406:37;31424:4;31429:1;31424:7;;;;;;;;:::i;:::-;;;;;;;31433:6;31440:1;31433:9;;;;;;;;:::i;:::-;;;;;;;31406:17;:37::i;:::-;;31480:86;;;;;;;;31492:8;31501:1;31492:11;;;;;;;;:::i;:::-;;;;;;;31480:86;;;;31505:2;31508:1;31505:5;;;;;;;;:::i;:::-;;;;;;;31480:86;;;;31512:4;31517:1;31512:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31480:86:0::1;;;;;31521:6;31528:1;31521:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;31480:86;;31532:10:::1;31480:86:::0;;::::1;::::0;;;-1:-1:-1;31480:86:0::1;;::::0;31452:18:::1;:25;31471:2;31474:1;31471:5;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;31452:25;;;;::::1;::::0;;;;;;;;-1:-1:-1;31452:25:0;:114;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;31452:114:0;;::::1;-1:-1:-1::0;;;;;31452:114:0;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;31452:114:0;;;;;-1:-1:-1;;;31452:114:0;;;;::::1;;;;;;:::i;:::-;;;;;;;;;31606:1;31575:27;;:32;;;;;;;:::i;:::-;;;;;;;;31670:2;31673:1;31670:5;;;;;;;;:::i;:::-;;;;;;;31616:22;:51;31639:27;;31616:51;;;;;;;;;;;:59;;;;31392:3;;;;;:::i;:::-;;;;31367:316;;;-1:-1:-1::0;31694:24:0::1;::::0;31713:4:::1;2813:41:1::0;;31694:24:0::1;::::0;2801:2:1;2786:18;31694:24:0::1;;;;;;;30808:916;;;18410:127:::0;;30669:1055;;;;:::o;20627:600::-;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;20694:9:::1;:16:::0;20674:17:::1;::::0;20694:20:::1;::::0;20713:1:::1;20694:20;:::i;:::-;20674:40;;20726:9;20721:226;20741:9;:16:::0;20739:18;::::1;20721:226;;;20798:10;-1:-1:-1::0;;;;;20777:31:0::1;:9;20787:1;20777:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;-1:-1:-1;;;;;20777:17:0::1;:31;20773:167;;;20830:6;::::0;20848:10:::1;7836:7:::0;7863:18;;;;;;;;;;;20821:39:::1;::::0;-1:-1:-1;;;;;20830:6:0::1;::::0;18551:649;:::i;20821:39::-:1;;20878:9;20888:1;20878:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;20871:19:::0;;-1:-1:-1;;;;;;20871:19:0::1;::::0;;;::::1;::::0;20913:1;-1:-1:-1;20913:1:0;20925:5:::1;;20773:167;20759:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20721:226;;;-1:-1:-1::0;20971:9:0::1;:16:::0;:20:::1;::::0;20990:1:::1;20971:20;:::i;:::-;20957:9;:35;20953:269;;21008:20;::::0;21022:5:::1;2813:41:1::0;;21008:20:0::1;::::0;2801:2:1;2786:18;21008:20:0::1;;;;;;;;20667:560;18410:127:::0;;20627:600::o;20953:269::-:1;21071:9:::0;21056:102:::1;21084:9;:16:::0;:18:::1;::::0;21101:1:::1;::::0;21084:18:::1;:::i;:::-;21082:1;:20;21056:102;;;21134:9;21144:3;:1:::0;21146::::1;21144:3;:::i;:::-;21134:14;;;;;;;;:::i;:::-;;;;;;;;;;;21119:9;21129:1;21119:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:29;;:12:::1;::::0;;::::1;;:29:::0;;-1:-1:-1;;;;;;21119:29:0::1;-1:-1:-1::0;;;;;21119:29:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;21104:3;::::1;::::0;::::1;:::i;:::-;;;;21056:102;;;;21166:9;:15;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;21166:15:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;21166:15:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;21195:19:::1;::::0;::::1;::::0;::::1;::::0;2838:14:1;;2831:22;2813:41;;2801:2;2786:18;;2673:187;27737:123:0;27799:17;;:::i;:::-;27834:20;;;;:16;:20;;;;;;;;;27827:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27827:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27834:20;;27827:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;27827:27:0;27737:123;-1:-1:-1;;27737:123:0:o;21632:554::-;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;21718:13:::1;21737:18;21749:5;21737:11;:18::i;:::-;21717:38;;;21770:8;21762:61;;;::::0;-1:-1:-1;;;21762:61:0;;17946:2:1;21762:61:0::1;::::0;::::1;17928:21:1::0;17985:2;17965:18;;;17958:30;18024:34;18004:18;;;17997:62;-1:-1:-1;;;18075:18:1;;;18068:38;18123:19;;21762:61:0::1;17744:404:1::0;21762:61:0::1;21880:9;21858:19;:17;:19::i;:::-;21838:17;;:39;;;;:::i;:::-;:51;21830:98;;;::::0;-1:-1:-1;;;21830:98:0;;18355:2:1;21830:98:0::1;::::0;::::1;18337:21:1::0;18394:2;18374:18;;;18367:30;18433:34;18413:18;;;18406:62;-1:-1:-1;;;18484:18:1;;;18477:32;18526:19;;21830:98:0::1;18153:398:1::0;21830:98:0::1;21940:9;21935:209;21955:9;:16:::0;21953:18;::::1;21935:209;;;22012:5;-1:-1:-1::0;;;;;21991:26:0::1;:9;22001:1;21991:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;-1:-1:-1;;;;;21991:17:0::1;:26;21987:150;;;22030:39;22040:10;22052:5;22059:9;22030;:39::i;:::-;22102:9;22080;22090:1;22080:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;22122:5:0::1;::::0;-1:-1:-1;22122:5:0::1;21987:150;21973:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21935:209;;;-1:-1:-1::0;22155:25:0::1;::::0;22175:4:::1;2813:41:1::0;;22155:25:0::1;::::0;2801:2:1;2786:18;22155:25:0::1;2673:187:1::0;24406:236:0;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;24509:25:::1;:56:::0;;;24577:59:::1;::::0;3196:25:1;;;24577:59:0::1;::::0;3184:2:1;3169:18;24577:59:0::1;3050:177:1::0;23914:261:0;18338:6;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;24041:6:::1;24017:19;:17;:19::i;:::-;23997:17;;:39;;;;:::i;:::-;23996:51;;23988:90;;;::::0;-1:-1:-1;;;23988:90:0;;15234:2:1;23988:90:0::1;::::0;::::1;15216:21:1::0;15273:2;15253:18;;;15246:30;15312:28;15292:18;;;15285:56;15358:18;;23988:90:0::1;15032:350:1::0;23988:90:0::1;24106:6;24085:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24151:17:0::1;::::0;24124:45:::1;::::0;3196:25:1;;;24124:45:0::1;::::0;3184:2:1;3169:18;24124:45:0::1;3050:177:1::0;22239:442:0;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;22314:13:::1;22331:23;22343:10;22331:11;:23::i;:::-;22311:43;;;22378:9;22369:5;:18;;22361:67;;;::::0;-1:-1:-1;;;22361:67:0;;18758:2:1;22361:67:0::1;::::0;::::1;18740:21:1::0;18797:2;18777:18;;;18770:30;18836:34;18816:18;;;18809:62;-1:-1:-1;;;18887:18:1;;;18880:34;18931:19;;22361:67:0::1;18556:400:1::0;22361:67:0::1;22440:9;22435:202;22455:9;:16:::0;22453:18;::::1;22435:202;;;22512:10;-1:-1:-1::0;;;;;22491:31:0::1;:9;22501:1;22491:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;-1:-1:-1;;;;;22491:17:0::1;:31;22487:143;;;22544:6;::::0;22535:27:::1;::::0;-1:-1:-1;;;;;22544:6:0::1;22552:9:::0;22535:8:::1;:27::i;:::-;;22595:9;22573;22583:1;22573:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;22615:5:0::1;::::0;-1:-1:-1;22615:5:0::1;22487:143;22473:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22435:202;;;-1:-1:-1::0;22648:27:0::1;::::0;22670:4:::1;2813:41:1::0;;22648:27:0::1;::::0;2801:2:1;2786:18;22648:27:0::1;2673:187:1::0;6690:104:0;6746:13;6779:7;6772:14;;;;;:::i;10908:413::-;746:10;11001:4;11045:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11045:34:0;;;;;;;;;;11098:35;;;;11090:85;;;;-1:-1:-1;;;11090:85:0;;19163:2:1;11090:85:0;;;19145:21:1;19202:2;19182:18;;;19175:30;19241:34;19221:18;;;19214:62;-1:-1:-1;;;19292:18:1;;;19285:35;19337:19;;11090:85:0;18961:401:1;11090:85:0;11211:67;746:10;11234:7;11262:15;11243:16;:34;11211:8;:67::i;:::-;-1:-1:-1;11309:4:0;;10908:413;-1:-1:-1;;;10908:413:0:o;23289:115::-;23343:7;23395:3;23387:5;23375:9;;23366:6;:18;;;;:::i;:::-;:26;;;;:::i;:::-;:32;;;;:::i;18551:649::-;18668:6;;18637:4;;-1:-1:-1;;;;;18668:6:0;18654:10;:20;18650:478;;;18758:6;18734:19;:17;:19::i;:::-;18714:17;;:39;;;;:::i;:::-;18703:6;;-1:-1:-1;;;;;18703:6:0;7836:7;7863:18;;;;;;;;;;;18693:61;;;;:::i;:::-;:71;;18685:110;;;;-1:-1:-1;;;18685:110:0;;12554:2:1;18685:110:0;;;12536:21:1;12593:2;12573:18;;;12566:30;12632:28;12612:18;;;12605:56;12678:18;;18685:110:0;12352:350:1;18685:110:0;18650:478;;;18824:13;18843:23;18855:10;18843:11;:23::i;:::-;18823:43;;;18879:8;18875:246;;;18921:6;;-1:-1:-1;;;;;18908:19:0;;;18921:6;;18908:19;18900:72;;;;-1:-1:-1;;;18900:72:0;;19791:2:1;18900:72:0;;;19773:21:1;19830:2;19810:18;;;19803:30;19869:34;19849:18;;;19842:62;-1:-1:-1;;;19920:18:1;;;19913:38;19968:19;;18900:72:0;19589:404:1;18900:72:0;18875:246;;;19021:22;19033:9;19021:11;:22::i;:::-;-1:-1:-1;19006:37:0;-1:-1:-1;19062:9:0;;19054:57;;;;-1:-1:-1;;;19054:57:0;;20200:2:1;19054:57:0;;;20182:21:1;20239:2;20219:18;;;20212:30;20278:34;20258:18;;;20251:62;-1:-1:-1;;;20329:18:1;;;20322:33;20372:19;;19054:57:0;19998:399:1;19054:57:0;18814:314;18650:478;19134:42;746:10;19158:9;19169:6;19134:9;:42::i;31732:128::-;31796:18;;:::i;:::-;31832:22;;;;:18;:22;;;;;;;;;31825:29;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31825:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31832:22;;31825:29;;;;-1:-1:-1;;;31825:29:0;;;;;;;;;;;;:::i;25890:134::-;18338:6;;25967:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;25990:28:0::1;::::0;25890:134;:::o;29965:646::-;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;30059:13;;30045:11:::1;30079:485;30099:3;30097:1;:5;30079:485;;;30161:1;30122:16;:27;30139:6;30146:1;30139:9;;;;;;;;:::i;:::-;;;;;;;30122:27;;;;;;;;;;;:36;;;:40;30118:439;;;30216:19;30179:16;:27;30196:6;30203:1;30196:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;30179:27;;;::::1;::::0;;;;;;-1:-1:-1;30179:27:0;:33:::1;;::::0;::::1;;:56;::::0;::::1;;;;;;:::i;:::-;;30175:373;;;30250:114;30259:16;:27;30276:6;30283:1;30276:9;;;;;;;;:::i;:::-;;;;;;;30259:27;;;;;;;;;;;:32;;;;;;;;;;-1:-1:-1::0;;;;;30259:32:0::1;30331:16;:27;30348:6;30355:1;30348:9;;;;;;;;:::i;:::-;;;;;;;30331:27;;;;;;;;;;;:31;;;30294:16;:27;30311:6;30318:1;30311:9;;;;;;;;:::i;:::-;;;;;;;30294:27;;;;;;;;;;;:34;;;:68;;;;:::i;30250:114::-;;30436:16;:27;30453:6;30460:1;30453:9;;;;;;;;:::i;:::-;;;;;;;30436:27;;;;;;;;;;;:31;;;30399:16;:27;30416:6;30423:1;30416:9;;;;;;;;:::i;:::-;;;;;;;30399:27;;;;;;;;;;;:34;;;:68;;;;:::i;:::-;30377:17;;:91;;;;;;;:::i;:::-;;;;;;;;30517:19;30481:16;:27;30498:6;30505:1;30498:9;;;;;;;;:::i;:::-;;;;;;;30481:27;;;;;;;;;;;:33;;;:55;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;30175:373;30104:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30079:485;;;-1:-1:-1::0;30575:30:0::1;::::0;30599:5:::1;2813:41:1::0;;30575:30:0::1;::::0;2801:2:1;2786:18;30575:30:0::1;2673:187:1::0;33607:808:0;33678:9;;33664:11;33678:9;33722:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33722:18:0;;33694:46;;33747:18;33781:9;33776:598;33796:3;33794:1;:5;33776:598;;;33856:1;33819:18;:25;33838:2;33841:1;33838:5;;;;;;;;:::i;:::-;;;;;;;33819:25;;;;;;;;;;;:34;;;:38;33815:552;;;33910:10;-1:-1:-1;;;;;33876:44:0;:18;:25;33895:2;33898:1;33895:5;;;;;;;;:::i;:::-;;;;;;;;;;;;33876:25;;;;;;;;;;-1:-1:-1;33876:25:0;:30;;;-1:-1:-1;;;;;33876:30:0;:44;33875:108;;;;-1:-1:-1;33961:21:0;33926:18;:25;33945:2;33948:1;33945:5;;;;;;;;:::i;:::-;;;;;;;33926:25;;;;;;;;;;;:31;;;;;;;;;;;;:56;;;;;;;;:::i;:::-;;33875:108;33870:488;;;33999:11;34013:91;34026:18;:25;34045:2;34048:1;34045:5;;;;;;;;:::i;:::-;;;;;;;34026:25;;;;;;;;;;;:31;;;;;;;;;;-1:-1:-1;;;;;34026:31:0;34059:10;34071:18;:25;34090:2;34093:1;34090:5;;;;;;;;:::i;:::-;;;;;;;34071:25;;;;;;;;;;;:32;;;34013:12;:91::i;:::-;33999:105;;34121:6;34117:220;;;34178:22;34144:18;:25;34163:2;34166:1;34163:5;;;;;;;;:::i;:::-;;;;;;;34144:25;;;;;;;;;;;:31;;;:56;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;34236:18;:25;34255:2;34258:1;34255:5;;;;;;;;:::i;:::-;;;;;;;34236:25;;;;;;;;;;;:32;;;34215:17;;:53;;;;;;;:::i;:::-;;;;;;;;34297:2;34300:1;34297:5;;;;;;;;:::i;:::-;;;;;;;34274:8;34283:10;34274:20;;;;;;;;:::i;:::-;;;;;;;;;;:28;34308:15;34322:1;34308:15;;:::i;:::-;;;34117:220;33986:372;33870:488;33801:3;;;;:::i;:::-;;;;33776:598;;;;34385:24;34400:8;34385:24;;;;;;:::i;26429:1298::-;26483:16;26502:15;26510:6;26502:7;:15::i;:::-;26483:34;-1:-1:-1;26558:17:0;26483:34;26558:6;:17;:::i;:::-;26542:10;7836:7;7863:18;;;;;;;;;;;26532:44;;26524:83;;;;-1:-1:-1;;;26524:83:0;;21241:2:1;26524:83:0;;;21223:21:1;21280:2;21260:18;;;21253:30;21319:28;21299:18;;;21292:56;21365:18;;26524:83:0;21039:350:1;26524:83:0;26692:25;;26614:19;;;;26677:576;26722:26;;26719:1;:29;26677:576;;26787:41;26804:23;;;:20;:23;;;;;;;;;26787:41;;:16;:41;;;;;:50;26841:5;;26769:68;;:15;:68;:::i;:::-;26768:78;26764:482;;;26859:16;26874:1;26859:16;;:::i;:::-;;;26908:25;;26894:11;:39;26886:90;;;;-1:-1:-1;;;26886:90:0;;21596:2:1;26886:90:0;;;21578:21:1;21635:2;21615:18;;;21608:30;21674:34;21654:18;;;21647:62;-1:-1:-1;;;21725:18:1;;;21718:36;21771:19;;26886:90:0;21394:402:1;26886:90:0;26991:41;27008:23;;;:20;:23;;;;;;;;;26991:41;;:16;:41;;;;;:46;;;-1:-1:-1;;;;;26991:46:0;27041:10;26991:60;26987:211;;;27066:19;27084:1;27066:19;;:::i;:::-;;;27123:28;;27106:14;:45;27098:88;;;;-1:-1:-1;;;27098:88:0;;22003:2:1;27098:88:0;;;21985:21:1;22042:2;22022:18;;;22015:30;22081:32;22061:18;;;22054:60;22131:18;;27098:88:0;21801:354:1;27098:88:0;26764:482;;;27231:5;;26764:482;26750:3;;;;:::i;:::-;;;;26677:576;;;-1:-1:-1;27268:6:0;;27259:37;;-1:-1:-1;;;;;27268:6:0;27277:17;27286:8;27277:6;:17;:::i;27259:37::-;-1:-1:-1;27325:17:0;27334:8;27325:6;:17;:::i;:::-;27303;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;27379:45:0;;;27396:15;27379:45;;;;22317:19:1;;;27413:10:0;22374:2:1;22370:15;;;-1:-1:-1;;22366:53:1;22352:12;;;22345:75;27379:45:0;;;;;;;;;22436:12:1;;;27379:45:0;;;27369:56;;;;;;;;;27457:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27457:88:0;;;;;;;27552:26;;;:16;:26;;;;;;;:33;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27552:33:0;-1:-1:-1;;;;;27552:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27369:56;;22436:12:1;;;;27552:33:0;;;;-1:-1:-1;;27552:33:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;27621:1;27592:25;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;27650:25:0;;27629:47;;;;:20;:47;;;;;;;:58;;;27699:22;;;;;27716:4;;27699:22;:::i;:::-;;;;;;;;26476:1251;;;;;26429:1298;:::o;24192:128::-;18338:6;;24266:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;24289:25:0::1;::::0;24192:128;:::o;29556:354::-;18418:13;18433;18450:23;18462:10;18450:11;:23::i;:::-;18417:56;;;;18488:8;18480:43;;;;-1:-1:-1;;;18480:43:0;;;;;;;:::i;:::-;29657:18;;29643:11:::1;29682:180;29702:3;29700:1;:5;29682:180;;;29769:1;29725:16;:32;29742:11;29754:1;29742:14;;;;;;;;:::i;:::-;;;;;;;29725:32;;;;;;;;;;;:41;;;:45;29721:134;;;29824:21;29783:16;:32;29800:11;29812:1;29800:14;;;;;;;;:::i;:::-;;;;;;;29783:32;;;;;;;;;;;:38;;;:62;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;29721:134;29707:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29682:180;;;-1:-1:-1::0;29873:31:0::1;::::0;29899:4:::1;2813:41:1::0;;29873:31:0::1;::::0;2801:2:1;2786:18;29873:31:0::1;2673:187:1::0;24650:134:0;18338:6;;24727:7;;-1:-1:-1;;;;;18338:6:0;18324:10;:20;18316:55;;;;-1:-1:-1;;;18316:55:0;;;;;;;:::i;:::-;-1:-1:-1;24750:28:0::1;::::0;24650:134;:::o;14592:380::-;-1:-1:-1;;;;;14728:19:0;;14720:68;;;;-1:-1:-1;;;14720:68:0;;22661:2:1;14720:68:0;;;22643:21:1;22700:2;22680:18;;;22673:30;22739:34;22719:18;;;22712:62;-1:-1:-1;;;22790:18:1;;;22783:34;22834:19;;14720:68:0;22459:400:1;14720:68:0;-1:-1:-1;;;;;14807:21:0;;14799:68;;;;-1:-1:-1;;;14799:68:0;;23066:2:1;14799:68:0;;;23048:21:1;23105:2;23085:18;;;23078:30;23144:34;23124:18;;;23117:62;-1:-1:-1;;;23195:18:1;;;23188:32;23237:19;;14799:68:0;22864:398:1;14799:68:0;-1:-1:-1;;;;;14880:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14932:32;;3196:25:1;;;14932:32:0;;3169:18:1;14932:32:0;;;;;;;14592:380;;;:::o;11811:733::-;-1:-1:-1;;;;;11951:20:0;;11943:70;;;;-1:-1:-1;;;11943:70:0;;23469:2:1;11943:70:0;;;23451:21:1;23508:2;23488:18;;;23481:30;23547:34;23527:18;;;23520:62;-1:-1:-1;;;23598:18:1;;;23591:35;23643:19;;11943:70:0;23267:401:1;11943:70:0;-1:-1:-1;;;;;12032:23:0;;12024:71;;;;-1:-1:-1;;;12024:71:0;;23875:2:1;12024:71:0;;;23857:21:1;23914:2;23894:18;;;23887:30;23953:34;23933:18;;;23926:62;-1:-1:-1;;;24004:18:1;;;23997:33;24047:19;;12024:71:0;23673:399:1;12024:71:0;-1:-1:-1;;;;;12192:17:0;;12168:21;12192:17;;;;;;;;;;;12228:23;;;;12220:74;;;;-1:-1:-1;;;12220:74:0;;24279:2:1;12220:74:0;;;24261:21:1;24318:2;24298:18;;;24291:30;24357:34;24337:18;;;24330:62;-1:-1:-1;;;24408:18:1;;;24401:36;24454:19;;12220:74:0;24077:402:1;12220:74:0;-1:-1:-1;;;;;12330:17:0;;;:9;:17;;;;;;;;;;;12350:22;;;12330:42;;12394:20;;;;;;;;:30;;12366:6;;12330:9;12394:30;;12366:6;;12394:30;:::i;:::-;;;;;;;;12459:9;-1:-1:-1;;;;;12442:35:0;12451:6;-1:-1:-1;;;;;12442:35:0;;12470:6;12442:35;;;;3196:25:1;;3184:2;3169:18;;3050:177;12442:35:0;;;;;;;;11932:612;11811:733;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:1;247:40;;317:18;302:34;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:1:o;426:183::-;486:4;519:18;511:6;508:30;505:56;;;541:18;;:::i;:::-;-1:-1:-1;586:1:1;582:14;598:4;578:25;;426:183::o;614:662::-;668:5;721:3;714:4;706:6;702:17;698:27;688:55;;739:1;736;729:12;688:55;775:6;762:20;801:4;825:60;841:43;881:2;841:43;:::i;:::-;825:60;:::i;:::-;919:15;;;1005:1;1001:10;;;;989:23;;985:32;;;950:12;;;;1029:15;;;1026:35;;;1057:1;1054;1047:12;1026:35;1093:2;1085:6;1081:15;1105:142;1121:6;1116:3;1113:15;1105:142;;;1187:17;;1175:30;;1225:12;;;;1138;;1105:142;;;-1:-1:-1;1265:5:1;614:662;-1:-1:-1;;;;;;614:662:1:o;1281:348::-;1365:6;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1474:9;1461:23;1507:18;1499:6;1496:30;1493:50;;;1539:1;1536;1529:12;1493:50;1562:61;1615:7;1606:6;1595:9;1591:22;1562:61;:::i;:::-;1552:71;1281:348;-1:-1:-1;;;;1281:348:1:o;1634:597::-;1746:4;1775:2;1804;1793:9;1786:21;1836:6;1830:13;1879:6;1874:2;1863:9;1859:18;1852:34;1904:1;1914:140;1928:6;1925:1;1922:13;1914:140;;;2023:14;;;2019:23;;2013:30;1989:17;;;2008:2;1985:26;1978:66;1943:10;;1914:140;;;2072:6;2069:1;2066:13;2063:91;;;2142:1;2137:2;2128:6;2117:9;2113:22;2109:31;2102:42;2063:91;-1:-1:-1;2215:2:1;2194:15;-1:-1:-1;;2190:29:1;2175:45;;;;2222:2;2171:54;;1634:597;-1:-1:-1;;;1634:597:1:o;2236:173::-;2304:20;;-1:-1:-1;;;;;2353:31:1;;2343:42;;2333:70;;2399:1;2396;2389:12;2333:70;2236:173;;;:::o;2414:254::-;2482:6;2490;2543:2;2531:9;2522:7;2518:23;2514:32;2511:52;;;2559:1;2556;2549:12;2511:52;2582:29;2601:9;2582:29;:::i;:::-;2572:39;2658:2;2643:18;;;;2630:32;;-1:-1:-1;;;2414:254:1:o;2865:180::-;2924:6;2977:2;2965:9;2956:7;2952:23;2948:32;2945:52;;;2993:1;2990;2983:12;2945:52;-1:-1:-1;3016:23:1;;2865:180;-1:-1:-1;2865:180:1:o;3232:328::-;3309:6;3317;3325;3378:2;3366:9;3357:7;3353:23;3349:32;3346:52;;;3394:1;3391;3384:12;3346:52;3417:29;3436:9;3417:29;:::i;:::-;3407:39;;3465:38;3499:2;3488:9;3484:18;3465:38;:::i;:::-;3455:48;;3550:2;3539:9;3535:18;3522:32;3512:42;;3232:328;;;;;:::o;3754:248::-;3822:6;3830;3883:2;3871:9;3862:7;3858:23;3854:32;3851:52;;;3899:1;3896;3889:12;3851:52;-1:-1:-1;;3922:23:1;;;3992:2;3977:18;;;3964:32;;-1:-1:-1;3754:248:1:o;4007:127::-;4068:10;4063:3;4059:20;4056:1;4049:31;4099:4;4096:1;4089:15;4123:4;4120:1;4113:15;4139:214;4224:1;4217:5;4214:12;4204:143;;4269:10;4264:3;4260:20;4257:1;4250:31;4304:4;4301:1;4294:15;4332:4;4329:1;4322:15;4204:143;4139:214;:::o;4358:499::-;4440:5;4434:12;4429:3;4422:25;4496:4;4489:5;4485:16;4479:23;4472:4;4467:3;4463:14;4456:47;4581:1;4577;4572:3;4568:11;4564:19;4556:4;4549:5;4545:16;4539:23;4535:49;4528:4;4523:3;4519:14;4512:73;4634:4;4627:5;4623:16;4617:23;4610:4;4605:3;4601:14;4594:47;4690:4;4683:5;4679:16;4673:23;4666:4;4661:3;4657:14;4650:47;4743:4;4736:5;4732:16;4726:23;4758:48;4793:12;4758:48;:::i;:::-;4838:12;4831:4;4826:3;4822:14;4815:36;;4358:499;;:::o;4862:710::-;5087:2;5139:21;;;5209:13;;5112:18;;;5231:22;;;5058:4;;5087:2;5310:15;;;;5284:2;5269:18;;;5058:4;5353:193;5367:6;5364:1;5361:13;5353:193;;;5416:48;5460:3;5451:6;5445:13;5416:48;:::i;:::-;5521:15;;;;5493:4;5484:14;;;;;5389:1;5382:9;5353:193;;;-1:-1:-1;5563:3:1;;4862:710;-1:-1:-1;;;;;;4862:710:1:o;5577:577::-;5660:5;5654:12;5649:3;5642:25;5716:4;5709:5;5705:16;5699:23;5692:4;5687:3;5683:14;5676:47;5769:4;5762:5;5758:16;5752:23;5811:1;5807;5802:3;5798:11;5794:19;5863:2;5849:12;5845:21;5838:4;5833:3;5829:14;5822:45;5916:4;5909:5;5905:16;5899:23;5892:4;5887:3;5883:14;5876:47;5984:2;5976:4;5969:5;5965:16;5959:23;5955:32;5948:4;5943:3;5939:14;5932:56;;;6036:4;6029:5;6025:16;6019:23;6051:50;6086:14;6051:50;:::i;6159:713::-;6386:2;6438:21;;;6508:13;;6411:18;;;6530:22;;;6357:4;;6386:2;6609:15;;;;6583:2;6568:18;;;6357:4;6652:194;6666:6;6663:1;6660:13;6652:194;;;6715:49;6760:3;6751:6;6745:13;6715:49;:::i;:::-;6821:15;;;;6793:4;6784:14;;;;;6688:1;6681:9;6652:194;;6877:822;7106:2;7158:21;;;7228:13;;7131:18;;;7250:22;;;7077:4;;7106:2;7291;;7309:18;;;;7350:15;;;7077:4;7393:280;7407:6;7404:1;7401:13;7393:280;;;7466:13;;7508:9;;-1:-1:-1;;;;;7504:35:1;7492:48;;7580:11;;7574:18;7560:12;;;7553:40;7613:12;;;;7648:15;;;;7536:1;7422:9;7393:280;;;-1:-1:-1;7690:3:1;;6877:822;-1:-1:-1;;;;;;;6877:822:1:o;7704:186::-;7763:6;7816:2;7804:9;7795:7;7791:23;7787:32;7784:52;;;7832:1;7829;7822:12;7784:52;7855:29;7874:9;7855:29;:::i;:::-;7845:39;7704:186;-1:-1:-1;;;7704:186:1:o;8158:1597::-;8344:6;8352;8360;8368;8421:3;8409:9;8400:7;8396:23;8392:33;8389:53;;;8438:1;8435;8428:12;8389:53;8478:9;8465:23;8507:18;8548:2;8540:6;8537:14;8534:34;;;8564:1;8561;8554:12;8534:34;8587:61;8640:7;8631:6;8620:9;8616:22;8587:61;:::i;:::-;8577:71;;8667:2;8657:12;;8722:2;8711:9;8707:18;8694:32;8751:2;8741:8;8738:16;8735:36;;;8767:1;8764;8757:12;8735:36;8790:63;8845:7;8834:8;8823:9;8819:24;8790:63;:::i;:::-;8780:73;;;8906:2;8895:9;8891:18;8878:32;8935:2;8925:8;8922:16;8919:36;;;8951:1;8948;8941:12;8919:36;8974:24;;9029:4;9021:13;;9017:27;-1:-1:-1;9007:55:1;;9058:1;9055;9048:12;9007:55;9094:2;9081:16;9117:60;9133:43;9173:2;9133:43;:::i;9117:60::-;9211:15;;;9293:1;9289:10;;;;9281:19;;9277:28;;;9242:12;;;;9317:19;;;9314:39;;;9349:1;9346;9339:12;9314:39;9373:11;;;;9393:148;9409:6;9404:3;9401:15;9393:148;;;9475:23;9494:3;9475:23;:::i;:::-;9463:36;;9426:12;;;;9519;;;;9393:148;;;9560:5;-1:-1:-1;;;;9618:2:1;9603:18;;9590:32;;-1:-1:-1;9634:16:1;;;9631:36;;;9663:1;9660;9653:12;9631:36;;9686:63;9741:7;9730:8;9719:9;9715:24;9686:63;:::i;:::-;9676:73;;;8158:1597;;;;;;;:::o;9945:254::-;10133:3;10118:19;;10146:47;10122:9;10175:6;10146:47;:::i;10204:257::-;10394:3;10379:19;;10407:48;10383:9;10437:6;10407:48;:::i;10466:260::-;10534:6;10542;10595:2;10583:9;10574:7;10570:23;10566:32;10563:52;;;10611:1;10608;10601:12;10563:52;10634:29;10653:9;10634:29;:::i;:::-;10624:39;;10682:38;10716:2;10705:9;10701:18;10682:38;:::i;:::-;10672:48;;10466:260;;;;;:::o;10731:346::-;10933:2;10915:21;;;10972:2;10952:18;;;10945:30;-1:-1:-1;;;11006:2:1;10991:18;;10984:52;11068:2;11053:18;;10731:346::o;11082:127::-;11143:10;11138:3;11134:20;11131:1;11124:31;11174:4;11171:1;11164:15;11198:4;11195:1;11188:15;11214:127;11275:10;11270:3;11266:20;11263:1;11256:31;11306:4;11303:1;11296:15;11330:4;11327:1;11320:15;11346:135;11385:3;-1:-1:-1;;11406:17:1;;11403:43;;;11426:18;;:::i;:::-;-1:-1:-1;11473:1:1;11462:13;;11346:135::o;11486:380::-;11565:1;11561:12;;;;11608;;;11629:61;;11683:4;11675:6;11671:17;11661:27;;11629:61;11736:2;11728:6;11725:14;11705:18;11702:38;11699:161;;;11782:10;11777:3;11773:20;11770:1;11763:31;11817:4;11814:1;11807:15;11845:4;11842:1;11835:15;11699:161;;11486:380;;;:::o;11871:346::-;12073:2;12055:21;;;12112:2;12092:18;;;12085:30;-1:-1:-1;;;12146:2:1;12131:18;;12124:52;12208:2;12193:18;;11871:346::o;12222:125::-;12262:4;12290:1;12287;12284:8;12281:34;;;12295:18;;:::i;:::-;-1:-1:-1;12332:9:1;;12222:125::o;13524:128::-;13564:3;13595:1;13591:6;13588:1;13585:13;13582:39;;;13601:18;;:::i;:::-;-1:-1:-1;13637:9:1;;13524:128::o;14718:168::-;14758:7;14824:1;14820;14816:6;14812:14;14809:1;14806:21;14801:1;14794:9;14787:17;14783:45;14780:71;;;14831:18;;:::i;:::-;-1:-1:-1;14871:9:1;;14718:168::o;14891:136::-;14930:3;14958:5;14948:39;;14967:18;;:::i;:::-;-1:-1:-1;;;15003:18:1;;14891:136::o;17612:127::-;17673:10;17668:3;17664:20;17661:1;17654:31;17704:4;17701:1;17694:15;17728:4;17725:1;17718:15;19367:217;19407:1;19433;19423:132;;19477:10;19472:3;19468:20;19465:1;19458:31;19512:4;19509:1;19502:15;19540:4;19537:1;19530:15;19423:132;-1:-1:-1;19569:9:1;;19367:217::o;20402:632::-;20573:2;20625:21;;;20695:13;;20598:18;;;20717:22;;;20544:4;;20573:2;20796:15;;;;20770:2;20755:18;;;20544:4;20839:169;20853:6;20850:1;20847:13;20839:169;;;20914:13;;20902:26;;20983:15;;;;20948:12;;;;20875:1;20868:9;20839:169;
Swarm Source
ipfs://4ce2c9c54d399064d2e5bf264f9659cc648d61efb73f98140ac9bec4d77c43c8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.