Contract Overview
Socket: Bungee Bridge
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
SocketGateway
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2023-07-31 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; pragma experimental ABIEncoderV2; error CelerRefundNotReady(); error OnlySocketDeployer(); error OnlySocketGatewayOwner(); error OnlySocketGateway(); error OnlyOwner(); error OnlyNominee(); error TransferIdExists(); error TransferIdDoesnotExist(); error Address0Provided(); error SwapFailed(); error UnsupportedInterfaceId(); error InvalidCelerRefund(); error CelerAlreadyRefunded(); error IncorrectBridgeRatios(); error ZeroAddressNotAllowed(); error ArrayLengthMismatch(); error PartialSwapsNotAllowed(); abstract contract Ownable { address private _owner; address private _nominee; event OwnerNominated(address indexed nominee); event OwnerClaimed(address indexed claimer); constructor(address owner_) { _claimOwner(owner_); } modifier onlyOwner() { if (msg.sender != _owner) { revert OnlyOwner(); } _; } function owner() public view returns (address) { return _owner; } function nominee() public view returns (address) { return _nominee; } function nominateOwner(address nominee_) external { if (msg.sender != _owner) { revert OnlyOwner(); } _nominee = nominee_; emit OwnerNominated(_nominee); } function claimOwner() external { if (msg.sender != _nominee) { revert OnlyNominee(); } _claimOwner(msg.sender); } function _claimOwner(address claimer_) internal { _owner = claimer_; _nominee = address(0); emit OwnerClaimed(claimer_); } } /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument. mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } } // Functions taken out from https://github.com/GNSPS/solidity-bytes-utils/blob/master/contracts/BytesLib.sol library LibBytes { // solhint-disable no-inline-assembly // LibBytes specific errors error SliceOverflow(); error SliceOutOfBounds(); error AddressOutOfBounds(); error UintOutOfBounds(); // ------------------------- function concat( bytes memory _preBytes, bytes memory _postBytes ) internal pure returns (bytes memory) { bytes memory tempBytes; assembly { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // Store the length of the first bytes array at the beginning of // the memory for tempBytes. let length := mload(_preBytes) mstore(tempBytes, length) // Maintain a memory counter for the current write location in the // temp bytes array by adding the 32 bytes for the array length to // the starting location. let mc := add(tempBytes, 0x20) // Stop copying when the memory counter reaches the length of the // first bytes array. let end := add(mc, length) for { // Initialize a copy counter to the start of the _preBytes data, // 32 bytes into its memory. let cc := add(_preBytes, 0x20) } lt(mc, end) { // Increase both counters by 32 bytes each iteration. mc := add(mc, 0x20) cc := add(cc, 0x20) } { // Write the _preBytes data into the tempBytes memory 32 bytes // at a time. mstore(mc, mload(cc)) } // Add the length of _postBytes to the current length of tempBytes // and store it as the new length in the first 32 bytes of the // tempBytes memory. length := mload(_postBytes) mstore(tempBytes, add(length, mload(tempBytes))) // Move the memory counter back from a multiple of 0x20 to the // actual end of the _preBytes data. mc := end // Stop copying when the memory counter reaches the new combined // length of the arrays. end := add(mc, length) for { let cc := add(_postBytes, 0x20) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } // Update the free-memory pointer by padding our last write location // to 32 bytes: add 31 bytes to the end of tempBytes to move to the // next 32 byte block, then round down to the nearest multiple of // 32. If the sum of the length of the two arrays is zero then add // one before rounding down to leave a blank 32 bytes (the length block with 0). mstore( 0x40, and( add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31) // Round down to the nearest 32 bytes. ) ) } return tempBytes; } function slice( bytes memory _bytes, uint256 _start, uint256 _length ) internal pure returns (bytes memory) { if (_length + 31 < _length) { revert SliceOverflow(); } if (_bytes.length < _start + _length) { revert SliceOutOfBounds(); } bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add( add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)) ) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add( add( add(_bytes, lengthmod), mul(0x20, iszero(lengthmod)) ), _start ) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) //zero out the 32 bytes slice we are about to return //we need to do it because Solidity does not garbage collect mstore(tempBytes, 0) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } } /// @title LibUtil library /// @notice library with helper functions to operate on bytes-data and addresses /// @author socket dot tech library LibUtil { /// @notice LibBytes library to handle operations on bytes using LibBytes for bytes; /// @notice function to extract revertMessage from bytes data /// @dev use the revertMessage and then further revert with a custom revert and message /// @param _res bytes data received from the transaction call function getRevertMsg( bytes memory _res ) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_res.length < 68) { return "Transaction reverted silently"; } bytes memory revertData = _res.slice(4, _res.length - 4); // Remove the selector which is the first 4 bytes return abi.decode(revertData, (string)); // All that remains is the revert string } } /** * @title ISocketRoute * @notice Interface for routeManagement functions in SocketGateway. * @author Socket dot tech. */ interface ISocketRoute { /** * @notice Add route to the socketGateway This is a restricted function to be called by only socketGatewayOwner * @dev ensure routeAddress is a verified bridge or middleware implementation address * @param routeAddress The address of bridge or middleware implementation contract deployed * @return Id of the route added to the routes-mapping in socketGateway storage */ function addRoute(address routeAddress) external returns (uint256); /** * @notice disable a route by setting ZeroAddress to the entry in routes-mapping identified by routeId as key. This is a restricted function to be called by only socketGatewayOwner * @param routeId The Id of route-implementation in the routes mapping */ function disableRoute(uint32 routeId) external; /** * @notice Get routeImplementation address mapped to the routeId * @param routeId routeId is the key in the mapping for routes * @return route-implementation address */ function getRoute(uint32 routeId) external view returns (address); } /** * @title ISocketRoute * @notice Interface with Request DataStructures to invoke controller functions. * @author Socket dot tech. */ interface ISocketRequest { struct SwapMultiBridgeRequest { uint32 swapRouteId; bytes swapImplData; uint32[] bridgeRouteIds; bytes[] bridgeImplDataItems; uint256[] bridgeRatios; bytes[] eventDataItems; } // Datastructure for Refuel-Swap-Bridge function struct RefuelSwapBridgeRequest { uint32 refuelRouteId; bytes refuelData; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } // Datastructure for DeductFees-Swap function struct FeesTakerSwapRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 routeId; bytes swapRequestData; } // Datastructure for DeductFees-Bridge function struct FeesTakerBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 routeId; bytes bridgeRequestData; } // Datastructure for DeductFees-MultiBridge function struct FeesTakerMultiBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32[] bridgeRouteIds; bytes[] bridgeRequestDataItems; } // Datastructure for DeductFees-Swap-Bridge function struct FeesTakerSwapBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } // Datastructure for DeductFees-Refuel-Swap-Bridge function struct FeesTakerRefuelSwapBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 refuelRouteId; bytes refuelData; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } } /** * @title ISocketGateway * @notice Interface for SocketGateway functions. * @dev functions can be added here for invocation from external contracts or off-chain * @author Socket dot tech. */ interface ISocketGateway { /** * @notice Request-struct for controllerRequests * @dev ensure the value for data is generated using the function-selectors defined in the controllerImplementation contracts */ struct SocketControllerRequest { // controllerId is the id mapped to the controllerAddress uint32 controllerId; // transactionImplData generated off-chain or by caller using function-selector of the controllerContract bytes data; } // @notice view to get owner-address function owner() external view returns (address); } /// @title SocketGatewayContract /// @notice Socketgateway is a contract with entrypoint functions for all interactions with socket liquidity layer /// @author Socket Team contract SocketGateway is Ownable { using LibBytes for bytes; using LibBytes for bytes4; using SafeTransferLib for ERC20; /// @notice FunctionSelector used to delegatecall from swap to the function of bridge router implementation bytes4 public immutable BRIDGE_AFTER_SWAP_SELECTOR = bytes4(keccak256("bridgeAfterSwap(uint256,bytes)")); /// @notice storage variable to keep track of total number of routes registered in socketgateway uint32 public routesCount = 385; /// @notice storage variable to keep track of total number of controllers registered in socketgateway uint32 public controllerCount; address public immutable disabledRouteAddress; uint256 public constant CENT_PERCENT = 100e18; /// @notice storage mapping for route implementation addresses mapping(uint32 => address) public routes; /// storage mapping for controller implemenation addresses mapping(uint32 => address) public controllers; // Events -------------------------------------------------------------------------------------------------------> /// @notice Event emitted when a router is added to socketgateway event NewRouteAdded(uint32 indexed routeId, address indexed route); /// @notice Event emitted when a route is disabled event RouteDisabled(uint32 indexed routeId); /// @notice Event emitted when ownership transfer is requested by socket-gateway-owner event OwnershipTransferRequested( address indexed _from, address indexed _to ); /// @notice Event emitted when a controller is added to socketgateway event ControllerAdded( uint32 indexed controllerId, address indexed controllerAddress ); /// @notice Event emitted when a controller is disabled event ControllerDisabled(uint32 indexed controllerId); constructor(address _owner, address _disabledRoute) Ownable(_owner) { disabledRouteAddress = _disabledRoute; } // Able to receive ether // solhint-disable-next-line no-empty-blocks receive() external payable {} /******************************************* * EXTERNAL AND PUBLIC FUNCTIONS * *******************************************/ /** * @notice executes functions in the routes identified using routeId and functionSelectorData * @notice The caller must first approve this contract to spend amount of ERC20-Token being bridged/swapped * @dev ensure the data in routeData to be built using the function-selector defined as a * constant in the route implementation contract * @param routeId route identifier * @param routeData functionSelectorData generated using the function-selector defined in the route Implementation */ function executeRoute( uint32 routeId, bytes calldata routeData ) external payable returns (bytes memory) { (bool success, bytes memory result) = addressAt(routeId).delegatecall( routeData ); if (!success) { assembly { revert(add(result, 32), mload(result)) } } return result; } /** * @notice swaps a token on sourceChain and split it across multiple bridge-recipients * @notice The caller must first approve this contract to spend amount of ERC20-Token being swapped * @dev ensure the swap-data and bridge-data is generated using the function-selector defined as a constant in the implementation address * @param swapMultiBridgeRequest request */ function swapAndMultiBridge( ISocketRequest.SwapMultiBridgeRequest calldata swapMultiBridgeRequest ) external payable { uint256 requestLength = swapMultiBridgeRequest.bridgeRouteIds.length; if ( requestLength != swapMultiBridgeRequest.bridgeImplDataItems.length ) { revert ArrayLengthMismatch(); } uint256 ratioAggregate; for (uint256 index = 0; index < requestLength; ) { ratioAggregate += swapMultiBridgeRequest.bridgeRatios[index]; } if (ratioAggregate != CENT_PERCENT) { revert IncorrectBridgeRatios(); } (bool swapSuccess, bytes memory swapResult) = addressAt( swapMultiBridgeRequest.swapRouteId ).delegatecall(swapMultiBridgeRequest.swapImplData); if (!swapSuccess) { assembly { revert(add(swapResult, 32), mload(swapResult)) } } uint256 amountReceivedFromSwap = abi.decode(swapResult, (uint256)); uint256 bridgedAmount; for (uint256 index = 0; index < requestLength; ) { uint256 bridgingAmount; // if it is the last bridge request, bridge the remaining amount if (index == requestLength - 1) { bridgingAmount = amountReceivedFromSwap - bridgedAmount; } else { // bridging amount is the multiplication of bridgeRatio and amountReceivedFromSwap bridgingAmount = (amountReceivedFromSwap * swapMultiBridgeRequest.bridgeRatios[index]) / (CENT_PERCENT); } // update the bridged amount, this would be used for computation for last bridgeRequest bridgedAmount += bridgingAmount; bytes memory bridgeImpldata = abi.encodeWithSelector( BRIDGE_AFTER_SWAP_SELECTOR, bridgingAmount, swapMultiBridgeRequest.bridgeImplDataItems[index] ); (bool bridgeSuccess, bytes memory bridgeResult) = addressAt( swapMultiBridgeRequest.bridgeRouteIds[index] ).delegatecall(bridgeImpldata); if (!bridgeSuccess) { assembly { revert(add(bridgeResult, 32), mload(bridgeResult)) } } unchecked { ++index; } } } /** * @notice sequentially executes functions in the routes identified using routeId and functionSelectorData * @notice The caller must first approve this contract to spend amount of ERC20-Token being bridged/swapped * @dev ensure the data in each dataItem to be built using the function-selector defined as a * constant in the route implementation contract * @param routeIds a list of route identifiers * @param dataItems a list of functionSelectorData generated using the function-selector defined in the route Implementation */ function executeRoutes( uint32[] calldata routeIds, bytes[] calldata dataItems ) external payable { uint256 routeIdslength = routeIds.length; if (routeIdslength != dataItems.length) revert ArrayLengthMismatch(); for (uint256 index = 0; index < routeIdslength; ) { (bool success, bytes memory result) = addressAt(routeIds[index]) .delegatecall(dataItems[index]); if (!success) { assembly { revert(add(result, 32), mload(result)) } } unchecked { ++index; } } } /** * @notice execute a controller function identified using the controllerId in the request * @notice The caller must first approve this contract to spend amount of ERC20-Token being bridged/swapped * @dev ensure the data in request to be built using the function-selector defined as a * constant in the controller implementation contract * @param socketControllerRequest socketControllerRequest with controllerId to identify the * controllerAddress and byteData constructed using functionSelector * of the function being invoked * @return bytes data received from the call delegated to controller */ function executeController( ISocketGateway.SocketControllerRequest calldata socketControllerRequest ) external payable returns (bytes memory) { (bool success, bytes memory result) = controllers[ socketControllerRequest.controllerId ].delegatecall(socketControllerRequest.data); if (!success) { assembly { revert(add(result, 32), mload(result)) } } return result; } /** * @notice sequentially executes all controller requests * @notice The caller must first approve this contract to spend amount of ERC20-Token being bridged/swapped * @dev ensure the data in each controller-request to be built using the function-selector defined as a * constant in the controller implementation contract * @param controllerRequests a list of socketControllerRequest * Each controllerRequest contains controllerId to identify the controllerAddress and * byteData constructed using functionSelector of the function being invoked */ function executeControllers( ISocketGateway.SocketControllerRequest[] calldata controllerRequests ) external payable { for (uint32 index = 0; index < controllerRequests.length; ) { (bool success, bytes memory result) = controllers[ controllerRequests[index].controllerId ].delegatecall(controllerRequests[index].data); if (!success) { assembly { revert(add(result, 32), mload(result)) } } unchecked { ++index; } } } /************************************** * ADMIN FUNCTIONS * **************************************/ /** * @notice Add route to the socketGateway This is a restricted function to be called by only socketGatewayOwner * @dev ensure routeAddress is a verified bridge or middleware implementation address * @param routeAddress The address of bridge or middleware implementation contract deployed * @return Id of the route added to the routes-mapping in socketGateway storage */ function addRoute( address routeAddress ) external onlyOwner returns (uint32) { uint32 routeId = routesCount; routes[routeId] = routeAddress; routesCount += 1; emit NewRouteAdded(routeId, routeAddress); return routeId; } /** * @notice Give Infinite or 0 approval to bridgeRoute for the tokenAddress This is a restricted function to be called by only socketGatewayOwner */ function setApprovalForRouters( address[] memory routeAddresses, address[] memory tokenAddresses, bool isMax ) external onlyOwner { for (uint32 index = 0; index < routeAddresses.length; ) { ERC20(tokenAddresses[index]).approve( routeAddresses[index], isMax ? type(uint256).max : 0 ); unchecked { ++index; } } } /** * @notice Add controller to the socketGateway This is a restricted function to be called by only socketGatewayOwner * @dev ensure controllerAddress is a verified controller implementation address * @param controllerAddress The address of controller implementation contract deployed * @return Id of the controller added to the controllers-mapping in socketGateway storage */ function addController( address controllerAddress ) external onlyOwner returns (uint32) { uint32 controllerId = controllerCount; controllers[controllerId] = controllerAddress; controllerCount += 1; emit ControllerAdded(controllerId, controllerAddress); return controllerId; } /** * @notice disable controller by setting ZeroAddress to the entry in controllers-mapping identified by controllerId as key. This is a restricted function to be called by only socketGatewayOwner * @param controllerId The Id of controller-implementation in the controllers mapping */ function disableController(uint32 controllerId) public onlyOwner { controllers[controllerId] = disabledRouteAddress; emit ControllerDisabled(controllerId); } /** * @notice disable a route by setting ZeroAddress to the entry in routes-mapping identified by routeId as key. This is a restricted function to be called by only socketGatewayOwner * @param routeId The Id of route-implementation in the routes mapping */ function disableRoute(uint32 routeId) external onlyOwner { routes[routeId] = disabledRouteAddress; emit RouteDisabled(routeId); } /******************************************* * RESTRICTED RESCUE FUNCTIONS * *******************************************/ /** * @notice Rescues the ERC20 token to an address this is a restricted function to be called by only socketGatewayOwner * @dev as this is a restricted to socketGatewayOwner, ensure the userAddress is a known address * @param token address of the ERC20 token being rescued * @param userAddress address to which ERC20 is to be rescued * @param amount amount of ERC20 tokens being rescued */ function rescueFunds( address token, address userAddress, uint256 amount ) external onlyOwner { ERC20(token).safeTransfer(userAddress, amount); } /** * @notice Rescues the native balance to an address this is a restricted function to be called by only socketGatewayOwner * @dev as this is a restricted to socketGatewayOwner, ensure the userAddress is a known address * @param userAddress address to which native-balance is to be rescued * @param amount amount of native-balance being rescued */ function rescueEther( address payable userAddress, uint256 amount ) external onlyOwner { userAddress.transfer(amount); } /******************************************* * VIEW FUNCTIONS * *******************************************/ /** * @notice Get routeImplementation address mapped to the routeId * @param routeId routeId is the key in the mapping for routes * @return route-implementation address */ function getRoute(uint32 routeId) public view returns (address) { return addressAt(routeId); } /** * @notice Get controllerImplementation address mapped to the controllerId * @param controllerId controllerId is the key in the mapping for controllers * @return controller-implementation address */ function getController(uint32 controllerId) public view returns (address) { return controllers[controllerId]; } function addressAt(uint32 routeId) public view returns (address) { if (routeId < 385) { if (routeId < 257) { if (routeId < 129) { if (routeId < 65) { if (routeId < 33) { if (routeId < 17) { if (routeId < 9) { if (routeId < 5) { if (routeId < 3) { if (routeId == 1) { return 0x8cd6BaCDAe46B449E2e5B34e348A4eD459c84D50; } else { return 0x31524750Cd865fF6A3540f232754Fb974c18585C; } } else { if (routeId == 3) { return 0xEd9b37342BeC8f3a2D7b000732ec87498aA6EC6a; } else { return 0xE8704Ef6211F8988Ccbb11badC89841808d66890; } } } else { if (routeId < 7) { if (routeId == 5) { return 0x9aFF58C460a461578C433e11C4108D1c4cF77761; } else { return 0x2D1733886cFd465B0B99F1492F40847495f334C5; } } else { if (routeId == 7) { return 0x715497Be4D130F04B8442F0A1F7a9312D4e54FC4; } else { return 0x90C8a40c38E633B5B0e0d0585b9F7FA05462CaaF; } } } } else { if (routeId < 13) { if (routeId < 11) { if (routeId == 9) { return 0xa402b70FCfF3F4a8422B93Ef58E895021eAdE4F6; } else { return 0xc1B718522E15CD42C4Ac385a929fc2B51f5B892e; } } else { if (routeId == 11) { return 0xa97bf2f7c26C43c010c349F52f5eA5dC49B2DD38; } else { return 0x969423d71b62C81d2f28d707364c9Dc4a0764c53; } } } else { if (routeId < 15) { if (routeId == 13) { return 0xF86729934C083fbEc8C796068A1fC60701Ea1207; } else { return 0xD7cC2571F5823caCA26A42690D2BE7803DD5393f; } } else { if (routeId == 15) { return 0x7c8837a279bbbf7d8B93413763176de9F65d5bB9; } else { return 0x13b81C27B588C07D04458ed7dDbdbD26D1e39bcc; } } } } } else { if (routeId < 25) { if (routeId < 21) { if (routeId < 19) { if (routeId == 17) { return 0x52560Ac678aFA1345D15474287d16Dc1eA3F78aE; } else { return 0x1E31e376551459667cd7643440c1b21CE69065A0; } } else { if (routeId == 19) { return 0xc57D822CB3288e7b97EF8f8af0EcdcD1B783529B; } else { return 0x2197A1D9Af24b4d6a64Bff95B4c29Fcd3Ff28C30; } } } else { if (routeId < 23) { if (routeId == 21) { return 0xE3700feAa5100041Bf6b7AdBA1f72f647809Fd00; } else { return 0xc02E8a0Fdabf0EeFCEA025163d90B5621E2b9948; } } else { if (routeId == 23) { return 0xF5144235E2926cAb3c69b30113254Fa632f72d62; } else { return 0xBa3F92313B00A1f7Bc53b2c24EB195c8b2F57682; } } } } else { if (routeId < 29) { if (routeId < 27) { if (routeId == 25) { return 0x77a6856fe1fFA5bEB55A1d2ED86E27C7c482CB76; } else { return 0x4826Ff4e01E44b1FCEFBfb38cd96687Eb7786b44; } } else { if (routeId == 27) { return 0x55FF3f5493cf5e80E76DEA7E327b9Cd8440Af646; } else { return 0xF430Db544bE9770503BE4aa51997aA19bBd5BA4f; } } } else { if (routeId < 31) { if (routeId == 29) { return 0x0f166446ce1484EE3B0663E7E67DF10F5D240115; } else { return 0x6365095D92537f242Db5EdFDd572745E72aC33d9; } } else { if (routeId == 31) { return 0x5c7BC93f06ce3eAe75ADf55E10e23d2c1dE5Bc65; } else { return 0xe46383bAD90d7A08197ccF08972e9DCdccCE9BA4; } } } } } } else { if (routeId < 49) { if (routeId < 41) { if (routeId < 37) { if (routeId < 35) { if (routeId == 33) { return 0xf0f21710c071E3B728bdc4654c3c0b873aAaa308; } else { return 0x63Bc9ed3AcAAeB0332531C9fB03b0a2352E9Ff25; } } else { if (routeId == 35) { return 0xd1CE808625CB4007a1708824AE82CdB0ece57De9; } else { return 0x57BbB148112f4ba224841c3FE018884171004661; } } } else { if (routeId < 39) { if (routeId == 37) { return 0x037f7d6933036F34DFabd40Ff8e4D789069f92e3; } else { return 0xeF978c280915CfF3Dca4EDfa8932469e40ADA1e1; } } else { if (routeId == 39) { return 0x92ee9e071B13f7ecFD62B7DED404A16CBc223CD3; } else { return 0x94Ae539c186e41ed762271338Edf140414D1E442; } } } } else { if (routeId < 45) { if (routeId < 43) { if (routeId == 41) { return 0x30A64BBe4DdBD43dA2368EFd1eB2d80C10d84DAb; } else { return 0x3aEABf81c1Dc4c1b73d5B2a95410f126426FB596; } } else { if (routeId == 43) { return 0x25b08aB3D0C8ea4cC9d967b79688C6D98f3f563a; } else { return 0xea40cB15C9A3BBd27af6474483886F7c0c9AE406; } } } else { if (routeId < 47) { if (routeId == 45) { return 0x9580113Cc04e5a0a03359686304EF3A80b936Dd3; } else { return 0xD211c826d568957F3b66a3F4d9c5f68cCc66E619; } } else { if (routeId == 47) { return 0xCEE24D0635c4C56315d133b031984d4A6f509476; } else { return 0x3922e6B987983229798e7A20095EC372744d4D4c; } } } } } else { if (routeId < 57) { if (routeId < 53) { if (routeId < 51) { if (routeId == 49) { return 0x2d92D03413d296e1F31450479349757187F2a2b7; } else { return 0x0fe5308eE90FC78F45c89dB6053eA859097860CA; } } else { if (routeId == 51) { return 0x08Ba68e067C0505bAF0C1311E0cFB2B1B59b969c; } else { return 0x9bee5DdDF75C24897374f92A534B7A6f24e97f4a; } } } else { if (routeId < 55) { if (routeId == 53) { return 0x1FC5A90B232208704B930c1edf82FFC6ACc02734; } else { return 0x5b1B0417cb44c761C2a23ee435d011F0214b3C85; } } else { if (routeId == 55) { return 0x9d70cDaCA12A738C283020760f449D7816D592ec; } else { return 0x95a23b9CB830EcCFDDD5dF56A4ec665e3381Fa12; } } } } else { if (routeId < 61) { if (routeId < 59) { if (routeId == 57) { return 0x483a957Cf1251c20e096C35c8399721D1200A3Fc; } else { return 0xb4AD39Cb293b0Ec7FEDa743442769A7FF04987CD; } } else { if (routeId == 59) { return 0x4C543AD78c1590D81BAe09Fc5B6Df4132A2461d0; } else { return 0x471d5E5195c563902781734cfe1FF3981F8B6c86; } } } else { if (routeId < 63) { if (routeId == 61) { return 0x1B12a54B5E606D95B8B8D123c9Cb09221Ee37584; } else { return 0xE4127cC550baC433646a7D998775a84daC16c7f3; } } else { if (routeId == 63) { return 0xecb1b55AB12E7dd788D585c6C5cD61B5F87be836; } else { return 0xf91ef487C5A1579f70601b6D347e19756092eEBf; } } } } } } } else { if (routeId < 97) { if (routeId < 81) { if (routeId < 73) { if (routeId < 69) { if (routeId < 67) { if (routeId == 65) { return 0x34a16a7e9BADEEFD4f056310cbE0b1423Fa1b760; } else { return 0x60E10E80c7680f429dBbC232830BEcd3D623c4CF; } } else { if (routeId == 67) { return 0x66465285B8D65362A1d86CE00fE2bE949Fd6debF; } else { return 0x5aB231B7e1A3A74a48f67Ab7bde5Cdd4267022E0; } } } else { if (routeId < 71) { if (routeId == 69) { return 0x3A1C3633eE79d43366F5c67802a746aFD6b162Ba; } else { return 0x0C4BfCbA8dC3C811437521a80E81e41DAF479039; } } else { if (routeId == 71) { return 0x6caf25d2e139C5431a1FA526EAf8d73ff2e6252C; } else { return 0x74ad21e09FDa68638CE14A3009A79B6D16574257; } } } } else { if (routeId < 77) { if (routeId < 75) { if (routeId == 73) { return 0xD4923A61008894b99cc1CD3407eF9524f02aA0Ca; } else { return 0x6F159b5EB823BD415886b9271aA2A723a00a1987; } } else { if (routeId == 75) { return 0x742a8aA42E7bfB4554dE30f4Fb07FFb6f2068863; } else { return 0x4AE9702d3360400E47B446e76DE063ACAb930101; } } } else { if (routeId < 79) { if (routeId == 77) { return 0x0E19a0a44ddA7dAD854ec5Cc867d16869c4E80F4; } else { return 0xE021A51968f25148F726E326C88d2556c5647557; } } else { if (routeId == 79) { return 0x64287BDDDaeF4d94E4599a3D882bed29E6Ada4B6; } else { return 0xcBB57Fd2e19cc7e9D444d5b4325A2F1047d0C73f; } } } } } else { if (routeId < 89) { if (routeId < 85) { if (routeId < 83) { if (routeId == 81) { return 0x373DE80DF7D82cFF6D76F29581b360C56331e957; } else { return 0x0466356E131AD61596a51F86BAd1C03A328960D8; } } else { if (routeId == 83) { return 0x01726B960992f1b74311b248E2a922fC707d43A6; } else { return 0x2E21bdf9A4509b89795BCE7E132f248a75814CEc; } } } else { if (routeId < 87) { if (routeId == 85) { return 0x769512b23aEfF842379091d3B6E4B5456F631D42; } else { return 0xe7eD9be946a74Ec19325D39C6EEb57887ccB2B0D; } } else { if (routeId == 87) { return 0xc4D01Ec357c2b511d10c15e6b6974380F0E62e67; } else { return 0x5bC49CC9dD77bECF2fd3A3C55611e84E69AFa3AE; } } } } else { if (routeId < 93) { if (routeId < 91) { if (routeId == 89) { return 0x48bcD879954fA14e7DbdAeb56F79C1e9DDcb69ec; } else { return 0xE929bDde21b462572FcAA4de6F49B9D3246688D0; } } else { if (routeId == 91) { return 0x85Aae300438222f0e3A9Bc870267a5633A9438bd; } else { return 0x51f72E1096a81C55cd142d66d39B688C657f9Be8; } } } else { if (routeId < 95) { if (routeId == 93) { return 0x3A8a05BF68ac54B01E6C0f492abF97465F3d15f9; } else { return 0x145aA67133F0c2C36b9771e92e0B7655f0D59040; } } else { if (routeId == 95) { return 0xa030315d7DB11F9892758C9e7092D841e0ADC618; } else { return 0xdF1f8d81a3734bdDdEfaC6Ca1596E081e57c3044; } } } } } } else { if (routeId < 113) { if (routeId < 105) { if (routeId < 101) { if (routeId < 99) { if (routeId == 97) { return 0xFF2833123B58aa05d04D7fb99f5FB768B2b435F8; } else { return 0xc8f09c1fD751C570233765f71b0e280d74e6e743; } } else { if (routeId == 99) { return 0x3026DA6Ceca2E5A57A05153653D9212FFAaA49d8; } else { return 0xdE68Ee703dE0D11f67B0cE5891cB4a903de6D160; } } } else { if (routeId < 103) { if (routeId == 101) { return 0xE23a7730e81FB4E87A6D0bd9f63EE77ac86C3DA4; } else { return 0x8b1DBe04aD76a7d8bC079cACd3ED4D99B897F4a0; } } else { if (routeId == 103) { return 0xBB227240FA459b69C6889B2b8cb1BE76F118061f; } else { return 0xC062b9b3f0dB28BB8afAfcD4d075729344114ffe; } } } } else { if (routeId < 109) { if (routeId < 107) { if (routeId == 105) { return 0x553188Aa45f5FDB83EC4Ca485982F8fC082480D1; } else { return 0x0109d83D746EaCb6d4014953D9E12d6ca85e330b; } } else { if (routeId == 107) { return 0x45B1bEd29812F5bf6711074ACD180B2aeB783AD9; } else { return 0xdA06eC8c19aea31D77F60299678Cba40E743e1aD; } } } else { if (routeId < 111) { if (routeId == 109) { return 0x3cC5235c97d975a9b4FD4501B3446c981ea3D855; } else { return 0xa1827267d6Bd989Ff38580aE3d9deff6Acf19163; } } else { if (routeId == 111) { return 0x3663CAA0433A3D4171b3581Cf2410702840A735A; } else { return 0x7575D0a7614F655BA77C74a72a43bbd4fA6246a3; } } } } } else { if (routeId < 121) { if (routeId < 117) { if (routeId < 115) { if (routeId == 113) { return 0x2516Defc18bc07089c5dAFf5eafD7B0EF64611E2; } else { return 0xfec5FF08E20fbc107a97Af2D38BD0025b84ee233; } } else { if (routeId == 115) { return 0x0FB5763a87242B25243e23D73f55945fE787523A; } else { return 0xe4C00db89678dBf8391f430C578Ca857Dd98aDE1; } } } else { if (routeId < 119) { if (routeId == 117) { return 0x8F2A22061F9F35E64f14523dC1A5f8159e6a21B7; } else { return 0x18e4b838ae966917E20E9c9c5Ad359cDD38303bB; } } else { if (routeId == 119) { return 0x61ACb1d3Dcb3e3429832A164Cc0fC9849fb75A4a; } else { return 0x7681e3c8e7A41DCA55C257cc0d1Ae757f5530E65; } } } } else { if (routeId < 125) { if (routeId < 123) { if (routeId == 121) { return 0x806a2AB9748C3D1DB976550890E3f528B7E8Faec; } else { return 0xBDb8A5DD52C2c239fbC31E9d43B763B0197028FF; } } else { if (routeId == 123) { return 0x474EC9203706010B9978D6bD0b105D36755e4848; } else { return 0x8dfd0D829b303F2239212E591a0F92a32880f36E; } } } else { if (routeId < 127) { if (routeId == 125) { return 0xad4BcE9745860B1adD6F1Bd34a916f050E4c82C2; } else { return 0xBC701115b9fe14bC8CC5934cdC92517173e308C4; } } else { if (routeId == 127) { return 0x0D1918d786Db8546a11aDeD475C98370E06f255E; } else { return 0xee44f57cD6936DB55B99163f3Df367B01EdA785a; } } } } } } } } else { if (routeId < 193) { if (routeId < 161) { if (routeId < 145) { if (routeId < 137) { if (routeId < 133) { if (routeId < 131) { if (routeId == 129) { return 0x63044521fe5a1e488D7eD419cD0e35b7C24F2aa7; } else { return 0x410085E73BD85e90d97b84A68C125aDB9F91f85b; } } else { if (routeId == 131) { return 0x7913fe97E07C7A397Ec274Ab1d4E2622C88EC5D1; } else { return 0x977f9fE93c064DCf54157406DaABC3a722e8184C; } } } else { if (routeId < 135) { if (routeId == 133) { return 0xCD2236468722057cFbbABad2db3DEA9c20d5B01B; } else { return 0x17c7287A491cf5Ff81E2678cF2BfAE4333F6108c; } } else { if (routeId == 135) { return 0x354D9a5Dbf96c71B79a265F03B595C6Fdc04dadd; } else { return 0xb4e409EB8e775eeFEb0344f9eee884cc7ed21c69; } } } } else { if (routeId < 141) { if (routeId < 139) { if (routeId == 137) { return 0xa1a3c4670Ad69D9be4ab2D39D1231FEC2a63b519; } else { return 0x4589A22199870729C1be5CD62EE93BeD858113E6; } } else { if (routeId == 139) { return 0x8E7b864dB26Bd6C798C38d4Ba36EbA0d6602cF11; } else { return 0xA2D17C7260a4CB7b9854e89Fc367E80E87872a2d; } } } else { if (routeId < 143) { if (routeId == 141) { return 0xC7F0EDf0A1288627b0432304918A75e9084CBD46; } else { return 0xE4B4EF1f9A4aBFEdB371fA7a6143993B15d4df25; } } else { if (routeId == 143) { return 0xfe3D84A2Ef306FEBb5452441C9BDBb6521666F6A; } else { return 0x8A12B6C64121920110aE58F7cd67DfEc21c6a4C3; } } } } } else { if (routeId < 153) { if (routeId < 149) { if (routeId < 147) { if (routeId == 145) { return 0x76c4d9aFC4717a2BAac4e5f26CccF02351f7a3DA; } else { return 0xd4719BA550E397aeAcca1Ad2201c1ba69024FAAf; } } else { if (routeId == 147) { return 0x9646126Ce025224d1682C227d915a386efc0A1Fb; } else { return 0x4DD8Af2E3F2044842f0247920Bc4BABb636915ea; } } } else { if (routeId < 151) { if (routeId == 149) { return 0x8e8a327183Af0cf8C2ece9F0ed547C42A160D409; } else { return 0x9D49614CaE1C685C71678CA6d8CDF7584bfd0740; } } else { if (routeId == 151) { return 0x5a00ef257394cbc31828d48655E3d39e9c11c93d; } else { return 0xC9a2751b38d3dDD161A41Ca0135C5C6c09EC1d56; } } } } else { if (routeId < 157) { if (routeId < 155) { if (routeId == 153) { return 0x7e1c261640a525C94Ca4f8c25b48CF754DD83590; } else { return 0x409Fe24ba6F6BD5aF31C1aAf8059b986A3158233; } } else { if (routeId == 155) { return 0x704Cf5BFDADc0f55fDBb53B6ed8B582E018A72A2; } else { return 0x3982bF65d7d6E77E3b6661cd6F6468c247512737; } } } else { if (routeId < 159) { if (routeId == 157) { return 0x3982b9f26FFD67a13Ee371e2C0a9Da338BA70E7f; } else { return 0x6D834AB385900c1f49055D098e90264077FbC4f2; } } else { if (routeId == 159) { return 0x11FE5F70779A094B7166B391e1Fb73d422eF4e4d; } else { return 0xD347e4E47280d21F13B73D89c6d16f867D50DD13; } } } } } } else { if (routeId < 177) { if (routeId < 169) { if (routeId < 165) { if (routeId < 163) { if (routeId == 161) { return 0xb6035eDD53DDA28d8B69b4ae9836E40C80306CD7; } else { return 0x54c884e6f5C7CcfeCA990396c520C858c922b6CA; } } else { if (routeId == 163) { return 0x5eA93E240b083d686558Ed607BC013d88057cE46; } else { return 0x4C7131eE812De685cBe4e2cCb033d46ecD46612E; } } } else { if (routeId < 167) { if (routeId == 165) { return 0xc1a5Be9F0c33D8483801D702111068669f81fF91; } else { return 0x9E5fAb91455Be5E5b2C05967E73F456c8118B1Fc; } } else { if (routeId == 167) { return 0x3d9A05927223E0DC2F382831770405885e22F0d8; } else { return 0x6303A011fB6063f5B1681cb5a9938EA278dc6128; } } } } else { if (routeId < 173) { if (routeId < 171) { if (routeId == 169) { return 0xe9c60795c90C66797e4c8E97511eA07CdAda32bE; } else { return 0xD56cC98e69A1e13815818b466a8aA6163d84234A; } } else { if (routeId == 171) { return 0x47EbB9D36a6e40895316cD894E4860D774E2c531; } else { return 0xA5EB293629410065d14a7B1663A67829b0618292; } } } else { if (routeId < 175) { if (routeId == 173) { return 0x1b3B4C8146F939cE00899db8B3ddeF0062b7E023; } else { return 0x257Bbc11653625EbfB6A8587eF4f4FBe49828EB3; } } else { if (routeId == 175) { return 0x44cc979C01b5bB1eAC21301E73C37200dFD06F59; } else { return 0x2972fDF43352225D82754C0174Ff853819D1ef2A; } } } } } else { if (routeId < 185) { if (routeId < 181) { if (routeId < 179) { if (routeId == 177) { return 0x3e54144f032648A04D62d79f7B4b93FF3aC2333b; } else { return 0x444016102dB8adbE73C3B6703a1ea7F2f75A510D; } } else { if (routeId == 179) { return 0xac079143f98a6eb744Fde34541ebF243DF5B5dED; } else { return 0xAe9010767Fb112d29d35CEdfba2b372Ad7A308d3; } } } else { if (routeId < 183) { if (routeId == 181) { return 0xfE0BCcF9cCC2265D5fB3450743f17DfE57aE1e56; } else { return 0x04ED8C0545716119437a45386B1d691C63234C7D; } } else { if (routeId == 183) { return 0x636c14013e531A286Bc4C848da34585f0bB73d59; } else { return 0x2Fa67fc7ECC5cAA01C653d3BFeA98ecc5db9C42A; } } } } else { if (routeId < 189) { if (routeId < 187) { if (routeId == 185) { return 0x23e9a0FC180818aA872D2079a985217017E97bd9; } else { return 0x79A95c3Ef81b3ae64ee03A9D5f73e570495F164E; } } else { if (routeId == 187) { return 0xa7EA0E88F04a84ba0ad1E396cb07Fa3fDAD7dF6D; } else { return 0xd23cA1278a2B01a3C0Ca1a00d104b11c1Ebe6f42; } } } else { if (routeId < 191) { if (routeId == 189) { return 0x707bc4a9FA2E349AED5df4e9f5440C15aA9D14Bd; } else { return 0x7E290F2dd539Ac6CE58d8B4C2B944931a1fD3612; } } else { if (routeId == 191) { return 0x707AA5503088Ce06Ba450B6470A506122eA5c8eF; } else { return 0xFbB3f7BF680deeb149f4E7BC30eA3DDfa68F3C3f; } } } } } } } else { if (routeId < 225) { if (routeId < 209) { if (routeId < 201) { if (routeId < 197) { if (routeId < 195) { if (routeId == 193) { return 0xDE74aD8cCC3dbF14992f49Cf24f36855912f4934; } else { return 0x409BA83df7777F070b2B50a10a41DE2468d2a3B3; } } else { if (routeId == 195) { return 0x5CB7Be90A5DD7CfDa54e87626e254FE8C18255B4; } else { return 0x0A684fE12BC64fb72B59d0771a566F49BC090356; } } } else { if (routeId < 199) { if (routeId == 197) { return 0xDf30048d91F8FA2bCfC54952B92bFA8e161D3360; } else { return 0x050825Fff032a547C47061CF0696FDB0f65AEa5D; } } else { if (routeId == 199) { return 0xd55e671dAC1f03d366d8535073ada5DB2Aab1Ea2; } else { return 0x9470C704A9616c8Cd41c595Fcd2181B6fe2183C2; } } } } else { if (routeId < 205) { if (routeId < 203) { if (routeId == 201) { return 0x2D9ffD275181F5865d5e11CbB4ced1521C4dF9f1; } else { return 0x816d28Dec10ec95DF5334f884dE85cA6215918d8; } } else { if (routeId == 203) { return 0xd1f87267c4A43835E666dd69Df077e578A3b6299; } else { return 0x39E89Bde9DACbe5468C025dE371FbDa12bDeBAB1; } } } else { if (routeId < 207) { if (routeId == 205) { return 0x7b40A3207956ecad6686E61EfcaC48912FcD0658; } else { return 0x090cF10D793B1Efba9c7D76115878814B663859A; } } else { if (routeId == 207) { return 0x312A59c06E41327878F2063eD0e9c282C1DA3AfC; } else { return 0x4F1188f46236DD6B5de11Ebf2a9fF08716E7DeB6; } } } } } else { if (routeId < 217) { if (routeId < 213) { if (routeId < 211) { if (routeId == 209) { return 0x0A6F9a3f4fA49909bBfb4339cbE12B42F53BbBeD; } else { return 0x01d13d7aCaCbB955B81935c80ffF31e14BdFa71f; } } else { if (routeId == 211) { return 0x691a14Fa6C7360422EC56dF5876f84d4eDD7f00A; } else { return 0x97Aad18d886d181a9c726B3B6aE15a0A69F5aF73; } } } else { if (routeId < 215) { if (routeId == 213) { return 0x2917241371D2099049Fa29432DC46735baEC33b4; } else { return 0x5F20F20F7890c2e383E29D4147C9695A371165f5; } } else { if (routeId == 215) { return 0xeC0a60e639958335662C5219A320cCEbb56C6077; } else { return 0x96d63CF5062975C09845d17ec672E10255866053; } } } } else { if (routeId < 221) { if (routeId < 219) { if (routeId == 217) { return 0xFF57429e57D383939CAB50f09ABBfB63C0e6c9AD; } else { return 0x18E393A7c8578fb1e235C242076E50013cDdD0d7; } } else { if (routeId == 219) { return 0xE7E5238AF5d61f52E9B4ACC025F713d1C0216507; } else { return 0x428401D4d0F25A2EE1DA4d5366cB96Ded425D9bD; } } } else { if (routeId < 223) { if (routeId == 221) { return 0x42E5733551ff1Ee5B48Aa9fc2B61Af9b58C812E6; } else { return 0x64Df9c7A0551B056d860Bc2419Ca4c1EF75320bE; } } else { if (routeId == 223) { return 0x46006925506145611bBf0263243D8627dAf26B0F; } else { return 0x8D64BE884314662804eAaB884531f5C50F4d500c; } } } } } } else { if (routeId < 241) { if (routeId < 233) { if (routeId < 229) { if (routeId < 227) { if (routeId == 225) { return 0x157a62D92D07B5ce221A5429645a03bBaCE85373; } else { return 0xaF037D33e1F1F2F87309B425fe8a9d895Ef3722B; } } else { if (routeId == 227) { return 0x921D1154E494A2f7218a37ad7B17701f94b4B40e; } else { return 0xF282b4555186d8Dea51B8b3F947E1E0568d09bc4; } } } else { if (routeId < 231) { if (routeId == 229) { return 0xa794E2E1869765a4600b3DFd8a4ebcF16350f6B6; } else { return 0xFEFb048e20c5652F7940A49B1980E0125Ec4D358; } } else { if (routeId == 231) { return 0x220104b641971e9b25612a8F001bf48AbB23f1cF; } else { return 0xcB9D373Bb54A501B35dd3be5bF4Ba43cA31F7035; } } } } else { if (routeId < 237) { if (routeId < 235) { if (routeId == 233) { return 0x37D627F56e3FF36aC316372109ea82E03ac97DAc; } else { return 0x4E81355FfB4A271B4EA59ff78da2b61c7833161f; } } else { if (routeId == 235) { return 0xADd8D65cAF6Cc9ad73127B49E16eA7ac29d91e87; } else { return 0x630F9b95626487dfEAe3C97A44DB6C59cF35d996; } } } else { if (routeId < 239) { if (routeId == 237) { return 0x78CE2BC8238B679680A67FCB98C5A60E4ec17b2D; } else { return 0xA38D776028eD1310b9A6b086f67F788201762E21; } } else { if (routeId == 239) { return 0x7Bb5178827B76B86753Ed62a0d662c72cEcb1bD3; } else { return 0x4faC26f61C76eC5c3D43b43eDfAFF0736Ae0e3da; } } } } } else { if (routeId < 249) { if (routeId < 245) { if (routeId < 243) { if (routeId == 241) { return 0x791Bb49bfFA7129D6889FDB27744422Ac4571A85; } else { return 0x26766fFEbb5fa564777913A6f101dF019AB32afa; } } else { if (routeId == 243) { return 0x05e98E5e95b4ECBbbAf3258c3999Cc81ed8048Be; } else { return 0xC5c4621e52f1D6A1825A5ed4F95855401a3D9C6b; } } } else { if (routeId < 247) { if (routeId == 245) { return 0xfcb15f909BA7FC7Ea083503Fb4c1020203c107EB; } else { return 0xbD27603279d969c74f2486ad14E71080829DFd38; } } else { if (routeId == 247) { return 0xff2f756BcEcC1A55BFc09a30cc5F64720458cFCB; } else { return 0x3bfB968FEbC12F4e8420B2d016EfcE1E615f7246; } } } } else { if (routeId < 253) { if (routeId < 251) { if (routeId == 249) { return 0x982EE9Ffe23051A2ec945ed676D864fa8345222b; } else { return 0xe101899100785E74767d454FFF0131277BaD48d9; } } else { if (routeId == 251) { return 0x4F730C0c6b3B5B7d06ca511379f4Aa5BfB2E9525; } else { return 0x5499c36b365795e4e0Ef671aF6C2ce26D7c78265; } } } else { if (routeId < 255) { if (routeId == 253) { return 0x8AF51F7237Fc8fB2fc3E700488a94a0aC6Ad8b5a; } else { return 0xda8716df61213c0b143F2849785FB85928084857; } } else { if (routeId == 255) { return 0xF040Cf9b1ebD11Bf28e04e80740DF3DDe717e4f5; } else { return 0xB87ba32f759D14023C7520366B844dF7f0F036C2; } } } } } } } } } else { if (routeId < 321) { if (routeId < 289) { if (routeId < 273) { if (routeId < 265) { if (routeId < 261) { if (routeId < 259) { if (routeId == 257) { return 0x0Edde681b8478F0c3194f468EdD2dB5e75c65CDD; } else { return 0x59C70900Fca06eE2aCE1BDd5A8D0Af0cc3BBA720; } } else { if (routeId == 259) { return 0x8041F0f180D17dD07087199632c45E17AeB0BAd5; } else { return 0x4fB4727064BA595995DD516b63b5921Df9B93aC6; } } } else { if (routeId < 263) { if (routeId == 261) { return 0x86e98b594565857eD098864F560915C0dAfd6Ea1; } else { return 0x70f8818E8B698EFfeCd86A513a4c87c0c380Bef6; } } else { if (routeId == 263) { return 0x78Ed227c8A897A21Da2875a752142dd80d865158; } else { return 0xd02A30BB5C3a8C51d2751A029a6fcfDE2Af9fbc6; } } } } else { if (routeId < 269) { if (routeId < 267) { if (routeId == 265) { return 0x0F00d5c5acb24e975e2a56730609f7F40aa763b8; } else { return 0xC3e2091edc2D3D9D98ba09269138b617B536834A; } } else { if (routeId == 267) { return 0xa6FbaF7F30867C9633908998ea8C3da28920E75C; } else { return 0xE6dDdcD41E2bBe8122AE32Ac29B8fbAB79CD21d9; } } } else { if (routeId < 271) { if (routeId == 269) { return 0x537aa8c1Ef6a8Eaf039dd6e1Eb67694a48195cE4; } else { return 0x96ABAC485fd2D0B03CF4a10df8BD58b8dED28300; } } else { if (routeId == 271) { return 0xda8e7D46d04Bd4F62705Cd80355BDB6d441DafFD; } else { return 0xbE50018E7a5c67E2e5f5414393e971CC96F293f2; } } } } } else { if (routeId < 281) { if (routeId < 277) { if (routeId < 275) { if (routeId == 273) { return 0xa1b3907D6CB542a4cbe2eE441EfFAA909FAb62C3; } else { return 0x6d08ee8511C0237a515013aC389e7B3968Cb1753; } } else { if (routeId == 275) { return 0x22faa5B5Fe43eAdbB52745e35a5cdA8bD5F96bbA; } else { return 0x7a673eB74D79e4868D689E7852abB5f93Ec2fD4b; } } } else { if (routeId < 279) { if (routeId == 277) { return 0x0b8531F8AFD4190b76F3e10deCaDb84c98b4d419; } else { return 0x78eABC743A93583DeE403D6b84795490e652216B; } } else { if (routeId == 279) { return 0x3A95D907b2a7a8604B59BccA08585F58Afe0Aa64; } else { return 0xf4271f0C8c9Af0F06A80b8832fa820ccE64FAda8; } } } } else { if (routeId < 285) { if (routeId < 283) { if (routeId == 281) { return 0x74b2DF841245C3748c0d31542e1335659a25C33b; } else { return 0xdFC99Fd0Ad7D16f30f295a5EEFcE029E04d0fa65; } } else { if (routeId == 283) { return 0xE992416b6aC1144eD8148a9632973257839027F6; } else { return 0x54ce55ba954E981BB1fd9399054B35Ce1f2C0816; } } } else { if (routeId < 287) { if (routeId == 285) { return 0xD4AB52f9e7E5B315Bd7471920baD04F405Ab1c38; } else { return 0x3670C990994d12837e95eE127fE2f06FD3E2104B; } } else { if (routeId == 287) { return 0xDcf190B09C47E4f551E30BBb79969c3FdEA1e992; } else { return 0xa65057B967B59677237e57Ab815B209744b9bc40; } } } } } } else { if (routeId < 305) { if (routeId < 297) { if (routeId < 293) { if (routeId < 291) { if (routeId == 289) { return 0x6Efc86B40573e4C7F28659B13327D55ae955C483; } else { return 0x06BcC25CF8e0E72316F53631b3aA7134E9f73Ae0; } } else { if (routeId == 291) { return 0x710b6414E1D53882b1FCD3A168aD5Ccd435fc6D0; } else { return 0x5Ebb2C3d78c4e9818074559e7BaE7FCc99781DC1; } } } else { if (routeId < 295) { if (routeId == 293) { return 0xAf0a409c3AEe0bD08015cfb29D89E90b6e89A88F; } else { return 0x522559d8b99773C693B80cE06DF559036295Ce44; } } else { if (routeId == 295) { return 0xB65290A5Bae838aaa7825c9ECEC68041841a1B64; } else { return 0x801b8F2068edd5Bcb659E6BDa0c425909043C420; } } } } else { if (routeId < 301) { if (routeId < 299) { if (routeId == 297) { return 0x29b5F00515d093627E0B7bd0b5c8E84F6b4cDb87; } else { return 0x652839Ae74683cbF9f1293F1019D938F87464D3E; } } else { if (routeId == 299) { return 0x5Bc95dCebDDE9B79F2b6DC76121BC7936eF8D666; } else { return 0x90db359CEA62E53051158Ab5F99811C0a07Fe686; } } } else { if (routeId < 303) { if (routeId == 301) { return 0x2c3625EedadbDcDbB5330eb0d17b3C39ff269807; } else { return 0xC3f0324471b5c9d415acD625b8d8694a4e48e001; } } else { if (routeId == 303) { return 0x8C60e7E05fa0FfB6F720233736f245134685799d; } else { return 0x98fAF2c09aa4EBb995ad0B56152993E7291a500e; } } } } } else { if (routeId < 313) { if (routeId < 309) { if (routeId < 307) { if (routeId == 305) { return 0x802c1063a861414dFAEc16bacb81429FC0d40D6e; } else { return 0x11C4AeFCC0dC156f64195f6513CB1Fb3Be0Ae056; } } else { if (routeId == 307) { return 0xEff1F3258214E31B6B4F640b4389d55715C3Be2B; } else { return 0x47e379Abe8DDFEA4289aBa01235EFF7E93758fd7; } } } else { if (routeId < 311) { if (routeId == 309) { return 0x3CC26384c3eA31dDc8D9789e8872CeA6F20cD3ff; } else { return 0xEdd9EFa6c69108FAA4611097d643E20Ba0Ed1634; } } else { if (routeId == 311) { return 0xCb93525CA5f3D371F74F3D112bC19526740717B8; } else { return 0x7071E0124EB4438137e60dF1b8DD8Af1BfB362cF; } } } } else { if (routeId < 317) { if (routeId < 315) { if (routeId == 313) { return 0x4691096EB0b78C8F4b4A8091E5B66b18e1835c10; } else { return 0x8d953c9b2d1C2137CF95992079f3A77fCd793272; } } else { if (routeId == 315) { return 0xbdCc2A3Bf6e3Ba49ff86595e6b2b8D70d8368c92; } else { return 0x95E6948aB38c61b2D294E8Bd896BCc4cCC0713cf; } } } else { if (routeId < 319) { if (routeId == 317) { return 0x607b27C881fFEE4Cb95B1c5862FaE7224ccd0b4A; } else { return 0x09D28aFA166e566A2Ee1cB834ea8e78C7E627eD2; } } else { if (routeId == 319) { return 0x9c01449b38bDF0B263818401044Fb1401B29fDfA; } else { return 0x1F7723599bbB658c051F8A39bE2688388d22ceD6; } } } } } } } else { if (routeId < 353) { if (routeId < 337) { if (routeId < 329) { if (routeId < 325) { if (routeId < 323) { if (routeId == 321) { return 0x52B71603f7b8A5d15B4482e965a0619aa3210194; } else { return 0x01c0f072CB210406653752FecFA70B42dA9173a2; } } else { if (routeId == 323) { return 0x3021142f021E943e57fc1886cAF58D06147D09A6; } else { return 0xe6f2AF38e76AB09Db59225d97d3E770942D3D842; } } } else { if (routeId < 327) { if (routeId == 325) { return 0x06a25554e5135F08b9e2eD1DEC1fc3CEd52e0B48; } else { return 0x71d75e670EE3511C8290C705E0620126B710BF8D; } } else { if (routeId == 327) { return 0x8b9cE142b80FeA7c932952EC533694b1DF9B3c54; } else { return 0xd7Be24f32f39231116B3fDc483C2A12E1521f73B; } } } } else { if (routeId < 333) { if (routeId < 331) { if (routeId == 329) { return 0xb40cafBC4797d4Ff64087E087F6D2e661f954CbE; } else { return 0xBdDCe7771EfEe81893e838f62204A4c76D72757e; } } else { if (routeId == 331) { return 0x5d3D299EA7Fd4F39AcDb336E26631Dfee41F9287; } else { return 0x6BfEE09E1Fc0684e0826A9A0dC1352a14B136FAC; } } } else { if (routeId < 335) { if (routeId == 333) { return 0xd0001bB8E2Cb661436093f96458a4358B5156E3c; } else { return 0x1867c6485CfD1eD448988368A22bfB17a7747293; } } else { if (routeId == 335) { return 0x8997EF9F95dF24aB67703AB6C262aABfeEBE33bD; } else { return 0x1e39E9E601922deD91BCFc8F78836302133465e2; } } } } } else { if (routeId < 345) { if (routeId < 341) { if (routeId < 339) { if (routeId == 337) { return 0x8A8ec6CeacFf502a782216774E5AF3421562C6ff; } else { return 0x3B8FC561df5415c8DC01e97Ee6E38435A8F9C40A; } } else { if (routeId == 339) { return 0xD5d5f5B37E67c43ceA663aEDADFFc3a93a2065B0; } else { return 0xCC8F55EC43B4f25013CE1946FBB740c43Be5B96D; } } } else { if (routeId < 343) { if (routeId == 341) { return 0x18f586E816eEeDbb57B8011239150367561B58Fb; } else { return 0xd0CD802B19c1a52501cb2f07d656e3Cd7B0Ce124; } } else { if (routeId == 343) { return 0xe0AeD899b39C6e4f2d83e4913a1e9e0cf6368abE; } else { return 0x0606e1b6c0f1A398C38825DCcc4678a7Cbc2737c; } } } } else { if (routeId < 349) { if (routeId < 347) { if (routeId == 345) { return 0x2d188e85b27d18EF80f16686EA1593ABF7Ed2A63; } else { return 0x64412292fA4A135a3300E24366E99ff59Db2eAc1; } } else { if (routeId == 347) { return 0x38b74c173f3733E8b90aAEf0e98B89791266149F; } else { return 0x36DAA49A79aaEF4E7a217A11530D3cCD84414124; } } } else { if (routeId < 351) { if (routeId == 349) { return 0x10f088FE2C88F90270E4449c46c8B1b232511d58; } else { return 0x4FeDbd25B58586838ABD17D10272697dF1dC3087; } } else { if (routeId == 351) { return 0x685278209248CB058E5cEe93e37f274A80Faf6eb; } else { return 0xDd9F8F1eeC3955f78168e2Fb2d1e808fa8A8f15b; } } } } } } else { if (routeId < 369) { if (routeId < 361) { if (routeId < 357) { if (routeId < 355) { if (routeId == 353) { return 0x7392aEeFD5825aaC28817031dEEBbFaAA20983D9; } else { return 0x0Cc182555E00767D6FB8AD161A10d0C04C476d91; } } else { if (routeId == 355) { return 0x90E52837d56715c79FD592E8D58bFD20365798b2; } else { return 0x6F4451DE14049B6770ad5BF4013118529e68A40C; } } } else { if (routeId < 359) { if (routeId == 357) { return 0x89B97ef2aFAb9ed9c7f0FDb095d02E6840b52d9c; } else { return 0x92A5cC5C42d94d3e23aeB1214fFf43Db2B97759E; } } else { if (routeId == 359) { return 0x63ddc52F135A1dcBA831EAaC11C63849F018b739; } else { return 0x692A691533B571C2c54C1D7F8043A204b3d8120E; } } } } else { if (routeId < 365) { if (routeId < 363) { if (routeId == 361) { return 0x97c7492CF083969F61C6f302d45c8270391b921c; } else { return 0xDeFD2B8643553dAd19548eB14fd94A57F4B9e543; } } else { if (routeId == 363) { return 0x30645C04205cA3f670B67b02F971B088930ACB8C; } else { return 0xA6f80ed2d607Cd67aEB4109B64A0BEcc4D7d03CF; } } } else { if (routeId < 367) { if (routeId == 365) { return 0xBbbbC6c276eB3F7E674f2D39301509236001c42f; } else { return 0xC20E77d349FB40CE88eB01824e2873ad9f681f3C; } } else { if (routeId == 367) { return 0x5fCfD9a962De19294467C358C1FA55082285960b; } else { return 0x4D87BD6a0E4E5cc6332923cb3E85fC71b287F58A; } } } } } else { if (routeId < 377) { if (routeId < 373) { if (routeId < 371) { if (routeId == 369) { return 0x3AA5B757cd6Dde98214E56D57Dde7fcF0F7aB04E; } else { return 0xe28eFCE7192e11a2297f44059113C1fD6967b2d4; } } else { if (routeId == 371) { return 0x3251cAE10a1Cf246e0808D76ACC26F7B5edA0eE5; } else { return 0xbA2091cc9357Cf4c4F25D64F30d1b4Ba3A5a174B; } } } else { if (routeId < 375) { if (routeId == 373) { return 0x49c8e1Da9693692096F63C82D11b52d738566d55; } else { return 0xA0731615aB5FFF451031E9551367A4F7dB27b39c; } } else { if (routeId == 375) { return 0xFb214541888671AE1403CecC1D59763a12fc1609; } else { return 0x1D6bCB17642E2336405df73dF22F07688cAec020; } } } } else { if (routeId < 381) { if (routeId < 379) { if (routeId == 377) { return 0xfC9c0C7bfe187120fF7f4E21446161794A617a9e; } else { return 0xBa5bF37678EeE2dAB17AEf9D898153258252250E; } } else { if (routeId == 379) { return 0x7c55690bd2C9961576A32c02f8EB29ed36415Ec7; } else { return 0xcA40073E868E8Bc611aEc8Fe741D17E68Fe422f6; } } } else { if (routeId < 383) { if (routeId == 381) { return 0x31641bAFb87E9A58f78835050a7BE56921986339; } else { return 0xA54766424f6dA74b45EbCc5Bf0Bd1D74D2CCcaAB; } } else { if (routeId == 383) { return 0xc7bBa57F8C179EDDBaa62117ddA360e28f3F8252; } else { return 0x5e663ED97ea77d393B8858C90d0683bF180E0ffd; } } } } } } } } } if (routes[routeId] == address(0)) revert ZeroAddressNotAllowed(); return routes[routeId]; } /// @notice fallback function to handle swap, bridge execution /// @dev ensure routeId is converted to bytes4 and sent as msg.sig in the transaction fallback() external payable { address routeAddress = addressAt(uint32(msg.sig)); bytes memory result; assembly { // copy function selector and any arguments calldatacopy(0, 4, sub(calldatasize(), 4)) // execute function call using the facet result := delegatecall( gas(), routeAddress, 0, sub(calldatasize(), 4), 0, 0 ) // get any return value returndatacopy(0, 0, returndatasize()) // return any return value or error back to the caller switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_disabledRoute","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"IncorrectBridgeRatios","type":"error"},{"inputs":[],"name":"OnlyNominee","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"controllerId","type":"uint32"},{"indexed":true,"internalType":"address","name":"controllerAddress","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"controllerId","type":"uint32"}],"name":"ControllerDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"routeId","type":"uint32"},{"indexed":true,"internalType":"address","name":"route","type":"address"}],"name":"NewRouteAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"OwnerClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nominee","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"routeId","type":"uint32"}],"name":"RouteDisabled","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BRIDGE_AFTER_SWAP_SELECTOR","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CENT_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controllerAddress","type":"address"}],"name":"addController","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routeAddress","type":"address"}],"name":"addRoute","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"routeId","type":"uint32"}],"name":"addressAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controllerCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"controllers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"controllerId","type":"uint32"}],"name":"disableController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"routeId","type":"uint32"}],"name":"disableRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disabledRouteAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"controllerId","type":"uint32"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISocketGateway.SocketControllerRequest","name":"socketControllerRequest","type":"tuple"}],"name":"executeController","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"controllerId","type":"uint32"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISocketGateway.SocketControllerRequest[]","name":"controllerRequests","type":"tuple[]"}],"name":"executeControllers","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"routeId","type":"uint32"},{"internalType":"bytes","name":"routeData","type":"bytes"}],"name":"executeRoute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"routeIds","type":"uint32[]"},{"internalType":"bytes[]","name":"dataItems","type":"bytes[]"}],"name":"executeRoutes","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"controllerId","type":"uint32"}],"name":"getController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"routeId","type":"uint32"}],"name":"getRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nominee_","type":"address"}],"name":"nominateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"routes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routesCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"routeAddresses","type":"address[]"},{"internalType":"address[]","name":"tokenAddresses","type":"address[]"},{"internalType":"bool","name":"isMax","type":"bool"}],"name":"setApprovalForRouters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"swapRouteId","type":"uint32"},{"internalType":"bytes","name":"swapImplData","type":"bytes"},{"internalType":"uint32[]","name":"bridgeRouteIds","type":"uint32[]"},{"internalType":"bytes[]","name":"bridgeImplDataItems","type":"bytes[]"},{"internalType":"uint256[]","name":"bridgeRatios","type":"uint256[]"},{"internalType":"bytes[]","name":"eventDataItems","type":"bytes[]"}],"internalType":"struct ISocketRequest.SwapMultiBridgeRequest","name":"swapMultiBridgeRequest","type":"tuple"}],"name":"swapAndMultiBridge","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052632cf7236960e21b6080526001805463ffffffff60a01b191661018160a01b1790553480156200003357600080fd5b5060405162006057380380620060578339810160408190526200005691620000ea565b8162000062816200007a565b5060601b6001600160601b03191660a0525062000122565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b80516001600160a01b0381168114620000e557600080fd5b919050565b60008060408385031215620000fe57600080fd5b6200010983620000cd565b91506200011960208401620000cd565b90509250929050565b60805160e01c60e01b60a05160601c615ef1620001666000396000818161032e01528181614aef0152615283015260008181610362015261504d0152615ef16000f3fe6080604052600436106101a55760003560e01c806382230446116100e15780639e0bbd9f1161008a578063a7fc7a0711610064578063a7fc7a07146105bd578063c3540448146105dd578063e42e0ea9146105f0578063fd32692114610610576101ac565b80639e0bbd9f14610529578063a67f534d14610549578063a69685b514610592576101ac565b806390ea7413116100bb57806390ea7413146104b3578063915ad7e9146104f657806396f4130c14610516576101ac565b806382230446146104485780638c95ff1e146104685780638da5cb5b14610488576101ac565b806342cf35271161014e5780635dbd8f6b116101285780635dbd8f6b146103d55780636ccae054146103e85780637095d47114610408578063734427c814610428576101ac565b806342cf35271461031c57806352283e35146103505780635b94db27146103b5576101ac565b8063263af8e81161017f578063263af8e8146102af57806337c6145a146102f25780633bd1adec14610305576101ac565b80631028c2bd146101ec57806315b9a8b81461021557806320f99c0a14610263576101ac565b366101ac57005b60006101bb813560e01c610645565b90506060600436036004600037600080600436036000855af490503d6000803e8080156101e7573d6000f35b3d6000fd5b6101ff6101fa366004615aab565b614659565b60405161020c9190615b5a565b60405180910390f35b34801561022157600080fd5b5060015461024e907801000000000000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161020c565b34801561026f57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020c565b3480156102bb57600080fd5b5061028a6102ca366004615a90565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101ff610300366004615a01565b6146e8565b34801561031157600080fd5b5061031a61479f565b005b34801561032857600080fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035c57600080fd5b506103847f000000000000000000000000000000000000000000000000000000000000000081565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161020c565b3480156103c157600080fd5b5061031a6103d0366004615834565b6147fb565b61031a6103e3366004615936565b6148bb565b3480156103f457600080fd5b5061031a61040336600461587d565b6149df565b34801561041457600080fd5b5061028a610423366004615a90565b614a51565b34801561043457600080fd5b5061031a610443366004615a90565b614a62565b34801561045457600080fd5b5061031a6104633660046158be565b614b4f565b34801561047457600080fd5b5061024e610483366004615834565b614ced565b34801561049457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661028a565b3480156104bf57600080fd5b5061028a6104ce366004615a90565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561050257600080fd5b5061028a610511366004615a90565b610645565b61031a610524366004615a3c565b614e39565b34801561053557600080fd5b5061031a610544366004615a90565b6151f6565b34801561055557600080fd5b5061028a610564366004615a90565b63ffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561059e57600080fd5b506105af68056bc75e2d6310000081565b60405190815260200161020c565b3480156105c957600080fd5b5061024e6105d8366004615834565b6152e3565b61031a6105eb366004615978565b615431565b3480156105fc57600080fd5b5061031a61060b366004615851565b61553a565b34801561061c57600080fd5b5060015461024e9074010000000000000000000000000000000000000000900463ffffffff1681565b60006101818263ffffffff1610156145c8576101018263ffffffff1610156130585760818263ffffffff161015611b675760418263ffffffff1610156110f65760218263ffffffff161015610bc55760118263ffffffff1610156109345760098263ffffffff1610156107f35760058263ffffffff16101561075a5760038263ffffffff161015610715578163ffffffff16600114156106fa5750738cd6bacdae46b449e2e5b34e348a4ed459c84d50919050565b507331524750cd865ff6a3540f232754fb974c18585c919050565b8163ffffffff166003141561073f575073ed9b37342bec8f3a2d7b000732ec87498aa6ec6a919050565b5073e8704ef6211f8988ccbb11badc89841808d66890919050565b60078263ffffffff1610156107ae578163ffffffff16600514156107935750739aff58c460a461578c433e11c4108d1c4cf77761919050565b50732d1733886cfd465b0b99f1492f40847495f334c5919050565b8163ffffffff16600714156107d8575073715497be4d130f04b8442f0a1f7a9312d4e54fc4919050565b507390c8a40c38e633b5b0e0d0585b9f7fa05462caaf919050565b600d8263ffffffff16101561089b57600b8263ffffffff161015610856578163ffffffff166009141561083b575073a402b70fcff3f4a8422b93ef58e895021eade4f6919050565b5073c1b718522e15cd42c4ac385a929fc2b51f5b892e919050565b8163ffffffff16600b1415610880575073a97bf2f7c26c43c010c349f52f5ea5dc49b2dd38919050565b5073969423d71b62c81d2f28d707364c9dc4a0764c53919050565b600f8263ffffffff1610156108ef578163ffffffff16600d14156108d4575073f86729934c083fbec8c796068a1fc60701ea1207919050565b5073d7cc2571f5823caca26a42690d2be7803dd5393f919050565b8163ffffffff16600f14156109195750737c8837a279bbbf7d8b93413763176de9f65d5bb9919050565b507313b81c27b588c07d04458ed7ddbdbd26d1e39bcc919050565b60198263ffffffff161015610a845760158263ffffffff1610156109eb5760138263ffffffff1610156109a6578163ffffffff166011141561098b57507352560ac678afa1345d15474287d16dc1ea3f78ae919050565b50731e31e376551459667cd7643440c1b21ce69065a0919050565b8163ffffffff16601314156109d0575073c57d822cb3288e7b97ef8f8af0ecdcd1b783529b919050565b50732197a1d9af24b4d6a64bff95b4c29fcd3ff28c30919050565b60178263ffffffff161015610a3f578163ffffffff1660151415610a24575073e3700feaa5100041bf6b7adba1f72f647809fd00919050565b5073c02e8a0fdabf0eefcea025163d90b5621e2b9948919050565b8163ffffffff1660171415610a69575073f5144235e2926cab3c69b30113254fa632f72d62919050565b5073ba3f92313b00a1f7bc53b2c24eb195c8b2f57682919050565b601d8263ffffffff161015610b2c57601b8263ffffffff161015610ae7578163ffffffff1660191415610acc57507377a6856fe1ffa5beb55a1d2ed86e27c7c482cb76919050565b50734826ff4e01e44b1fcefbfb38cd96687eb7786b44919050565b8163ffffffff16601b1415610b1157507355ff3f5493cf5e80e76dea7e327b9cd8440af646919050565b5073f430db544be9770503be4aa51997aa19bbd5ba4f919050565b601f8263ffffffff161015610b80578163ffffffff16601d1415610b655750730f166446ce1484ee3b0663e7e67df10f5d240115919050565b50736365095d92537f242db5edfdd572745e72ac33d9919050565b8163ffffffff16601f1415610baa5750735c7bc93f06ce3eae75adf55e10e23d2c1de5bc65919050565b5073e46383bad90d7a08197ccf08972e9dcdccce9ba4919050565b60318263ffffffff161015610e655760298263ffffffff161015610d245760258263ffffffff161015610c8b5760238263ffffffff161015610c46578163ffffffff1660211415610c2b575073f0f21710c071e3b728bdc4654c3c0b873aaaa308919050565b507363bc9ed3acaaeb0332531c9fb03b0a2352e9ff25919050565b8163ffffffff1660231415610c70575073d1ce808625cb4007a1708824ae82cdb0ece57de9919050565b507357bbb148112f4ba224841c3fe018884171004661919050565b60278263ffffffff161015610cdf578163ffffffff1660251415610cc4575073037f7d6933036f34dfabd40ff8e4d789069f92e3919050565b5073ef978c280915cff3dca4edfa8932469e40ada1e1919050565b8163ffffffff1660271415610d0957507392ee9e071b13f7ecfd62b7ded404a16cbc223cd3919050565b507394ae539c186e41ed762271338edf140414d1e442919050565b602d8263ffffffff161015610dcc57602b8263ffffffff161015610d87578163ffffffff1660291415610d6c57507330a64bbe4ddbd43da2368efd1eb2d80c10d84dab919050565b50733aeabf81c1dc4c1b73d5b2a95410f126426fb596919050565b8163ffffffff16602b1415610db157507325b08ab3d0c8ea4cc9d967b79688c6d98f3f563a919050565b5073ea40cb15c9a3bbd27af6474483886f7c0c9ae406919050565b602f8263ffffffff161015610e20578163ffffffff16602d1415610e055750739580113cc04e5a0a03359686304ef3a80b936dd3919050565b5073d211c826d568957f3b66a3f4d9c5f68ccc66e619919050565b8163ffffffff16602f1415610e4a575073cee24d0635c4c56315d133b031984d4a6f509476919050565b50733922e6b987983229798e7a20095ec372744d4d4c919050565b60398263ffffffff161015610fb55760358263ffffffff161015610f1c5760338263ffffffff161015610ed7578163ffffffff1660311415610ebc5750732d92d03413d296e1f31450479349757187f2a2b7919050565b50730fe5308ee90fc78f45c89db6053ea859097860ca919050565b8163ffffffff1660331415610f0157507308ba68e067c0505baf0c1311e0cfb2b1b59b969c919050565b50739bee5dddf75c24897374f92a534b7a6f24e97f4a919050565b60378263ffffffff161015610f70578163ffffffff1660351415610f555750731fc5a90b232208704b930c1edf82ffc6acc02734919050565b50735b1b0417cb44c761c2a23ee435d011f0214b3c85919050565b8163ffffffff1660371415610f9a5750739d70cdaca12a738c283020760f449d7816d592ec919050565b507395a23b9cb830eccfddd5df56a4ec665e3381fa12919050565b603d8263ffffffff16101561105d57603b8263ffffffff161015611018578163ffffffff1660391415610ffd575073483a957cf1251c20e096c35c8399721d1200a3fc919050565b5073b4ad39cb293b0ec7feda743442769a7ff04987cd919050565b8163ffffffff16603b14156110425750734c543ad78c1590d81bae09fc5b6df4132a2461d0919050565b5073471d5e5195c563902781734cfe1ff3981f8b6c86919050565b603f8263ffffffff1610156110b1578163ffffffff16603d14156110965750731b12a54b5e606d95b8b8d123c9cb09221ee37584919050565b5073e4127cc550bac433646a7d998775a84dac16c7f3919050565b8163ffffffff16603f14156110db575073ecb1b55ab12e7dd788d585c6c5cd61b5f87be836919050565b5073f91ef487c5a1579f70601b6d347e19756092eebf919050565b60618263ffffffff1610156116365760518263ffffffff1610156113a55760498263ffffffff1610156112645760458263ffffffff1610156111cb5760438263ffffffff161015611186578163ffffffff166041141561116b57507334a16a7e9badeefd4f056310cbe0b1423fa1b760919050565b507360e10e80c7680f429dbbc232830becd3d623c4cf919050565b8163ffffffff16604314156111b057507366465285b8d65362a1d86ce00fe2be949fd6debf919050565b50735ab231b7e1a3a74a48f67ab7bde5cdd4267022e0919050565b60478263ffffffff16101561121f578163ffffffff16604514156112045750733a1c3633ee79d43366f5c67802a746afd6b162ba919050565b50730c4bfcba8dc3c811437521a80e81e41daf479039919050565b8163ffffffff16604714156112495750736caf25d2e139c5431a1fa526eaf8d73ff2e6252c919050565b507374ad21e09fda68638ce14a3009a79b6d16574257919050565b604d8263ffffffff16101561130c57604b8263ffffffff1610156112c7578163ffffffff16604914156112ac575073d4923a61008894b99cc1cd3407ef9524f02aa0ca919050565b50736f159b5eb823bd415886b9271aa2a723a00a1987919050565b8163ffffffff16604b14156112f1575073742a8aa42e7bfb4554de30f4fb07ffb6f2068863919050565b50734ae9702d3360400e47b446e76de063acab930101919050565b604f8263ffffffff161015611360578163ffffffff16604d14156113455750730e19a0a44dda7dad854ec5cc867d16869c4e80f4919050565b5073e021a51968f25148f726e326c88d2556c5647557919050565b8163ffffffff16604f141561138a57507364287bdddaef4d94e4599a3d882bed29e6ada4b6919050565b5073cbb57fd2e19cc7e9d444d5b4325a2f1047d0c73f919050565b60598263ffffffff1610156114f55760558263ffffffff16101561145c5760538263ffffffff161015611417578163ffffffff16605114156113fc575073373de80df7d82cff6d76f29581b360c56331e957919050565b50730466356e131ad61596a51f86bad1c03a328960d8919050565b8163ffffffff166053141561144157507301726b960992f1b74311b248e2a922fc707d43a6919050565b50732e21bdf9a4509b89795bce7e132f248a75814cec919050565b60578263ffffffff1610156114b0578163ffffffff1660551415611495575073769512b23aeff842379091d3b6e4b5456f631d42919050565b5073e7ed9be946a74ec19325d39c6eeb57887ccb2b0d919050565b8163ffffffff16605714156114da575073c4d01ec357c2b511d10c15e6b6974380f0e62e67919050565b50735bc49cc9dd77becf2fd3a3c55611e84e69afa3ae919050565b605d8263ffffffff16101561159d57605b8263ffffffff161015611558578163ffffffff166059141561153d57507348bcd879954fa14e7dbdaeb56f79c1e9ddcb69ec919050565b5073e929bdde21b462572fcaa4de6f49b9d3246688d0919050565b8163ffffffff16605b141561158257507385aae300438222f0e3a9bc870267a5633a9438bd919050565b507351f72e1096a81c55cd142d66d39b688c657f9be8919050565b605f8263ffffffff1610156115f1578163ffffffff16605d14156115d65750733a8a05bf68ac54b01e6c0f492abf97465f3d15f9919050565b5073145aa67133f0c2c36b9771e92e0b7655f0d59040919050565b8163ffffffff16605f141561161b575073a030315d7db11f9892758c9e7092d841e0adc618919050565b5073df1f8d81a3734bdddefac6ca1596e081e57c3044919050565b60718263ffffffff1610156118d65760698263ffffffff1610156117955760658263ffffffff1610156116fc5760638263ffffffff1610156116b7578163ffffffff166061141561169c575073ff2833123b58aa05d04d7fb99f5fb768b2b435f8919050565b5073c8f09c1fd751c570233765f71b0e280d74e6e743919050565b8163ffffffff16606314156116e15750733026da6ceca2e5a57a05153653d9212ffaaa49d8919050565b5073de68ee703de0d11f67b0ce5891cb4a903de6d160919050565b60678263ffffffff161015611750578163ffffffff1660651415611735575073e23a7730e81fb4e87a6d0bd9f63ee77ac86c3da4919050565b50738b1dbe04ad76a7d8bc079cacd3ed4d99b897f4a0919050565b8163ffffffff166067141561177a575073bb227240fa459b69c6889b2b8cb1be76f118061f919050565b5073c062b9b3f0db28bb8afafcd4d075729344114ffe919050565b606d8263ffffffff16101561183d57606b8263ffffffff1610156117f8578163ffffffff16606914156117dd575073553188aa45f5fdb83ec4ca485982f8fc082480d1919050565b50730109d83d746eacb6d4014953d9e12d6ca85e330b919050565b8163ffffffff16606b141561182257507345b1bed29812f5bf6711074acd180b2aeb783ad9919050565b5073da06ec8c19aea31d77f60299678cba40e743e1ad919050565b606f8263ffffffff161015611891578163ffffffff16606d14156118765750733cc5235c97d975a9b4fd4501b3446c981ea3d855919050565b5073a1827267d6bd989ff38580ae3d9deff6acf19163919050565b8163ffffffff16606f14156118bb5750733663caa0433a3d4171b3581cf2410702840a735a919050565b50737575d0a7614f655ba77c74a72a43bbd4fa6246a3919050565b60798263ffffffff161015611a265760758263ffffffff16101561198d5760738263ffffffff161015611948578163ffffffff166071141561192d5750732516defc18bc07089c5daff5eafd7b0ef64611e2919050565b5073fec5ff08e20fbc107a97af2d38bd0025b84ee233919050565b8163ffffffff16607314156119725750730fb5763a87242b25243e23d73f55945fe787523a919050565b5073e4c00db89678dbf8391f430c578ca857dd98ade1919050565b60778263ffffffff1610156119e1578163ffffffff16607514156119c65750738f2a22061f9f35e64f14523dc1a5f8159e6a21b7919050565b507318e4b838ae966917e20e9c9c5ad359cdd38303bb919050565b8163ffffffff1660771415611a0b57507361acb1d3dcb3e3429832a164cc0fc9849fb75a4a919050565b50737681e3c8e7a41dca55c257cc0d1ae757f5530e65919050565b607d8263ffffffff161015611ace57607b8263ffffffff161015611a89578163ffffffff1660791415611a6e575073806a2ab9748c3d1db976550890e3f528b7e8faec919050565b5073bdb8a5dd52c2c239fbc31e9d43b763b0197028ff919050565b8163ffffffff16607b1415611ab3575073474ec9203706010b9978d6bd0b105d36755e4848919050565b50738dfd0d829b303f2239212e591a0f92a32880f36e919050565b607f8263ffffffff161015611b22578163ffffffff16607d1415611b07575073ad4bce9745860b1add6f1bd34a916f050e4c82c2919050565b5073bc701115b9fe14bc8cc5934cdc92517173e308c4919050565b8163ffffffff16607f1415611b4c5750730d1918d786db8546a11aded475c98370e06f255e919050565b5073ee44f57cd6936db55b99163f3df367b01eda785a919050565b60c18263ffffffff1610156125e75760a18263ffffffff1610156120b65760918263ffffffff161015611e255760898263ffffffff161015611ce45760858263ffffffff161015611c4b5760838263ffffffff161015611c06578163ffffffff1660811415611beb57507363044521fe5a1e488d7ed419cd0e35b7c24f2aa7919050565b5073410085e73bd85e90d97b84a68c125adb9f91f85b919050565b8163ffffffff1660831415611c305750737913fe97e07c7a397ec274ab1d4e2622c88ec5d1919050565b5073977f9fe93c064dcf54157406daabc3a722e8184c919050565b60878263ffffffff161015611c9f578163ffffffff1660851415611c84575073cd2236468722057cfbbabad2db3dea9c20d5b01b919050565b507317c7287a491cf5ff81e2678cf2bfae4333f6108c919050565b8163ffffffff1660871415611cc9575073354d9a5dbf96c71b79a265f03b595c6fdc04dadd919050565b5073b4e409eb8e775eefeb0344f9eee884cc7ed21c69919050565b608d8263ffffffff161015611d8c57608b8263ffffffff161015611d47578163ffffffff1660891415611d2c575073a1a3c4670ad69d9be4ab2d39d1231fec2a63b519919050565b50734589a22199870729c1be5cd62ee93bed858113e6919050565b8163ffffffff16608b1415611d715750738e7b864db26bd6c798c38d4ba36eba0d6602cf11919050565b5073a2d17c7260a4cb7b9854e89fc367e80e87872a2d919050565b608f8263ffffffff161015611de0578163ffffffff16608d1415611dc5575073c7f0edf0a1288627b0432304918a75e9084cbd46919050565b5073e4b4ef1f9a4abfedb371fa7a6143993b15d4df25919050565b8163ffffffff16608f1415611e0a575073fe3d84a2ef306febb5452441c9bdbb6521666f6a919050565b50738a12b6c64121920110ae58f7cd67dfec21c6a4c3919050565b60998263ffffffff161015611f755760958263ffffffff161015611edc5760938263ffffffff161015611e97578163ffffffff1660911415611e7c57507376c4d9afc4717a2baac4e5f26cccf02351f7a3da919050565b5073d4719ba550e397aeacca1ad2201c1ba69024faaf919050565b8163ffffffff1660931415611ec15750739646126ce025224d1682c227d915a386efc0a1fb919050565b50734dd8af2e3f2044842f0247920bc4babb636915ea919050565b60978263ffffffff161015611f30578163ffffffff1660951415611f155750738e8a327183af0cf8c2ece9f0ed547c42a160d409919050565b50739d49614cae1c685c71678ca6d8cdf7584bfd0740919050565b8163ffffffff1660971415611f5a5750735a00ef257394cbc31828d48655e3d39e9c11c93d919050565b5073c9a2751b38d3ddd161a41ca0135c5c6c09ec1d56919050565b609d8263ffffffff16101561201d57609b8263ffffffff161015611fd8578163ffffffff1660991415611fbd5750737e1c261640a525c94ca4f8c25b48cf754dd83590919050565b5073409fe24ba6f6bd5af31c1aaf8059b986a3158233919050565b8163ffffffff16609b1415612002575073704cf5bfdadc0f55fdbb53b6ed8b582e018a72a2919050565b50733982bf65d7d6e77e3b6661cd6f6468c247512737919050565b609f8263ffffffff161015612071578163ffffffff16609d14156120565750733982b9f26ffd67a13ee371e2c0a9da338ba70e7f919050565b50736d834ab385900c1f49055d098e90264077fbc4f2919050565b8163ffffffff16609f141561209b57507311fe5f70779a094b7166b391e1fb73d422ef4e4d919050565b5073d347e4e47280d21f13b73d89c6d16f867d50dd13919050565b60b18263ffffffff1610156123565760a98263ffffffff1610156122155760a58263ffffffff16101561217c5760a38263ffffffff161015612137578163ffffffff1660a1141561211c575073b6035edd53dda28d8b69b4ae9836e40c80306cd7919050565b507354c884e6f5c7ccfeca990396c520c858c922b6ca919050565b8163ffffffff1660a314156121615750735ea93e240b083d686558ed607bc013d88057ce46919050565b50734c7131ee812de685cbe4e2ccb033d46ecd46612e919050565b60a78263ffffffff1610156121d0578163ffffffff1660a514156121b5575073c1a5be9f0c33d8483801d702111068669f81ff91919050565b50739e5fab91455be5e5b2c05967e73f456c8118b1fc919050565b8163ffffffff1660a714156121fa5750733d9a05927223e0dc2f382831770405885e22f0d8919050565b50736303a011fb6063f5b1681cb5a9938ea278dc6128919050565b60ad8263ffffffff1610156122bd5760ab8263ffffffff161015612278578163ffffffff1660a9141561225d575073e9c60795c90c66797e4c8e97511ea07cdada32be919050565b5073d56cc98e69a1e13815818b466a8aa6163d84234a919050565b8163ffffffff1660ab14156122a257507347ebb9d36a6e40895316cd894e4860d774e2c531919050565b5073a5eb293629410065d14a7b1663a67829b0618292919050565b60af8263ffffffff161015612311578163ffffffff1660ad14156122f65750731b3b4c8146f939ce00899db8b3ddef0062b7e023919050565b5073257bbc11653625ebfb6a8587ef4f4fbe49828eb3919050565b8163ffffffff1660af141561233b57507344cc979c01b5bb1eac21301e73c37200dfd06f59919050565b50732972fdf43352225d82754c0174ff853819d1ef2a919050565b60b98263ffffffff1610156124a65760b58263ffffffff16101561240d5760b38263ffffffff1610156123c8578163ffffffff1660b114156123ad5750733e54144f032648a04d62d79f7b4b93ff3ac2333b919050565b5073444016102db8adbe73c3b6703a1ea7f2f75a510d919050565b8163ffffffff1660b314156123f2575073ac079143f98a6eb744fde34541ebf243df5b5ded919050565b5073ae9010767fb112d29d35cedfba2b372ad7a308d3919050565b60b78263ffffffff161015612461578163ffffffff1660b51415612446575073fe0bccf9ccc2265d5fb3450743f17dfe57ae1e56919050565b507304ed8c0545716119437a45386b1d691c63234c7d919050565b8163ffffffff1660b7141561248b575073636c14013e531a286bc4c848da34585f0bb73d59919050565b50732fa67fc7ecc5caa01c653d3bfea98ecc5db9c42a919050565b60bd8263ffffffff16101561254e5760bb8263ffffffff161015612509578163ffffffff1660b914156124ee57507323e9a0fc180818aa872d2079a985217017e97bd9919050565b507379a95c3ef81b3ae64ee03a9d5f73e570495f164e919050565b8163ffffffff1660bb1415612533575073a7ea0e88f04a84ba0ad1e396cb07fa3fdad7df6d919050565b5073d23ca1278a2b01a3c0ca1a00d104b11c1ebe6f42919050565b60bf8263ffffffff1610156125a2578163ffffffff1660bd1415612587575073707bc4a9fa2e349aed5df4e9f5440c15aa9d14bd919050565b50737e290f2dd539ac6ce58d8b4c2b944931a1fd3612919050565b8163ffffffff1660bf14156125cc575073707aa5503088ce06ba450b6470a506122ea5c8ef919050565b5073fbb3f7bf680deeb149f4e7bc30ea3ddfa68f3c3f919050565b60e18263ffffffff161015612b275760d18263ffffffff1610156128965760c98263ffffffff1610156127555760c58263ffffffff1610156126bc5760c38263ffffffff161015612677578163ffffffff1660c1141561265c575073de74ad8ccc3dbf14992f49cf24f36855912f4934919050565b5073409ba83df7777f070b2b50a10a41de2468d2a3b3919050565b8163ffffffff1660c314156126a15750735cb7be90a5dd7cfda54e87626e254fe8c18255b4919050565b50730a684fe12bc64fb72b59d0771a566f49bc090356919050565b60c78263ffffffff161015612710578163ffffffff1660c514156126f5575073df30048d91f8fa2bcfc54952b92bfa8e161d3360919050565b5073050825fff032a547c47061cf0696fdb0f65aea5d919050565b8163ffffffff1660c7141561273a575073d55e671dac1f03d366d8535073ada5db2aab1ea2919050565b50739470c704a9616c8cd41c595fcd2181b6fe2183c2919050565b60cd8263ffffffff1610156127fd5760cb8263ffffffff1610156127b8578163ffffffff1660c9141561279d5750732d9ffd275181f5865d5e11cbb4ced1521c4df9f1919050565b5073816d28dec10ec95df5334f884de85ca6215918d8919050565b8163ffffffff1660cb14156127e2575073d1f87267c4a43835e666dd69df077e578a3b6299919050565b507339e89bde9dacbe5468c025de371fbda12bdebab1919050565b60cf8263ffffffff161015612851578163ffffffff1660cd14156128365750737b40a3207956ecad6686e61efcac48912fcd0658919050565b5073090cf10d793b1efba9c7d76115878814b663859a919050565b8163ffffffff1660cf141561287b575073312a59c06e41327878f2063ed0e9c282c1da3afc919050565b50734f1188f46236dd6b5de11ebf2a9ff08716e7deb6919050565b60d98263ffffffff1610156129e65760d58263ffffffff16101561294d5760d38263ffffffff161015612908578163ffffffff1660d114156128ed5750730a6f9a3f4fa49909bbfb4339cbe12b42f53bbbed919050565b507301d13d7acacbb955b81935c80fff31e14bdfa71f919050565b8163ffffffff1660d31415612932575073691a14fa6c7360422ec56df5876f84d4edd7f00a919050565b507397aad18d886d181a9c726b3b6ae15a0a69f5af73919050565b60d78263ffffffff1610156129a1578163ffffffff1660d514156129865750732917241371d2099049fa29432dc46735baec33b4919050565b50735f20f20f7890c2e383e29d4147c9695a371165f5919050565b8163ffffffff1660d714156129cb575073ec0a60e639958335662c5219a320ccebb56c6077919050565b507396d63cf5062975c09845d17ec672e10255866053919050565b60dd8263ffffffff161015612a8e5760db8263ffffffff161015612a49578163ffffffff1660d91415612a2e575073ff57429e57d383939cab50f09abbfb63c0e6c9ad919050565b507318e393a7c8578fb1e235c242076e50013cddd0d7919050565b8163ffffffff1660db1415612a73575073e7e5238af5d61f52e9b4acc025f713d1c0216507919050565b5073428401d4d0f25a2ee1da4d5366cb96ded425d9bd919050565b60df8263ffffffff161015612ae2578163ffffffff1660dd1415612ac757507342e5733551ff1ee5b48aa9fc2b61af9b58c812e6919050565b507364df9c7a0551b056d860bc2419ca4c1ef75320be919050565b8163ffffffff1660df1415612b0c57507346006925506145611bbf0263243d8627daf26b0f919050565b50738d64be884314662804eaab884531f5c50f4d500c919050565b60f18263ffffffff161015612dc75760e98263ffffffff161015612c865760e58263ffffffff161015612bed5760e38263ffffffff161015612ba8578163ffffffff1660e11415612b8d575073157a62d92d07b5ce221a5429645a03bbace85373919050565b5073af037d33e1f1f2f87309b425fe8a9d895ef3722b919050565b8163ffffffff1660e31415612bd2575073921d1154e494a2f7218a37ad7b17701f94b4b40e919050565b5073f282b4555186d8dea51b8b3f947e1e0568d09bc4919050565b60e78263ffffffff161015612c41578163ffffffff1660e51415612c26575073a794e2e1869765a4600b3dfd8a4ebcf16350f6b6919050565b5073fefb048e20c5652f7940a49b1980e0125ec4d358919050565b8163ffffffff1660e71415612c6b575073220104b641971e9b25612a8f001bf48abb23f1cf919050565b5073cb9d373bb54a501b35dd3be5bf4ba43ca31f7035919050565b60ed8263ffffffff161015612d2e5760eb8263ffffffff161015612ce9578163ffffffff1660e91415612cce57507337d627f56e3ff36ac316372109ea82e03ac97dac919050565b50734e81355ffb4a271b4ea59ff78da2b61c7833161f919050565b8163ffffffff1660eb1415612d13575073add8d65caf6cc9ad73127b49e16ea7ac29d91e87919050565b5073630f9b95626487dfeae3c97a44db6c59cf35d996919050565b60ef8263ffffffff161015612d82578163ffffffff1660ed1415612d6757507378ce2bc8238b679680a67fcb98c5a60e4ec17b2d919050565b5073a38d776028ed1310b9a6b086f67f788201762e21919050565b8163ffffffff1660ef1415612dac5750737bb5178827b76b86753ed62a0d662c72cecb1bd3919050565b50734fac26f61c76ec5c3d43b43edfaff0736ae0e3da919050565b60f98263ffffffff161015612f175760f58263ffffffff161015612e7e5760f38263ffffffff161015612e39578163ffffffff1660f11415612e1e575073791bb49bffa7129d6889fdb27744422ac4571a85919050565b507326766ffebb5fa564777913a6f101df019ab32afa919050565b8163ffffffff1660f31415612e6357507305e98e5e95b4ecbbbaf3258c3999cc81ed8048be919050565b5073c5c4621e52f1d6a1825a5ed4f95855401a3d9c6b919050565b60f78263ffffffff161015612ed2578163ffffffff1660f51415612eb7575073fcb15f909ba7fc7ea083503fb4c1020203c107eb919050565b5073bd27603279d969c74f2486ad14e71080829dfd38919050565b8163ffffffff1660f71415612efc575073ff2f756bcecc1a55bfc09a30cc5f64720458cfcb919050565b50733bfb968febc12f4e8420b2d016efce1e615f7246919050565b60fd8263ffffffff161015612fbf5760fb8263ffffffff161015612f7a578163ffffffff1660f91415612f5f575073982ee9ffe23051a2ec945ed676d864fa8345222b919050565b5073e101899100785e74767d454fff0131277bad48d9919050565b8163ffffffff1660fb1415612fa45750734f730c0c6b3b5b7d06ca511379f4aa5bfb2e9525919050565b50735499c36b365795e4e0ef671af6c2ce26d7c78265919050565b60ff8263ffffffff161015613013578163ffffffff1660fd1415612ff85750738af51f7237fc8fb2fc3e700488a94a0ac6ad8b5a919050565b5073da8716df61213c0b143f2849785fb85928084857919050565b8163ffffffff1660ff141561303d575073f040cf9b1ebd11bf28e04e80740df3dde717e4f5919050565b5073b87ba32f759d14023c7520366b844df7f0f036c2919050565b6101418263ffffffff161015613b18576101218263ffffffff1610156135c8576101118263ffffffff161015613328576101098263ffffffff1610156131e0576101058263ffffffff161015613144576101038263ffffffff1610156130fe578163ffffffff1661010114156130e35750730edde681b8478f0c3194f468edd2db5e75c65cdd919050565b507359c70900fca06ee2ace1bdd5a8d0af0cc3bba720919050565b8163ffffffff1661010314156131295750738041f0f180d17dd07087199632c45e17aeb0bad5919050565b50734fb4727064ba595995dd516b63b5921df9b93ac6919050565b6101078263ffffffff16101561319a578163ffffffff16610105141561317f57507386e98b594565857ed098864f560915c0dafd6ea1919050565b507370f8818e8b698effecd86a513a4c87c0c380bef6919050565b8163ffffffff1661010714156131c557507378ed227c8a897a21da2875a752142dd80d865158919050565b5073d02a30bb5c3a8c51d2751a029a6fcfde2af9fbc6919050565b61010d8263ffffffff16101561328c5761010b8263ffffffff161015613246578163ffffffff16610109141561322b5750730f00d5c5acb24e975e2a56730609f7f40aa763b8919050565b5073c3e2091edc2d3d9d98ba09269138b617b536834a919050565b8163ffffffff1661010b1415613271575073a6fbaf7f30867c9633908998ea8c3da28920e75c919050565b5073e6dddcd41e2bbe8122ae32ac29b8fbab79cd21d9919050565b61010f8263ffffffff1610156132e2578163ffffffff1661010d14156132c7575073537aa8c1ef6a8eaf039dd6e1eb67694a48195ce4919050565b507396abac485fd2d0b03cf4a10df8bd58b8ded28300919050565b8163ffffffff1661010f141561330d575073da8e7d46d04bd4f62705cd80355bdb6d441daffd919050565b5073be50018e7a5c67e2e5f5414393e971cc96f293f2919050565b6101198263ffffffff161015613480576101158263ffffffff1610156133e4576101138263ffffffff16101561339e578163ffffffff166101111415613383575073a1b3907d6cb542a4cbe2ee441effaa909fab62c3919050565b50736d08ee8511c0237a515013ac389e7b3968cb1753919050565b8163ffffffff1661011314156133c957507322faa5b5fe43eadbb52745e35a5cda8bd5f96bba919050565b50737a673eb74d79e4868d689e7852abb5f93ec2fd4b919050565b6101178263ffffffff16101561343a578163ffffffff16610115141561341f5750730b8531f8afd4190b76f3e10decadb84c98b4d419919050565b507378eabc743a93583dee403d6b84795490e652216b919050565b8163ffffffff1661011714156134655750733a95d907b2a7a8604b59bcca08585f58afe0aa64919050565b5073f4271f0c8c9af0f06a80b8832fa820cce64fada8919050565b61011d8263ffffffff16101561352c5761011b8263ffffffff1610156134e6578163ffffffff1661011914156134cb57507374b2df841245c3748c0d31542e1335659a25c33b919050565b5073dfc99fd0ad7d16f30f295a5eefce029e04d0fa65919050565b8163ffffffff1661011b1415613511575073e992416b6ac1144ed8148a9632973257839027f6919050565b507354ce55ba954e981bb1fd9399054b35ce1f2c0816919050565b61011f8263ffffffff161015613582578163ffffffff1661011d1415613567575073d4ab52f9e7e5b315bd7471920bad04f405ab1c38919050565b50733670c990994d12837e95ee127fe2f06fd3e2104b919050565b8163ffffffff1661011f14156135ad575073dcf190b09c47e4f551e30bbb79969c3fdea1e992919050565b5073a65057b967b59677237e57ab815b209744b9bc40919050565b6101318263ffffffff161015613878576101298263ffffffff161015613730576101258263ffffffff161015613694576101238263ffffffff16101561364e578163ffffffff1661012114156136335750736efc86b40573e4c7f28659b13327d55ae955c483919050565b507306bcc25cf8e0e72316f53631b3aa7134e9f73ae0919050565b8163ffffffff166101231415613679575073710b6414e1d53882b1fcd3a168ad5ccd435fc6d0919050565b50735ebb2c3d78c4e9818074559e7bae7fcc99781dc1919050565b6101278263ffffffff1610156136ea578163ffffffff1661012514156136cf575073af0a409c3aee0bd08015cfb29d89e90b6e89a88f919050565b5073522559d8b99773c693b80ce06df559036295ce44919050565b8163ffffffff166101271415613715575073b65290a5bae838aaa7825c9ecec68041841a1b64919050565b5073801b8f2068edd5bcb659e6bda0c425909043c420919050565b61012d8263ffffffff1610156137dc5761012b8263ffffffff161015613796578163ffffffff16610129141561377b57507329b5f00515d093627e0b7bd0b5c8e84f6b4cdb87919050565b5073652839ae74683cbf9f1293f1019d938f87464d3e919050565b8163ffffffff1661012b14156137c15750735bc95dcebdde9b79f2b6dc76121bc7936ef8d666919050565b507390db359cea62e53051158ab5f99811c0a07fe686919050565b61012f8263ffffffff161015613832578163ffffffff1661012d14156138175750732c3625eedadbdcdbb5330eb0d17b3c39ff269807919050565b5073c3f0324471b5c9d415acd625b8d8694a4e48e001919050565b8163ffffffff1661012f141561385d5750738c60e7e05fa0ffb6f720233736f245134685799d919050565b507398faf2c09aa4ebb995ad0b56152993e7291a500e919050565b6101398263ffffffff1610156139d0576101358263ffffffff161015613934576101338263ffffffff1610156138ee578163ffffffff1661013114156138d3575073802c1063a861414dfaec16bacb81429fc0d40d6e919050565b507311c4aefcc0dc156f64195f6513cb1fb3be0ae056919050565b8163ffffffff166101331415613919575073eff1f3258214e31b6b4f640b4389d55715c3be2b919050565b507347e379abe8ddfea4289aba01235eff7e93758fd7919050565b6101378263ffffffff16101561398a578163ffffffff16610135141561396f5750733cc26384c3ea31ddc8d9789e8872cea6f20cd3ff919050565b5073edd9efa6c69108faa4611097d643e20ba0ed1634919050565b8163ffffffff1661013714156139b5575073cb93525ca5f3d371f74f3d112bc19526740717b8919050565b50737071e0124eb4438137e60df1b8dd8af1bfb362cf919050565b61013d8263ffffffff161015613a7c5761013b8263ffffffff161015613a36578163ffffffff166101391415613a1b5750734691096eb0b78c8f4b4a8091e5b66b18e1835c10919050565b50738d953c9b2d1c2137cf95992079f3a77fcd793272919050565b8163ffffffff1661013b1415613a61575073bdcc2a3bf6e3ba49ff86595e6b2b8d70d8368c92919050565b507395e6948ab38c61b2d294e8bd896bcc4ccc0713cf919050565b61013f8263ffffffff161015613ad2578163ffffffff1661013d1415613ab7575073607b27c881ffee4cb95b1c5862fae7224ccd0b4a919050565b507309d28afa166e566a2ee1cb834ea8e78c7e627ed2919050565b8163ffffffff1661013f1415613afd5750739c01449b38bdf0b263818401044fb1401b29fdfa919050565b50731f7723599bbb658c051f8a39be2688388d22ced6919050565b6101618263ffffffff161015614078576101518263ffffffff161015613dd8576101498263ffffffff161015613c90576101458263ffffffff161015613bf4576101438263ffffffff161015613bae578163ffffffff166101411415613b9357507352b71603f7b8a5d15b4482e965a0619aa3210194919050565b507301c0f072cb210406653752fecfa70b42da9173a2919050565b8163ffffffff166101431415613bd95750733021142f021e943e57fc1886caf58d06147d09a6919050565b5073e6f2af38e76ab09db59225d97d3e770942d3d842919050565b6101478263ffffffff161015613c4a578163ffffffff166101451415613c2f57507306a25554e5135f08b9e2ed1dec1fc3ced52e0b48919050565b507371d75e670ee3511c8290c705e0620126b710bf8d919050565b8163ffffffff166101471415613c755750738b9ce142b80fea7c932952ec533694b1df9b3c54919050565b5073d7be24f32f39231116b3fdc483c2a12e1521f73b919050565b61014d8263ffffffff161015613d3c5761014b8263ffffffff161015613cf6578163ffffffff166101491415613cdb575073b40cafbc4797d4ff64087e087f6d2e661f954cbe919050565b5073bddce7771efee81893e838f62204a4c76d72757e919050565b8163ffffffff1661014b1415613d215750735d3d299ea7fd4f39acdb336e26631dfee41f9287919050565b50736bfee09e1fc0684e0826a9a0dc1352a14b136fac919050565b61014f8263ffffffff161015613d92578163ffffffff1661014d1415613d77575073d0001bb8e2cb661436093f96458a4358b5156e3c919050565b50731867c6485cfd1ed448988368a22bfb17a7747293919050565b8163ffffffff1661014f1415613dbd5750738997ef9f95df24ab67703ab6c262aabfeebe33bd919050565b50731e39e9e601922ded91bcfc8f78836302133465e2919050565b6101598263ffffffff161015613f30576101558263ffffffff161015613e94576101538263ffffffff161015613e4e578163ffffffff166101511415613e335750738a8ec6ceacff502a782216774e5af3421562c6ff919050565b50733b8fc561df5415c8dc01e97ee6e38435a8f9c40a919050565b8163ffffffff166101531415613e79575073d5d5f5b37e67c43cea663aedadffc3a93a2065b0919050565b5073cc8f55ec43b4f25013ce1946fbb740c43be5b96d919050565b6101578263ffffffff161015613eea578163ffffffff166101551415613ecf57507318f586e816eeedbb57b8011239150367561b58fb919050565b5073d0cd802b19c1a52501cb2f07d656e3cd7b0ce124919050565b8163ffffffff166101571415613f15575073e0aed899b39c6e4f2d83e4913a1e9e0cf6368abe919050565b50730606e1b6c0f1a398c38825dccc4678a7cbc2737c919050565b61015d8263ffffffff161015613fdc5761015b8263ffffffff161015613f96578163ffffffff166101591415613f7b5750732d188e85b27d18ef80f16686ea1593abf7ed2a63919050565b507364412292fa4a135a3300e24366e99ff59db2eac1919050565b8163ffffffff1661015b1415613fc157507338b74c173f3733e8b90aaef0e98b89791266149f919050565b507336daa49a79aaef4e7a217a11530d3ccd84414124919050565b61015f8263ffffffff161015614032578163ffffffff1661015d141561401757507310f088fe2c88f90270e4449c46c8b1b232511d58919050565b50734fedbd25b58586838abd17d10272697df1dc3087919050565b8163ffffffff1661015f141561405d575073685278209248cb058e5cee93e37f274a80faf6eb919050565b5073dd9f8f1eec3955f78168e2fb2d1e808fa8a8f15b919050565b6101718263ffffffff161015614328576101698263ffffffff1610156141e0576101658263ffffffff161015614144576101638263ffffffff1610156140fe578163ffffffff1661016114156140e35750737392aeefd5825aac28817031deebbfaaa20983d9919050565b50730cc182555e00767d6fb8ad161a10d0c04c476d91919050565b8163ffffffff16610163141561412957507390e52837d56715c79fd592e8d58bfd20365798b2919050565b50736f4451de14049b6770ad5bf4013118529e68a40c919050565b6101678263ffffffff16101561419a578163ffffffff16610165141561417f57507389b97ef2afab9ed9c7f0fdb095d02e6840b52d9c919050565b507392a5cc5c42d94d3e23aeb1214fff43db2b97759e919050565b8163ffffffff1661016714156141c557507363ddc52f135a1dcba831eaac11c63849f018b739919050565b5073692a691533b571c2c54c1d7f8043a204b3d8120e919050565b61016d8263ffffffff16101561428c5761016b8263ffffffff161015614246578163ffffffff16610169141561422b57507397c7492cf083969f61c6f302d45c8270391b921c919050565b5073defd2b8643553dad19548eb14fd94a57f4b9e543919050565b8163ffffffff1661016b141561427157507330645c04205ca3f670b67b02f971b088930acb8c919050565b5073a6f80ed2d607cd67aeb4109b64a0becc4d7d03cf919050565b61016f8263ffffffff1610156142e2578163ffffffff1661016d14156142c7575073bbbbc6c276eb3f7e674f2d39301509236001c42f919050565b5073c20e77d349fb40ce88eb01824e2873ad9f681f3c919050565b8163ffffffff1661016f141561430d5750735fcfd9a962de19294467c358c1fa55082285960b919050565b50734d87bd6a0e4e5cc6332923cb3e85fc71b287f58a919050565b6101798263ffffffff161015614480576101758263ffffffff1610156143e4576101738263ffffffff16101561439e578163ffffffff1661017114156143835750733aa5b757cd6dde98214e56d57dde7fcf0f7ab04e919050565b5073e28efce7192e11a2297f44059113c1fd6967b2d4919050565b8163ffffffff1661017314156143c95750733251cae10a1cf246e0808d76acc26f7b5eda0ee5919050565b5073ba2091cc9357cf4c4f25d64f30d1b4ba3a5a174b919050565b6101778263ffffffff16101561443a578163ffffffff16610175141561441f57507349c8e1da9693692096f63c82d11b52d738566d55919050565b5073a0731615ab5fff451031e9551367a4f7db27b39c919050565b8163ffffffff166101771415614465575073fb214541888671ae1403cecc1d59763a12fc1609919050565b50731d6bcb17642e2336405df73df22f07688caec020919050565b61017d8263ffffffff16101561452c5761017b8263ffffffff1610156144e6578163ffffffff1661017914156144cb575073fc9c0c7bfe187120ff7f4e21446161794a617a9e919050565b5073ba5bf37678eee2dab17aef9d898153258252250e919050565b8163ffffffff1661017b14156145115750737c55690bd2c9961576a32c02f8eb29ed36415ec7919050565b5073ca40073e868e8bc611aec8fe741d17e68fe422f6919050565b61017f8263ffffffff161015614582578163ffffffff1661017d141561456757507331641bafb87e9a58f78835050a7be56921986339919050565b5073a54766424f6da74b45ebcc5bf0bd1d74d2cccaab919050565b8163ffffffff1661017f14156145ad575073c7bba57f8c179eddbaa62117dda360e28f3f8252919050565b50735e663ed97ea77d393b8858c90d0683bf180e0ffd919050565b63ffffffff821660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1661462a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5063ffffffff1660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b606060008061466786610645565b73ffffffffffffffffffffffffffffffffffffffff16858560405161468d929190615b2e565b600060405180830381855af49150503d80600081146146c8576040519150601f19603f3d011682016040523d82523d6000602084013e6146cd565b606091505b5091509150816146df57805160208201fd5b95945050505050565b60606000806003816146fd6020870187615a90565b63ffffffff1681526020808201929092526040016000205473ffffffffffffffffffffffffffffffffffffffff169061473890860186615c67565b604051614746929190615b2e565b600060405180830381855af49150503d8060008114614781576040519150601f19603f3d011682016040523d82523d6000602084013e614786565b606091505b50915091508161479857805160208201fd5b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146147f0576040517f7c91ccdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6147f9336155ce565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461484c576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b60005b63ffffffff81168211156149da576000806003600086868663ffffffff168181106148eb576148eb615e2a565b90506020028101906148fd9190615ccc565b61490b906020810190615a90565b63ffffffff908116825260208201929092526040016000205473ffffffffffffffffffffffffffffffffffffffff169086908690861681811061495057614950615e2a565b90506020028101906149629190615ccc565b614970906020810190615c67565b60405161497e929190615b2e565b600060405180830381855af49150503d80600081146149b9576040519150601f19603f3d011682016040523d82523d6000602084013e6149be565b606091505b5091509150816149d057805160208201fd5b50506001016148be565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314614a30576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6149da73ffffffffffffffffffffffffffffffffffffffff84168383615646565b6000614a5c82610645565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314614ab3576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff811660008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16179055517fc203fc627a1b6dd6b6dad3f6b7a313417bb01b1b5ebcd77ed25aff6a0b1608659190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314614ba0576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83518163ffffffff161015614ce757828163ffffffff1681518110614bca57614bca615e2a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3858363ffffffff1681518110614c0557614c05615e2a565b602002602001015184614c19576000614c3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b158015614ca657600080fd5b505af1158015614cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cde91906159e4565b50600101614ba3565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314614d3f576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054740100000000000000000000000000000000000000009081900463ffffffff908116600081815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583549093928392601492614dc9928592910416615d18565b92506101000a81548163ffffffff021916908363ffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f7977983873e5c968018b0deaedba28f6ce6253277670e94e627fbc08efc50cb160405160405180910390a390505b919050565b6000614e486040830183615bff565b9150614e5990506060830183615bff565b90508114614e93576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b82811015614ed557614eac6080850185615bff565b82818110614ebc57614ebc615e2a565b9050602002013582614ece9190615d00565b9150614e97565b5068056bc75e2d631000008114614f18576040517fc963e34d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080614f2b6105116020870187615a90565b73ffffffffffffffffffffffffffffffffffffffff16614f4e6020870187615c67565b604051614f5c929190615b2e565b600060405180830381855af49150503d8060008114614f97576040519150601f19603f3d011682016040523d82523d6000602084013e614f9c565b606091505b509150915081614fae57805160208201fd5b600081806020019051810190614fc49190615a77565b90506000805b868110156151ec576000614fdf600189615db8565b821415614ff757614ff08385615db8565b905061503d565b68056bc75e2d6310000061500e60808b018b615bff565b8481811061501e5761501e615e2a565b90506020020135856150309190615d7b565b61503a9190615d40565b90505b6150478184615d00565b925060007f00000000000000000000000000000000000000000000000000000000000000008261507a60608d018d615bff565b8681811061508a5761508a615e2a565b905060200281019061509c9190615c67565b6040516024016150ae93929190615bab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529150600090819061516790615142908e018e615bff565b8781811061515257615152615e2a565b90506020020160208101906105119190615a90565b73ffffffffffffffffffffffffffffffffffffffff168360405161518b9190615b3e565b600060405180830381855af49150503d80600081146151c6576040519150601f19603f3d011682016040523d82523d6000602084013e6151cb565b606091505b5091509150816151dd57805160208201fd5b84600101945050505050614fca565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314615247576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff811660008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16179055517fc60cf0bdf6c913c2d080d151c29909503abb49cdd09b459a7a10a16a466d02da9190a250565b6000805473ffffffffffffffffffffffffffffffffffffffff163314615335576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805478010000000000000000000000000000000000000000000000009081900463ffffffff908116600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055835490939283926018926153c3928592910416615d18565b92506101000a81548163ffffffff021916908363ffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f7601ed90c4c6f485f9633a9355c473c63ec60dfb8e04d060dbda9a80cf48eb6860405160405180910390a392915050565b8281811461546b576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156155325760008061548e88888581811061515257615152615e2a565b73ffffffffffffffffffffffffffffffffffffffff168686858181106154b6576154b6615e2a565b90506020028101906154c89190615c67565b6040516154d6929190615b2e565b600060405180830381855af49150503d8060008114615511576040519150601f19603f3d011682016040523d82523d6000602084013e615516565b606091505b50915091508161552857805160208201fd5b505060010161546e565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461558b576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f193505050501580156149da573d6000803e3d6000fd5b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080614ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640160405180910390fd5b8035614e3481615e88565b600082601f83011261571f57600080fd5b8135602067ffffffffffffffff8083111561573c5761573c615e59565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561577f5761577f615e59565b6040528481528381019250868401828801850189101561579e57600080fd5b600092505b858310156157c8576157b481615703565b8452928401926001929092019184016157a3565b50979650505050505050565b60008083601f8401126157e657600080fd5b50813567ffffffffffffffff8111156157fe57600080fd5b6020830191508360208260051b850101111561581957600080fd5b9250929050565b803563ffffffff81168114614e3457600080fd5b60006020828403121561584657600080fd5b813561479881615e88565b6000806040838503121561586457600080fd5b823561586f81615e88565b946020939093013593505050565b60008060006060848603121561589257600080fd5b833561589d81615e88565b925060208401356158ad81615e88565b929592945050506040919091013590565b6000806000606084860312156158d357600080fd5b833567ffffffffffffffff808211156158eb57600080fd5b6158f78783880161570e565b9450602086013591508082111561590d57600080fd5b5061591a8682870161570e565b925050604084013561592b81615ead565b809150509250925092565b6000806020838503121561594957600080fd5b823567ffffffffffffffff81111561596057600080fd5b61596c858286016157d4565b90969095509350505050565b6000806000806040858703121561598e57600080fd5b843567ffffffffffffffff808211156159a657600080fd5b6159b2888389016157d4565b909650945060208701359150808211156159cb57600080fd5b506159d8878288016157d4565b95989497509550505050565b6000602082840312156159f657600080fd5b815161479881615ead565b600060208284031215615a1357600080fd5b813567ffffffffffffffff811115615a2a57600080fd5b82016040818503121561479857600080fd5b600060208284031215615a4e57600080fd5b813567ffffffffffffffff811115615a6557600080fd5b820160c0818503121561479857600080fd5b600060208284031215615a8957600080fd5b5051919050565b600060208284031215615aa257600080fd5b61479882615820565b600080600060408486031215615ac057600080fd5b615ac984615820565b9250602084013567ffffffffffffffff80821115615ae657600080fd5b818601915086601f830112615afa57600080fd5b813581811115615b0957600080fd5b876020828501011115615b1b57600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b60008251615b50818460208701615dcf565b9190910192915050565b6020815260008251806020840152615b79816040850160208701615dcf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c3457600080fd5b83018035915067ffffffffffffffff821115615c4f57600080fd5b6020019150600581901b360382131561581957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c9c57600080fd5b83018035915067ffffffffffffffff821115615cb757600080fd5b60200191503681900382131561581957600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112615b5057600080fd5b60008219821115615d1357615d13615dfb565b500190565b600063ffffffff808316818516808303821115615d3757615d37615dfb565b01949350505050565b600082615d76577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615db357615db3615dfb565b500290565b600082821015615dca57615dca615dfb565b500390565b60005b83811015615dea578181015183820152602001615dd2565b83811115614ce75750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114615eaa57600080fd5b50565b8015158114615eaa57600080fdfea2646970667358221220520e49e2c3de520dd82c292e84e8cd61284492d5f1dba3ca360fa678da44067d64736f6c63430008070033000000000000000000000000e8dd38e673a93ccfc2e3d7053efccb5c93f493650000000000000000000000000f34a522ff82151c90679b73211955068fd854f1
Deployed Bytecode
0x6080604052600436106101a55760003560e01c806382230446116100e15780639e0bbd9f1161008a578063a7fc7a0711610064578063a7fc7a07146105bd578063c3540448146105dd578063e42e0ea9146105f0578063fd32692114610610576101ac565b80639e0bbd9f14610529578063a67f534d14610549578063a69685b514610592576101ac565b806390ea7413116100bb57806390ea7413146104b3578063915ad7e9146104f657806396f4130c14610516576101ac565b806382230446146104485780638c95ff1e146104685780638da5cb5b14610488576101ac565b806342cf35271161014e5780635dbd8f6b116101285780635dbd8f6b146103d55780636ccae054146103e85780637095d47114610408578063734427c814610428576101ac565b806342cf35271461031c57806352283e35146103505780635b94db27146103b5576101ac565b8063263af8e81161017f578063263af8e8146102af57806337c6145a146102f25780633bd1adec14610305576101ac565b80631028c2bd146101ec57806315b9a8b81461021557806320f99c0a14610263576101ac565b366101ac57005b60006101bb813560e01c610645565b90506060600436036004600037600080600436036000855af490503d6000803e8080156101e7573d6000f35b3d6000fd5b6101ff6101fa366004615aab565b614659565b60405161020c9190615b5a565b60405180910390f35b34801561022157600080fd5b5060015461024e907801000000000000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161020c565b34801561026f57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020c565b3480156102bb57600080fd5b5061028a6102ca366004615a90565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101ff610300366004615a01565b6146e8565b34801561031157600080fd5b5061031a61479f565b005b34801561032857600080fd5b5061028a7f0000000000000000000000000f34a522ff82151c90679b73211955068fd854f181565b34801561035c57600080fd5b506103847fb3dc8da40000000000000000000000000000000000000000000000000000000081565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161020c565b3480156103c157600080fd5b5061031a6103d0366004615834565b6147fb565b61031a6103e3366004615936565b6148bb565b3480156103f457600080fd5b5061031a61040336600461587d565b6149df565b34801561041457600080fd5b5061028a610423366004615a90565b614a51565b34801561043457600080fd5b5061031a610443366004615a90565b614a62565b34801561045457600080fd5b5061031a6104633660046158be565b614b4f565b34801561047457600080fd5b5061024e610483366004615834565b614ced565b34801561049457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661028a565b3480156104bf57600080fd5b5061028a6104ce366004615a90565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561050257600080fd5b5061028a610511366004615a90565b610645565b61031a610524366004615a3c565b614e39565b34801561053557600080fd5b5061031a610544366004615a90565b6151f6565b34801561055557600080fd5b5061028a610564366004615a90565b63ffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b34801561059e57600080fd5b506105af68056bc75e2d6310000081565b60405190815260200161020c565b3480156105c957600080fd5b5061024e6105d8366004615834565b6152e3565b61031a6105eb366004615978565b615431565b3480156105fc57600080fd5b5061031a61060b366004615851565b61553a565b34801561061c57600080fd5b5060015461024e9074010000000000000000000000000000000000000000900463ffffffff1681565b60006101818263ffffffff1610156145c8576101018263ffffffff1610156130585760818263ffffffff161015611b675760418263ffffffff1610156110f65760218263ffffffff161015610bc55760118263ffffffff1610156109345760098263ffffffff1610156107f35760058263ffffffff16101561075a5760038263ffffffff161015610715578163ffffffff16600114156106fa5750738cd6bacdae46b449e2e5b34e348a4ed459c84d50919050565b507331524750cd865ff6a3540f232754fb974c18585c919050565b8163ffffffff166003141561073f575073ed9b37342bec8f3a2d7b000732ec87498aa6ec6a919050565b5073e8704ef6211f8988ccbb11badc89841808d66890919050565b60078263ffffffff1610156107ae578163ffffffff16600514156107935750739aff58c460a461578c433e11c4108d1c4cf77761919050565b50732d1733886cfd465b0b99f1492f40847495f334c5919050565b8163ffffffff16600714156107d8575073715497be4d130f04b8442f0a1f7a9312d4e54fc4919050565b507390c8a40c38e633b5b0e0d0585b9f7fa05462caaf919050565b600d8263ffffffff16101561089b57600b8263ffffffff161015610856578163ffffffff166009141561083b575073a402b70fcff3f4a8422b93ef58e895021eade4f6919050565b5073c1b718522e15cd42c4ac385a929fc2b51f5b892e919050565b8163ffffffff16600b1415610880575073a97bf2f7c26c43c010c349f52f5ea5dc49b2dd38919050565b5073969423d71b62c81d2f28d707364c9dc4a0764c53919050565b600f8263ffffffff1610156108ef578163ffffffff16600d14156108d4575073f86729934c083fbec8c796068a1fc60701ea1207919050565b5073d7cc2571f5823caca26a42690d2be7803dd5393f919050565b8163ffffffff16600f14156109195750737c8837a279bbbf7d8b93413763176de9f65d5bb9919050565b507313b81c27b588c07d04458ed7ddbdbd26d1e39bcc919050565b60198263ffffffff161015610a845760158263ffffffff1610156109eb5760138263ffffffff1610156109a6578163ffffffff166011141561098b57507352560ac678afa1345d15474287d16dc1ea3f78ae919050565b50731e31e376551459667cd7643440c1b21ce69065a0919050565b8163ffffffff16601314156109d0575073c57d822cb3288e7b97ef8f8af0ecdcd1b783529b919050565b50732197a1d9af24b4d6a64bff95b4c29fcd3ff28c30919050565b60178263ffffffff161015610a3f578163ffffffff1660151415610a24575073e3700feaa5100041bf6b7adba1f72f647809fd00919050565b5073c02e8a0fdabf0eefcea025163d90b5621e2b9948919050565b8163ffffffff1660171415610a69575073f5144235e2926cab3c69b30113254fa632f72d62919050565b5073ba3f92313b00a1f7bc53b2c24eb195c8b2f57682919050565b601d8263ffffffff161015610b2c57601b8263ffffffff161015610ae7578163ffffffff1660191415610acc57507377a6856fe1ffa5beb55a1d2ed86e27c7c482cb76919050565b50734826ff4e01e44b1fcefbfb38cd96687eb7786b44919050565b8163ffffffff16601b1415610b1157507355ff3f5493cf5e80e76dea7e327b9cd8440af646919050565b5073f430db544be9770503be4aa51997aa19bbd5ba4f919050565b601f8263ffffffff161015610b80578163ffffffff16601d1415610b655750730f166446ce1484ee3b0663e7e67df10f5d240115919050565b50736365095d92537f242db5edfdd572745e72ac33d9919050565b8163ffffffff16601f1415610baa5750735c7bc93f06ce3eae75adf55e10e23d2c1de5bc65919050565b5073e46383bad90d7a08197ccf08972e9dcdccce9ba4919050565b60318263ffffffff161015610e655760298263ffffffff161015610d245760258263ffffffff161015610c8b5760238263ffffffff161015610c46578163ffffffff1660211415610c2b575073f0f21710c071e3b728bdc4654c3c0b873aaaa308919050565b507363bc9ed3acaaeb0332531c9fb03b0a2352e9ff25919050565b8163ffffffff1660231415610c70575073d1ce808625cb4007a1708824ae82cdb0ece57de9919050565b507357bbb148112f4ba224841c3fe018884171004661919050565b60278263ffffffff161015610cdf578163ffffffff1660251415610cc4575073037f7d6933036f34dfabd40ff8e4d789069f92e3919050565b5073ef978c280915cff3dca4edfa8932469e40ada1e1919050565b8163ffffffff1660271415610d0957507392ee9e071b13f7ecfd62b7ded404a16cbc223cd3919050565b507394ae539c186e41ed762271338edf140414d1e442919050565b602d8263ffffffff161015610dcc57602b8263ffffffff161015610d87578163ffffffff1660291415610d6c57507330a64bbe4ddbd43da2368efd1eb2d80c10d84dab919050565b50733aeabf81c1dc4c1b73d5b2a95410f126426fb596919050565b8163ffffffff16602b1415610db157507325b08ab3d0c8ea4cc9d967b79688c6d98f3f563a919050565b5073ea40cb15c9a3bbd27af6474483886f7c0c9ae406919050565b602f8263ffffffff161015610e20578163ffffffff16602d1415610e055750739580113cc04e5a0a03359686304ef3a80b936dd3919050565b5073d211c826d568957f3b66a3f4d9c5f68ccc66e619919050565b8163ffffffff16602f1415610e4a575073cee24d0635c4c56315d133b031984d4a6f509476919050565b50733922e6b987983229798e7a20095ec372744d4d4c919050565b60398263ffffffff161015610fb55760358263ffffffff161015610f1c5760338263ffffffff161015610ed7578163ffffffff1660311415610ebc5750732d92d03413d296e1f31450479349757187f2a2b7919050565b50730fe5308ee90fc78f45c89db6053ea859097860ca919050565b8163ffffffff1660331415610f0157507308ba68e067c0505baf0c1311e0cfb2b1b59b969c919050565b50739bee5dddf75c24897374f92a534b7a6f24e97f4a919050565b60378263ffffffff161015610f70578163ffffffff1660351415610f555750731fc5a90b232208704b930c1edf82ffc6acc02734919050565b50735b1b0417cb44c761c2a23ee435d011f0214b3c85919050565b8163ffffffff1660371415610f9a5750739d70cdaca12a738c283020760f449d7816d592ec919050565b507395a23b9cb830eccfddd5df56a4ec665e3381fa12919050565b603d8263ffffffff16101561105d57603b8263ffffffff161015611018578163ffffffff1660391415610ffd575073483a957cf1251c20e096c35c8399721d1200a3fc919050565b5073b4ad39cb293b0ec7feda743442769a7ff04987cd919050565b8163ffffffff16603b14156110425750734c543ad78c1590d81bae09fc5b6df4132a2461d0919050565b5073471d5e5195c563902781734cfe1ff3981f8b6c86919050565b603f8263ffffffff1610156110b1578163ffffffff16603d14156110965750731b12a54b5e606d95b8b8d123c9cb09221ee37584919050565b5073e4127cc550bac433646a7d998775a84dac16c7f3919050565b8163ffffffff16603f14156110db575073ecb1b55ab12e7dd788d585c6c5cd61b5f87be836919050565b5073f91ef487c5a1579f70601b6d347e19756092eebf919050565b60618263ffffffff1610156116365760518263ffffffff1610156113a55760498263ffffffff1610156112645760458263ffffffff1610156111cb5760438263ffffffff161015611186578163ffffffff166041141561116b57507334a16a7e9badeefd4f056310cbe0b1423fa1b760919050565b507360e10e80c7680f429dbbc232830becd3d623c4cf919050565b8163ffffffff16604314156111b057507366465285b8d65362a1d86ce00fe2be949fd6debf919050565b50735ab231b7e1a3a74a48f67ab7bde5cdd4267022e0919050565b60478263ffffffff16101561121f578163ffffffff16604514156112045750733a1c3633ee79d43366f5c67802a746afd6b162ba919050565b50730c4bfcba8dc3c811437521a80e81e41daf479039919050565b8163ffffffff16604714156112495750736caf25d2e139c5431a1fa526eaf8d73ff2e6252c919050565b507374ad21e09fda68638ce14a3009a79b6d16574257919050565b604d8263ffffffff16101561130c57604b8263ffffffff1610156112c7578163ffffffff16604914156112ac575073d4923a61008894b99cc1cd3407ef9524f02aa0ca919050565b50736f159b5eb823bd415886b9271aa2a723a00a1987919050565b8163ffffffff16604b14156112f1575073742a8aa42e7bfb4554de30f4fb07ffb6f2068863919050565b50734ae9702d3360400e47b446e76de063acab930101919050565b604f8263ffffffff161015611360578163ffffffff16604d14156113455750730e19a0a44dda7dad854ec5cc867d16869c4e80f4919050565b5073e021a51968f25148f726e326c88d2556c5647557919050565b8163ffffffff16604f141561138a57507364287bdddaef4d94e4599a3d882bed29e6ada4b6919050565b5073cbb57fd2e19cc7e9d444d5b4325a2f1047d0c73f919050565b60598263ffffffff1610156114f55760558263ffffffff16101561145c5760538263ffffffff161015611417578163ffffffff16605114156113fc575073373de80df7d82cff6d76f29581b360c56331e957919050565b50730466356e131ad61596a51f86bad1c03a328960d8919050565b8163ffffffff166053141561144157507301726b960992f1b74311b248e2a922fc707d43a6919050565b50732e21bdf9a4509b89795bce7e132f248a75814cec919050565b60578263ffffffff1610156114b0578163ffffffff1660551415611495575073769512b23aeff842379091d3b6e4b5456f631d42919050565b5073e7ed9be946a74ec19325d39c6eeb57887ccb2b0d919050565b8163ffffffff16605714156114da575073c4d01ec357c2b511d10c15e6b6974380f0e62e67919050565b50735bc49cc9dd77becf2fd3a3c55611e84e69afa3ae919050565b605d8263ffffffff16101561159d57605b8263ffffffff161015611558578163ffffffff166059141561153d57507348bcd879954fa14e7dbdaeb56f79c1e9ddcb69ec919050565b5073e929bdde21b462572fcaa4de6f49b9d3246688d0919050565b8163ffffffff16605b141561158257507385aae300438222f0e3a9bc870267a5633a9438bd919050565b507351f72e1096a81c55cd142d66d39b688c657f9be8919050565b605f8263ffffffff1610156115f1578163ffffffff16605d14156115d65750733a8a05bf68ac54b01e6c0f492abf97465f3d15f9919050565b5073145aa67133f0c2c36b9771e92e0b7655f0d59040919050565b8163ffffffff16605f141561161b575073a030315d7db11f9892758c9e7092d841e0adc618919050565b5073df1f8d81a3734bdddefac6ca1596e081e57c3044919050565b60718263ffffffff1610156118d65760698263ffffffff1610156117955760658263ffffffff1610156116fc5760638263ffffffff1610156116b7578163ffffffff166061141561169c575073ff2833123b58aa05d04d7fb99f5fb768b2b435f8919050565b5073c8f09c1fd751c570233765f71b0e280d74e6e743919050565b8163ffffffff16606314156116e15750733026da6ceca2e5a57a05153653d9212ffaaa49d8919050565b5073de68ee703de0d11f67b0ce5891cb4a903de6d160919050565b60678263ffffffff161015611750578163ffffffff1660651415611735575073e23a7730e81fb4e87a6d0bd9f63ee77ac86c3da4919050565b50738b1dbe04ad76a7d8bc079cacd3ed4d99b897f4a0919050565b8163ffffffff166067141561177a575073bb227240fa459b69c6889b2b8cb1be76f118061f919050565b5073c062b9b3f0db28bb8afafcd4d075729344114ffe919050565b606d8263ffffffff16101561183d57606b8263ffffffff1610156117f8578163ffffffff16606914156117dd575073553188aa45f5fdb83ec4ca485982f8fc082480d1919050565b50730109d83d746eacb6d4014953d9e12d6ca85e330b919050565b8163ffffffff16606b141561182257507345b1bed29812f5bf6711074acd180b2aeb783ad9919050565b5073da06ec8c19aea31d77f60299678cba40e743e1ad919050565b606f8263ffffffff161015611891578163ffffffff16606d14156118765750733cc5235c97d975a9b4fd4501b3446c981ea3d855919050565b5073a1827267d6bd989ff38580ae3d9deff6acf19163919050565b8163ffffffff16606f14156118bb5750733663caa0433a3d4171b3581cf2410702840a735a919050565b50737575d0a7614f655ba77c74a72a43bbd4fa6246a3919050565b60798263ffffffff161015611a265760758263ffffffff16101561198d5760738263ffffffff161015611948578163ffffffff166071141561192d5750732516defc18bc07089c5daff5eafd7b0ef64611e2919050565b5073fec5ff08e20fbc107a97af2d38bd0025b84ee233919050565b8163ffffffff16607314156119725750730fb5763a87242b25243e23d73f55945fe787523a919050565b5073e4c00db89678dbf8391f430c578ca857dd98ade1919050565b60778263ffffffff1610156119e1578163ffffffff16607514156119c65750738f2a22061f9f35e64f14523dc1a5f8159e6a21b7919050565b507318e4b838ae966917e20e9c9c5ad359cdd38303bb919050565b8163ffffffff1660771415611a0b57507361acb1d3dcb3e3429832a164cc0fc9849fb75a4a919050565b50737681e3c8e7a41dca55c257cc0d1ae757f5530e65919050565b607d8263ffffffff161015611ace57607b8263ffffffff161015611a89578163ffffffff1660791415611a6e575073806a2ab9748c3d1db976550890e3f528b7e8faec919050565b5073bdb8a5dd52c2c239fbc31e9d43b763b0197028ff919050565b8163ffffffff16607b1415611ab3575073474ec9203706010b9978d6bd0b105d36755e4848919050565b50738dfd0d829b303f2239212e591a0f92a32880f36e919050565b607f8263ffffffff161015611b22578163ffffffff16607d1415611b07575073ad4bce9745860b1add6f1bd34a916f050e4c82c2919050565b5073bc701115b9fe14bc8cc5934cdc92517173e308c4919050565b8163ffffffff16607f1415611b4c5750730d1918d786db8546a11aded475c98370e06f255e919050565b5073ee44f57cd6936db55b99163f3df367b01eda785a919050565b60c18263ffffffff1610156125e75760a18263ffffffff1610156120b65760918263ffffffff161015611e255760898263ffffffff161015611ce45760858263ffffffff161015611c4b5760838263ffffffff161015611c06578163ffffffff1660811415611beb57507363044521fe5a1e488d7ed419cd0e35b7c24f2aa7919050565b5073410085e73bd85e90d97b84a68c125adb9f91f85b919050565b8163ffffffff1660831415611c305750737913fe97e07c7a397ec274ab1d4e2622c88ec5d1919050565b5073977f9fe93c064dcf54157406daabc3a722e8184c919050565b60878263ffffffff161015611c9f578163ffffffff1660851415611c84575073cd2236468722057cfbbabad2db3dea9c20d5b01b919050565b507317c7287a491cf5ff81e2678cf2bfae4333f6108c919050565b8163ffffffff1660871415611cc9575073354d9a5dbf96c71b79a265f03b595c6fdc04dadd919050565b5073b4e409eb8e775eefeb0344f9eee884cc7ed21c69919050565b608d8263ffffffff161015611d8c57608b8263ffffffff161015611d47578163ffffffff1660891415611d2c575073a1a3c4670ad69d9be4ab2d39d1231fec2a63b519919050565b50734589a22199870729c1be5cd62ee93bed858113e6919050565b8163ffffffff16608b1415611d715750738e7b864db26bd6c798c38d4ba36eba0d6602cf11919050565b5073a2d17c7260a4cb7b9854e89fc367e80e87872a2d919050565b608f8263ffffffff161015611de0578163ffffffff16608d1415611dc5575073c7f0edf0a1288627b0432304918a75e9084cbd46919050565b5073e4b4ef1f9a4abfedb371fa7a6143993b15d4df25919050565b8163ffffffff16608f1415611e0a575073fe3d84a2ef306febb5452441c9bdbb6521666f6a919050565b50738a12b6c64121920110ae58f7cd67dfec21c6a4c3919050565b60998263ffffffff161015611f755760958263ffffffff161015611edc5760938263ffffffff161015611e97578163ffffffff1660911415611e7c57507376c4d9afc4717a2baac4e5f26cccf02351f7a3da919050565b5073d4719ba550e397aeacca1ad2201c1ba69024faaf919050565b8163ffffffff1660931415611ec15750739646126ce025224d1682c227d915a386efc0a1fb919050565b50734dd8af2e3f2044842f0247920bc4babb636915ea919050565b60978263ffffffff161015611f30578163ffffffff1660951415611f155750738e8a327183af0cf8c2ece9f0ed547c42a160d409919050565b50739d49614cae1c685c71678ca6d8cdf7584bfd0740919050565b8163ffffffff1660971415611f5a5750735a00ef257394cbc31828d48655e3d39e9c11c93d919050565b5073c9a2751b38d3ddd161a41ca0135c5c6c09ec1d56919050565b609d8263ffffffff16101561201d57609b8263ffffffff161015611fd8578163ffffffff1660991415611fbd5750737e1c261640a525c94ca4f8c25b48cf754dd83590919050565b5073409fe24ba6f6bd5af31c1aaf8059b986a3158233919050565b8163ffffffff16609b1415612002575073704cf5bfdadc0f55fdbb53b6ed8b582e018a72a2919050565b50733982bf65d7d6e77e3b6661cd6f6468c247512737919050565b609f8263ffffffff161015612071578163ffffffff16609d14156120565750733982b9f26ffd67a13ee371e2c0a9da338ba70e7f919050565b50736d834ab385900c1f49055d098e90264077fbc4f2919050565b8163ffffffff16609f141561209b57507311fe5f70779a094b7166b391e1fb73d422ef4e4d919050565b5073d347e4e47280d21f13b73d89c6d16f867d50dd13919050565b60b18263ffffffff1610156123565760a98263ffffffff1610156122155760a58263ffffffff16101561217c5760a38263ffffffff161015612137578163ffffffff1660a1141561211c575073b6035edd53dda28d8b69b4ae9836e40c80306cd7919050565b507354c884e6f5c7ccfeca990396c520c858c922b6ca919050565b8163ffffffff1660a314156121615750735ea93e240b083d686558ed607bc013d88057ce46919050565b50734c7131ee812de685cbe4e2ccb033d46ecd46612e919050565b60a78263ffffffff1610156121d0578163ffffffff1660a514156121b5575073c1a5be9f0c33d8483801d702111068669f81ff91919050565b50739e5fab91455be5e5b2c05967e73f456c8118b1fc919050565b8163ffffffff1660a714156121fa5750733d9a05927223e0dc2f382831770405885e22f0d8919050565b50736303a011fb6063f5b1681cb5a9938ea278dc6128919050565b60ad8263ffffffff1610156122bd5760ab8263ffffffff161015612278578163ffffffff1660a9141561225d575073e9c60795c90c66797e4c8e97511ea07cdada32be919050565b5073d56cc98e69a1e13815818b466a8aa6163d84234a919050565b8163ffffffff1660ab14156122a257507347ebb9d36a6e40895316cd894e4860d774e2c531919050565b5073a5eb293629410065d14a7b1663a67829b0618292919050565b60af8263ffffffff161015612311578163ffffffff1660ad14156122f65750731b3b4c8146f939ce00899db8b3ddef0062b7e023919050565b5073257bbc11653625ebfb6a8587ef4f4fbe49828eb3919050565b8163ffffffff1660af141561233b57507344cc979c01b5bb1eac21301e73c37200dfd06f59919050565b50732972fdf43352225d82754c0174ff853819d1ef2a919050565b60b98263ffffffff1610156124a65760b58263ffffffff16101561240d5760b38263ffffffff1610156123c8578163ffffffff1660b114156123ad5750733e54144f032648a04d62d79f7b4b93ff3ac2333b919050565b5073444016102db8adbe73c3b6703a1ea7f2f75a510d919050565b8163ffffffff1660b314156123f2575073ac079143f98a6eb744fde34541ebf243df5b5ded919050565b5073ae9010767fb112d29d35cedfba2b372ad7a308d3919050565b60b78263ffffffff161015612461578163ffffffff1660b51415612446575073fe0bccf9ccc2265d5fb3450743f17dfe57ae1e56919050565b507304ed8c0545716119437a45386b1d691c63234c7d919050565b8163ffffffff1660b7141561248b575073636c14013e531a286bc4c848da34585f0bb73d59919050565b50732fa67fc7ecc5caa01c653d3bfea98ecc5db9c42a919050565b60bd8263ffffffff16101561254e5760bb8263ffffffff161015612509578163ffffffff1660b914156124ee57507323e9a0fc180818aa872d2079a985217017e97bd9919050565b507379a95c3ef81b3ae64ee03a9d5f73e570495f164e919050565b8163ffffffff1660bb1415612533575073a7ea0e88f04a84ba0ad1e396cb07fa3fdad7df6d919050565b5073d23ca1278a2b01a3c0ca1a00d104b11c1ebe6f42919050565b60bf8263ffffffff1610156125a2578163ffffffff1660bd1415612587575073707bc4a9fa2e349aed5df4e9f5440c15aa9d14bd919050565b50737e290f2dd539ac6ce58d8b4c2b944931a1fd3612919050565b8163ffffffff1660bf14156125cc575073707aa5503088ce06ba450b6470a506122ea5c8ef919050565b5073fbb3f7bf680deeb149f4e7bc30ea3ddfa68f3c3f919050565b60e18263ffffffff161015612b275760d18263ffffffff1610156128965760c98263ffffffff1610156127555760c58263ffffffff1610156126bc5760c38263ffffffff161015612677578163ffffffff1660c1141561265c575073de74ad8ccc3dbf14992f49cf24f36855912f4934919050565b5073409ba83df7777f070b2b50a10a41de2468d2a3b3919050565b8163ffffffff1660c314156126a15750735cb7be90a5dd7cfda54e87626e254fe8c18255b4919050565b50730a684fe12bc64fb72b59d0771a566f49bc090356919050565b60c78263ffffffff161015612710578163ffffffff1660c514156126f5575073df30048d91f8fa2bcfc54952b92bfa8e161d3360919050565b5073050825fff032a547c47061cf0696fdb0f65aea5d919050565b8163ffffffff1660c7141561273a575073d55e671dac1f03d366d8535073ada5db2aab1ea2919050565b50739470c704a9616c8cd41c595fcd2181b6fe2183c2919050565b60cd8263ffffffff1610156127fd5760cb8263ffffffff1610156127b8578163ffffffff1660c9141561279d5750732d9ffd275181f5865d5e11cbb4ced1521c4df9f1919050565b5073816d28dec10ec95df5334f884de85ca6215918d8919050565b8163ffffffff1660cb14156127e2575073d1f87267c4a43835e666dd69df077e578a3b6299919050565b507339e89bde9dacbe5468c025de371fbda12bdebab1919050565b60cf8263ffffffff161015612851578163ffffffff1660cd14156128365750737b40a3207956ecad6686e61efcac48912fcd0658919050565b5073090cf10d793b1efba9c7d76115878814b663859a919050565b8163ffffffff1660cf141561287b575073312a59c06e41327878f2063ed0e9c282c1da3afc919050565b50734f1188f46236dd6b5de11ebf2a9ff08716e7deb6919050565b60d98263ffffffff1610156129e65760d58263ffffffff16101561294d5760d38263ffffffff161015612908578163ffffffff1660d114156128ed5750730a6f9a3f4fa49909bbfb4339cbe12b42f53bbbed919050565b507301d13d7acacbb955b81935c80fff31e14bdfa71f919050565b8163ffffffff1660d31415612932575073691a14fa6c7360422ec56df5876f84d4edd7f00a919050565b507397aad18d886d181a9c726b3b6ae15a0a69f5af73919050565b60d78263ffffffff1610156129a1578163ffffffff1660d514156129865750732917241371d2099049fa29432dc46735baec33b4919050565b50735f20f20f7890c2e383e29d4147c9695a371165f5919050565b8163ffffffff1660d714156129cb575073ec0a60e639958335662c5219a320ccebb56c6077919050565b507396d63cf5062975c09845d17ec672e10255866053919050565b60dd8263ffffffff161015612a8e5760db8263ffffffff161015612a49578163ffffffff1660d91415612a2e575073ff57429e57d383939cab50f09abbfb63c0e6c9ad919050565b507318e393a7c8578fb1e235c242076e50013cddd0d7919050565b8163ffffffff1660db1415612a73575073e7e5238af5d61f52e9b4acc025f713d1c0216507919050565b5073428401d4d0f25a2ee1da4d5366cb96ded425d9bd919050565b60df8263ffffffff161015612ae2578163ffffffff1660dd1415612ac757507342e5733551ff1ee5b48aa9fc2b61af9b58c812e6919050565b507364df9c7a0551b056d860bc2419ca4c1ef75320be919050565b8163ffffffff1660df1415612b0c57507346006925506145611bbf0263243d8627daf26b0f919050565b50738d64be884314662804eaab884531f5c50f4d500c919050565b60f18263ffffffff161015612dc75760e98263ffffffff161015612c865760e58263ffffffff161015612bed5760e38263ffffffff161015612ba8578163ffffffff1660e11415612b8d575073157a62d92d07b5ce221a5429645a03bbace85373919050565b5073af037d33e1f1f2f87309b425fe8a9d895ef3722b919050565b8163ffffffff1660e31415612bd2575073921d1154e494a2f7218a37ad7b17701f94b4b40e919050565b5073f282b4555186d8dea51b8b3f947e1e0568d09bc4919050565b60e78263ffffffff161015612c41578163ffffffff1660e51415612c26575073a794e2e1869765a4600b3dfd8a4ebcf16350f6b6919050565b5073fefb048e20c5652f7940a49b1980e0125ec4d358919050565b8163ffffffff1660e71415612c6b575073220104b641971e9b25612a8f001bf48abb23f1cf919050565b5073cb9d373bb54a501b35dd3be5bf4ba43ca31f7035919050565b60ed8263ffffffff161015612d2e5760eb8263ffffffff161015612ce9578163ffffffff1660e91415612cce57507337d627f56e3ff36ac316372109ea82e03ac97dac919050565b50734e81355ffb4a271b4ea59ff78da2b61c7833161f919050565b8163ffffffff1660eb1415612d13575073add8d65caf6cc9ad73127b49e16ea7ac29d91e87919050565b5073630f9b95626487dfeae3c97a44db6c59cf35d996919050565b60ef8263ffffffff161015612d82578163ffffffff1660ed1415612d6757507378ce2bc8238b679680a67fcb98c5a60e4ec17b2d919050565b5073a38d776028ed1310b9a6b086f67f788201762e21919050565b8163ffffffff1660ef1415612dac5750737bb5178827b76b86753ed62a0d662c72cecb1bd3919050565b50734fac26f61c76ec5c3d43b43edfaff0736ae0e3da919050565b60f98263ffffffff161015612f175760f58263ffffffff161015612e7e5760f38263ffffffff161015612e39578163ffffffff1660f11415612e1e575073791bb49bffa7129d6889fdb27744422ac4571a85919050565b507326766ffebb5fa564777913a6f101df019ab32afa919050565b8163ffffffff1660f31415612e6357507305e98e5e95b4ecbbbaf3258c3999cc81ed8048be919050565b5073c5c4621e52f1d6a1825a5ed4f95855401a3d9c6b919050565b60f78263ffffffff161015612ed2578163ffffffff1660f51415612eb7575073fcb15f909ba7fc7ea083503fb4c1020203c107eb919050565b5073bd27603279d969c74f2486ad14e71080829dfd38919050565b8163ffffffff1660f71415612efc575073ff2f756bcecc1a55bfc09a30cc5f64720458cfcb919050565b50733bfb968febc12f4e8420b2d016efce1e615f7246919050565b60fd8263ffffffff161015612fbf5760fb8263ffffffff161015612f7a578163ffffffff1660f91415612f5f575073982ee9ffe23051a2ec945ed676d864fa8345222b919050565b5073e101899100785e74767d454fff0131277bad48d9919050565b8163ffffffff1660fb1415612fa45750734f730c0c6b3b5b7d06ca511379f4aa5bfb2e9525919050565b50735499c36b365795e4e0ef671af6c2ce26d7c78265919050565b60ff8263ffffffff161015613013578163ffffffff1660fd1415612ff85750738af51f7237fc8fb2fc3e700488a94a0ac6ad8b5a919050565b5073da8716df61213c0b143f2849785fb85928084857919050565b8163ffffffff1660ff141561303d575073f040cf9b1ebd11bf28e04e80740df3dde717e4f5919050565b5073b87ba32f759d14023c7520366b844df7f0f036c2919050565b6101418263ffffffff161015613b18576101218263ffffffff1610156135c8576101118263ffffffff161015613328576101098263ffffffff1610156131e0576101058263ffffffff161015613144576101038263ffffffff1610156130fe578163ffffffff1661010114156130e35750730edde681b8478f0c3194f468edd2db5e75c65cdd919050565b507359c70900fca06ee2ace1bdd5a8d0af0cc3bba720919050565b8163ffffffff1661010314156131295750738041f0f180d17dd07087199632c45e17aeb0bad5919050565b50734fb4727064ba595995dd516b63b5921df9b93ac6919050565b6101078263ffffffff16101561319a578163ffffffff16610105141561317f57507386e98b594565857ed098864f560915c0dafd6ea1919050565b507370f8818e8b698effecd86a513a4c87c0c380bef6919050565b8163ffffffff1661010714156131c557507378ed227c8a897a21da2875a752142dd80d865158919050565b5073d02a30bb5c3a8c51d2751a029a6fcfde2af9fbc6919050565b61010d8263ffffffff16101561328c5761010b8263ffffffff161015613246578163ffffffff16610109141561322b5750730f00d5c5acb24e975e2a56730609f7f40aa763b8919050565b5073c3e2091edc2d3d9d98ba09269138b617b536834a919050565b8163ffffffff1661010b1415613271575073a6fbaf7f30867c9633908998ea8c3da28920e75c919050565b5073e6dddcd41e2bbe8122ae32ac29b8fbab79cd21d9919050565b61010f8263ffffffff1610156132e2578163ffffffff1661010d14156132c7575073537aa8c1ef6a8eaf039dd6e1eb67694a48195ce4919050565b507396abac485fd2d0b03cf4a10df8bd58b8ded28300919050565b8163ffffffff1661010f141561330d575073da8e7d46d04bd4f62705cd80355bdb6d441daffd919050565b5073be50018e7a5c67e2e5f5414393e971cc96f293f2919050565b6101198263ffffffff161015613480576101158263ffffffff1610156133e4576101138263ffffffff16101561339e578163ffffffff166101111415613383575073a1b3907d6cb542a4cbe2ee441effaa909fab62c3919050565b50736d08ee8511c0237a515013ac389e7b3968cb1753919050565b8163ffffffff1661011314156133c957507322faa5b5fe43eadbb52745e35a5cda8bd5f96bba919050565b50737a673eb74d79e4868d689e7852abb5f93ec2fd4b919050565b6101178263ffffffff16101561343a578163ffffffff16610115141561341f5750730b8531f8afd4190b76f3e10decadb84c98b4d419919050565b507378eabc743a93583dee403d6b84795490e652216b919050565b8163ffffffff1661011714156134655750733a95d907b2a7a8604b59bcca08585f58afe0aa64919050565b5073f4271f0c8c9af0f06a80b8832fa820cce64fada8919050565b61011d8263ffffffff16101561352c5761011b8263ffffffff1610156134e6578163ffffffff1661011914156134cb57507374b2df841245c3748c0d31542e1335659a25c33b919050565b5073dfc99fd0ad7d16f30f295a5eefce029e04d0fa65919050565b8163ffffffff1661011b1415613511575073e992416b6ac1144ed8148a9632973257839027f6919050565b507354ce55ba954e981bb1fd9399054b35ce1f2c0816919050565b61011f8263ffffffff161015613582578163ffffffff1661011d1415613567575073d4ab52f9e7e5b315bd7471920bad04f405ab1c38919050565b50733670c990994d12837e95ee127fe2f06fd3e2104b919050565b8163ffffffff1661011f14156135ad575073dcf190b09c47e4f551e30bbb79969c3fdea1e992919050565b5073a65057b967b59677237e57ab815b209744b9bc40919050565b6101318263ffffffff161015613878576101298263ffffffff161015613730576101258263ffffffff161015613694576101238263ffffffff16101561364e578163ffffffff1661012114156136335750736efc86b40573e4c7f28659b13327d55ae955c483919050565b507306bcc25cf8e0e72316f53631b3aa7134e9f73ae0919050565b8163ffffffff166101231415613679575073710b6414e1d53882b1fcd3a168ad5ccd435fc6d0919050565b50735ebb2c3d78c4e9818074559e7bae7fcc99781dc1919050565b6101278263ffffffff1610156136ea578163ffffffff1661012514156136cf575073af0a409c3aee0bd08015cfb29d89e90b6e89a88f919050565b5073522559d8b99773c693b80ce06df559036295ce44919050565b8163ffffffff166101271415613715575073b65290a5bae838aaa7825c9ecec68041841a1b64919050565b5073801b8f2068edd5bcb659e6bda0c425909043c420919050565b61012d8263ffffffff1610156137dc5761012b8263ffffffff161015613796578163ffffffff16610129141561377b57507329b5f00515d093627e0b7bd0b5c8e84f6b4cdb87919050565b5073652839ae74683cbf9f1293f1019d938f87464d3e919050565b8163ffffffff1661012b14156137c15750735bc95dcebdde9b79f2b6dc76121bc7936ef8d666919050565b507390db359cea62e53051158ab5f99811c0a07fe686919050565b61012f8263ffffffff161015613832578163ffffffff1661012d14156138175750732c3625eedadbdcdbb5330eb0d17b3c39ff269807919050565b5073c3f0324471b5c9d415acd625b8d8694a4e48e001919050565b8163ffffffff1661012f141561385d5750738c60e7e05fa0ffb6f720233736f245134685799d919050565b507398faf2c09aa4ebb995ad0b56152993e7291a500e919050565b6101398263ffffffff1610156139d0576101358263ffffffff161015613934576101338263ffffffff1610156138ee578163ffffffff1661013114156138d3575073802c1063a861414dfaec16bacb81429fc0d40d6e919050565b507311c4aefcc0dc156f64195f6513cb1fb3be0ae056919050565b8163ffffffff166101331415613919575073eff1f3258214e31b6b4f640b4389d55715c3be2b919050565b507347e379abe8ddfea4289aba01235eff7e93758fd7919050565b6101378263ffffffff16101561398a578163ffffffff16610135141561396f5750733cc26384c3ea31ddc8d9789e8872cea6f20cd3ff919050565b5073edd9efa6c69108faa4611097d643e20ba0ed1634919050565b8163ffffffff1661013714156139b5575073cb93525ca5f3d371f74f3d112bc19526740717b8919050565b50737071e0124eb4438137e60df1b8dd8af1bfb362cf919050565b61013d8263ffffffff161015613a7c5761013b8263ffffffff161015613a36578163ffffffff166101391415613a1b5750734691096eb0b78c8f4b4a8091e5b66b18e1835c10919050565b50738d953c9b2d1c2137cf95992079f3a77fcd793272919050565b8163ffffffff1661013b1415613a61575073bdcc2a3bf6e3ba49ff86595e6b2b8d70d8368c92919050565b507395e6948ab38c61b2d294e8bd896bcc4ccc0713cf919050565b61013f8263ffffffff161015613ad2578163ffffffff1661013d1415613ab7575073607b27c881ffee4cb95b1c5862fae7224ccd0b4a919050565b507309d28afa166e566a2ee1cb834ea8e78c7e627ed2919050565b8163ffffffff1661013f1415613afd5750739c01449b38bdf0b263818401044fb1401b29fdfa919050565b50731f7723599bbb658c051f8a39be2688388d22ced6919050565b6101618263ffffffff161015614078576101518263ffffffff161015613dd8576101498263ffffffff161015613c90576101458263ffffffff161015613bf4576101438263ffffffff161015613bae578163ffffffff166101411415613b9357507352b71603f7b8a5d15b4482e965a0619aa3210194919050565b507301c0f072cb210406653752fecfa70b42da9173a2919050565b8163ffffffff166101431415613bd95750733021142f021e943e57fc1886caf58d06147d09a6919050565b5073e6f2af38e76ab09db59225d97d3e770942d3d842919050565b6101478263ffffffff161015613c4a578163ffffffff166101451415613c2f57507306a25554e5135f08b9e2ed1dec1fc3ced52e0b48919050565b507371d75e670ee3511c8290c705e0620126b710bf8d919050565b8163ffffffff166101471415613c755750738b9ce142b80fea7c932952ec533694b1df9b3c54919050565b5073d7be24f32f39231116b3fdc483c2a12e1521f73b919050565b61014d8263ffffffff161015613d3c5761014b8263ffffffff161015613cf6578163ffffffff166101491415613cdb575073b40cafbc4797d4ff64087e087f6d2e661f954cbe919050565b5073bddce7771efee81893e838f62204a4c76d72757e919050565b8163ffffffff1661014b1415613d215750735d3d299ea7fd4f39acdb336e26631dfee41f9287919050565b50736bfee09e1fc0684e0826a9a0dc1352a14b136fac919050565b61014f8263ffffffff161015613d92578163ffffffff1661014d1415613d77575073d0001bb8e2cb661436093f96458a4358b5156e3c919050565b50731867c6485cfd1ed448988368a22bfb17a7747293919050565b8163ffffffff1661014f1415613dbd5750738997ef9f95df24ab67703ab6c262aabfeebe33bd919050565b50731e39e9e601922ded91bcfc8f78836302133465e2919050565b6101598263ffffffff161015613f30576101558263ffffffff161015613e94576101538263ffffffff161015613e4e578163ffffffff166101511415613e335750738a8ec6ceacff502a782216774e5af3421562c6ff919050565b50733b8fc561df5415c8dc01e97ee6e38435a8f9c40a919050565b8163ffffffff166101531415613e79575073d5d5f5b37e67c43cea663aedadffc3a93a2065b0919050565b5073cc8f55ec43b4f25013ce1946fbb740c43be5b96d919050565b6101578263ffffffff161015613eea578163ffffffff166101551415613ecf57507318f586e816eeedbb57b8011239150367561b58fb919050565b5073d0cd802b19c1a52501cb2f07d656e3cd7b0ce124919050565b8163ffffffff166101571415613f15575073e0aed899b39c6e4f2d83e4913a1e9e0cf6368abe919050565b50730606e1b6c0f1a398c38825dccc4678a7cbc2737c919050565b61015d8263ffffffff161015613fdc5761015b8263ffffffff161015613f96578163ffffffff166101591415613f7b5750732d188e85b27d18ef80f16686ea1593abf7ed2a63919050565b507364412292fa4a135a3300e24366e99ff59db2eac1919050565b8163ffffffff1661015b1415613fc157507338b74c173f3733e8b90aaef0e98b89791266149f919050565b507336daa49a79aaef4e7a217a11530d3ccd84414124919050565b61015f8263ffffffff161015614032578163ffffffff1661015d141561401757507310f088fe2c88f90270e4449c46c8b1b232511d58919050565b50734fedbd25b58586838abd17d10272697df1dc3087919050565b8163ffffffff1661015f141561405d575073685278209248cb058e5cee93e37f274a80faf6eb919050565b5073dd9f8f1eec3955f78168e2fb2d1e808fa8a8f15b919050565b6101718263ffffffff161015614328576101698263ffffffff1610156141e0576101658263ffffffff161015614144576101638263ffffffff1610156140fe578163ffffffff1661016114156140e35750737392aeefd5825aac28817031deebbfaaa20983d9919050565b50730cc182555e00767d6fb8ad161a10d0c04c476d91919050565b8163ffffffff16610163141561412957507390e52837d56715c79fd592e8d58bfd20365798b2919050565b50736f4451de14049b6770ad5bf4013118529e68a40c919050565b6101678263ffffffff16101561419a578163ffffffff16610165141561417f57507389b97ef2afab9ed9c7f0fdb095d02e6840b52d9c919050565b507392a5cc5c42d94d3e23aeb1214fff43db2b97759e919050565b8163ffffffff1661016714156141c557507363ddc52f135a1dcba831eaac11c63849f018b739919050565b5073692a691533b571c2c54c1d7f8043a204b3d8120e919050565b61016d8263ffffffff16101561428c5761016b8263ffffffff161015614246578163ffffffff16610169141561422b57507397c7492cf083969f61c6f302d45c8270391b921c919050565b5073defd2b8643553dad19548eb14fd94a57f4b9e543919050565b8163ffffffff1661016b141561427157507330645c04205ca3f670b67b02f971b088930acb8c919050565b5073a6f80ed2d607cd67aeb4109b64a0becc4d7d03cf919050565b61016f8263ffffffff1610156142e2578163ffffffff1661016d14156142c7575073bbbbc6c276eb3f7e674f2d39301509236001c42f919050565b5073c20e77d349fb40ce88eb01824e2873ad9f681f3c919050565b8163ffffffff1661016f141561430d5750735fcfd9a962de19294467c358c1fa55082285960b919050565b50734d87bd6a0e4e5cc6332923cb3e85fc71b287f58a919050565b6101798263ffffffff161015614480576101758263ffffffff1610156143e4576101738263ffffffff16101561439e578163ffffffff1661017114156143835750733aa5b757cd6dde98214e56d57dde7fcf0f7ab04e919050565b5073e28efce7192e11a2297f44059113c1fd6967b2d4919050565b8163ffffffff1661017314156143c95750733251cae10a1cf246e0808d76acc26f7b5eda0ee5919050565b5073ba2091cc9357cf4c4f25d64f30d1b4ba3a5a174b919050565b6101778263ffffffff16101561443a578163ffffffff16610175141561441f57507349c8e1da9693692096f63c82d11b52d738566d55919050565b5073a0731615ab5fff451031e9551367a4f7db27b39c919050565b8163ffffffff166101771415614465575073fb214541888671ae1403cecc1d59763a12fc1609919050565b50731d6bcb17642e2336405df73df22f07688caec020919050565b61017d8263ffffffff16101561452c5761017b8263ffffffff1610156144e6578163ffffffff1661017914156144cb575073fc9c0c7bfe187120ff7f4e21446161794a617a9e919050565b5073ba5bf37678eee2dab17aef9d898153258252250e919050565b8163ffffffff1661017b14156145115750737c55690bd2c9961576a32c02f8eb29ed36415ec7919050565b5073ca40073e868e8bc611aec8fe741d17e68fe422f6919050565b61017f8263ffffffff161015614582578163ffffffff1661017d141561456757507331641bafb87e9a58f78835050a7be56921986339919050565b5073a54766424f6da74b45ebcc5bf0bd1d74d2cccaab919050565b8163ffffffff1661017f14156145ad575073c7bba57f8c179eddbaa62117dda360e28f3f8252919050565b50735e663ed97ea77d393b8858c90d0683bf180e0ffd919050565b63ffffffff821660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1661462a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5063ffffffff1660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b606060008061466786610645565b73ffffffffffffffffffffffffffffffffffffffff16858560405161468d929190615b2e565b600060405180830381855af49150503d80600081146146c8576040519150601f19603f3d011682016040523d82523d6000602084013e6146cd565b606091505b5091509150816146df57805160208201fd5b95945050505050565b60606000806003816146fd6020870187615a90565b63ffffffff1681526020808201929092526040016000205473ffffffffffffffffffffffffffffffffffffffff169061473890860186615c67565b604051614746929190615b2e565b600060405180830381855af49150503d8060008114614781576040519150601f19603f3d011682016040523d82523d6000602084013e614786565b606091505b50915091508161479857805160208201fd5b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146147f0576040517f7c91ccdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6147f9336155ce565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461484c576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b60005b63ffffffff81168211156149da576000806003600086868663ffffffff168181106148eb576148eb615e2a565b90506020028101906148fd9190615ccc565b61490b906020810190615a90565b63ffffffff908116825260208201929092526040016000205473ffffffffffffffffffffffffffffffffffffffff169086908690861681811061495057614950615e2a565b90506020028101906149629190615ccc565b614970906020810190615c67565b60405161497e929190615b2e565b600060405180830381855af49150503d80600081146149b9576040519150601f19603f3d011682016040523d82523d6000602084013e6149be565b606091505b5091509150816149d057805160208201fd5b50506001016148be565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314614a30576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6149da73ffffffffffffffffffffffffffffffffffffffff84168383615646565b6000614a5c82610645565b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314614ab3576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff811660008181526003602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000167f0000000000000000000000000f34a522ff82151c90679b73211955068fd854f173ffffffffffffffffffffffffffffffffffffffff16179055517fc203fc627a1b6dd6b6dad3f6b7a313417bb01b1b5ebcd77ed25aff6a0b1608659190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314614ba0576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83518163ffffffff161015614ce757828163ffffffff1681518110614bca57614bca615e2a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3858363ffffffff1681518110614c0557614c05615e2a565b602002602001015184614c19576000614c3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b158015614ca657600080fd5b505af1158015614cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cde91906159e4565b50600101614ba3565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314614d3f576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054740100000000000000000000000000000000000000009081900463ffffffff908116600081815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583549093928392601492614dc9928592910416615d18565b92506101000a81548163ffffffff021916908363ffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f7977983873e5c968018b0deaedba28f6ce6253277670e94e627fbc08efc50cb160405160405180910390a390505b919050565b6000614e486040830183615bff565b9150614e5990506060830183615bff565b90508114614e93576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b82811015614ed557614eac6080850185615bff565b82818110614ebc57614ebc615e2a565b9050602002013582614ece9190615d00565b9150614e97565b5068056bc75e2d631000008114614f18576040517fc963e34d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080614f2b6105116020870187615a90565b73ffffffffffffffffffffffffffffffffffffffff16614f4e6020870187615c67565b604051614f5c929190615b2e565b600060405180830381855af49150503d8060008114614f97576040519150601f19603f3d011682016040523d82523d6000602084013e614f9c565b606091505b509150915081614fae57805160208201fd5b600081806020019051810190614fc49190615a77565b90506000805b868110156151ec576000614fdf600189615db8565b821415614ff757614ff08385615db8565b905061503d565b68056bc75e2d6310000061500e60808b018b615bff565b8481811061501e5761501e615e2a565b90506020020135856150309190615d7b565b61503a9190615d40565b90505b6150478184615d00565b925060007fb3dc8da4000000000000000000000000000000000000000000000000000000008261507a60608d018d615bff565b8681811061508a5761508a615e2a565b905060200281019061509c9190615c67565b6040516024016150ae93929190615bab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529150600090819061516790615142908e018e615bff565b8781811061515257615152615e2a565b90506020020160208101906105119190615a90565b73ffffffffffffffffffffffffffffffffffffffff168360405161518b9190615b3e565b600060405180830381855af49150503d80600081146151c6576040519150601f19603f3d011682016040523d82523d6000602084013e6151cb565b606091505b5091509150816151dd57805160208201fd5b84600101945050505050614fca565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314615247576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff811660008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000167f0000000000000000000000000f34a522ff82151c90679b73211955068fd854f173ffffffffffffffffffffffffffffffffffffffff16179055517fc60cf0bdf6c913c2d080d151c29909503abb49cdd09b459a7a10a16a466d02da9190a250565b6000805473ffffffffffffffffffffffffffffffffffffffff163314615335576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805478010000000000000000000000000000000000000000000000009081900463ffffffff908116600081815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055835490939283926018926153c3928592910416615d18565b92506101000a81548163ffffffff021916908363ffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f7601ed90c4c6f485f9633a9355c473c63ec60dfb8e04d060dbda9a80cf48eb6860405160405180910390a392915050565b8281811461546b576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156155325760008061548e88888581811061515257615152615e2a565b73ffffffffffffffffffffffffffffffffffffffff168686858181106154b6576154b6615e2a565b90506020028101906154c89190615c67565b6040516154d6929190615b2e565b600060405180830381855af49150503d8060008114615511576040519150601f19603f3d011682016040523d82523d6000602084013e615516565b606091505b50915091508161552857805160208201fd5b505060010161546e565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461558b576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f193505050501580156149da573d6000803e3d6000fd5b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080614ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640160405180910390fd5b8035614e3481615e88565b600082601f83011261571f57600080fd5b8135602067ffffffffffffffff8083111561573c5761573c615e59565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561577f5761577f615e59565b6040528481528381019250868401828801850189101561579e57600080fd5b600092505b858310156157c8576157b481615703565b8452928401926001929092019184016157a3565b50979650505050505050565b60008083601f8401126157e657600080fd5b50813567ffffffffffffffff8111156157fe57600080fd5b6020830191508360208260051b850101111561581957600080fd5b9250929050565b803563ffffffff81168114614e3457600080fd5b60006020828403121561584657600080fd5b813561479881615e88565b6000806040838503121561586457600080fd5b823561586f81615e88565b946020939093013593505050565b60008060006060848603121561589257600080fd5b833561589d81615e88565b925060208401356158ad81615e88565b929592945050506040919091013590565b6000806000606084860312156158d357600080fd5b833567ffffffffffffffff808211156158eb57600080fd5b6158f78783880161570e565b9450602086013591508082111561590d57600080fd5b5061591a8682870161570e565b925050604084013561592b81615ead565b809150509250925092565b6000806020838503121561594957600080fd5b823567ffffffffffffffff81111561596057600080fd5b61596c858286016157d4565b90969095509350505050565b6000806000806040858703121561598e57600080fd5b843567ffffffffffffffff808211156159a657600080fd5b6159b2888389016157d4565b909650945060208701359150808211156159cb57600080fd5b506159d8878288016157d4565b95989497509550505050565b6000602082840312156159f657600080fd5b815161479881615ead565b600060208284031215615a1357600080fd5b813567ffffffffffffffff811115615a2a57600080fd5b82016040818503121561479857600080fd5b600060208284031215615a4e57600080fd5b813567ffffffffffffffff811115615a6557600080fd5b820160c0818503121561479857600080fd5b600060208284031215615a8957600080fd5b5051919050565b600060208284031215615aa257600080fd5b61479882615820565b600080600060408486031215615ac057600080fd5b615ac984615820565b9250602084013567ffffffffffffffff80821115615ae657600080fd5b818601915086601f830112615afa57600080fd5b813581811115615b0957600080fd5b876020828501011115615b1b57600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b60008251615b50818460208701615dcf565b9190910192915050565b6020815260008251806020840152615b79816040850160208701615dcf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c3457600080fd5b83018035915067ffffffffffffffff821115615c4f57600080fd5b6020019150600581901b360382131561581957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c9c57600080fd5b83018035915067ffffffffffffffff821115615cb757600080fd5b60200191503681900382131561581957600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112615b5057600080fd5b60008219821115615d1357615d13615dfb565b500190565b600063ffffffff808316818516808303821115615d3757615d37615dfb565b01949350505050565b600082615d76577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615db357615db3615dfb565b500290565b600082821015615dca57615dca615dfb565b500390565b60005b83811015615dea578181015183820152602001615dd2565b83811115614ce75750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114615eaa57600080fd5b50565b8015158114615eaa57600080fdfea2646970667358221220520e49e2c3de520dd82c292e84e8cd61284492d5f1dba3ca360fa678da44067d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e8dd38e673a93ccfc2e3d7053efccb5c93f493650000000000000000000000000f34a522ff82151c90679b73211955068fd854f1
-----Decoded View---------------
Arg [0] : _owner (address): 0xe8dD38E673A93ccFC2E3d7053efcCb5c93F49365
Arg [1] : _disabledRoute (address): 0x0f34A522FF82151c90679b73211955068FD854F1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e8dd38e673a93ccfc2e3d7053efccb5c93f49365
Arg [1] : 0000000000000000000000000f34a522ff82151c90679b73211955068fd854f1
Deployed ByteCode Sourcemap
26655:132564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;158371:20;158394:26;158411:7;;158404:15;;158394:9;:26::i;:::-;158371:49;;158433:19;158585:1;158569:14;158565:22;158562:1;158559;158546:42;158833:1;158813;158792;158776:14;158772:22;158752:1;158721:12;158697:5;158666:183;158656:193;;158921:16;158918:1;158915;158900:38;159027:6;159047:68;;;;159166:16;159163:1;159156:27;159047:68;159083:16;159080:1;159073:27;29508:411;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27283:29;;;;;;;;;;-1:-1:-1;27283:29:0;;;;;;;;;;;;;;9863:10:1;9851:23;;;9833:42;;9821:2;9806:18;27283:29:0;9689:192:1;1079:83:0;;;;;;;;;;-1:-1:-1;1146:8:0;;;;1079:83;;;7585:42:1;7573:55;;;7555:74;;7543:2;7528:18;1079:83:0;7409:226:1;27497:40:0;;;;;;;;;;-1:-1:-1;27497:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34890:488;;;;;;:::i;:::-;;:::i;1387:158::-;;;;;;;;;;;;;:::i;:::-;;27321:45;;;;;;;;;;;;;;;26912:113;;;;;;;;;;;;;;;;;;8116:66:1;8104:79;;;8086:98;;8074:2;8059:18;26912:113:0;7942:248:1;1170:209:0;;;;;;;;;;-1:-1:-1;1170:209:0;;;;;:::i;:::-;;:::i;36054:623::-;;;;;;:::i;:::-;;:::i;40592:191::-;;;;;;;;;;-1:-1:-1;40592:191:0;;;;;:::i;:::-;;:::i;41711:108::-;;;;;;;;;;-1:-1:-1;41711:108:0;;;;;:::i;:::-;;:::i;39331:180::-;;;;;;;;;;-1:-1:-1;39331:180:0;;;;;:::i;:::-;;:::i;37731:468::-;;;;;;;;;;-1:-1:-1;37731:468:0;;;;;:::i;:::-;;:::i;37247:290::-;;;;;;;;;;-1:-1:-1;37247:290:0;;;;;:::i;:::-;;:::i;992:79::-;;;;;;;;;;-1:-1:-1;1030:7:0;1057:6;;;992:79;;27610:45;;;;;;;;;;-1:-1:-1;27610:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42191:115974;;;;;;;;;;-1:-1:-1;42191:115974:0;;;;;:::i;:::-;;:::i;30331:2540::-;;;;;;:::i;:::-;;:::i;39831:152::-;;;;;;;;;;-1:-1:-1;39831:152:0;;;;;:::i;:::-;;:::i;42058:125::-;;;;;;;;;;-1:-1:-1;42058:125:0;;;;;:::i;:::-;42150:25;;42123:7;42150:25;;;:11;:25;;;;;;;;;42058:125;27375:45;;;;;;;;;;;;27414:6;27375:45;;;;;9130:25:1;;;9118:2;9103:18;27375:45:0;8984:177:1;38636:347:0;;;;;;;;;;-1:-1:-1;38636:347:0;;;;;:::i;:::-;;:::i;33465:680::-;;;;;;:::i;:::-;;:::i;41191:157::-;;;;;;;;;;-1:-1:-1;41191:157:0;;;;;:::i;:::-;;:::i;27136:31::-;;;;;;;;;;-1:-1:-1;27136:31:0;;;;;;;;;;;42191:115974;42247:7;42281:3;42271:7;:13;;;42267:115780;;;42315:3;42305:7;:13;;;42301:115735;;;42353:3;42343:7;:13;;;42339:78791;;;42395:2;42385:7;:12;;;42381:39287;;;42440:2;42430:7;:12;;;42426:19563;;;42489:2;42479:7;:12;;;42475:9707;;;42542:1;42532:7;:11;;;42528:4771;;;42598:1;42588:7;:11;;;42584:2297;;;42658:1;42648:7;:11;;;42644:1055;;;42712:7;:12;;42723:1;42712:12;42708:426;;;-1:-1:-1;42837:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42708:426::-;-1:-1:-1;43044:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42644:1055::-;43234:7;:12;;43245:1;43234:12;43230:426;;;-1:-1:-1;43359:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;43230:426::-;-1:-1:-1;43566:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42584:2297::-;43801:1;43791:7;:11;;;43787:1055;;;43855:7;:12;;43866:1;43855:12;43851:426;;;-1:-1:-1;43980:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;43851:426::-;-1:-1:-1;44187:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;43787:1055::-;44377:7;:12;;44388:1;44377:12;44373:426;;;-1:-1:-1;44502:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;44373:426::-;-1:-1:-1;44709:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42528:4771::-;44975:2;44965:7;:12;;;44961:2303;;;45036:2;45026:7;:12;;;45022:1057;;;45091:7;:12;;45102:1;45091:12;45087:426;;;-1:-1:-1;45216:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;45087:426::-;-1:-1:-1;45423:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;45022:1057::-;45613:7;:13;;45624:2;45613:13;45609:427;;;-1:-1:-1;45739:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;45609:427::-;-1:-1:-1;45946:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;44961:2303::-;46181:2;46171:7;:12;;;46167:1058;;;46236:7;:13;;46247:2;46236:13;46232:427;;;-1:-1:-1;46362:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;46232:427::-;-1:-1:-1;46569:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;46167:1058::-;46759:7;:13;;46770:2;46759:13;46755:427;;;-1:-1:-1;46885:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;46755:427::-;-1:-1:-1;47092:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42475:9707::-;47385:2;47375:7;:12;;;47371:4780;;;47442:2;47432:7;:12;;;47428:2304;;;47503:2;47493:7;:12;;;47489:1058;;;47558:7;:13;;47569:2;47558:13;47554:427;;;-1:-1:-1;47684:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;47554:427::-;-1:-1:-1;47891:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;47489:1058::-;48081:7;:13;;48092:2;48081:13;48077:427;;;-1:-1:-1;48207:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;48077:427::-;-1:-1:-1;48414:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;47428:2304::-;48649:2;48639:7;:12;;;48635:1058;;;48704:7;:13;;48715:2;48704:13;48700:427;;;-1:-1:-1;48830:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;48700:427::-;-1:-1:-1;49037:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;48635:1058::-;49227:7;:13;;49238:2;49227:13;49223:427;;;-1:-1:-1;49353:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;49223:427::-;-1:-1:-1;49560:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;47371:4780::-;49826:2;49816:7;:12;;;49812:2304;;;49887:2;49877:7;:12;;;49873:1058;;;49942:7;:13;;49953:2;49942:13;49938:427;;;-1:-1:-1;50068:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;49938:427::-;-1:-1:-1;50275:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;49873:1058::-;50465:7;:13;;50476:2;50465:13;50461:427;;;-1:-1:-1;50591:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;50461:427::-;-1:-1:-1;50798:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;49812:2304::-;51033:2;51023:7;:12;;;51019:1058;;;51088:7;:13;;51099:2;51088:13;51084:427;;;-1:-1:-1;51214:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;51084:427::-;-1:-1:-1;51421:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;51019:1058::-;51611:7;:13;;51622:2;51611:13;51607:427;;;-1:-1:-1;51737:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;51607:427::-;-1:-1:-1;51944:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42426:19563::-;52260:2;52250:7;:12;;;52246:9716;;;52313:2;52303:7;:12;;;52299:4780;;;52370:2;52360:7;:12;;;52356:2304;;;52431:2;52421:7;:12;;;52417:1058;;;52486:7;:13;;52497:2;52486:13;52482:427;;;-1:-1:-1;52612:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;52482:427::-;-1:-1:-1;52819:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;52417:1058::-;53009:7;:13;;53020:2;53009:13;53005:427;;;-1:-1:-1;53135:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;53005:427::-;-1:-1:-1;53342:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;52356:2304::-;53577:2;53567:7;:12;;;53563:1058;;;53632:7;:13;;53643:2;53632:13;53628:427;;;-1:-1:-1;53758:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;53628:427::-;-1:-1:-1;53965:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;53563:1058::-;54155:7;:13;;54166:2;54155:13;54151:427;;;-1:-1:-1;54281:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;54151:427::-;-1:-1:-1;54488:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;52299:4780::-;54754:2;54744:7;:12;;;54740:2304;;;54815:2;54805:7;:12;;;54801:1058;;;54870:7;:13;;54881:2;54870:13;54866:427;;;-1:-1:-1;54996:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;54866:427::-;-1:-1:-1;55203:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;54801:1058::-;55393:7;:13;;55404:2;55393:13;55389:427;;;-1:-1:-1;55519:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;55389:427::-;-1:-1:-1;55726:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;54740:2304::-;55961:2;55951:7;:12;;;55947:1058;;;56016:7;:13;;56027:2;56016:13;56012:427;;;-1:-1:-1;56142:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;56012:427::-;-1:-1:-1;56349:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;55947:1058::-;56539:7;:13;;56550:2;56539:13;56535:427;;;-1:-1:-1;56665:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;56535:427::-;-1:-1:-1;56872:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;52246:9716::-;57165:2;57155:7;:12;;;57151:4780;;;57222:2;57212:7;:12;;;57208:2304;;;57283:2;57273:7;:12;;;57269:1058;;;57338:7;:13;;57349:2;57338:13;57334:427;;;-1:-1:-1;57464:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;57334:427::-;-1:-1:-1;57671:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;57269:1058::-;57861:7;:13;;57872:2;57861:13;57857:427;;;-1:-1:-1;57987:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;57857:427::-;-1:-1:-1;58194:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;57208:2304::-;58429:2;58419:7;:12;;;58415:1058;;;58484:7;:13;;58495:2;58484:13;58480:427;;;-1:-1:-1;58610:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;58480:427::-;-1:-1:-1;58817:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;58415:1058::-;59007:7;:13;;59018:2;59007:13;59003:427;;;-1:-1:-1;59133:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;59003:427::-;-1:-1:-1;59340:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;57151:4780::-;59606:2;59596:7;:12;;;59592:2304;;;59667:2;59657:7;:12;;;59653:1058;;;59722:7;:13;;59733:2;59722:13;59718:427;;;-1:-1:-1;59848:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;59718:427::-;-1:-1:-1;60055:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;59653:1058::-;60245:7;:13;;60256:2;60245:13;60241:427;;;-1:-1:-1;60371:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;60241:427::-;-1:-1:-1;60578:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;59592:2304::-;60813:2;60803:7;:12;;;60799:1058;;;60868:7;:13;;60879:2;60868:13;60864:427;;;-1:-1:-1;60994:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;60864:427::-;-1:-1:-1;61201:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;60799:1058::-;61391:7;:13;;61402:2;61391:13;61387:427;;;-1:-1:-1;61517:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;61387:427::-;-1:-1:-1;61724:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42381:39287::-;62059:2;62049:7;:12;;;62045:19600;;;62108:2;62098:7;:12;;;62094:9716;;;62161:2;62151:7;:12;;;62147:4780;;;62218:2;62208:7;:12;;;62204:2304;;;62279:2;62269:7;:12;;;62265:1058;;;62334:7;:13;;62345:2;62334:13;62330:427;;;-1:-1:-1;62460:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62330:427::-;-1:-1:-1;62667:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62265:1058::-;62857:7;:13;;62868:2;62857:13;62853:427;;;-1:-1:-1;62983:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62853:427::-;-1:-1:-1;63190:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62204:2304::-;63425:2;63415:7;:12;;;63411:1058;;;63480:7;:13;;63491:2;63480:13;63476:427;;;-1:-1:-1;63606:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;63476:427::-;-1:-1:-1;63813:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;63411:1058::-;64003:7;:13;;64014:2;64003:13;63999:427;;;-1:-1:-1;64129:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;63999:427::-;-1:-1:-1;64336:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62147:4780::-;64602:2;64592:7;:12;;;64588:2304;;;64663:2;64653:7;:12;;;64649:1058;;;64718:7;:13;;64729:2;64718:13;64714:427;;;-1:-1:-1;64844:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;64714:427::-;-1:-1:-1;65051:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;64649:1058::-;65241:7;:13;;65252:2;65241:13;65237:427;;;-1:-1:-1;65367:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;65237:427::-;-1:-1:-1;65574:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;64588:2304::-;65809:2;65799:7;:12;;;65795:1058;;;65864:7;:13;;65875:2;65864:13;65860:427;;;-1:-1:-1;65990:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;65860:427::-;-1:-1:-1;66197:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;65795:1058::-;66387:7;:13;;66398:2;66387:13;66383:427;;;-1:-1:-1;66513:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;66383:427::-;-1:-1:-1;66720:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62094:9716::-;67013:2;67003:7;:12;;;66999:4780;;;67070:2;67060:7;:12;;;67056:2304;;;67131:2;67121:7;:12;;;67117:1058;;;67186:7;:13;;67197:2;67186:13;67182:427;;;-1:-1:-1;67312:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;67182:427::-;-1:-1:-1;67519:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;67117:1058::-;67709:7;:13;;67720:2;67709:13;67705:427;;;-1:-1:-1;67835:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;67705:427::-;-1:-1:-1;68042:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;67056:2304::-;68277:2;68267:7;:12;;;68263:1058;;;68332:7;:13;;68343:2;68332:13;68328:427;;;-1:-1:-1;68458:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;68328:427::-;-1:-1:-1;68665:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;68263:1058::-;68855:7;:13;;68866:2;68855:13;68851:427;;;-1:-1:-1;68981:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;68851:427::-;-1:-1:-1;69188:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;66999:4780::-;69454:2;69444:7;:12;;;69440:2304;;;69515:2;69505:7;:12;;;69501:1058;;;69570:7;:13;;69581:2;69570:13;69566:427;;;-1:-1:-1;69696:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;69566:427::-;-1:-1:-1;69903:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;69501:1058::-;70093:7;:13;;70104:2;70093:13;70089:427;;;-1:-1:-1;70219:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;70089:427::-;-1:-1:-1;70426:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;69440:2304::-;70661:2;70651:7;:12;;;70647:1058;;;70716:7;:13;;70727:2;70716:13;70712:427;;;-1:-1:-1;70842:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;70712:427::-;-1:-1:-1;71049:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;70647:1058::-;71239:7;:13;;71250:2;71239:13;71235:427;;;-1:-1:-1;71365:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;71235:427::-;-1:-1:-1;71572:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;62045:19600::-;71888:3;71878:7;:13;;;71874:9744;;;71942:3;71932:7;:13;;;71928:4792;;;72000:3;71990:7;:13;;;71986:2308;;;72062:2;72052:7;:12;;;72048:1058;;;72117:7;:13;;72128:2;72117:13;72113:427;;;-1:-1:-1;72243:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;72113:427::-;-1:-1:-1;72450:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;72048:1058::-;72640:7;:13;;72651:2;72640:13;72636:427;;;-1:-1:-1;72766:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;72636:427::-;-1:-1:-1;72973:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;71986:2308::-;73208:3;73198:7;:13;;;73194:1061;;;73264:7;:14;;73275:3;73264:14;73260:428;;;-1:-1:-1;73391:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;73260:428::-;-1:-1:-1;73598:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;73194:1061::-;73788:7;:14;;73799:3;73788:14;73784:428;;;-1:-1:-1;73915:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;73784:428::-;-1:-1:-1;74122:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;71928:4792::-;74388:3;74378:7;:13;;;74374:2311;;;74450:3;74440:7;:13;;;74436:1061;;;74506:7;:14;;74517:3;74506:14;74502:428;;;-1:-1:-1;74633:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;74502:428::-;-1:-1:-1;74840:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;74436:1061::-;75030:7;:14;;75041:3;75030:14;75026:428;;;-1:-1:-1;75157:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;75026:428::-;-1:-1:-1;75364:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;74374:2311::-;75599:3;75589:7;:13;;;75585:1061;;;75655:7;:14;;75666:3;75655:14;75651:428;;;-1:-1:-1;75782:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;75651:428::-;-1:-1:-1;75989:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;75585:1061::-;76179:7;:14;;76190:3;76179:14;76175:428;;;-1:-1:-1;76306:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;76175:428::-;-1:-1:-1;76513:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;71874:9744::-;76806:3;76796:7;:13;;;76792:4795;;;76864:3;76854:7;:13;;;76850:2311;;;76926:3;76916:7;:13;;;76912:1061;;;76982:7;:14;;76993:3;76982:14;76978:428;;;-1:-1:-1;77109:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;76978:428::-;-1:-1:-1;77316:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;76912:1061::-;77506:7;:14;;77517:3;77506:14;77502:428;;;-1:-1:-1;77633:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;77502:428::-;-1:-1:-1;77840:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;76850:2311::-;78075:3;78065:7;:13;;;78061:1061;;;78131:7;:14;;78142:3;78131:14;78127:428;;;-1:-1:-1;78258:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;78127:428::-;-1:-1:-1;78465:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;78061:1061::-;78655:7;:14;;78666:3;78655:14;78651:428;;;-1:-1:-1;78782:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;78651:428::-;-1:-1:-1;78989:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;76792:4795::-;79255:3;79245:7;:13;;;79241:2311;;;79317:3;79307:7;:13;;;79303:1061;;;79373:7;:14;;79384:3;79373:14;79369:428;;;-1:-1:-1;79500:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;79369:428::-;-1:-1:-1;79707:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;79303:1061::-;79897:7;:14;;79908:3;79897:14;79893:428;;;-1:-1:-1;80024:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;79893:428::-;-1:-1:-1;80231:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;79241:2311::-;80466:3;80456:7;:13;;;80452:1061;;;80522:7;:14;;80533:3;80522:14;80518:428;;;-1:-1:-1;80649:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;80518:428::-;-1:-1:-1;80856:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;80452:1061::-;81046:7;:14;;81057:3;81046:14;81042:428;;;-1:-1:-1;81173:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81042:428::-;-1:-1:-1;81380:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42339:78791::-;81730:3;81720:7;:13;;;81716:39395;;;81776:3;81766:7;:13;;;81762:19635;;;81826:3;81816:7;:13;;;81812:9747;;;81880:3;81870:7;:13;;;81866:4795;;;81938:3;81928:7;:13;;;81924:2311;;;82000:3;81990:7;:13;;;81986:1061;;;82056:7;:14;;82067:3;82056:14;82052:428;;;-1:-1:-1;82183:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;82052:428::-;-1:-1:-1;82390:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81986:1061::-;82580:7;:14;;82591:3;82580:14;82576:428;;;-1:-1:-1;82707:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;82576:428::-;-1:-1:-1;82914:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81924:2311::-;83149:3;83139:7;:13;;;83135:1061;;;83205:7;:14;;83216:3;83205:14;83201:428;;;-1:-1:-1;83332:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;83201:428::-;-1:-1:-1;83539:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;83135:1061::-;83729:7;:14;;83740:3;83729:14;83725:428;;;-1:-1:-1;83856:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;83725:428::-;-1:-1:-1;84063:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81866:4795::-;84329:3;84319:7;:13;;;84315:2311;;;84391:3;84381:7;:13;;;84377:1061;;;84447:7;:14;;84458:3;84447:14;84443:428;;;-1:-1:-1;84574:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;84443:428::-;-1:-1:-1;84781:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;84377:1061::-;84971:7;:14;;84982:3;84971:14;84967:428;;;-1:-1:-1;85098:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;84967:428::-;-1:-1:-1;85305:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;84315:2311::-;85540:3;85530:7;:13;;;85526:1061;;;85596:7;:14;;85607:3;85596:14;85592:428;;;-1:-1:-1;85723:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;85592:428::-;-1:-1:-1;85930:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;85526:1061::-;86120:7;:14;;86131:3;86120:14;86116:428;;;-1:-1:-1;86247:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;86116:428::-;-1:-1:-1;86454:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81812:9747::-;86747:3;86737:7;:13;;;86733:4795;;;86805:3;86795:7;:13;;;86791:2311;;;86867:3;86857:7;:13;;;86853:1061;;;86923:7;:14;;86934:3;86923:14;86919:428;;;-1:-1:-1;87050:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;86919:428::-;-1:-1:-1;87257:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;86853:1061::-;87447:7;:14;;87458:3;87447:14;87443:428;;;-1:-1:-1;87574:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;87443:428::-;-1:-1:-1;87781:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;86791:2311::-;88016:3;88006:7;:13;;;88002:1061;;;88072:7;:14;;88083:3;88072:14;88068:428;;;-1:-1:-1;88199:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;88068:428::-;-1:-1:-1;88406:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;88002:1061::-;88596:7;:14;;88607:3;88596:14;88592:428;;;-1:-1:-1;88723:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;88592:428::-;-1:-1:-1;88930:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;86733:4795::-;89196:3;89186:7;:13;;;89182:2311;;;89258:3;89248:7;:13;;;89244:1061;;;89314:7;:14;;89325:3;89314:14;89310:428;;;-1:-1:-1;89441:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;89310:428::-;-1:-1:-1;89648:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;89244:1061::-;89838:7;:14;;89849:3;89838:14;89834:428;;;-1:-1:-1;89965:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;89834:428::-;-1:-1:-1;90172:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;89182:2311::-;90407:3;90397:7;:13;;;90393:1061;;;90463:7;:14;;90474:3;90463:14;90459:428;;;-1:-1:-1;90590:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;90459:428::-;-1:-1:-1;90797:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;90393:1061::-;90987:7;:14;;90998:3;90987:14;90983:428;;;-1:-1:-1;91114:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;90983:428::-;-1:-1:-1;91321:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81762:19635::-;91637:3;91627:7;:13;;;91623:9747;;;91691:3;91681:7;:13;;;91677:4795;;;91749:3;91739:7;:13;;;91735:2311;;;91811:3;91801:7;:13;;;91797:1061;;;91867:7;:14;;91878:3;91867:14;91863:428;;;-1:-1:-1;91994:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;91863:428::-;-1:-1:-1;92201:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;91797:1061::-;92391:7;:14;;92402:3;92391:14;92387:428;;;-1:-1:-1;92518:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;92387:428::-;-1:-1:-1;92725:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;91735:2311::-;92960:3;92950:7;:13;;;92946:1061;;;93016:7;:14;;93027:3;93016:14;93012:428;;;-1:-1:-1;93143:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;93012:428::-;-1:-1:-1;93350:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;92946:1061::-;93540:7;:14;;93551:3;93540:14;93536:428;;;-1:-1:-1;93667:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;93536:428::-;-1:-1:-1;93874:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;91677:4795::-;94140:3;94130:7;:13;;;94126:2311;;;94202:3;94192:7;:13;;;94188:1061;;;94258:7;:14;;94269:3;94258:14;94254:428;;;-1:-1:-1;94385:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;94254:428::-;-1:-1:-1;94592:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;94188:1061::-;94782:7;:14;;94793:3;94782:14;94778:428;;;-1:-1:-1;94909:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;94778:428::-;-1:-1:-1;95116:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;94126:2311::-;95351:3;95341:7;:13;;;95337:1061;;;95407:7;:14;;95418:3;95407:14;95403:428;;;-1:-1:-1;95534:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;95403:428::-;-1:-1:-1;95741:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;95337:1061::-;95931:7;:14;;95942:3;95931:14;95927:428;;;-1:-1:-1;96058:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;95927:428::-;-1:-1:-1;96265:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;91623:9747::-;96558:3;96548:7;:13;;;96544:4795;;;96616:3;96606:7;:13;;;96602:2311;;;96678:3;96668:7;:13;;;96664:1061;;;96734:7;:14;;96745:3;96734:14;96730:428;;;-1:-1:-1;96861:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;96730:428::-;-1:-1:-1;97068:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;96664:1061::-;97258:7;:14;;97269:3;97258:14;97254:428;;;-1:-1:-1;97385:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;97254:428::-;-1:-1:-1;97592:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;96602:2311::-;97827:3;97817:7;:13;;;97813:1061;;;97883:7;:14;;97894:3;97883:14;97879:428;;;-1:-1:-1;98010:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;97879:428::-;-1:-1:-1;98217:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;97813:1061::-;98407:7;:14;;98418:3;98407:14;98403:428;;;-1:-1:-1;98534:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;98403:428::-;-1:-1:-1;98741:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;96544:4795::-;99007:3;98997:7;:13;;;98993:2311;;;99069:3;99059:7;:13;;;99055:1061;;;99125:7;:14;;99136:3;99125:14;99121:428;;;-1:-1:-1;99252:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;99121:428::-;-1:-1:-1;99459:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;99055:1061::-;99649:7;:14;;99660:3;99649:14;99645:428;;;-1:-1:-1;99776:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;99645:428::-;-1:-1:-1;99983:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;98993:2311::-;100218:3;100208:7;:13;;;100204:1061;;;100274:7;:14;;100285:3;100274:14;100270:428;;;-1:-1:-1;100401:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;100270:428::-;-1:-1:-1;100608:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;100204:1061::-;100798:7;:14;;100809:3;100798:14;100794:428;;;-1:-1:-1;100925:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;100794:428::-;-1:-1:-1;101132:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;81716:39395::-;101467:3;101457:7;:13;;;101453:19635;;;101517:3;101507:7;:13;;;101503:9747;;;101571:3;101561:7;:13;;;101557:4795;;;101629:3;101619:7;:13;;;101615:2311;;;101691:3;101681:7;:13;;;101677:1061;;;101747:7;:14;;101758:3;101747:14;101743:428;;;-1:-1:-1;101874:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101743:428::-;-1:-1:-1;102081:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101677:1061::-;102271:7;:14;;102282:3;102271:14;102267:428;;;-1:-1:-1;102398:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;102267:428::-;-1:-1:-1;102605:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101615:2311::-;102840:3;102830:7;:13;;;102826:1061;;;102896:7;:14;;102907:3;102896:14;102892:428;;;-1:-1:-1;103023:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;102892:428::-;-1:-1:-1;103230:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;102826:1061::-;103420:7;:14;;103431:3;103420:14;103416:428;;;-1:-1:-1;103547:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;103416:428::-;-1:-1:-1;103754:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101557:4795::-;104020:3;104010:7;:13;;;104006:2311;;;104082:3;104072:7;:13;;;104068:1061;;;104138:7;:14;;104149:3;104138:14;104134:428;;;-1:-1:-1;104265:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;104134:428::-;-1:-1:-1;104472:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;104068:1061::-;104662:7;:14;;104673:3;104662:14;104658:428;;;-1:-1:-1;104789:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;104658:428::-;-1:-1:-1;104996:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;104006:2311::-;105231:3;105221:7;:13;;;105217:1061;;;105287:7;:14;;105298:3;105287:14;105283:428;;;-1:-1:-1;105414:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;105283:428::-;-1:-1:-1;105621:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;105217:1061::-;105811:7;:14;;105822:3;105811:14;105807:428;;;-1:-1:-1;105938:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;105807:428::-;-1:-1:-1;106145:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101503:9747::-;106438:3;106428:7;:13;;;106424:4795;;;106496:3;106486:7;:13;;;106482:2311;;;106558:3;106548:7;:13;;;106544:1061;;;106614:7;:14;;106625:3;106614:14;106610:428;;;-1:-1:-1;106741:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;106610:428::-;-1:-1:-1;106948:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;106544:1061::-;107138:7;:14;;107149:3;107138:14;107134:428;;;-1:-1:-1;107265:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;107134:428::-;-1:-1:-1;107472:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;106482:2311::-;107707:3;107697:7;:13;;;107693:1061;;;107763:7;:14;;107774:3;107763:14;107759:428;;;-1:-1:-1;107890:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;107759:428::-;-1:-1:-1;108097:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;107693:1061::-;108287:7;:14;;108298:3;108287:14;108283:428;;;-1:-1:-1;108414:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;108283:428::-;-1:-1:-1;108621:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;106424:4795::-;108887:3;108877:7;:13;;;108873:2311;;;108949:3;108939:7;:13;;;108935:1061;;;109005:7;:14;;109016:3;109005:14;109001:428;;;-1:-1:-1;109132:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;109001:428::-;-1:-1:-1;109339:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;108935:1061::-;109529:7;:14;;109540:3;109529:14;109525:428;;;-1:-1:-1;109656:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;109525:428::-;-1:-1:-1;109863:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;108873:2311::-;110098:3;110088:7;:13;;;110084:1061;;;110154:7;:14;;110165:3;110154:14;110150:428;;;-1:-1:-1;110281:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;110150:428::-;-1:-1:-1;110488:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;110084:1061::-;110678:7;:14;;110689:3;110678:14;110674:428;;;-1:-1:-1;110805:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;110674:428::-;-1:-1:-1;111012:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;101453:19635::-;111328:3;111318:7;:13;;;111314:9747;;;111382:3;111372:7;:13;;;111368:4795;;;111440:3;111430:7;:13;;;111426:2311;;;111502:3;111492:7;:13;;;111488:1061;;;111558:7;:14;;111569:3;111558:14;111554:428;;;-1:-1:-1;111685:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;111554:428::-;-1:-1:-1;111892:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;111488:1061::-;112082:7;:14;;112093:3;112082:14;112078:428;;;-1:-1:-1;112209:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;112078:428::-;-1:-1:-1;112416:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;111426:2311::-;112651:3;112641:7;:13;;;112637:1061;;;112707:7;:14;;112718:3;112707:14;112703:428;;;-1:-1:-1;112834:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;112703:428::-;-1:-1:-1;113041:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;112637:1061::-;113231:7;:14;;113242:3;113231:14;113227:428;;;-1:-1:-1;113358:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;113227:428::-;-1:-1:-1;113565:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;111368:4795::-;113831:3;113821:7;:13;;;113817:2311;;;113893:3;113883:7;:13;;;113879:1061;;;113949:7;:14;;113960:3;113949:14;113945:428;;;-1:-1:-1;114076:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;113945:428::-;-1:-1:-1;114283:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;113879:1061::-;114473:7;:14;;114484:3;114473:14;114469:428;;;-1:-1:-1;114600:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;114469:428::-;-1:-1:-1;114807:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;113817:2311::-;115042:3;115032:7;:13;;;115028:1061;;;115098:7;:14;;115109:3;115098:14;115094:428;;;-1:-1:-1;115225:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;115094:428::-;-1:-1:-1;115432:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;115028:1061::-;115622:7;:14;;115633:3;115622:14;115618:428;;;-1:-1:-1;115749:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;115618:428::-;-1:-1:-1;115956:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;111314:9747::-;116249:3;116239:7;:13;;;116235:4795;;;116307:3;116297:7;:13;;;116293:2311;;;116369:3;116359:7;:13;;;116355:1061;;;116425:7;:14;;116436:3;116425:14;116421:428;;;-1:-1:-1;116552:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;116421:428::-;-1:-1:-1;116759:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;116355:1061::-;116949:7;:14;;116960:3;116949:14;116945:428;;;-1:-1:-1;117076:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;116945:428::-;-1:-1:-1;117283:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;116293:2311::-;117518:3;117508:7;:13;;;117504:1061;;;117574:7;:14;;117585:3;117574:14;117570:428;;;-1:-1:-1;117701:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;117570:428::-;-1:-1:-1;117908:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;117504:1061::-;118098:7;:14;;118109:3;118098:14;118094:428;;;-1:-1:-1;118225:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;118094:428::-;-1:-1:-1;118432:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;116235:4795::-;118698:3;118688:7;:13;;;118684:2311;;;118760:3;118750:7;:13;;;118746:1061;;;118816:7;:14;;118827:3;118816:14;118812:428;;;-1:-1:-1;118943:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;118812:428::-;-1:-1:-1;119150:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;118746:1061::-;119340:7;:14;;119351:3;119340:14;119336:428;;;-1:-1:-1;119467:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;119336:428::-;-1:-1:-1;119674:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;118684:2311::-;119909:3;119899:7;:13;;;119895:1061;;;119965:7;:14;;119976:3;119965:14;119961:428;;;-1:-1:-1;120092:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;119961:428::-;-1:-1:-1;120299:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;119895:1061::-;120489:7;:14;;120500:3;120489:14;120485:428;;;-1:-1:-1;120616:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;120485:428::-;-1:-1:-1;120823:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;42301:115735::-;121184:3;121174:7;:13;;;121170:36851;;;121226:3;121216:7;:13;;;121212:18371;;;121272:3;121262:7;:13;;;121258:9123;;;121322:3;121312:7;:13;;;121308:4491;;;121376:3;121366:7;:13;;;121362:2167;;;121434:3;121424:7;:13;;;121420:997;;;121486:7;:14;;121497:3;121486:14;121482:404;;;-1:-1:-1;121605:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121482:404::-;-1:-1:-1;121800:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121420:997::-;121978:7;:14;;121989:3;121978:14;121974:404;;;-1:-1:-1;122097:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121974:404::-;-1:-1:-1;122292:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121362:2167::-;122511:3;122501:7;:13;;;122497:997;;;122563:7;:14;;122574:3;122563:14;122559:404;;;-1:-1:-1;122682:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;122559:404::-;-1:-1:-1;122877:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;122497:997::-;123055:7;:14;;123066:3;123055:14;123051:404;;;-1:-1:-1;123174:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;123051:404::-;-1:-1:-1;123369:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121308:4491::-;123615:3;123605:7;:13;;;123601:2167;;;123673:3;123663:7;:13;;;123659:997;;;123725:7;:14;;123736:3;123725:14;123721:404;;;-1:-1:-1;123844:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;123721:404::-;-1:-1:-1;124039:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;123659:997::-;124217:7;:14;;124228:3;124217:14;124213:404;;;-1:-1:-1;124336:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;124213:404::-;-1:-1:-1;124531:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;123601:2167::-;124750:3;124740:7;:13;;;124736:997;;;124802:7;:14;;124813:3;124802:14;124798:404;;;-1:-1:-1;124921:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;124798:404::-;-1:-1:-1;125116:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;124736:997::-;125294:7;:14;;125305:3;125294:14;125290:404;;;-1:-1:-1;125413:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;125290:404::-;-1:-1:-1;125608:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121258:9123::-;125877:3;125867:7;:13;;;125863:4491;;;125931:3;125921:7;:13;;;125917:2167;;;125989:3;125979:7;:13;;;125975:997;;;126041:7;:14;;126052:3;126041:14;126037:404;;;-1:-1:-1;126160:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;126037:404::-;-1:-1:-1;126355:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;125975:997::-;126533:7;:14;;126544:3;126533:14;126529:404;;;-1:-1:-1;126652:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;126529:404::-;-1:-1:-1;126847:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;125917:2167::-;127066:3;127056:7;:13;;;127052:997;;;127118:7;:14;;127129:3;127118:14;127114:404;;;-1:-1:-1;127237:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;127114:404::-;-1:-1:-1;127432:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;127052:997::-;127610:7;:14;;127621:3;127610:14;127606:404;;;-1:-1:-1;127729:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;127606:404::-;-1:-1:-1;127924:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;125863:4491::-;128170:3;128160:7;:13;;;128156:2167;;;128228:3;128218:7;:13;;;128214:997;;;128280:7;:14;;128291:3;128280:14;128276:404;;;-1:-1:-1;128399:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;128276:404::-;-1:-1:-1;128594:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;128214:997::-;128772:7;:14;;128783:3;128772:14;128768:404;;;-1:-1:-1;128891:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;128768:404::-;-1:-1:-1;129086:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;128156:2167::-;129305:3;129295:7;:13;;;129291:997;;;129357:7;:14;;129368:3;129357:14;129353:404;;;-1:-1:-1;129476:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;129353:404::-;-1:-1:-1;129671:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;129291:997::-;129849:7;:14;;129860:3;129849:14;129845:404;;;-1:-1:-1;129968:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;129845:404::-;-1:-1:-1;130163:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121212:18371::-;130451:3;130441:7;:13;;;130437:9123;;;130501:3;130491:7;:13;;;130487:4491;;;130555:3;130545:7;:13;;;130541:2167;;;130613:3;130603:7;:13;;;130599:997;;;130665:7;:14;;130676:3;130665:14;130661:404;;;-1:-1:-1;130784:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;130661:404::-;-1:-1:-1;130979:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;130599:997::-;131157:7;:14;;131168:3;131157:14;131153:404;;;-1:-1:-1;131276:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;131153:404::-;-1:-1:-1;131471:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;130541:2167::-;131690:3;131680:7;:13;;;131676:997;;;131742:7;:14;;131753:3;131742:14;131738:404;;;-1:-1:-1;131861:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;131738:404::-;-1:-1:-1;132056:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;131676:997::-;132234:7;:14;;132245:3;132234:14;132230:404;;;-1:-1:-1;132353:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;132230:404::-;-1:-1:-1;132548:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;130487:4491::-;132794:3;132784:7;:13;;;132780:2167;;;132852:3;132842:7;:13;;;132838:997;;;132904:7;:14;;132915:3;132904:14;132900:404;;;-1:-1:-1;133023:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;132900:404::-;-1:-1:-1;133218:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;132838:997::-;133396:7;:14;;133407:3;133396:14;133392:404;;;-1:-1:-1;133515:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;133392:404::-;-1:-1:-1;133710:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;132780:2167::-;133929:3;133919:7;:13;;;133915:997;;;133981:7;:14;;133992:3;133981:14;133977:404;;;-1:-1:-1;134100:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;133977:404::-;-1:-1:-1;134295:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;133915:997::-;134473:7;:14;;134484:3;134473:14;134469:404;;;-1:-1:-1;134592:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;134469:404::-;-1:-1:-1;134787:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;130437:9123::-;135056:3;135046:7;:13;;;135042:4491;;;135110:3;135100:7;:13;;;135096:2167;;;135168:3;135158:7;:13;;;135154:997;;;135220:7;:14;;135231:3;135220:14;135216:404;;;-1:-1:-1;135339:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;135216:404::-;-1:-1:-1;135534:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;135154:997::-;135712:7;:14;;135723:3;135712:14;135708:404;;;-1:-1:-1;135831:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;135708:404::-;-1:-1:-1;136026:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;135096:2167::-;136245:3;136235:7;:13;;;136231:997;;;136297:7;:14;;136308:3;136297:14;136293:404;;;-1:-1:-1;136416:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;136293:404::-;-1:-1:-1;136611:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;136231:997::-;136789:7;:14;;136800:3;136789:14;136785:404;;;-1:-1:-1;136908:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;136785:404::-;-1:-1:-1;137103:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;135042:4491::-;137349:3;137339:7;:13;;;137335:2167;;;137407:3;137397:7;:13;;;137393:997;;;137459:7;:14;;137470:3;137459:14;137455:404;;;-1:-1:-1;137578:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;137455:404::-;-1:-1:-1;137773:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;137393:997::-;137951:7;:14;;137962:3;137951:14;137947:404;;;-1:-1:-1;138070:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;137947:404::-;-1:-1:-1;138265:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;137335:2167::-;138484:3;138474:7;:13;;;138470:997;;;138536:7;:14;;138547:3;138536:14;138532:404;;;-1:-1:-1;138655:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;138532:404::-;-1:-1:-1;138850:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;138470:997::-;139028:7;:14;;139039:3;139028:14;139024:404;;;-1:-1:-1;139147:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139024:404::-;-1:-1:-1;139342:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;121170:36851::-;139645:3;139635:7;:13;;;139631:18371;;;139691:3;139681:7;:13;;;139677:9123;;;139741:3;139731:7;:13;;;139727:4491;;;139795:3;139785:7;:13;;;139781:2167;;;139853:3;139843:7;:13;;;139839:997;;;139905:7;:14;;139916:3;139905:14;139901:404;;;-1:-1:-1;140024:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139901:404::-;-1:-1:-1;140219:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139839:997::-;140397:7;:14;;140408:3;140397:14;140393:404;;;-1:-1:-1;140516:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;140393:404::-;-1:-1:-1;140711:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139781:2167::-;140930:3;140920:7;:13;;;140916:997;;;140982:7;:14;;140993:3;140982:14;140978:404;;;-1:-1:-1;141101:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;140978:404::-;-1:-1:-1;141296:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;140916:997::-;141474:7;:14;;141485:3;141474:14;141470:404;;;-1:-1:-1;141593:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;141470:404::-;-1:-1:-1;141788:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139727:4491::-;142034:3;142024:7;:13;;;142020:2167;;;142092:3;142082:7;:13;;;142078:997;;;142144:7;:14;;142155:3;142144:14;142140:404;;;-1:-1:-1;142263:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;142140:404::-;-1:-1:-1;142458:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;142078:997::-;142636:7;:14;;142647:3;142636:14;142632:404;;;-1:-1:-1;142755:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;142632:404::-;-1:-1:-1;142950:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;142020:2167::-;143169:3;143159:7;:13;;;143155:997;;;143221:7;:14;;143232:3;143221:14;143217:404;;;-1:-1:-1;143340:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;143217:404::-;-1:-1:-1;143535:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;143155:997::-;143713:7;:14;;143724:3;143713:14;143709:404;;;-1:-1:-1;143832:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;143709:404::-;-1:-1:-1;144027:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139677:9123::-;144296:3;144286:7;:13;;;144282:4491;;;144350:3;144340:7;:13;;;144336:2167;;;144408:3;144398:7;:13;;;144394:997;;;144460:7;:14;;144471:3;144460:14;144456:404;;;-1:-1:-1;144579:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;144456:404::-;-1:-1:-1;144774:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;144394:997::-;144952:7;:14;;144963:3;144952:14;144948:404;;;-1:-1:-1;145071:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;144948:404::-;-1:-1:-1;145266:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;144336:2167::-;145485:3;145475:7;:13;;;145471:997;;;145537:7;:14;;145548:3;145537:14;145533:404;;;-1:-1:-1;145656:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;145533:404::-;-1:-1:-1;145851:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;145471:997::-;146029:7;:14;;146040:3;146029:14;146025:404;;;-1:-1:-1;146148:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;146025:404::-;-1:-1:-1;146343:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;144282:4491::-;146589:3;146579:7;:13;;;146575:2167;;;146647:3;146637:7;:13;;;146633:997;;;146699:7;:14;;146710:3;146699:14;146695:404;;;-1:-1:-1;146818:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;146695:404::-;-1:-1:-1;147013:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;146633:997::-;147191:7;:14;;147202:3;147191:14;147187:404;;;-1:-1:-1;147310:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;147187:404::-;-1:-1:-1;147505:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;146575:2167::-;147724:3;147714:7;:13;;;147710:997;;;147776:7;:14;;147787:3;147776:14;147772:404;;;-1:-1:-1;147895:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;147772:404::-;-1:-1:-1;148090:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;147710:997::-;148268:7;:14;;148279:3;148268:14;148264:404;;;-1:-1:-1;148387:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;148264:404::-;-1:-1:-1;148582:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;139631:18371::-;148870:3;148860:7;:13;;;148856:9123;;;148920:3;148910:7;:13;;;148906:4491;;;148974:3;148964:7;:13;;;148960:2167;;;149032:3;149022:7;:13;;;149018:997;;;149084:7;:14;;149095:3;149084:14;149080:404;;;-1:-1:-1;149203:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;149080:404::-;-1:-1:-1;149398:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;149018:997::-;149576:7;:14;;149587:3;149576:14;149572:404;;;-1:-1:-1;149695:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;149572:404::-;-1:-1:-1;149890:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;148960:2167::-;150109:3;150099:7;:13;;;150095:997;;;150161:7;:14;;150172:3;150161:14;150157:404;;;-1:-1:-1;150280:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;150157:404::-;-1:-1:-1;150475:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;150095:997::-;150653:7;:14;;150664:3;150653:14;150649:404;;;-1:-1:-1;150772:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;150649:404::-;-1:-1:-1;150967:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;148906:4491::-;151213:3;151203:7;:13;;;151199:2167;;;151271:3;151261:7;:13;;;151257:997;;;151323:7;:14;;151334:3;151323:14;151319:404;;;-1:-1:-1;151442:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;151319:404::-;-1:-1:-1;151637:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;151257:997::-;151815:7;:14;;151826:3;151815:14;151811:404;;;-1:-1:-1;151934:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;151811:404::-;-1:-1:-1;152129:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;151199:2167::-;152348:3;152338:7;:13;;;152334:997;;;152400:7;:14;;152411:3;152400:14;152396:404;;;-1:-1:-1;152519:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;152396:404::-;-1:-1:-1;152714:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;152334:997::-;152892:7;:14;;152903:3;152892:14;152888:404;;;-1:-1:-1;153011:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;152888:404::-;-1:-1:-1;153206:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;148856:9123::-;153475:3;153465:7;:13;;;153461:4491;;;153529:3;153519:7;:13;;;153515:2167;;;153587:3;153577:7;:13;;;153573:997;;;153639:7;:14;;153650:3;153639:14;153635:404;;;-1:-1:-1;153758:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;153635:404::-;-1:-1:-1;153953:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;153573:997::-;154131:7;:14;;154142:3;154131:14;154127:404;;;-1:-1:-1;154250:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;154127:404::-;-1:-1:-1;154445:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;153515:2167::-;154664:3;154654:7;:13;;;154650:997;;;154716:7;:14;;154727:3;154716:14;154712:404;;;-1:-1:-1;154835:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;154712:404::-;-1:-1:-1;155030:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;154650:997::-;155208:7;:14;;155219:3;155208:14;155204:404;;;-1:-1:-1;155327:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;155204:404::-;-1:-1:-1;155522:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;153461:4491::-;155768:3;155758:7;:13;;;155754:2167;;;155826:3;155816:7;:13;;;155812:997;;;155878:7;:14;;155889:3;155878:14;155874:404;;;-1:-1:-1;155997:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;155874:404::-;-1:-1:-1;156192:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;155812:997::-;156370:7;:14;;156381:3;156370:14;156366:404;;;-1:-1:-1;156489:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;156366:404::-;-1:-1:-1;156684:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;155754:2167::-;156903:3;156893:7;:13;;;156889:997;;;156955:7;:14;;156966:3;156955:14;156951:404;;;-1:-1:-1;157074:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;156951:404::-;-1:-1:-1;157269:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;156889:997::-;157447:7;:14;;157458:3;157447:14;157443:404;;;-1:-1:-1;157566:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;157443:404::-;-1:-1:-1;157761:42:0;;42191:115974;-1:-1:-1;42191:115974:0:o;157443:404::-;158063:15;;;158090:1;158063:15;;;:6;:15;;;;;;:29;:15;158059:65;;158101:23;;;;;;;;;;;;;;158059:65;-1:-1:-1;158142:15:0;;;;;;:6;:15;;;;;;;;;42191:115974::o;29508:411::-;29623:12;29649;29663:19;29686:18;29696:7;29686:9;:18::i;:::-;:31;;29732:9;;29686:66;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29648:104;;;;29770:7;29765:121;;29852:6;29846:13;29841:2;29833:6;29829:15;29822:38;29765:121;29905:6;29508:411;-1:-1:-1;;;;;29508:411:0:o;34890:488::-;35032:12;35058;;35095:11;35058:12;35121:36;;;;:23;:36;:::i;:::-;35095:73;;;;;;;;;;;;;;-1:-1:-1;35095:73:0;;;;;35182:28;;;;:23;:28;:::i;:::-;35095:116;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35057:154;;;;35229:7;35224:121;;35311:6;35305:13;35300:2;35292:6;35288:15;35281:38;35224:121;35364:6;34890:488;-1:-1:-1;;;34890:488:0:o;1387:158::-;1447:8;;;;1433:10;:22;1429:75;;1479:13;;;;;;;;;;;;;;1429:75;1514:23;1526:10;1514:11;:23::i;:::-;1387:158::o;1170:209::-;1249:6;;;;1235:10;:20;1231:71;;1279:11;;;;;;;;;;;;;;1231:71;1312:8;:19;;;;;;;;;;;;;1347:24;;;;-1:-1:-1;;1347:24:0;1170:209;:::o;36054:623::-;36201:12;36196:474;36219:33;;;;-1:-1:-1;36196:474:0;;;36272:12;36286:19;36309:11;:83;36339:18;;36358:5;36339:25;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:38;;;;;;;:::i;:::-;36309:83;;;;;;;;;;;;;;;-1:-1:-1;36309:83:0;;;;;36406:18;;;;:25;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:30;;;;;;;:::i;:::-;36309:128;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36271:166;;;;36459:7;36454:137;;36549:6;36543:13;36538:2;36530:6;36526:15;36519:38;36454:137;-1:-1:-1;;36636:7:0;;36196:474;;;;36054:623;;:::o;40592:191::-;912:6;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;40729:46:::1;:25;::::0;::::1;40755:11:::0;40768:6;40729:25:::1;:46::i;41711:108::-:0;41766:7;41793:18;41803:7;41793:9;:18::i;:::-;41786:25;41711:108;-1:-1:-1;;41711:108:0:o;39331:180::-;912:6;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;39407:25:::1;::::0;::::1;;::::0;;;:11:::1;:25;::::0;;;;;:48;;;::::1;39435:20;39407:48;;;::::0;;39471:32;::::1;::::0;39407:25;39471:32:::1;39331:180:::0;:::o;37731:468::-;912:6;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;37909:12:::1;37904:288;37935:14;:21;37927:5;:29;;;37904:288;;;37981:14;37996:5;37981:21;;;;;;;;;;:::i;:::-;;;;;;;37975:36;;;38030:14;38045:5;38030:21;;;;;;;;;;:::i;:::-;;;;;;;38070:5;:29;;38098:1;38070:29;;;38078:17;38070:29;37975:139;::::0;;::::1;::::0;;;;;;7844:42:1;7832:55;;;37975:139:0::1;::::0;::::1;7814:74:1::0;7904:18;;;7897:34;7787:18;;37975:139:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;38158:7:0::1;;37904:288;;;;37731:468:::0;;;:::o;37247:290::-;37331:6;912;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;37367:11:::1;::::0;;;;;;::::1;;::::0;;::::1;37350:14;37389:15:::0;;;:6:::1;:15;::::0;;;;:30;;;::::1;;::::0;::::1;;::::0;;37432:16;;37367:11;;;;;::::1;::::0;37432:16:::1;::::0;37367:11;;37432:16;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37489:12;37466:36;;37480:7;37466:36;;;;;;;;;;;;37522:7:::0;-1:-1:-1;975:1:0::1;37247:290:::0;;;:::o;30331:2540::-;30474:21;30498:37;;;;:22;:37;:::i;:::-;:44;-1:-1:-1;30590:42:0;;-1:-1:-1;30590:42:0;;;:22;:42;:::i;:::-;:49;;30573:13;:66;30555:151;;30673:21;;;;;;;;;;;;;;30555:151;30716:22;;30749:136;30781:13;30773:5;:21;30749:136;;;30831:35;;;;:22;:35;:::i;:::-;30867:5;30831:42;;;;;;;:::i;:::-;;;;;;;30813:60;;;;;:::i;:::-;;;30749:136;;;;27414:6;30901:14;:30;30897:93;;30955:23;;;;;;;;;;;;;;30897:93;31003:16;;31048:69;31072:34;;;;:22;:34;:::i;31048:69::-;:82;;31131:35;;;;:22;:35;:::i;:::-;31048:119;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31002:165;;;;31185:11;31180:133;;31275:10;31269:17;31264:2;31252:10;31248:19;31241:46;31180:133;31325:30;31369:10;31358:33;;;;;;;;;;;;:::i;:::-;31325:66;-1:-1:-1;31404:21:0;;31438:1426;31470:13;31462:5;:21;31438:1426;;;31502:22;31632:17;31648:1;31632:13;:17;:::i;:::-;31623:5;:26;31619:433;;;31687:38;31712:13;31687:22;:38;:::i;:::-;31670:55;;31619:433;;;27414:6;31955:35;;;;:22;:35;:::i;:::-;31991:5;31955:42;;;;;;;:::i;:::-;;;;;;;31905:22;:92;;;;:::i;:::-;31904:132;;;;:::i;:::-;31866:170;;31619:433;32169:31;32186:14;32169:31;;:::i;:::-;;-1:-1:-1;32217:27:0;32288:26;32333:14;32366:42;;;;:22;:42;:::i;:::-;32409:5;32366:49;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;32247:183;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32497:87:0;;32525:37;;;;:22;:37;:::i;:::-;32563:5;32525:44;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;32497:87::-;:100;;32598:14;32497:116;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32447:166;;;;32635:13;32630:155;;32737:12;32731:19;32726:2;32712:12;32708:21;32701:50;32630:155;32830:7;;;;;31487:1377;;;;31438:1426;;;;30463:2408;;;;;;30331:2540;:::o;39831:152::-;912:6;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;39899:15:::1;::::0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;:38;;;::::1;39917:20;39899:38;;;::::0;;39953:22;::::1;::::0;39899:15;39953:22:::1;39831:152:::0;:::o;38636:347::-;38730:6;912;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;38771:15:::1;::::0;;;;;;::::1;;::::0;;::::1;38749:19;38799:25:::0;;;:11:::1;:25;::::0;;;;:45;;;::::1;;::::0;::::1;;::::0;;38857:20;;38771:15;;;;;::::1;::::0;38857:20:::1;::::0;38771:15;;38857:20;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38925:17;38895:48;;38911:12;38895:48;;;;;;;;;;;;38963:12:::0;38636:347;-1:-1:-1;;38636:347:0:o;33465:680::-;33622:8;33652:34;;;33648:68;;33695:21;;;;;;;;;;;;;;33648:68;33732:13;33727:411;33759:14;33751:5;:22;33727:411;;;33793:12;33807:19;33830:26;33840:8;;33849:5;33840:15;;;;;;;:::i;33830:26::-;:57;;33888:9;;33898:5;33888:16;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;33830:75;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33792:113;;;;33927:7;33922:137;;34017:6;34011:13;34006:2;33998:6;33994:15;33987:38;33922:137;-1:-1:-1;;34104:7:0;;33727:411;;;;33586:559;33465:680;;;;:::o;41191:157::-;912:6;;;;898:10;:20;894:71;;942:11;;;;;;;;;;;;;;894:71;41312:28:::1;::::0;:20:::1;::::0;::::1;::::0;:28;::::1;;;::::0;41333:6;;41312:28:::1;::::0;;;41333:6;41312:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;1553:154:::0;1612:6;:17;;;;;;;;;;;;;;1640:21;;;;;;;;1677:22;;1612:17;;1677:22;;;1553:154;:::o;11560:1529::-;11677:12;11852:4;11846:11;11997:66;11978:17;11971:93;12112:2;12108:1;12089:17;12085:25;12078:37;12193:6;12188:2;12169:17;12165:26;12158:42;13005:2;13002:1;12998:2;12979:17;12976:1;12969:5;12962;12957:51;12521:16;12514:24;12508:2;12490:16;12487:24;12483:1;12479;12473:8;12470:15;12466:46;12463:76;12260:763;12249:774;;;13054:7;13046:35;;;;;;;8842:2:1;13046:35:0;;;8824:21:1;8881:2;8861:18;;;8854:30;8920:17;8900:18;;;8893:45;8955:18;;13046:35:0;;;;;;;14:134:1;82:20;;111:31;82:20;111:31;:::i;153:978::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;363:18;400:2;396;393:10;390:36;;;406:18;;:::i;:::-;452:2;449:1;445:10;484:2;478:9;543:66;538:2;534;530:11;526:84;518:6;514:97;661:6;649:10;646:22;641:2;629:10;626:18;623:46;620:72;;;672:18;;:::i;:::-;708:2;701:22;758:18;;;792:15;;;;-1:-1:-1;827:15:1;;;861;;;857:24;;854:33;-1:-1:-1;851:53:1;;;900:1;897;890:12;851:53;922:1;913:10;;932:169;946:2;943:1;940:9;932:169;;;1003:23;1022:3;1003:23;:::i;:::-;991:36;;1047:12;;;;964:1;957:9;;;;;1079:12;;932:169;;;-1:-1:-1;1119:6:1;153:978;-1:-1:-1;;;;;;;153:978:1:o;1136:374::-;1206:8;1216:6;1270:3;1263:4;1255:6;1251:17;1247:27;1237:55;;1288:1;1285;1278:12;1237:55;-1:-1:-1;1311:20:1;;1354:18;1343:30;;1340:50;;;1386:1;1383;1376:12;1340:50;1423:4;1415:6;1411:17;1399:29;;1483:3;1476:4;1466:6;1463:1;1459:14;1451:6;1447:27;1443:38;1440:47;1437:67;;;1500:1;1497;1490:12;1437:67;1136:374;;;;;:::o;1515:163::-;1582:20;;1642:10;1631:22;;1621:33;;1611:61;;1668:1;1665;1658:12;1683:247;1742:6;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;1935:323::-;2011:6;2019;2072:2;2060:9;2051:7;2047:23;2043:32;2040:52;;;2088:1;2085;2078:12;2040:52;2127:9;2114:23;2146:31;2171:5;2146:31;:::i;:::-;2196:5;2248:2;2233:18;;;;2220:32;;-1:-1:-1;;;1935:323:1:o;2263:456::-;2340:6;2348;2356;2409:2;2397:9;2388:7;2384:23;2380:32;2377:52;;;2425:1;2422;2415:12;2377:52;2464:9;2451:23;2483:31;2508:5;2483:31;:::i;:::-;2533:5;-1:-1:-1;2590:2:1;2575:18;;2562:32;2603:33;2562:32;2603:33;:::i;:::-;2263:456;;2655:7;;-1:-1:-1;;;2709:2:1;2694:18;;;;2681:32;;2263:456::o;2724:724::-;2848:6;2856;2864;2917:2;2905:9;2896:7;2892:23;2888:32;2885:52;;;2933:1;2930;2923:12;2885:52;2973:9;2960:23;3002:18;3043:2;3035:6;3032:14;3029:34;;;3059:1;3056;3049:12;3029:34;3082:61;3135:7;3126:6;3115:9;3111:22;3082:61;:::i;:::-;3072:71;;3196:2;3185:9;3181:18;3168:32;3152:48;;3225:2;3215:8;3212:16;3209:36;;;3241:1;3238;3231:12;3209:36;;3264:63;3319:7;3308:8;3297:9;3293:24;3264:63;:::i;:::-;3254:73;;;3377:2;3366:9;3362:18;3349:32;3390:28;3412:5;3390:28;:::i;:::-;3437:5;3427:15;;;2724:724;;;;;:::o;3453:486::-;3581:6;3589;3642:2;3630:9;3621:7;3617:23;3613:32;3610:52;;;3658:1;3655;3648:12;3610:52;3698:9;3685:23;3731:18;3723:6;3720:30;3717:50;;;3763:1;3760;3753:12;3717:50;3802:77;3871:7;3862:6;3851:9;3847:22;3802:77;:::i;:::-;3898:8;;3776:103;;-1:-1:-1;3453:486:1;-1:-1:-1;;;;3453:486:1:o;3944:797::-;4076:6;4084;4092;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4209:9;4196:23;4238:18;4279:2;4271:6;4268:14;4265:34;;;4295:1;4292;4285:12;4265:34;4334:77;4403:7;4394:6;4383:9;4379:22;4334:77;:::i;:::-;4430:8;;-1:-1:-1;4308:103:1;-1:-1:-1;4518:2:1;4503:18;;4490:32;;-1:-1:-1;4534:16:1;;;4531:36;;;4563:1;4560;4553:12;4531:36;;4602:79;4673:7;4662:8;4651:9;4647:24;4602:79;:::i;:::-;3944:797;;;;-1:-1:-1;4700:8:1;-1:-1:-1;;;;3944:797:1:o;4746:245::-;4813:6;4866:2;4854:9;4845:7;4841:23;4837:32;4834:52;;;4882:1;4879;4872:12;4834:52;4914:9;4908:16;4933:28;4955:5;4933:28;:::i;4996:401::-;5097:6;5150:2;5138:9;5129:7;5125:23;5121:32;5118:52;;;5166:1;5163;5156:12;5118:52;5206:9;5193:23;5239:18;5231:6;5228:30;5225:50;;;5271:1;5268;5261:12;5225:50;5294:22;;5350:2;5332:16;;;5328:25;5325:45;;;5366:1;5363;5356:12;5402:401;5502:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5611:9;5598:23;5644:18;5636:6;5633:30;5630:50;;;5676:1;5673;5666:12;5630:50;5699:22;;5755:3;5737:16;;;5733:26;5730:46;;;5772:1;5769;5762:12;5808:184;5878:6;5931:2;5919:9;5910:7;5906:23;5902:32;5899:52;;;5947:1;5944;5937:12;5899:52;-1:-1:-1;5970:16:1;;5808:184;-1:-1:-1;5808:184:1:o;5997:::-;6055:6;6108:2;6096:9;6087:7;6083:23;6079:32;6076:52;;;6124:1;6121;6114:12;6076:52;6147:28;6165:9;6147:28;:::i;6186:663::-;6264:6;6272;6280;6333:2;6321:9;6312:7;6308:23;6304:32;6301:52;;;6349:1;6346;6339:12;6301:52;6372:28;6390:9;6372:28;:::i;:::-;6362:38;;6451:2;6440:9;6436:18;6423:32;6474:18;6515:2;6507:6;6504:14;6501:34;;;6531:1;6528;6521:12;6501:34;6569:6;6558:9;6554:22;6544:32;;6614:7;6607:4;6603:2;6599:13;6595:27;6585:55;;6636:1;6633;6626:12;6585:55;6676:2;6663:16;6702:2;6694:6;6691:14;6688:34;;;6718:1;6715;6708:12;6688:34;6763:7;6758:2;6749:6;6745:2;6741:15;6737:24;6734:37;6731:57;;;6784:1;6781;6774:12;6731:57;6815:2;6811;6807:11;6797:21;;6837:6;6827:16;;;;;6186:663;;;;;:::o;6854:271::-;7037:6;7029;7024:3;7011:33;6993:3;7063:16;;7088:13;;;7063:16;6854:271;-1:-1:-1;6854:271:1:o;7130:274::-;7259:3;7297:6;7291:13;7313:53;7359:6;7354:3;7347:4;7339:6;7335:17;7313:53;:::i;:::-;7382:16;;;;;7130:274;-1:-1:-1;;7130:274:1:o;8195:440::-;8342:2;8331:9;8324:21;8305:4;8374:6;8368:13;8417:6;8412:2;8401:9;8397:18;8390:34;8433:66;8492:6;8487:2;8476:9;8472:18;8467:2;8459:6;8455:15;8433:66;:::i;:::-;8551:2;8539:15;8556:66;8535:88;8520:104;;;;8626:2;8516:113;;8195:440;-1:-1:-1;;8195:440:1:o;9166:518::-;9351:6;9340:9;9333:25;9394:2;9389;9378:9;9374:18;9367:30;9433:6;9428:2;9417:9;9413:18;9406:34;9490:6;9482;9477:2;9466:9;9462:18;9449:48;9546:1;9517:22;;;9541:2;9513:31;;;9506:42;;;;9600:2;9588:15;;;9605:66;9584:88;9569:104;9565:113;;9166:518;-1:-1:-1;;9166:518:1:o;9886:615::-;9990:4;9996:6;10056:11;10043:25;10146:66;10135:8;10119:14;10115:29;10111:102;10091:18;10087:127;10077:155;;10228:1;10225;10218:12;10077:155;10255:33;;10307:20;;;-1:-1:-1;10350:18:1;10339:30;;10336:50;;;10382:1;10379;10372:12;10336:50;10415:4;10403:17;;-1:-1:-1;10466:1:1;10462:14;;;10446;10442:35;10432:46;;10429:66;;;10491:1;10488;10481:12;11723:580;11800:4;11806:6;11866:11;11853:25;11956:66;11945:8;11929:14;11925:29;11921:102;11901:18;11897:127;11887:155;;12038:1;12035;12028:12;11887:155;12065:33;;12117:20;;;-1:-1:-1;12160:18:1;12149:30;;12146:50;;;12192:1;12189;12182:12;12146:50;12225:4;12213:17;;-1:-1:-1;12256:14:1;12252:27;;;12242:38;;12239:58;;;12293:1;12290;12283:12;12308:398;12416:4;12474:11;12461:25;12564:66;12553:8;12537:14;12533:29;12529:102;12509:18;12505:127;12495:155;;12646:1;12643;12636:12;12711:128;12751:3;12782:1;12778:6;12775:1;12772:13;12769:39;;;12788:18;;:::i;:::-;-1:-1:-1;12824:9:1;;12711:128::o;12844:228::-;12883:3;12911:10;12948:2;12945:1;12941:10;12978:2;12975:1;12971:10;13009:3;13005:2;13001:12;12996:3;12993:21;12990:47;;;13017:18;;:::i;:::-;13053:13;;12844:228;-1:-1:-1;;;;12844:228:1:o;13077:274::-;13117:1;13143;13133:189;;13178:77;13175:1;13168:88;13279:4;13276:1;13269:15;13307:4;13304:1;13297:15;13133:189;-1:-1:-1;13336:9:1;;13077:274::o;13356:228::-;13396:7;13522:1;13454:66;13450:74;13447:1;13444:81;13439:1;13432:9;13425:17;13421:105;13418:131;;;13529:18;;:::i;:::-;-1:-1:-1;13569:9:1;;13356:228::o;13589:125::-;13629:4;13657:1;13654;13651:8;13648:34;;;13662:18;;:::i;:::-;-1:-1:-1;13699:9:1;;13589:125::o;13719:258::-;13791:1;13801:113;13815:6;13812:1;13809:13;13801:113;;;13891:11;;;13885:18;13872:11;;;13865:39;13837:2;13830:10;13801:113;;;13932:6;13929:1;13926:13;13923:48;;;-1:-1:-1;;13967:1:1;13949:16;;13942:27;13719:258::o;13982:184::-;14034:77;14031:1;14024:88;14131:4;14128:1;14121:15;14155:4;14152:1;14145:15;14171:184;14223:77;14220:1;14213:88;14320:4;14317:1;14310:15;14344:4;14341:1;14334:15;14360:184;14412:77;14409:1;14402:88;14509:4;14506:1;14499:15;14533:4;14530:1;14523:15;14549:154;14635:42;14628:5;14624:54;14617:5;14614:65;14604:93;;14693:1;14690;14683:12;14604:93;14549:154;:::o;14708:118::-;14794:5;14787:13;14780:21;14773:5;14770:32;14760:60;;14816:1;14813;14806:12
Swarm Source
ipfs://520e49e2c3de520dd82c292e84e8cd61284492d5f1dba3ca360fa678da44067d
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.