Token WAPSWAP
Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
121.619244 WAP
Holders:
4 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WAPSWAP
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-30 */ // // 360Code: 1dj3-238mc-828a-3ddj-983f // // █░█░█ ▄▀█ █▀█ █▀ █░█░█ ▄▀█ █▀█ █▀▀ █ █▄░█ ▄▀█ █▄░█ █▀▀ █▀▀ // ▀▄▀▄▀ █▀█ █▀▀ ▄█ ▀▄▀▄▀ █▀█ █▀▀ █▀░ █ █░▀█ █▀█ █░▀█ █▄▄ ██▄ // // // Website: https://wapswap.finance // Telegram: https://t.me/WapSwapFinance // GitHub: https://github.com/WapSwapFinance // // Backed by Team Crypto360 (𝖙𝖍𝖊𝖈𝖗𝖞𝖕𝖙𝖔360.𝖈𝖔𝖒) // // SPDX-License-Identifier: MIT pragma solidity 0.8.6; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () { } function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, 'Address: low-level call with value failed'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, 'Address: insufficient balance for call'); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() external onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeBEP20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeBEP20: decreased allowance below zero' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IBEP20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed'); } } } abstract contract WAPSWAP_Interface is Context, IBEP20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => address) private _referrals; mapping (address => address[]) public _allReferrals; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; uint8 private _decimals; string private _symbol; string private _name; modifier onlyContract() { require(_isContract(msg.sender) && msg.sender != tx.origin, "only contract allowed"); _; } constructor(string memory NAME, string memory SYMBOL, uint8 DECIMALS) { _name = NAME; _symbol = SYMBOL; _decimals = DECIMALS; } function getOwner() external override view returns (address) { return owner(); } function decimals() external override view returns (uint8) { return _decimals; } function symbol() external override view returns (string memory) { return _symbol; } function name() external override view returns (string memory) { return _name; } function totalSupply() external override view returns (uint256) { return _totalSupply; } function balanceOf(address account) external override view returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external override view returns (uint256) { return _allowances[owner][spender]; } function referrer(address owner) external view returns (address) { return _referrals[owner]; } function getReferrals(address owner) external view returns (uint) { return _allReferrals[owner].length; } function _setReferrer(address owner, address refer) internal { require(_referrals[owner] == address(0) && owner != refer && refer != address(0), "[!] Invalid Referrer"); _allReferrals[refer].push(owner); _referrals[owner] = refer; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } function mint(uint256 amount) external onlyOwner returns (bool) { _mint(_msgSender(), amount); return true; } function mintRewards(address account, uint256 amount) external onlyOwner onlyContract returns (bool) { _mint(account, amount); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal { require(account != address(0), "BEP20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "BEP20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint256 amount) external { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); } /** * @notice Checks if address is a contract * @dev It prevents contract from being targetted */ function _isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } } interface IEncoder { function encrypt(string calldata _chain, uint256 _amount, address _swapper, string memory _anotherChainAddress, uint _block) external view returns (bytes calldata); function getChain() external view returns (string memory); } interface IDecoder { function decrypt(bytes calldata _data) external view returns (string memory, uint256, address, string memory, bool, uint256, string memory); } contract WAPSWAP is WAPSWAP_Interface('WAPSWAP', 'WAP', 18) { using SafeMath for uint256; using SafeBEP20 for IBEP20; event EncoderChanged(address _newEncoder); event DecoderChanged(address _newDecoder); event FeeAddressChanged(address _newFeeAddress); event SwapFeeChanged(uint256 _newSwapFee); event MinAmountChanged(uint256 _minAmount); struct CrossChainSwap { address _xcsHolder; string _xcsChain; uint256 _xcsAmount; uint _claimed; uint _block; string _anotherChainAddress; } struct ClaimFromSwap { address _xcsClaimer; string _xcsChain; uint256 _xcsAmount; uint _claimed; bytes _authToken; bool _isClaimed; } uint public _crossSwapFee = 1; uint public MIN_AMOUNT_TO_SWAP = 10; string[] public SUPPORTED_CHAINS; address public FEE_ADDRESS; address public FEE_SETTER; WAPSWAP_Interface public immutable _xcs; mapping (address => mapping(uint256 => CrossChainSwap)) public _crossSwapper; mapping (address => uint256[]) public _crossSwaps; mapping (address => mapping(uint256 => ClaimFromSwap)) public _crossClaimer; mapping (address => uint256[]) public _crossClaims; mapping (address => uint) public _allCross; mapping (address => uint) public _allClaims; address private encoder; address private decoder; modifier onlyFeeSetter() { require(FEE_SETTER == _msgSender(), "only fee address allowed"); _; } constructor () { _xcs = WAPSWAP_Interface(this); FEE_ADDRESS = _msgSender(); FEE_SETTER = _msgSender(); } function setMinToSwap(uint256 _min) external onlyFeeSetter { MIN_AMOUNT_TO_SWAP = _min; emit MinAmountChanged(_min); } function setEncoder(address _encoder) external onlyFeeSetter { require(_encoder != address(0), "_encoder should not be zero address"); encoder = _encoder; emit EncoderChanged(_encoder); } function setDecoder(address _decoder) external onlyFeeSetter { require(_decoder != address(0), "_decoder should not be zero address"); decoder = _decoder; emit DecoderChanged(_decoder); } function addSupportedChain(string memory _chain) external onlyFeeSetter { SUPPORTED_CHAINS.push(_chain); } function deleteChain(uint _idx) external onlyFeeSetter { delete SUPPORTED_CHAINS[_idx]; } function changeFeeAddress(address _feeAddress) external onlyFeeSetter { require(_feeAddress != address(0), "_feeAddress should not be zero address"); FEE_ADDRESS = _feeAddress; emit FeeAddressChanged(_feeAddress); } function initReferral(address _referrer) external { _setReferrer(msg.sender, _referrer); } function changeSwapFee(uint _fee) external onlyFeeSetter { require(_fee <= 100, "_fee should not exceeds 100"); _crossSwapFee = _fee; emit SwapFeeChanged(_fee); } function toBig(uint value) internal pure returns (uint) { return value.mul(1e18); } function _takeAmount(uint256 _amount) internal returns (bool) { _burn(_msgSender(), _amount); return true; } function _takeFee(uint256 _amount) internal returns (uint256) { uint256 _fee = _amount.mul(_crossSwapFee).div(1e2); uint256 _totalAmount = _amount.sub(_fee); _xcs.transferFrom(_msgSender(), FEE_ADDRESS, _fee); return _totalAmount; } function getSwaps(uint256 _id) external view returns (bytes memory _authToken) { CrossChainSwap memory _swapper = _crossSwapper[msg.sender][_id]; _authToken = IEncoder(encoder).encrypt(_swapper._xcsChain, _swapper._xcsAmount, msg.sender, compareStrings(_swapper._anotherChainAddress, "") ? "" : _swapper._anotherChainAddress, _swapper._block); } function swapToChain(string memory chain, uint256 _amount, string calldata _anotherChainAddress) external { require(_amount >= toBig(MIN_AMOUNT_TO_SWAP), '[!] Invalid Amount To Swap or Less than Minimum'); require(validChain(chain), '[!] Invalid Chain To Swap!'); _approve(msg.sender, address(this), _amount); uint256 getAmount = _takeFee(_amount); bool taken = _takeAmount(getAmount); if(taken) { _crossSwapper[msg.sender][block.number] = CrossChainSwap( compareStrings(_anotherChainAddress, "") ? msg.sender : address(0), chain, getAmount, block.timestamp, block.number, compareStrings(_anotherChainAddress, "") ? "" : _anotherChainAddress ); _crossSwaps[msg.sender].push(block.number); _allCross[msg.sender] = _allCross[msg.sender] + 1; } } function getAllSwaps(address _swapper) external view returns (uint) { return _allCross[_swapper]; } function getAllClaims(address _claimer) external view returns (uint) { return _allClaims[_claimer]; } function compareStrings(string memory a, string memory b) internal pure returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); } function validChain(string memory _chain) internal view returns (bool) { for(uint i; i < SUPPORTED_CHAINS.length; i ++){ if(compareStrings(SUPPORTED_CHAINS[i], _chain)){ return true; } } return false; } function parseAddr(string memory _a) public pure returns (address) { bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i = 2; i < 2 + 2 * 20; i += 2) { iaddr *= 256; b1 = uint160(uint8(tmp[i])); b2 = uint160(uint8(tmp[i + 1])); if ((b1 >= 97) && (b1 <= 102)) { b1 -= 87; } else if ((b1 >= 65) && (b1 <= 70)) { b1 -= 55; } else if ((b1 >= 48) && (b1 <= 57)) { b1 -= 48; } if ((b2 >= 97) && (b2 <= 102)) { b2 -= 87; } else if ((b2 >= 65) && (b2 <= 70)) { b2 -= 55; } else if ((b2 >= 48) && (b2 <= 57)) { b2 -= 48; } iaddr += (b1 * 16 + b2); } return address(iaddr); } function claimFromChainData(bytes calldata _data) external { (string memory _targetedChain, uint256 _amount, address _swapper, string memory _fromChain,, uint256 _id, string memory another) = IDecoder(decoder).decrypt(_data); require(compareStrings(_targetedChain, IEncoder(encoder).getChain()), '[!] Not the targeted Chain'); require(validChain(_fromChain), '[!] Not A Valid Chain Call'); require(!_crossClaimer[_msgSender()][_id]._isClaimed, '[!] Not a Valid ID to claim'); if(!compareStrings(another, "")){ require(parseAddr(another) == msg.sender, '[!] The Caller is not the Swapper'); _swapper = parseAddr(another); }else{ require(_swapper == _msgSender(), '[!] Invalid Call From Sender'); } _mint(_swapper, _amount); _crossClaimer[_msgSender()][_id]._xcsClaimer = _msgSender(); _crossClaimer[_msgSender()][_id]._xcsChain = _fromChain; _crossClaimer[_msgSender()][_id]._xcsAmount = _amount; _crossClaimer[_msgSender()][_id]._authToken = _data; _crossClaimer[_msgSender()][_id]._claimed = block.timestamp; _crossClaimer[_msgSender()][_id]._isClaimed = true; _crossClaims[_msgSender()].push(_id); _allClaims[_msgSender()] = _allClaims[_msgSender()] + 1; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"_newDecoder","type":"address"}],"name":"DecoderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newEncoder","type":"address"}],"name":"EncoderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newFeeAddress","type":"address"}],"name":"FeeAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"MinAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newSwapFee","type":"uint256"}],"name":"SwapFeeChanged","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"},{"inputs":[],"name":"FEE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_SETTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_AMOUNT_TO_SWAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"SUPPORTED_CHAINS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_allClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_allCross","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_allReferrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_crossClaimer","outputs":[{"internalType":"address","name":"_xcsClaimer","type":"address"},{"internalType":"string","name":"_xcsChain","type":"string"},{"internalType":"uint256","name":"_xcsAmount","type":"uint256"},{"internalType":"uint256","name":"_claimed","type":"uint256"},{"internalType":"bytes","name":"_authToken","type":"bytes"},{"internalType":"bool","name":"_isClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_crossClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_crossSwapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_crossSwapper","outputs":[{"internalType":"address","name":"_xcsHolder","type":"address"},{"internalType":"string","name":"_xcsChain","type":"string"},{"internalType":"uint256","name":"_xcsAmount","type":"uint256"},{"internalType":"uint256","name":"_claimed","type":"uint256"},{"internalType":"uint256","name":"_block","type":"uint256"},{"internalType":"string","name":"_anotherChainAddress","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_crossSwaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_xcs","outputs":[{"internalType":"contract WAPSWAP_Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_chain","type":"string"}],"name":"addSupportedChain","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"changeFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"changeSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"claimFromChainData","outputs":[],"stateMutability":"nonpayable","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":"_idx","type":"uint256"}],"name":"deleteChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimer","type":"address"}],"name":"getAllClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_swapper","type":"address"}],"name":"getAllSwaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getSwaps","outputs":[{"internalType":"bytes","name":"_authToken","type":"bytes"}],"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":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"initReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_a","type":"string"}],"name":"parseAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"referrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_decoder","type":"address"}],"name":"setDecoder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_encoder","type":"address"}],"name":"setEncoder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_anotherChainAddress","type":"string"}],"name":"swapToChain","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526001600955600a80553480156200001a57600080fd5b50604051806040016040528060078152602001660574150535741560cc1b8152506040518060400160405280600381526020016205741560ec1b815250601260006200006b6200015460201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508251620000ca90600890602086019062000158565b508151620000e090600790602085019062000158565b506006805460ff191660ff9290921691909117905550503060601b608052620001063390565b600c80546001600160a01b0319166001600160a01b03929092169190911790556200012e3390565b600d80546001600160a01b0319166001600160a01b03929092169190911790556200023b565b3390565b8280546200016690620001fe565b90600052602060002090601f0160209004810192826200018a5760008555620001d5565b82601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b5b80821115620001e35760008155600101620001e8565b600181811c908216806200021357607f821691505b602082108114156200023557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c6135466200026160003960008181610360015261254401526135466000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c8063860548fa116101a7578063aca1d5a9116100ee578063e5eb8a8911610097578063f2fde38b11610071578063f2fde38b14610748578063f90dbef41461075b578063f975ac701461076457600080fd5b8063e5eb8a891461070f578063e8fd56f314610722578063eb1edd611461073557600080fd5b8063dc1e86b0116100c8578063dc1e86b0146106b0578063dd62ed3e146106c3578063de2e90f1146106fc57600080fd5b8063aca1d5a914610681578063bfbdec2414610694578063d31aa4681461069d57600080fd5b8063a0712d6811610150578063a5762c6a1161012a578063a5762c6a1461063b578063a68231891461065b578063a9059cbb1461066e57600080fd5b8063a0712d6814610602578063a22b35ce14610615578063a457c2d71461062857600080fd5b80638da5cb5b116101815780638da5cb5b146105ad57806395d89b41146105e7578063983566c9146105ef57600080fd5b8063860548fa14610588578063893d20e8146105ad5780638c1754ed146105be57600080fd5b806341a0894d1161026b5780636a36c4231161021457806372f522e2116101ee57806372f522e2146105275780637846926d1461054c578063812845021461057557600080fd5b80636a36c423146104e357806370a08231146104f6578063715018a61461051f57600080fd5b806357edfffc1161024557806357edfffc146104aa578063696c6131146104bd5780636a20de92146104d057600080fd5b806341a0894d1461045b57806348d964c814610484578063568ececa1461049757600080fd5b8063285e1406116102cd578063313ce567116102a7578063313ce5671461041357806331b2cd0014610428578063395093511461044857600080fd5b8063285e1406146103bf5780632cf003c2146103d4578063311d9b271461040057600080fd5b8063156bb5a1116102fe578063156bb5a11461035b57806318160ddd1461039a57806323b872dd146103ac57600080fd5b806306fdde031461031a578063095ea7b314610338575b600080fd5b610322610777565b60405161032f91906131cf565b60405180910390f35b61034b610346366004612e22565b610809565b604051901515815260200161032f565b6103827f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032f565b6005545b60405190815260200161032f565b61034b6103ba366004612de1565b610820565b6103d26103cd366004612d8b565b61089b565b005b6103826103e2366004612d8b565b6001600160a01b039081166000908152600260205260409020541690565b600d54610382906001600160a01b031681565b60065460405160ff909116815260200161032f565b61039e610436366004612d8b565b60126020526000908152604090205481565b61034b610456366004612e22565b6109af565b61039e610469366004612d8b565b6001600160a01b031660009081526003602052604090205490565b6103d2610492366004613026565b6109e5565b6103826104a5366004612e22565b610cf0565b6103226104b8366004613096565b610d28565b6103d26104cb366004613096565b610f87565b61034b6104de366004612e22565b611062565b6103d26104f1366004613096565b611123565b61039e610504366004612d8b565b6001600160a01b031660009081526001602052604090205490565b6103d26111a4565b61053a610535366004612e22565b611248565b60405161032f969594939291906130f7565b61039e61055a366004612d8b565b6001600160a01b031660009081526012602052604090205490565b61039e610583366004612e22565b6113a5565b61059b610596366004612e22565b6113d6565b60405161032f9695949392919061314d565b6000546001600160a01b0316610382565b61039e6105cc366004612d8b565b6001600160a01b031660009081526013602052604090205490565b610322611530565b61039e6105fd366004612e22565b61153f565b61034b610610366004613096565b61155b565b6103d2610623366004612e22565b6115c9565b61034b610636366004612e22565b611618565b61039e610649366004612d8b565b60136020526000908152604090205481565b610382610669366004612efc565b611667565b61034b61067c366004612e22565b611854565b6103d261068f366004613096565b611861565b61039e600a5481565b6103d26106ab366004612d8b565b6118eb565b6103d26106be366004612d8b565b6119f0565b61039e6106d1366004612da8565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6103d261070a366004612d8b565b6119fa565b6103d261071d366004612efc565b611aff565b610322610730366004613096565b611b97565b600c54610382906001600160a01b031681565b6103d2610756366004612d8b565b611c43565b61039e60095481565b6103d2610772366004612e69565b611ca6565b606060088054610786906133aa565b80601f01602080910402602001604051908101604052809291908181526020018280546107b2906133aa565b80156107ff5780601f106107d4576101008083540402835291602001916107ff565b820191906000526020600020905b8154815290600101906020018083116107e257829003601f168201915b5050505050905090565b60006108163384846120c9565b5060015b92915050565b600061082d8484846121ee565b610890843361088b85604051806060016040528060288152602001613458602891396001600160a01b038a16600090815260046020526040812090335b6001600160a01b031681526020810191909152604001600020549190612374565b6120c9565b5060015b9392505050565b600d546001600160a01b031633146108f55760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064015b60405180910390fd5b6001600160a01b03811661095a5760405162461bcd60e51b815260206004820152602660248201527f5f666565416464726573732073686f756c64206e6f74206265207a65726f206160448201526564647265737360d01b60648201526084016108ec565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1e93c69f2847f79bfa4d71704aaa84a581729b4b1706d922ee42ba1848a45c9906020015b60405180910390a150565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161081691859061088b90866123ae565b6109f0600a5461240d565b831015610a655760405162461bcd60e51b815260206004820152602f60248201527f5b215d20496e76616c696420416d6f756e7420546f2053776170206f72204c6560448201527f7373207468616e204d696e696d756d000000000000000000000000000000000060648201526084016108ec565b610a6e84612421565b610aba5760405162461bcd60e51b815260206004820152601a60248201527f5b215d20496e76616c696420436861696e20546f20537761702100000000000060448201526064016108ec565b610ac53330856120c9565b6000610ad084612507565b90506000610add82612614565b90508015610ce8576040518060c00160405280610b3d86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250612620915050565b610b48576000610b4a565b335b6001600160a01b03168152602001878152602001838152602001428152602001438152602001610bbd86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250612620915050565b610bfd5785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c0e92505050565b604051806020016040528060008152505b9052336000908152600e602090815260408083204384528252909120825181546001600160a01b0319166001600160a01b039091161781558282015180519192610c6092600185019290910190612b45565b5060408201516002820155606082015160038201556080820151600482015560a08201518051610c9a916005840191602090910190612b45565b5050336000818152600f60209081526040808320805460018181018355918552838520439101559383526012909152902054610cd79250906132b3565b336000908152601260205260409020555b505050505050565b60036020528160005260406000208181548110610d0c57600080fd5b6000918252602090912001546001600160a01b03169150829050565b336000908152600e602090815260408083208484528252808320815160c0810190925280546001600160a01b031682526001810180546060959484019190610d6f906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9b906133aa565b8015610de85780601f10610dbd57610100808354040283529160200191610de8565b820191906000526020600020905b815481529060010190602001808311610dcb57829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054610e1f906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b906133aa565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050815250509050601460009054906101000a90046001600160a01b03166001600160a01b031663d08e14548260200151836040015133610eef8660a0015160405180602001604052806000815250612620565b610efd578560a00151610f0e565b604051806020016040528060008152505b86608001516040518663ffffffff1660e01b8152600401610f339594939291906131e2565b60006040518083038186803b158015610f4b57600080fd5b505afa158015610f5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108949190810190612eab565b600d546001600160a01b03163314610fdc5760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b606481111561102d5760405162461bcd60e51b815260206004820152601b60248201527f5f6665652073686f756c64206e6f74206578636565647320313030000000000060448201526064016108ec565b60098190556040518181527f9cabc14d438714dbcd9292df9b3f89c42f98acd93a675ad72cd6033777e9b8e7906020016109a4565b600080546001600160a01b031633146110bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ec565b333b151580156110cd5750333214155b6111195760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7920636f6e747261637420616c6c6f776564000000000000000000000060448201526064016108ec565b6108168383612679565b600d546001600160a01b031633146111785760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b600b818154811061118b5761118b613416565b9060005260206000200160006111a19190612bc9565b50565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6010602090815260009283526040808420909152908252902080546001820180546001600160a01b03909216929161127f906133aa565b80601f01602080910402602001604051908101604052809291908181526020018280546112ab906133aa565b80156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b505050505090806002015490806003015490806004018054611319906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611345906133aa565b80156113925780601f1061136757610100808354040283529160200191611392565b820191906000526020600020905b81548152906001019060200180831161137557829003601f168201915b5050506005909301549192505060ff1686565b601160205281600052604060002081815481106113c157600080fd5b90600052602060002001600091509150505481565b600e602090815260009283526040808420909152908252902080546001820180546001600160a01b03909216929161140d906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611439906133aa565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b5050505050908060020154908060030154908060040154908060050180546114ad906133aa565b80601f01602080910402602001604051908101604052809291908181526020018280546114d9906133aa565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905086565b606060078054610786906133aa565b600f60205281600052604060002081815481106113c157600080fd5b600080546001600160a01b031633146115b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ec565b6115c03383612679565b5060015b919050565b6115d3828261275f565b611614823361088b846040518060600160405280602481526020016134ed602491396001600160a01b0388166000908152600460205260408120903361086a565b5050565b6000610816338461088b856040518060600160405280602581526020016134a6602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612374565b60008181808060025b602a81101561184957611685610100856132ed565b935084818151811061169957611699613416565b016020015160f81c9250846116af8260016132b3565b815181106116bf576116bf613416565b016020015160f81c915060616001600160a01b038416108015906116ed57506066836001600160a01b031611155b15611704576116fd60578461333b565b925061176f565b6041836001600160a01b03161015801561172857506046836001600160a01b031611155b15611738576116fd60378461333b565b6030836001600160a01b03161015801561175c57506039836001600160a01b031611155b1561176f5761176c60308461333b565b92505b6061826001600160a01b03161015801561179357506066826001600160a01b031611155b156117aa576117a360578361333b565b9150611815565b6041826001600160a01b0316101580156117ce57506046826001600160a01b031611155b156117de576117a360378361333b565b6030826001600160a01b03161015801561180257506039826001600160a01b031611155b156118155761181260308361333b565b91505b816118218460106132ed565b61182b9190613288565b6118359085613288565b93506118426002826132b3565b9050611670565b509195945050505050565b60006108163384846121ee565b600d546001600160a01b031633146118b65760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b600a8190556040518181527f71046381e62dec3433d22fc6b91311cca1a7b361dcb1d48acf0c224f87a838c9906020016109a4565b600d546001600160a01b031633146119405760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b6001600160a01b0381166119a25760405162461bcd60e51b815260206004820152602360248201527f5f6465636f6465722073686f756c64206e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016108ec565b601580546001600160a01b0319166001600160a01b0383169081179091556040519081527fe1170ceb1bd09ebe9a2aee8f0daa93123d37820757d1e35f9c116ec4111632b2906020016109a4565b6111a13382612863565b600d546001600160a01b03163314611a4f5760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b6001600160a01b038116611ab15760405162461bcd60e51b815260206004820152602360248201527f5f656e636f6465722073686f756c64206e6f74206265207a65726f206164647260448201526265737360e81b60648201526084016108ec565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527f8790adabf782226415913d9186e357aa5ddac5c98f463e3de1a7df84610f67d0906020016109a4565b600d546001600160a01b03163314611b545760405162461bcd60e51b81526020600482015260186024820152771bdb9b1e48199959481859191c995cdcc8185b1b1bddd95960421b60448201526064016108ec565b600b80546001810182556000919091528151611614917f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901906020840190612b45565b600b8181548110611ba757600080fd5b906000526020600020016000915090508054611bc2906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611bee906133aa565b8015611c3b5780601f10611c1057610100808354040283529160200191611c3b565b820191906000526020600020905b815481529060010190602001808311611c1e57829003601f168201915b505050505081565b6000546001600160a01b03163314611c9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ec565b6111a181612954565b60155460405163108653df60e11b8152600091829182918291829182916001600160a01b039091169063210ca7be90611ce5908b908b906004016131a0565b60006040518083038186803b158015611cfd57600080fd5b505afa158015611d11573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d399190810190612f66565b96509650509550955095509550611dd986601460009054906101000a90046001600160a01b03166001600160a01b03166332e21ae76040518163ffffffff1660e01b815260040160006040518083038186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dd49190810190612f31565b612620565b611e255760405162461bcd60e51b815260206004820152601a60248201527f5b215d204e6f742074686520746172676574656420436861696e00000000000060448201526064016108ec565b611e2e83612421565b611e7a5760405162461bcd60e51b815260206004820152601a60248201527f5b215d204e6f7420412056616c696420436861696e2043616c6c00000000000060448201526064016108ec565b33600090815260106020908152604080832085845290915290206005015460ff1615611ee85760405162461bcd60e51b815260206004820152601b60248201527f5b215d204e6f7420612056616c696420494420746f20636c61696d000000000060448201526064016108ec565b611f018160405180602001604052806000815250612620565b611f7f5733611f0f82611667565b6001600160a01b031614611f6f5760405162461bcd60e51b815260206004820152602160248201527f5b215d205468652043616c6c6572206973206e6f7420746865205377617070656044820152603960f91b60648201526084016108ec565b611f7881611667565b9350611fd7565b6001600160a01b0384163314611fd75760405162461bcd60e51b815260206004820152601c60248201527f5b215d20496e76616c69642043616c6c2046726f6d2053656e6465720000000060448201526064016108ec565b611fe18486612679565b336000818152601060209081526040808320868452825290912080546001600160a01b0319169092178255845161201e9260010191860190612b45565b5033600090815260106020908152604080832085845290915290206002810186905561204e906004018989612c03565b503360008181526010602090815260408083208684528252808320426003820155600501805460ff1916600190811790915584845260118352818420805480830182559085528385200187905593835260139091529020546120af916132b3565b336000908152601360205260409020555050505050505050565b6001600160a01b03831661212b5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ec565b6001600160a01b03821661218c5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ec565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122525760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ec565b6001600160a01b0382166122b45760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ec565b6122f181604051806060016040528060268152602001613480602691396001600160a01b0386166000908152600160205260409020549190612374565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461232090826123ae565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121e19085815260200190565b600081848411156123985760405162461bcd60e51b81526004016108ec91906131cf565b5060006123a58486613363565b95945050505050565b6000806123bb83856132b3565b9050838110156108945760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ec565b600061081a82670de0b6b3a7640000612a14565b6000805b600b548110156124fe576124de600b828154811061244557612445613416565b90600052602060002001805461245a906133aa565b80601f0160208091040260200160405190810160405280929190818152602001828054612486906133aa565b80156124d35780601f106124a8576101008083540402835291602001916124d3565b820191906000526020600020905b8154815290600101906020018083116124b657829003601f168201915b505050505084612620565b156124ec5750600192915050565b806124f6816133e5565b915050612425565b50600092915050565b60008061252a606461252460095486612a1490919063ffffffff16565b90612a93565b905060006125388483612ad5565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166323b872dd33600c5460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b0392831660048201529116602482015260448101859052606401602060405180830381600087803b1580156125d457600080fd5b505af11580156125e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260c9190612e4e565b509392505050565b60006115c0338361275f565b60008160405160200161263391906130db565b604051602081830303815290604052805190602001208360405160200161265a91906130db565b6040516020818303038152906040528051906020012014905092915050565b6001600160a01b0382166126cf5760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108ec565b6005546126dc90826123ae565b6005556001600160a01b03821660009081526001602052604090205461270290826123ae565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127539085815260200190565b60405180910390a35050565b6001600160a01b0382166127bf5760405162461bcd60e51b815260206004820152602160248201527f42455032303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108ec565b6127fc816040518060600160405280602281526020016134cb602291396001600160a01b0385166000908152600160205260409020549190612374565b6001600160a01b0383166000908152600160205260409020556005546128229082612ad5565b6005556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612753565b6001600160a01b038281166000908152600260205260409020541615801561289d5750806001600160a01b0316826001600160a01b031614155b80156128b157506001600160a01b03811615155b6128fd5760405162461bcd60e51b815260206004820152601460248201527f5b215d20496e76616c696420526566657272657200000000000000000000000060448201526064016108ec565b6001600160a01b0390811660008181526003602090815260408083208054600181018255908452828420018054969095166001600160a01b0319968716811790955593825260029052919091208054909216179055565b6001600160a01b0381166129b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ec565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082612a235750600061081a565b6000612a2f838561331c565b905082612a3c85836132cb565b146108945760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ec565b600061089483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b17565b600061089483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612374565b60008183612b385760405162461bcd60e51b81526004016108ec91906131cf565b5060006123a584866132cb565b828054612b51906133aa565b90600052602060002090601f016020900481019282612b735760008555612bb9565b82601f10612b8c57805160ff1916838001178555612bb9565b82800160010185558215612bb9579182015b82811115612bb9578251825591602001919060010190612b9e565b50612bc5929150612c77565b5090565b508054612bd5906133aa565b6000825580601f10612be5575050565b601f0160209004906000526020600020908101906111a19190612c77565b828054612c0f906133aa565b90600052602060002090601f016020900481019282612c315760008555612bb9565b82601f10612c4a5782800160ff19823516178555612bb9565b82800160010185558215612bb9579182015b82811115612bb9578235825591602001919060010190612c5c565b5b80821115612bc55760008155600101612c78565b6000612c9f612c9a84613260565b61322f565b9050828152838383011115612cb357600080fd5b61089483602083018461337a565b805180151581146115c457600080fd5b60008083601f840112612ce357600080fd5b50813567ffffffffffffffff811115612cfb57600080fd5b602083019150836020828501011115612d1357600080fd5b9250929050565b600082601f830112612d2b57600080fd5b8135612d39612c9a82613260565b818152846020838601011115612d4e57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112612d7c57600080fd5b61089483835160208501612c8c565b600060208284031215612d9d57600080fd5b813561089481613442565b60008060408385031215612dbb57600080fd5b8235612dc681613442565b91506020830135612dd681613442565b809150509250929050565b600080600060608486031215612df657600080fd5b8335612e0181613442565b92506020840135612e1181613442565b929592945050506040919091013590565b60008060408385031215612e3557600080fd5b8235612e4081613442565b946020939093013593505050565b600060208284031215612e6057600080fd5b61089482612cc1565b60008060208385031215612e7c57600080fd5b823567ffffffffffffffff811115612e9357600080fd5b612e9f85828601612cd1565b90969095509350505050565b600060208284031215612ebd57600080fd5b815167ffffffffffffffff811115612ed457600080fd5b8201601f81018413612ee557600080fd5b612ef484825160208401612c8c565b949350505050565b600060208284031215612f0e57600080fd5b813567ffffffffffffffff811115612f2557600080fd5b612ef484828501612d1a565b600060208284031215612f4357600080fd5b815167ffffffffffffffff811115612f5a57600080fd5b612ef484828501612d6b565b600080600080600080600060e0888a031215612f8157600080fd5b875167ffffffffffffffff80821115612f9957600080fd5b612fa58b838c01612d6b565b985060208a0151975060408a01519150612fbe82613442565b60608a015191965080821115612fd357600080fd5b612fdf8b838c01612d6b565b9550612fed60808b01612cc1565b945060a08a0151935060c08a015191508082111561300a57600080fd5b506130178a828b01612d6b565b91505092959891949750929550565b6000806000806060858703121561303c57600080fd5b843567ffffffffffffffff8082111561305457600080fd5b61306088838901612d1a565b955060208701359450604087013591508082111561307d57600080fd5b5061308a87828801612cd1565b95989497509550505050565b6000602082840312156130a857600080fd5b5035919050565b600081518084526130c781602086016020860161337a565b601f01601f19169290920160200192915050565b600082516130ed81846020870161337a565b9190910192915050565b6001600160a01b038716815260c06020820152600061311960c08301886130af565b866040840152856060840152828103608084015261313781866130af565b91505082151560a0830152979650505050505050565b6001600160a01b038716815260c06020820152600061316f60c08301886130af565b86604084015285606084015284608084015282810360a084015261319381856130af565b9998505050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208152600061089460208301846130af565b60a0815260006131f560a08301886130af565b8660208401526001600160a01b0386166040840152828103606084015261321c81866130af565b9150508260808301529695505050505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156132585761325861342c565b604052919050565b600067ffffffffffffffff82111561327a5761327a61342c565b50601f01601f191660200190565b60006001600160a01b038083168185168083038211156132aa576132aa613400565b01949350505050565b600082198211156132c6576132c6613400565b500190565b6000826132e857634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160a01b038083168185168183048111821515161561331357613313613400565b02949350505050565b600081600019048311821515161561333657613336613400565b500290565b60006001600160a01b038381169083168181101561335b5761335b613400565b039392505050565b60008282101561337557613375613400565b500390565b60005b8381101561339557818101518382015260200161337d565b838111156133a4576000848401525b50505050565b600181811c908216806133be57607f821691505b602082108114156133df57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133f9576133f9613400565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111a157600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e20616d6f756e7420657863656564732062616c616e636542455032303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ebda7eae3ed8a3aa3f6800d70338e1ea37e0824d6b9abd75200ed8a5057ad47e64736f6c63430008060033
Deployed ByteCode Sourcemap
25745:8260:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21026:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22140:153;;;;;;:::i;:::-;;:::i;:::-;;;9531:14:1;;9524:22;9506:41;;9494:2;9479:18;22140:153:0;9461:92:1;26866:39:0;;;;;;;;-1:-1:-1;;;;;7434:55:1;;;7416:74;;7404:2;7389:18;26866:39:0;7371:125:1;21120:96:0;21198:12;;21120:96;;;20576:25:1;;;20564:2;20549:18;21120:96:0;20531:76:1;22299:301:0;;;;;;:::i;:::-;;:::i;28503:247::-;;;;;;:::i;:::-;;:::i;:::-;;21653:102;;;;;;:::i;:::-;-1:-1:-1;;;;;21732:17:0;;;21709:7;21732:17;;;:10;:17;;;;;;;;21653:102;26828:25;;;;;-1:-1:-1;;;;;26828:25:0;;;20834:88;20907:9;;20834:88;;20907:9;;;;20754:36:1;;20742:2;20727:18;20834:88:0;20709:87:1;27190:42:0;;;;;;:::i;:::-;;;;;;;;;;;;;;22606:202;;;;;;:::i;:::-;;:::i;21763:113::-;;;;;;:::i;:::-;-1:-1:-1;;;;;21843:20:0;21823:4;21843:20;;;:13;:20;;;;;:27;;21763:113;29997:965;;;;;;:::i;:::-;;:::i;20205:51::-;;;;;;:::i;:::-;;:::i;29617:368::-;;;;;;:::i;:::-;;:::i;28874:194::-;;;;;;:::i;:::-;;:::i;23201:154::-;;;;;;:::i;:::-;;:::i;28388:103::-;;;;;;:::i;:::-;;:::i;21222:115::-;;;;;;:::i;:::-;-1:-1:-1;;;;;21313:18:0;21290:7;21313:18;;;:9;:18;;;;;;;21222:115;15890:132;;;:::i;27051:75::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;30974:113::-;;;;;;:::i;:::-;-1:-1:-1;;;;;31060:19:0;31036:4;31060:19;;;:9;:19;;;;;;;30974:113;27133:50;;;;;;:::i;:::-;;:::i;26912:76::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;20740:88::-;20792:7;15349:6;-1:-1:-1;;;;;15349:6:0;20740:88;;31099:115;;;;;;:::i;:::-;-1:-1:-1;;;;;31186:20:0;31162:4;31186:20;;;:10;:20;;;;;;;31099:115;20928:92;;;:::i;26995:49::-;;;;;;:::i;:::-;;:::i;23073:122::-;;;;;;:::i;:::-;;:::i;24776:222::-;;;;;;:::i;:::-;;:::i;22814:253::-;;;;;;:::i;:::-;;:::i;27239:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;31720:924;;;;;;:::i;:::-;;:::i;21343:159::-;;;;;;:::i;:::-;;:::i;27641:141::-;;;;;;:::i;:::-;;:::i;26707:36::-;;;;;;28025:219;;;;;;:::i;:::-;;:::i;28758:104::-;;;;;;:::i;:::-;;:::i;21508:139::-;;;;;;:::i;:::-;-1:-1:-1;;;;;21614:18:0;;;21591:7;21614:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21508:139;27794:219;;;;;;:::i;:::-;;:::i;28256:120::-;;;;;;:::i;:::-;;:::i;26756:32::-;;;;;;:::i;:::-;;:::i;26795:26::-;;;;;-1:-1:-1;;;;;26795:26:0;;;16167:105;;;;;;:::i;:::-;;:::i;26665:35::-;;;;;;32656:1346;;;;;;:::i;:::-;;:::i;21026:88::-;21074:13;21103:5;21096:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21026:88;:::o;22140:153::-;22217:4;22230:39;3891:10;22253:7;22262:6;22230:8;:39::i;:::-;-1:-1:-1;22283:4:0;22140:153;;;;;:::o;22299:301::-;22399:4;22412:36;22422:6;22430:9;22441:6;22412:9;:36::i;:::-;22455:121;22464:6;3891:10;22486:89;22524:6;22486:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22486:19:0;;;;;;:11;:19;;;;;;3891:10;22506:12;-1:-1:-1;;;;;22486:33:0;;;;;;;;;;;;-1:-1:-1;22486:33:0;;;:89;:37;:89::i;:::-;22455:8;:121::i;:::-;-1:-1:-1;22590:4:0;22299:301;;;;;;:::o;28503:247::-;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;;;;;;;;;-1:-1:-1;;;;;28592:25:0;::::1;28584:76;;;::::0;-1:-1:-1;;;28584:76:0;;15974:2:1;28584:76:0::1;::::0;::::1;15956:21:1::0;16013:2;15993:18;;;15986:30;16052:34;16032:18;;;16025:62;-1:-1:-1;;;16103:18:1;;;16096:36;16149:19;;28584:76:0::1;15946:228:1::0;28584:76:0::1;28671:11;:25:::0;;-1:-1:-1;;;;;;28671:25:0::1;-1:-1:-1::0;;;;;28671:25:0;::::1;::::0;;::::1;::::0;;;28712:30:::1;::::0;7416:74:1;;;28712:30:0::1;::::0;7404:2:1;7389:18;28712:30:0::1;;;;;;;;28503:247:::0;:::o;22606:202::-;3891:10;22688:4;22733:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22733:34:0;;;;;;;;;;22688:4;;22701:83;;22724:7;;22733:50;;22772:10;22733:38;:50::i;29997:965::-;30133:25;30139:18;;30133:5;:25::i;:::-;30122:7;:36;;30114:96;;;;-1:-1:-1;;;30114:96:0;;18301:2:1;30114:96:0;;;18283:21:1;18340:2;18320:18;;;18313:30;18379:34;18359:18;;;18352:62;18450:17;18430:18;;;18423:45;18485:19;;30114:96:0;18273:237:1;30114:96:0;30229:17;30240:5;30229:10;:17::i;:::-;30221:56;;;;-1:-1:-1;;;30221:56:0;;17544:2:1;30221:56:0;;;17526:21:1;17583:2;17563:18;;;17556:30;17622:28;17602:18;;;17595:56;17668:18;;30221:56:0;17516:176:1;30221:56:0;30288:44;30297:10;30317:4;30324:7;30288:8;:44::i;:::-;30343:17;30363;30372:7;30363:8;:17::i;:::-;30343:37;;30391:10;30404:22;30416:9;30404:11;:22::i;:::-;30391:35;;30440:5;30437:518;;;30504:318;;;;;;;;30537:40;30552:20;;30537:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30537:40:0;;;;;;;;;;;;;-1:-1:-1;30537:14:0;;-1:-1:-1;;30537:40:0:i;:::-;:66;;30601:1;30537:66;;;30580:10;30537:66;-1:-1:-1;;;;;30504:318:0;;;;;30622:5;30504:318;;;;30646:9;30504:318;;;;30674:15;30504:318;;;;30708:12;30504:318;;;;30739:40;30754:20;;30739:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30739:40:0;;;;;;;;;;;;;-1:-1:-1;30739:14:0;;-1:-1:-1;;30739:40:0:i;:::-;:68;;30787:20;;30739:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30739:68:0;;-1:-1:-1;;;30739:68:0;;;;;;;;;;;;;;;30504:318;;30476:10;30462:25;;;;:13;:25;;;;;;;;30488:12;30462:39;;;;;;;:360;;;;-1:-1:-1;;;;;;30462:360:0;-1:-1:-1;;;;;30462:360:0;;;;;;;;;;;;:39;;:360;;-1:-1:-1;30462:360:0;;;;;;;;:::i;:::-;-1:-1:-1;30462:360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;30849:10:0;30837:23;;;;:11;:23;;;;;;;;:42;;;;;;;;;;;;;;30866:12;30837:42;;;30918:21;;;:9;:21;;;;;;:25;;-1:-1:-1;30918:21:0;:25;:::i;:::-;30904:10;30894:21;;;;:9;:21;;;;;:49;30437:518;30103:859;;29997:965;;;;:::o;20205:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20205:51:0;;-1:-1:-1;20205:51:0;;-1:-1:-1;20205:51:0:o;29617:368::-;29754:10;29707:30;29740:25;;;:13;:25;;;;;;;;:30;;;;;;;;29707:63;;;;;;;;;;-1:-1:-1;;;;;29707:63:0;;;;;;;;29671:23;;29707:30;:63;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29803:7;;;;;;;;;-1:-1:-1;;;;;29803:7:0;-1:-1:-1;;;;;29794:25:0;;29820:8;:18;;;29840:8;:19;;;29861:10;29873:49;29888:8;:29;;;29873:49;;;;;;;;;;;;:14;:49::i;:::-;:86;;29930:8;:29;;;29873:86;;;;;;;;;;;;;;;;29961:8;:15;;;29794:183;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29794:183:0;;;;;;;;;;;;:::i;28874:194::-;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;28958:3:::1;28950:4;:11;;28942:51;;;::::0;-1:-1:-1;;;28942:51:0;;12318:2:1;28942:51:0::1;::::0;::::1;12300:21:1::0;12357:2;12337:18;;;12330:30;12396:29;12376:18;;;12369:57;12443:18;;28942:51:0::1;12290:177:1::0;28942:51:0::1;29004:13;:20:::0;;;29040::::1;::::0;20576:25:1;;;29040:20:0::1;::::0;20564:2:1;20549:18;29040:20:0::1;20531:76:1::0;23201:154:0;23296:4;15482:6;;-1:-1:-1;;;;;15482:6:0;3891:10;15482:22;15474:67;;;;-1:-1:-1;;;15474:67:0;;15613:2:1;15474:67:0;;;15595:21:1;;;15632:18;;;15625:30;15691:34;15671:18;;;15664:62;15743:18;;15474:67:0;15585:182:1;15474:67:0;20505:10:::1;25243:17:::0;25288:8;;20493:50:::1;;;;-1:-1:-1::0;20520:10:0::1;20534:9;20520:23;;20493:50;20485:84;;;::::0;-1:-1:-1;;;20485:84:0;;12674:2:1;20485:84:0::1;::::0;::::1;12656:21:1::0;12713:2;12693:18;;;12686:30;12752:23;12732:18;;;12725:51;12793:18;;20485:84:0::1;12646:171:1::0;20485:84:0::1;23309:22:::2;23315:7;23324:6;23309:5;:22::i;28388:103::-:0;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;28461:16:::1;28478:4;28461:22;;;;;;;;:::i;:::-;;;;;;;;;28454:29;;;;:::i;:::-;28388:103:::0;:::o;15890:132::-;15482:6;;-1:-1:-1;;;;;15482:6:0;3891:10;15482:22;15474:67;;;;-1:-1:-1;;;15474:67:0;;15613:2:1;15474:67:0;;;15595:21:1;;;15632:18;;;15625:30;15691:34;15671:18;;;15664:62;15743:18;;15474:67:0;15585:182:1;15474:67:0;15987:1:::1;15971:6:::0;;15950:40:::1;::::0;-1:-1:-1;;;;;15971:6:0;;::::1;::::0;15950:40:::1;::::0;15987:1;;15950:40:::1;16014:1;15997:19:::0;;-1:-1:-1;;;;;;15997:19:0::1;::::0;;15890:132::o;27051:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27051:75:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27051:75:0;;;;;;;-1:-1:-1;;27051:75:0;;;:::o;27133:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26912:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26912:76:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20928:92::-;20978:13;21007:7;21000:14;;;;;:::i;26995:49::-;;;;;;;;;;;;;;;;;;;;23073:122;23131:4;15482:6;;-1:-1:-1;;;;;15482:6:0;3891:10;15482:22;15474:67;;;;-1:-1:-1;;;15474:67:0;;15613:2:1;15474:67:0;;;15595:21:1;;;15632:18;;;15625:30;15691:34;15671:18;;;15664:62;15743:18;;15474:67:0;15585:182:1;15474:67:0;23144:27:::1;3891:10:::0;23164:6:::1;23144:5;:27::i;:::-;-1:-1:-1::0;23185:4:0::1;15548:1;23073:122:::0;;;:::o;24776:222::-;24844:22;24850:7;24859:6;24844:5;:22::i;:::-;24873:119;24882:7;3891:10;24905:86;24944:6;24905:86;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24905:20:0;;;;;;:11;:20;;;;;;3891:10;24926:12;3807:101;24873:119;24776:222;;:::o;22814:253::-;22901:4;22914:129;3891:10;22937:7;22946:96;22985:15;22946:96;;;;;;;;;;;;;;;;;3891:10;22946:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22946:34:0;;;;;;;;;;;;:38;:96::i;31720:924::-;31778:7;31823:2;31778:7;;;31921:1;31907:698;31928:10;31924:1;:14;31907:698;;;31963:12;31972:3;31963:12;;:::i;:::-;;;32009:3;32013:1;32009:6;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;32051:3:0;32055:5;:1;32059;32055:5;:::i;:::-;32051:10;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;32089:2:0;-1:-1:-1;;;;;32083:8:0;;;;;;32082:25;;;32103:3;32097:2;-1:-1:-1;;;;;32097:9:0;;;32082:25;32078:232;;;32128:8;32134:2;32128:8;;:::i;:::-;;;32078:232;;;32169:2;32163;-1:-1:-1;;;;;32163:8:0;;;32162:24;;;;;32183:2;32177;-1:-1:-1;;;;;32177:8:0;;;32162:24;32158:152;;;32207:8;32213:2;32207:8;;:::i;32158:152::-;32248:2;32242;-1:-1:-1;;;;;32242:8:0;;;32241:24;;;;;32262:2;32256;-1:-1:-1;;;;;32256:8:0;;;32241:24;32237:73;;;32286:8;32292:2;32286:8;;:::i;:::-;;;32237:73;32335:2;32329;-1:-1:-1;;;;;32329:8:0;;;32328:25;;;;;32349:3;32343:2;-1:-1:-1;;;;;32343:9:0;;;32328:25;32324:232;;;32374:8;32380:2;32374:8;;:::i;:::-;;;32324:232;;;32415:2;32409;-1:-1:-1;;;;;32409:8:0;;;32408:24;;;;;32429:2;32423;-1:-1:-1;;;;;32423:8:0;;;32408:24;32404:152;;;32453:8;32459:2;32453:8;;:::i;32404:152::-;32494:2;32488;-1:-1:-1;;;;;32488:8:0;;;32487:24;;;;;32508:2;32502;-1:-1:-1;;;;;32502:8:0;;;32487:24;32483:73;;;32532:8;32538:2;32532:8;;:::i;:::-;;;32483:73;32590:2;32580:7;:2;32585;32580:7;:::i;:::-;:12;;;;:::i;:::-;32570:23;;;;:::i;:::-;;-1:-1:-1;31940:6:0;31945:1;31940:6;;:::i;:::-;;;31907:698;;;-1:-1:-1;32630:5:0;;31720:924;-1:-1:-1;;;;;31720:924:0:o;21343:159::-;21423:4;21436:42;3891:10;21460:9;21471:6;21436:9;:42::i;27641:141::-;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;27711:18:::1;:25:::0;;;27752:22:::1;::::0;20576:25:1;;;27752:22:0::1;::::0;20564:2:1;20549:18;27752:22:0::1;20531:76:1::0;28025:219:0;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;-1:-1:-1;;;;;28105:22:0;::::1;28097:70;;;::::0;-1:-1:-1;;;28097:70:0;;19825:2:1;28097:70:0::1;::::0;::::1;19807:21:1::0;19864:2;19844:18;;;19837:30;19903:34;19883:18;;;19876:62;-1:-1:-1;;;19954:18:1;;;19947:33;19997:19;;28097:70:0::1;19797:225:1::0;28097:70:0::1;28178:7;:18:::0;;-1:-1:-1;;;;;;28178:18:0::1;-1:-1:-1::0;;;;;28178:18:0;::::1;::::0;;::::1;::::0;;;28212:24:::1;::::0;7416:74:1;;;28212:24:0::1;::::0;7404:2:1;7389:18;28212:24:0::1;7371:125:1::0;28758:104:0;28819:35;28832:10;28844:9;28819:12;:35::i;27794:219::-;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;-1:-1:-1;;;;;27874:22:0;::::1;27866:70;;;::::0;-1:-1:-1;;;27866:70:0;;18717:2:1;27866:70:0::1;::::0;::::1;18699:21:1::0;18756:2;18736:18;;;18729:30;18795:34;18775:18;;;18768:62;-1:-1:-1;;;18846:18:1;;;18839:33;18889:19;;27866:70:0::1;18689:225:1::0;27866:70:0::1;27947:7;:18:::0;;-1:-1:-1;;;;;;27947:18:0::1;-1:-1:-1::0;;;;;27947:18:0;::::1;::::0;;::::1;::::0;;;27981:24:::1;::::0;7416:74:1;;;27981:24:0::1;::::0;7404:2:1;7389:18;27981:24:0::1;7371:125:1::0;28256:120:0;27405:10;;-1:-1:-1;;;;;27405:10:0;3891;27405:26;27397:63;;;;-1:-1:-1;;;27397:63:0;;14498:2:1;27397:63:0;;;14480:21:1;14537:2;14517:18;;;14510:30;-1:-1:-1;;;14556:18:1;;;14549:54;14620:18;;27397:63:0;14470:174:1;27397:63:0;28339:16:::1;:29:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28339:29:0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;26756:32::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16167:105::-;15482:6;;-1:-1:-1;;;;;15482:6:0;3891:10;15482:22;15474:67;;;;-1:-1:-1;;;15474:67:0;;15613:2:1;15474:67:0;;;15595:21:1;;;15632:18;;;15625:30;15691:34;15671:18;;;15664:62;15743:18;;15474:67:0;15585:182:1;15474:67:0;16238:28:::1;16257:8;16238:18;:28::i;32656:1346::-:0;32866:7;;32857:32;;-1:-1:-1;;;32857:32:0;;32727:28;;;;;;;;;;;;-1:-1:-1;;;;;32866:7:0;;;;32857:25;;:32;;32883:5;;;;32857:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32857:32:0;;;;;;;;;;;;:::i;:::-;32726:163;;;;;;;;;;;;;32908:60;32923:14;32948:7;;;;;;;;;-1:-1:-1;;;;;32948:7:0;-1:-1:-1;;;;;32939:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32939:28:0;;;;;;;;;;;;:::i;:::-;32908:14;:60::i;:::-;32900:99;;;;-1:-1:-1;;;32900:99:0;;19470:2:1;32900:99:0;;;19452:21:1;19509:2;19489:18;;;19482:30;19548:28;19528:18;;;19521:56;19594:18;;32900:99:0;19442:176:1;32900:99:0;33018:22;33029:10;33018;:22::i;:::-;33010:61;;;;-1:-1:-1;;;33010:61:0;;13787:2:1;33010:61:0;;;13769:21:1;13826:2;13806:18;;;13799:30;13865:28;13845:18;;;13838:56;13911:18;;33010:61:0;13759:176:1;33010:61:0;3891:10;33091:27;;;;:13;:27;;;;;;;;:32;;;;;;;;:43;;;;;33090:44;33082:84;;;;-1:-1:-1;;;33082:84:0;;14142:2:1;33082:84:0;;;14124:21:1;14181:2;14161:18;;;14154:30;14220:29;14200:18;;;14193:57;14267:18;;33082:84:0;14114:177:1;33082:84:0;33181:27;33196:7;33181:27;;;;;;;;;;;;:14;:27::i;:::-;33177:277;;33254:10;33232:18;33242:7;33232:9;:18::i;:::-;-1:-1:-1;;;;;33232:32:0;;33224:78;;;;-1:-1:-1;;;33224:78:0;;17899:2:1;33224:78:0;;;17881:21:1;17938:2;17918:18;;;17911:30;17977:34;17957:18;;;17950:62;-1:-1:-1;;;18028:18:1;;;18021:31;18069:19;;33224:78:0;17871:223:1;33224:78:0;33328:18;33338:7;33328:9;:18::i;:::-;33317:29;;33177:277;;;-1:-1:-1;;;;;33385:24:0;;3891:10;33385:24;33377:65;;;;-1:-1:-1;;;33377:65:0;;16381:2:1;33377:65:0;;;16363:21:1;16420:2;16400:18;;;16393:30;16459;16439:18;;;16432:58;16507:18;;33377:65:0;16353:178:1;33377:65:0;33464:24;33470:8;33480:7;33464:5;:24::i;:::-;3891:10;33499:27;;;;:13;:27;;;;;;;;:32;;;;;;;;:59;;-1:-1:-1;;;;;;33499:59:0;;;;;;33569:55;;;;-1:-1:-1;33569:42:0;;:55;;;;:::i;:::-;-1:-1:-1;3891:10:0;33635:27;;;;:13;:27;;;;;;;;:32;;;;;;;;:43;;;:53;;;33699:51;;:43;;33745:5;;33699:51;:::i;:::-;-1:-1:-1;3891:10:0;33761:27;;;;:13;:27;;;;;;;;:32;;;;;;;;33805:15;33761:41;;;:59;33831:43;;:50;;-1:-1:-1;;33831:50:0;33877:4;33831:50;;;;;;33892:26;;;:12;:26;;;;;:36;;;;;;;;;;;;;;;;;33966:24;;;:10;:24;;;;;;:28;;;:::i;:::-;3891:10;33939:24;;;;:10;:24;;;;;:55;-1:-1:-1;;;;;;;;32656:1346:0:o;24450:320::-;-1:-1:-1;;;;;24540:19:0;;24532:68;;;;-1:-1:-1;;;24532:68:0;;11913:2:1;24532:68:0;;;11895:21:1;11952:2;11932:18;;;11925:30;11991:34;11971:18;;;11964:62;-1:-1:-1;;;12042:18:1;;;12035:34;12086:19;;24532:68:0;11885:226:1;24532:68:0;-1:-1:-1;;;;;24615:21:0;;24607:68;;;;-1:-1:-1;;;24607:68:0;;20229:2:1;24607:68:0;;;20211:21:1;20268:2;20248:18;;;20241:30;20307:34;20287:18;;;20280:62;-1:-1:-1;;;20358:18:1;;;20351:32;20400:19;;24607:68:0;20201:224:1;24607:68:0;-1:-1:-1;;;;;24684:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24732:32;;20576:25:1;;;24732:32:0;;20549:18:1;24732:32:0;;;;;;;;24450:320;;;:::o;23361:449::-;-1:-1:-1;;;;;23455:20:0;;23447:70;;;;-1:-1:-1;;;23447:70:0;;11507:2:1;23447:70:0;;;11489:21:1;11546:2;11526:18;;;11519:30;11585:34;11565:18;;;11558:62;-1:-1:-1;;;11636:18:1;;;11629:35;11681:19;;23447:70:0;11479:227:1;23447:70:0;-1:-1:-1;;;;;23532:23:0;;23524:71;;;;-1:-1:-1;;;23524:71:0;;16738:2:1;23524:71:0;;;16720:21:1;16777:2;16757:18;;;16750:30;16816:34;16796:18;;;16789:62;-1:-1:-1;;;16867:18:1;;;16860:33;16910:19;;23524:71:0;16710:225:1;23524:71:0;23624;23646:6;23624:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23624:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23604:17:0;;;;;;;:9;:17;;;;;;:91;;;;23725:20;;;;;;;:32;;23750:6;23725:24;:32::i;:::-;-1:-1:-1;;;;;23702:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23769:35;;;;;;;;;;23797:6;20576:25:1;;20564:2;20549:18;;20531:76;5198:178:0;5284:7;5316:12;5308:6;;;;5300:29;;;;-1:-1:-1;;;5300:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5336:9:0;5348:5;5352:1;5348;:5;:::i;:::-;5336:17;5198:178;-1:-1:-1;;;;;5198:178:0:o;4371:167::-;4429:7;;4457:5;4461:1;4457;:5;:::i;:::-;4445:17;;4482:1;4477;:6;;4469:46;;;;-1:-1:-1;;;4469:46:0;;13431:2:1;4469:46:0;;;13413:21:1;13470:2;13450:18;;;13443:30;13509:29;13489:18;;;13482:57;13556:18;;4469:46:0;13403:177:1;29080:97:0;29130:4;29154:15;:5;29164:4;29154:9;:15::i;31421:287::-;31486:4;31507:6;31503:165;31519:16;:23;31515:27;;31503:165;;;31567:43;31582:16;31599:1;31582:19;;;;;;;;:::i;:::-;;;;;;;;31567:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31603:6;31567:14;:43::i;:::-;31564:93;;;-1:-1:-1;31637:4:0;;31421:287;-1:-1:-1;;31421:287:0:o;31564:93::-;31544:4;;;;:::i;:::-;;;;31503:165;;;-1:-1:-1;31695:5:0;;31421:287;-1:-1:-1;;31421:287:0:o;29332:273::-;29385:7;29405:12;29420:35;29451:3;29420:26;29432:13;;29420:7;:11;;:26;;;;:::i;:::-;:30;;:35::i;:::-;29405:50;-1:-1:-1;29466:20:0;29489:17;:7;29405:50;29489:11;:17::i;:::-;29466:40;-1:-1:-1;;;;;;29517:4:0;:17;;3891:10;29549:11;;29517:50;;;;;;;;;;-1:-1:-1;;;;;7790:15:1;;;29517:50:0;;;7772:34:1;29549:11:0;;7822:18:1;;;7815:43;7874:18;;;7867:34;;;7684:18;;29517:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29585:12:0;29332:273;-1:-1:-1;;;29332:273:0:o;29189:131::-;29245:4;29262:28;3891:10;29282:7;29262:5;:28::i;31226:183::-;31307:4;31396:1;31378:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;31368:32;;;;;;31360:1;31342:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;31332:32;;;;;;:68;31324:77;;31226:183;;;;:::o;23816:290::-;-1:-1:-1;;;;;23888:21:0;;23880:65;;;;-1:-1:-1;;;23880:65:0;;15253:2:1;23880:65:0;;;15235:21:1;15292:2;15272:18;;;15265:30;15331:33;15311:18;;;15304:61;15382:18;;23880:65:0;15225:181:1;23880:65:0;23969:12;;:24;;23986:6;23969:16;:24::i;:::-;23954:12;:39;-1:-1:-1;;;;;24021:18:0;;;;;;:9;:18;;;;;;:30;;24044:6;24021:22;:30::i;:::-;-1:-1:-1;;;;;24000:18:0;;;;;;:9;:18;;;;;;:51;;;;24063:37;;24000:18;;;24063:37;;;;24093:6;20576:25:1;;20564:2;20549:18;;20531:76;24063:37:0;;;;;;;;23816:290;;:::o;24114:330::-;-1:-1:-1;;;;;24186:21:0;;24178:67;;;;-1:-1:-1;;;24178:67:0;;17142:2:1;24178:67:0;;;17124:21:1;17181:2;17161:18;;;17154:30;17220:34;17200:18;;;17193:62;-1:-1:-1;;;17271:18:1;;;17264:31;17312:19;;24178:67:0;17114:223:1;24178:67:0;24275:68;24298:6;24275:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24275:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;24254:18:0;;;;;;:9;:18;;;;;:89;24365:12;;:24;;24382:6;24365:16;:24::i;:::-;24350:12;:39;24401:37;;20576:25:1;;;24427:1:0;;-1:-1:-1;;;;;24401:37:0;;;;;20564:2:1;20549:18;24401:37:0;20531:76:1;21884:250:0;-1:-1:-1;;;;;21960:17:0;;;21989:1;21960:17;;;:10;:17;;;;;;;:31;:49;;;;;22004:5;-1:-1:-1;;;;;21995:14:0;:5;-1:-1:-1;;;;;21995:14:0;;;21960:49;:72;;;;-1:-1:-1;;;;;;22013:19:0;;;;21960:72;21952:105;;;;-1:-1:-1;;;21952:105:0;;19121:2:1;21952:105:0;;;19103:21:1;19160:2;19140:18;;;19133:30;19199:22;19179:18;;;19172:50;19239:18;;21952:105:0;19093:170:1;21952:105:0;-1:-1:-1;;;;;22064:20:0;;;;;;;:13;:20;;;;;;;;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22064:32:0;;;;;;;;22103:17;;;:10;:17;;;;;;:25;;;;;;;;21884:250::o;16370:215::-;-1:-1:-1;;;;;16440:22:0;;16432:73;;;;-1:-1:-1;;;16432:73:0;;13024:2:1;16432:73:0;;;13006:21:1;13063:2;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;-1:-1:-1;;;13153:18:1;;;13146:36;13199:19;;16432:73:0;12996:228:1;16432:73:0;16538:6;;;16517:38;;-1:-1:-1;;;;;16517:38:0;;;;16538:6;;;16517:38;;;16562:6;:17;;-1:-1:-1;;;;;;16562:17:0;-1:-1:-1;;;;;16562:17:0;;;;;;;;;;16370:215::o;5607:431::-;5665:7;5894:6;5890:37;;-1:-1:-1;5918:1:0;5911:8;;5890:37;5935:9;5947:5;5951:1;5947;:5;:::i;:::-;5935:17;-1:-1:-1;5976:1:0;5967:5;5971:1;5935:17;5967:5;:::i;:::-;:10;5959:56;;;;-1:-1:-1;;;5959:56:0;;14851:2:1;5959:56:0;;;14833:21:1;14890:2;14870:18;;;14863:30;14929:34;14909:18;;;14902:62;-1:-1:-1;;;14980:18:1;;;14973:31;15021:19;;5959:56:0;14823:223:1;6482:126:0;6540:7;6563:39;6567:1;6570;6563:39;;;;;;;;;;;;;;;;;:3;:39::i;4793:130::-;4851:7;4874:43;4878:1;4881;4874:43;;;;;;;;;;;;;;;;;:3;:43::i;7072:323::-;7158:7;7252:12;7245:5;7237:28;;;;-1:-1:-1;;;7237:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7272:9:0;7284:5;7288:1;7284;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:307:1;89:5;118:52;134:35;162:6;134:35;:::i;:::-;118:52;:::i;:::-;109:61;;193:6;186:5;179:21;233:3;224:6;219:3;215:16;212:25;209:2;;;250:1;247;240:12;209:2;263:52;308:6;301:4;294:5;290:16;285:3;263:52;:::i;326:164::-;402:13;;451;;444:21;434:32;;424:2;;480:1;477;470:12;495:347;546:8;556:6;610:3;603:4;595:6;591:17;587:27;577:2;;628:1;625;618:12;577:2;-1:-1:-1;651:20:1;;694:18;683:30;;680:2;;;726:1;723;716:12;680:2;763:4;755:6;751:17;739:29;;815:3;808:4;799:6;791;787:19;783:30;780:39;777:2;;;832:1;829;822:12;777:2;567:275;;;;;:::o;847:463::-;890:5;943:3;936:4;928:6;924:17;920:27;910:2;;961:1;958;951:12;910:2;997:6;984:20;1028:48;1044:31;1072:2;1044:31;:::i;1028:48::-;1101:2;1092:7;1085:19;1147:3;1140:4;1135:2;1127:6;1123:15;1119:26;1116:35;1113:2;;;1164:1;1161;1154:12;1113:2;1229;1222:4;1214:6;1210:17;1203:4;1194:7;1190:18;1177:55;1277:1;1252:16;;;1270:4;1248:27;1241:38;;;;1256:7;900:410;-1:-1:-1;;;900:410:1:o;1315:236::-;1369:5;1422:3;1415:4;1407:6;1403:17;1399:27;1389:2;;1440:1;1437;1430:12;1389:2;1462:83;1541:3;1532:6;1526:13;1519:4;1511:6;1507:17;1462:83;:::i;1556:247::-;1615:6;1668:2;1656:9;1647:7;1643:23;1639:32;1636:2;;;1684:1;1681;1674:12;1636:2;1723:9;1710:23;1742:31;1767:5;1742:31;:::i;1808:388::-;1876:6;1884;1937:2;1925:9;1916:7;1912:23;1908:32;1905:2;;;1953:1;1950;1943:12;1905:2;1992:9;1979:23;2011:31;2036:5;2011:31;:::i;:::-;2061:5;-1:-1:-1;2118:2:1;2103:18;;2090:32;2131:33;2090:32;2131:33;:::i;:::-;2183:7;2173:17;;;1895:301;;;;;:::o;2201:456::-;2278:6;2286;2294;2347:2;2335:9;2326:7;2322:23;2318:32;2315:2;;;2363:1;2360;2353:12;2315:2;2402:9;2389:23;2421:31;2446:5;2421:31;:::i;:::-;2471:5;-1:-1:-1;2528:2:1;2513:18;;2500:32;2541:33;2500:32;2541:33;:::i;:::-;2305:352;;2593:7;;-1:-1:-1;;;2647:2:1;2632:18;;;;2619:32;;2305:352::o;2662:315::-;2730:6;2738;2791:2;2779:9;2770:7;2766:23;2762:32;2759:2;;;2807:1;2804;2797:12;2759:2;2846:9;2833:23;2865:31;2890:5;2865:31;:::i;:::-;2915:5;2967:2;2952:18;;;;2939:32;;-1:-1:-1;;;2749:228:1:o;2982:202::-;3049:6;3102:2;3090:9;3081:7;3077:23;3073:32;3070:2;;;3118:1;3115;3108:12;3070:2;3141:37;3168:9;3141:37;:::i;3189:409::-;3259:6;3267;3320:2;3308:9;3299:7;3295:23;3291:32;3288:2;;;3336:1;3333;3326:12;3288:2;3376:9;3363:23;3409:18;3401:6;3398:30;3395:2;;;3441:1;3438;3431:12;3395:2;3480:58;3530:7;3521:6;3510:9;3506:22;3480:58;:::i;:::-;3557:8;;3454:84;;-1:-1:-1;3278:320:1;-1:-1:-1;;;;3278:320:1:o;3603:457::-;3682:6;3735:2;3723:9;3714:7;3710:23;3706:32;3703:2;;;3751:1;3748;3741:12;3703:2;3784:9;3778:16;3817:18;3809:6;3806:30;3803:2;;;3849:1;3846;3839:12;3803:2;3872:22;;3925:4;3917:13;;3913:27;-1:-1:-1;3903:2:1;;3954:1;3951;3944:12;3903:2;3977:77;4046:7;4041:2;4035:9;4030:2;4026;4022:11;3977:77;:::i;:::-;3967:87;3693:367;-1:-1:-1;;;;3693:367:1:o;4065:322::-;4134:6;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4243:9;4230:23;4276:18;4268:6;4265:30;4262:2;;;4308:1;4305;4298:12;4262:2;4331:50;4373:7;4364:6;4353:9;4349:22;4331:50;:::i;4392:337::-;4472:6;4525:2;4513:9;4504:7;4500:23;4496:32;4493:2;;;4541:1;4538;4531:12;4493:2;4574:9;4568:16;4607:18;4599:6;4596:30;4593:2;;;4639:1;4636;4629:12;4593:2;4662:61;4715:7;4706:6;4695:9;4691:22;4662:61;:::i;4734:1099::-;4885:6;4893;4901;4909;4917;4925;4933;4986:3;4974:9;4965:7;4961:23;4957:33;4954:2;;;5003:1;5000;4993:12;4954:2;5036:9;5030:16;5065:18;5106:2;5098:6;5095:14;5092:2;;;5122:1;5119;5112:12;5092:2;5145:61;5198:7;5189:6;5178:9;5174:22;5145:61;:::i;:::-;5135:71;;5246:2;5235:9;5231:18;5225:25;5215:35;;5293:2;5282:9;5278:18;5272:25;5259:38;;5306:31;5331:5;5306:31;:::i;:::-;5407:2;5392:18;;5386:25;5356:5;;-1:-1:-1;5423:16:1;;;5420:2;;;5452:1;5449;5442:12;5420:2;5475:63;5530:7;5519:8;5508:9;5504:24;5475:63;:::i;:::-;5465:73;;5557:47;5599:3;5588:9;5584:19;5557:47;:::i;:::-;5547:57;;5644:3;5633:9;5629:19;5623:26;5613:36;;5695:3;5684:9;5680:19;5674:26;5658:42;;5725:2;5715:8;5712:16;5709:2;;;5741:1;5738;5731:12;5709:2;;5764:63;5819:7;5808:8;5797:9;5793:24;5764:63;:::i;:::-;5754:73;;;4944:889;;;;;;;;;;:::o;5838:699::-;5937:6;5945;5953;5961;6014:2;6002:9;5993:7;5989:23;5985:32;5982:2;;;6030:1;6027;6020:12;5982:2;6070:9;6057:23;6099:18;6140:2;6132:6;6129:14;6126:2;;;6156:1;6153;6146:12;6126:2;6179:50;6221:7;6212:6;6201:9;6197:22;6179:50;:::i;:::-;6169:60;;6276:2;6265:9;6261:18;6248:32;6238:42;;6333:2;6322:9;6318:18;6305:32;6289:48;;6362:2;6352:8;6349:16;6346:2;;;6378:1;6375;6368:12;6346:2;;6417:60;6469:7;6458:8;6447:9;6443:24;6417:60;:::i;:::-;5972:565;;;;-1:-1:-1;6496:8:1;-1:-1:-1;;;;5972:565:1:o;6542:180::-;6601:6;6654:2;6642:9;6633:7;6629:23;6625:32;6622:2;;;6670:1;6667;6660:12;6622:2;-1:-1:-1;6693:23:1;;6612:110;-1:-1:-1;6612:110:1:o;6727:257::-;6768:3;6806:5;6800:12;6833:6;6828:3;6821:19;6849:63;6905:6;6898:4;6893:3;6889:14;6882:4;6875:5;6871:16;6849:63;:::i;:::-;6966:2;6945:15;-1:-1:-1;;6941:29:1;6932:39;;;;6973:4;6928:50;;6776:208;-1:-1:-1;;6776:208:1:o;6989:276::-;7120:3;7158:6;7152:13;7174:53;7220:6;7215:3;7208:4;7200:6;7196:17;7174:53;:::i;:::-;7243:16;;;;;7128:137;-1:-1:-1;;7128:137:1:o;7912:726::-;-1:-1:-1;;;;;8217:6:1;8213:55;8202:9;8195:74;8305:3;8300:2;8289:9;8285:18;8278:31;8176:4;8332:45;8372:3;8361:9;8357:19;8349:6;8332:45;:::i;:::-;8413:6;8408:2;8397:9;8393:18;8386:34;8456:6;8451:2;8440:9;8436:18;8429:34;8512:9;8504:6;8500:22;8494:3;8483:9;8479:19;8472:51;8540:32;8565:6;8557;8540:32;:::i;:::-;8532:40;;;8623:6;8616:14;8609:22;8603:3;8592:9;8588:19;8581:51;8185:453;;;;;;;;;:::o;8643:718::-;-1:-1:-1;;;;;8956:6:1;8952:55;8941:9;8934:74;9044:3;9039:2;9028:9;9024:18;9017:31;8915:4;9071:45;9111:3;9100:9;9096:19;9088:6;9071:45;:::i;:::-;9152:6;9147:2;9136:9;9132:18;9125:34;9195:6;9190:2;9179:9;9175:18;9168:34;9239:6;9233:3;9222:9;9218:19;9211:35;9295:9;9287:6;9283:22;9277:3;9266:9;9262:19;9255:51;9323:32;9348:6;9340;9323:32;:::i;:::-;9315:40;8924:437;-1:-1:-1;;;;;;;;;8924:437:1:o;9558:388::-;9715:2;9704:9;9697:21;9754:6;9749:2;9738:9;9734:18;9727:34;9811:6;9803;9798:2;9787:9;9783:18;9770:48;9867:1;9838:22;;;9862:2;9834:31;;;9827:42;;;;9930:2;9909:15;;;-1:-1:-1;;9905:29:1;9890:45;9886:54;;9687:259;-1:-1:-1;9687:259:1:o;9951:217::-;10098:2;10087:9;10080:21;10061:4;10118:44;10158:2;10147:9;10143:18;10135:6;10118:44;:::i;10654:646::-;10935:3;10924:9;10917:22;10898:4;10962:45;11002:3;10991:9;10987:19;10979:6;10962:45;:::i;:::-;11043:6;11038:2;11027:9;11023:18;11016:34;-1:-1:-1;;;;;11090:6:1;11086:55;11081:2;11070:9;11066:18;11059:83;11190:9;11182:6;11178:22;11173:2;11162:9;11158:18;11151:50;11218:32;11243:6;11235;11218:32;:::i;:::-;11210:40;;;11287:6;11281:3;11270:9;11266:19;11259:35;10907:393;;;;;;;;:::o;20801:275::-;20872:2;20866:9;20937:2;20918:13;;-1:-1:-1;;20914:27:1;20902:40;;20972:18;20957:34;;20993:22;;;20954:62;20951:2;;;21019:18;;:::i;:::-;21055:2;21048:22;20846:230;;-1:-1:-1;20846:230:1:o;21081:186::-;21129:4;21162:18;21154:6;21151:30;21148:2;;;21184:18;;:::i;:::-;-1:-1:-1;21250:2:1;21229:15;-1:-1:-1;;21225:29:1;21256:4;21221:40;;21138:129::o;21272:261::-;21312:3;-1:-1:-1;;;;;21409:2:1;21406:1;21402:10;21439:2;21436:1;21432:10;21470:3;21466:2;21462:12;21457:3;21454:21;21451:2;;;21478:18;;:::i;:::-;21514:13;;21320:213;-1:-1:-1;;;;21320:213:1:o;21538:128::-;21578:3;21609:1;21605:6;21602:1;21599:13;21596:2;;;21615:18;;:::i;:::-;-1:-1:-1;21651:9:1;;21586:80::o;21671:217::-;21711:1;21737;21727:2;;21781:10;21776:3;21772:20;21769:1;21762:31;21816:4;21813:1;21806:15;21844:4;21841:1;21834:15;21727:2;-1:-1:-1;21873:9:1;;21717:171::o;21893:295::-;21933:7;-1:-1:-1;;;;;22034:2:1;22031:1;22027:10;22064:2;22061:1;22057:10;22120:3;22116:2;22112:12;22107:3;22104:21;22097:3;22090:11;22083:19;22079:47;22076:2;;;22129:18;;:::i;:::-;22169:13;;21945:243;-1:-1:-1;;;;21945:243:1:o;22193:168::-;22233:7;22299:1;22295;22291:6;22287:14;22284:1;22281:21;22276:1;22269:9;22262:17;22258:45;22255:2;;;22306:18;;:::i;:::-;-1:-1:-1;22346:9:1;;22245:116::o;22366:254::-;22406:4;-1:-1:-1;;;;;22527:10:1;;;;22497;;22549:12;;;22546:2;;;22564:18;;:::i;:::-;22601:13;;22415:205;-1:-1:-1;;;22415:205:1:o;22625:125::-;22665:4;22693:1;22690;22687:8;22684:2;;;22698:18;;:::i;:::-;-1:-1:-1;22735:9:1;;22674:76::o;22755:258::-;22827:1;22837:113;22851:6;22848:1;22845:13;22837:113;;;22927:11;;;22921:18;22908:11;;;22901:39;22873:2;22866:10;22837:113;;;22968:6;22965:1;22962:13;22959:2;;;23003:1;22994:6;22989:3;22985:16;22978:27;22959:2;;22808:205;;;:::o;23018:380::-;23097:1;23093:12;;;;23140;;;23161:2;;23215:4;23207:6;23203:17;23193:27;;23161:2;23268;23260:6;23257:14;23237:18;23234:38;23231:2;;;23314:10;23309:3;23305:20;23302:1;23295:31;23349:4;23346:1;23339:15;23377:4;23374:1;23367:15;23231:2;;23073:325;;;:::o;23403:135::-;23442:3;-1:-1:-1;;23463:17:1;;23460:2;;;23483:18;;:::i;:::-;-1:-1:-1;23530:1:1;23519:13;;23450:88::o;23543:127::-;23604:10;23599:3;23595:20;23592:1;23585:31;23635:4;23632:1;23625:15;23659:4;23656:1;23649:15;23675:127;23736:10;23731:3;23727:20;23724:1;23717:31;23767:4;23764:1;23757:15;23791:4;23788:1;23781:15;23807:127;23868:10;23863:3;23859:20;23856:1;23849:31;23899:4;23896:1;23889:15;23923:4;23920:1;23913:15;23939:154;-1:-1:-1;;;;;24018:5:1;24014:54;24007:5;24004:65;23994:2;;24083:1;24080;24073:12
Swarm Source
ipfs://ebda7eae3ed8a3aa3f6800d70338e1ea37e0824d6b9abd75200ed8a5057ad47e